|  | @ -5,6 +5,7 @@ import com.yihu.hos.core.datatype.DateUtil;
 | 
	
		
			
				|  |  | import com.yihu.hos.core.datatype.NumberUtil;
 | 
	
		
			
				|  |  | import com.yihu.hos.core.datatype.StringUtil;
 | 
	
		
			
				|  |  | import com.yihu.hos.models.BusinessLog;
 | 
	
		
			
				|  |  | import com.yihu.hos.models.ServiceMetrics;
 | 
	
		
			
				|  |  | import com.yihu.hos.web.framework.model.Result;
 | 
	
		
			
				|  |  | import org.json.JSONObject;
 | 
	
		
			
				|  |  | import org.springframework.beans.factory.annotation.Autowired;
 | 
	
	
		
			
				|  | @ -17,10 +18,9 @@ import java.util.Date;
 | 
	
		
			
				|  |  | /**
 | 
	
		
			
				|  |  |  * Created by chenweida on 2016/1/27.
 | 
	
		
			
				|  |  |  */
 | 
	
		
			
				|  |  | @Service("ServerMonitorService")
 | 
	
		
			
				|  |  | public class ServerMonitorService {
 | 
	
		
			
				|  |  |     public static final String BEAN_ID = "ServerMonitorService";
 | 
	
		
			
				|  |  |     public static final String reduceTableName = "reduceResult";
 | 
	
		
			
				|  |  | @Service("ServiceMonitorService")
 | 
	
		
			
				|  |  | public class ServiceMonitorService {
 | 
	
		
			
				|  |  |     public static final String BEAN_ID = "ServiceMonitorService";
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private MongoOperations mongoOperations;
 | 
	
	
		
			
				|  | @ -94,21 +94,29 @@ public class ServerMonitorService {
 | 
	
		
			
				|  |  |         DBObject match = new BasicDBObject("$match", queryObject);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         // Now the $group operation
 | 
	
		
			
				|  |  |         DBObject groupFields = new BasicDBObject( "_id", "$breadcrumbId");
 | 
	
		
			
				|  |  |         DBObject groupFields = new BasicDBObject( "_id",
 | 
	
		
			
				|  |  |                 new BasicDBObject("breadcrumbId", "$breadcrumbId")
 | 
	
		
			
				|  |  |                 .append("routeId", "$routeId"));
 | 
	
		
			
				|  |  | //        groupFields.put("routeId", new BasicDBObject( "$first", "$routeId"));
 | 
	
		
			
				|  |  |         groupFields.put("count", new BasicDBObject( "$sum", 1));
 | 
	
		
			
				|  |  |         groupFields.put("beginTime", new BasicDBObject( "$first", "$fireTimeSource"));
 | 
	
		
			
				|  |  |         groupFields.put("endTime", new BasicDBObject( "$last", "$fireTimeSource"));
 | 
	
		
			
				|  |  |         groupFields.put("endTime", new BasicDBObject("$last", "$fireTimeSource"));
 | 
	
		
			
				|  |  |         DBObject group = new BasicDBObject("$group", groupFields);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         // build the $sort operation
 | 
	
		
			
				|  |  |         DBObject sortFields =  new BasicDBObject( "_id", 1);
 | 
	
		
			
				|  |  |         DBObject sort = new BasicDBObject("$sort", sortFields );
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         // run aggregation
 | 
	
		
			
				|  |  |         AggregationOutput output = businessLog.aggregate(match, group, sort);
 | 
	
		
			
				|  |  |         Integer calls = 0;
 | 
	
		
			
				|  |  |         long interval = 0;
 | 
	
		
			
				|  |  |         String routeId = "";
 | 
	
		
			
				|  |  |         String breadcrumbId = "";
 | 
	
		
			
				|  |  |         for (DBObject dbObject : output.results()) {
 | 
	
		
			
				|  |  |             Integer count = Integer.parseInt(StringUtil.toString(dbObject.get("count")));
 | 
	
		
			
				|  |  |             BasicDBObject id = (BasicDBObject) dbObject.get("_id");
 | 
	
		
			
				|  |  |             routeId = StringUtil.toString(id.get("routeId"));
 | 
	
		
			
				|  |  |             breadcrumbId  = StringUtil.toString(id.get("breadcrumbId"));
 | 
	
		
			
				|  |  |             if (count >= 2) {
 | 
	
		
			
				|  |  |                 calls++;
 | 
	
		
			
				|  |  |                 String begin = StringUtil.toString(dbObject.get("beginTime"));
 | 
	
	
		
			
				|  | @ -118,8 +126,20 @@ public class ServerMonitorService {
 | 
	
		
			
				|  |  |                 interval += (to.getTime() - from.getTime())/1000;
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         BigDecimal bandwidth = NumberUtil.divideBigDecimal(BigDecimal.valueOf(calls), BigDecimal.valueOf(interval));
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         ServiceMetrics serviceMetrics = new ServiceMetrics();
 | 
	
		
			
				|  |  |         serviceMetrics.setRouteId(routeId);
 | 
	
		
			
				|  |  |         serviceMetrics.setBreadcrumbId(breadcrumbId);
 | 
	
		
			
				|  |  |         serviceMetrics.setType("bandwidth");
 | 
	
		
			
				|  |  |         serviceMetrics.setValue(bandwidth.toString());
 | 
	
		
			
				|  |  |         serviceMetrics.setCreateTime(endTime);
 | 
	
		
			
				|  |  |         mongoOperations.save(serviceMetrics);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         JSONObject result = new JSONObject();
 | 
	
		
			
				|  |  |         result.put("bandwidth", NumberUtil.divideBigDecimal(BigDecimal.valueOf(calls), BigDecimal.valueOf(interval)));
 | 
	
		
			
				|  |  |         result.put("bandwidth", bandwidth);
 | 
	
		
			
				|  |  |         System.out.println(result);
 | 
	
		
			
				|  |  |         return Result.success(result.toString());
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
	
		
			
				|  | @ -136,7 +156,9 @@ public class ServerMonitorService {
 | 
	
		
			
				|  |  |         DBObject match = new BasicDBObject("$match", queryObject);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         // Now the $group operation
 | 
	
		
			
				|  |  |         DBObject groupFields = new BasicDBObject( "_id", "$breadcrumbId");
 | 
	
		
			
				|  |  |         DBObject groupFields = new BasicDBObject( "_id",
 | 
	
		
			
				|  |  |                 new BasicDBObject("breadcrumbId", "$breadcrumbId")
 | 
	
		
			
				|  |  |                         .append("routeId", "$routeId"));
 | 
	
		
			
				|  |  |         groupFields.put("count", new BasicDBObject( "$sum", 1));
 | 
	
		
			
				|  |  |         groupFields.put("total", new BasicDBObject( "$first", "$totalServers"));
 | 
	
		
			
				|  |  |         groupFields.put("beginTime", new BasicDBObject( "$first", "$fireTimeSource"));
 | 
	
	
		
			
				|  | @ -150,8 +172,13 @@ public class ServerMonitorService {
 | 
	
		
			
				|  |  |         AggregationOutput output = businessLog.aggregate(match, group, sort);
 | 
	
		
			
				|  |  |         Integer calls = 0;
 | 
	
		
			
				|  |  |         long interval = 0;
 | 
	
		
			
				|  |  |         String routeId = "";
 | 
	
		
			
				|  |  |         String breadcrumbId = "";
 | 
	
		
			
				|  |  |         for (DBObject dbObject : output.results()) {
 | 
	
		
			
				|  |  |             Integer count = Integer.parseInt(StringUtil.toString(dbObject.get("count")));
 | 
	
		
			
				|  |  |             BasicDBObject id = (BasicDBObject) dbObject.get("_id");
 | 
	
		
			
				|  |  |             routeId = StringUtil.toString(id.get("routeId"));
 | 
	
		
			
				|  |  |             breadcrumbId  = StringUtil.toString(id.get("breadcrumbId"));
 | 
	
		
			
				|  |  |             if (count >= 2) {
 | 
	
		
			
				|  |  |                 Integer total = Integer.parseInt(StringUtil.toString(dbObject.get("total")));
 | 
	
		
			
				|  |  |                 if (total == count) {
 | 
	
	
		
			
				|  | @ -164,8 +191,18 @@ public class ServerMonitorService {
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         BigDecimal qps = NumberUtil.divideBigDecimal(BigDecimal.valueOf(calls), BigDecimal.valueOf(interval));
 | 
	
		
			
				|  |  |         ServiceMetrics serviceMetrics = new ServiceMetrics();
 | 
	
		
			
				|  |  |         serviceMetrics.setRouteId(routeId);
 | 
	
		
			
				|  |  |         serviceMetrics.setBreadcrumbId(breadcrumbId);
 | 
	
		
			
				|  |  |         serviceMetrics.setType("qps");
 | 
	
		
			
				|  |  |         serviceMetrics.setValue(qps.toString());
 | 
	
		
			
				|  |  |         serviceMetrics.setCreateTime(endTime);
 | 
	
		
			
				|  |  |         mongoOperations.save(serviceMetrics);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         JSONObject result = new JSONObject();
 | 
	
		
			
				|  |  |         result.put("qps", NumberUtil.divideBigDecimal(BigDecimal.valueOf(calls), BigDecimal.valueOf(interval)));
 | 
	
		
			
				|  |  |         result.put("qps", qps);
 | 
	
		
			
				|  |  |         return Result.success(result.toString());
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
	
		
			
				|  | @ -182,7 +219,9 @@ public class ServerMonitorService {
 | 
	
		
			
				|  |  |         DBObject match = new BasicDBObject("$match", queryObject);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         // Now the $group operation
 | 
	
		
			
				|  |  |         DBObject groupFields = new BasicDBObject( "_id", "$breadcrumbId");
 | 
	
		
			
				|  |  |         DBObject groupFields = new BasicDBObject( "_id",
 | 
	
		
			
				|  |  |                 new BasicDBObject("breadcrumbId", "$breadcrumbId")
 | 
	
		
			
				|  |  |                         .append("routeId", "$routeId"));
 | 
	
		
			
				|  |  |         groupFields.put("count", new BasicDBObject( "$sum", 1));
 | 
	
		
			
				|  |  |         groupFields.put("total", new BasicDBObject( "$first", "$totalServers"));
 | 
	
		
			
				|  |  |         DBObject group = new BasicDBObject("$group", groupFields);
 | 
	
	
		
			
				|  | @ -194,19 +233,35 @@ public class ServerMonitorService {
 | 
	
		
			
				|  |  |         AggregationOutput output = businessLog.aggregate(match, group, sort);
 | 
	
		
			
				|  |  |         Integer successCount = 0;
 | 
	
		
			
				|  |  |         Integer failureCount = 0;
 | 
	
		
			
				|  |  |         String routeId = "";
 | 
	
		
			
				|  |  |         String breadcrumbId = "";
 | 
	
		
			
				|  |  |         for (DBObject dbObject : output.results()) {
 | 
	
		
			
				|  |  |             Integer total = Integer.parseInt(StringUtil.toString(dbObject.get("total")));
 | 
	
		
			
				|  |  |             Integer count = Integer.parseInt(StringUtil.toString(dbObject.get("count")));
 | 
	
		
			
				|  |  |             BasicDBObject id = (BasicDBObject) dbObject.get("_id");
 | 
	
		
			
				|  |  |             routeId = StringUtil.toString(id.get("routeId"));
 | 
	
		
			
				|  |  |             breadcrumbId  = StringUtil.toString(id.get("breadcrumbId"));
 | 
	
		
			
				|  |  |             if (total == count) {
 | 
	
		
			
				|  |  |                 successCount++;
 | 
	
		
			
				|  |  |             } else {
 | 
	
		
			
				|  |  |                 failureCount++;
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         JSONObject result = new JSONObject();
 | 
	
		
			
				|  |  |         result.put("totalCount", successCount + failureCount);
 | 
	
		
			
				|  |  |         result.put("successCount", successCount);
 | 
	
		
			
				|  |  |         result.put("failureCount", failureCount);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         ServiceMetrics serviceMetrics = new ServiceMetrics();
 | 
	
		
			
				|  |  |         serviceMetrics.setRouteId(routeId);
 | 
	
		
			
				|  |  |         serviceMetrics.setBreadcrumbId(breadcrumbId);
 | 
	
		
			
				|  |  |         serviceMetrics.setType("usage");
 | 
	
		
			
				|  |  |         serviceMetrics.setValue(result.toString());
 | 
	
		
			
				|  |  |         serviceMetrics.setCreateTime(endTime);
 | 
	
		
			
				|  |  |         mongoOperations.save(serviceMetrics);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return Result.success(result.toString());
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
	
		
			
				|  | @ -223,7 +278,9 @@ public class ServerMonitorService {
 | 
	
		
			
				|  |  |         DBObject match = new BasicDBObject("$match", queryObject);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         // Now the $group operation
 | 
	
		
			
				|  |  |         DBObject groupFields = new BasicDBObject( "_id", "$breadcrumbId");
 | 
	
		
			
				|  |  |         DBObject groupFields = new BasicDBObject( "_id",
 | 
	
		
			
				|  |  |                 new BasicDBObject("breadcrumbId", "$breadcrumbId")
 | 
	
		
			
				|  |  |                         .append("routeId", "$routeId"));
 | 
	
		
			
				|  |  |         groupFields.put("count", new BasicDBObject( "$sum", 1));
 | 
	
		
			
				|  |  |         groupFields.put("beginTime", new BasicDBObject( "$first", "$fireTimeSource"));
 | 
	
		
			
				|  |  |         groupFields.put("endTime", new BasicDBObject( "$last", "$fireTimeSource"));
 | 
	
	
		
			
				|  | @ -236,8 +293,13 @@ public class ServerMonitorService {
 | 
	
		
			
				|  |  |         AggregationOutput output = businessLog.aggregate(match, group, sort);
 | 
	
		
			
				|  |  |         Integer calls = 0;
 | 
	
		
			
				|  |  |         long interval = 0;
 | 
	
		
			
				|  |  |         String routeId = "";
 | 
	
		
			
				|  |  |         String breadcrumbId = "";
 | 
	
		
			
				|  |  |         for (DBObject dbObject : output.results()) {
 | 
	
		
			
				|  |  |             Integer count = Integer.parseInt(StringUtil.toString(dbObject.get("count")));
 | 
	
		
			
				|  |  |             BasicDBObject id = (BasicDBObject) dbObject.get("_id");
 | 
	
		
			
				|  |  |             routeId = StringUtil.toString(id.get("routeId"));
 | 
	
		
			
				|  |  |             breadcrumbId  = StringUtil.toString(id.get("breadcrumbId"));
 | 
	
		
			
				|  |  |             if (count >= 2) {
 | 
	
		
			
				|  |  |                 calls++;
 | 
	
		
			
				|  |  |                 String begin = StringUtil.toString(dbObject.get("beginTime"));
 | 
	
	
		
			
				|  | @ -247,8 +309,19 @@ public class ServerMonitorService {
 | 
	
		
			
				|  |  |                 interval += (to.getTime() - from.getTime())/1000;
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         BigDecimal delay =  NumberUtil.divideBigDecimal(BigDecimal.valueOf(interval), BigDecimal.valueOf(calls));
 | 
	
		
			
				|  |  |         JSONObject result = new JSONObject();
 | 
	
		
			
				|  |  |         result.put("delay", NumberUtil.divideBigDecimal(BigDecimal.valueOf(interval), BigDecimal.valueOf(calls)));
 | 
	
		
			
				|  |  |         result.put("delay", delay);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         ServiceMetrics serviceMetrics = new ServiceMetrics();
 | 
	
		
			
				|  |  |         serviceMetrics.setRouteId(routeId);
 | 
	
		
			
				|  |  |         serviceMetrics.setBreadcrumbId(breadcrumbId);
 | 
	
		
			
				|  |  |         serviceMetrics.setType("delay");
 | 
	
		
			
				|  |  |         serviceMetrics.setValue(delay.toString());
 | 
	
		
			
				|  |  |         serviceMetrics.setCreateTime(endTime);
 | 
	
		
			
				|  |  |         mongoOperations.save(serviceMetrics);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return Result.success(result.toString());
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | }
 |