Browse Source

服务指标获取

zhenglingfeng 8 years ago
parent
commit
a5be56dda0

+ 39 - 23
hos-broker/src/main/java/com/yihu/hos/services/ServiceMonitorService.java

@ -97,9 +97,7 @@ public class ServiceMonitorService {
        DBObject serviceGroup = getServiceGroupFields();
        // run aggregation
        AggregationOutput flowOutput = getBusinessLog().aggregate(match, flowGroup, sort);
        // run aggregation
        AggregationOutput serviceOutput = getBusinessLog().aggregate(match, serviceGroup, sort);
        //流程带宽
       //流程带宽
        Integer flowCalls = 0;
        String routeId = "";
        for (DBObject dbObject : flowOutput.results()) {
@ -114,16 +112,25 @@ public class ServiceMonitorService {
        BigDecimal flowBandwidth = NumberUtil.divideBigDecimal(BigDecimal.valueOf(flowCalls), BigDecimal.valueOf(interval));
        saveServiceMetrics(routeId, "bandwidth", flowBandwidth.toString(), endTime);
        //服务带宽
        Integer serviceCalls = 0;
        String code = "";
        // run aggregation
        AggregationOutput serviceOutput = getBusinessLog().aggregate(match, serviceGroup, sort);
        Map<String, Integer> bandwidthMap = new HashMap<>();
        for (DBObject dbObject : serviceOutput.results()) {
            BasicDBObject id = (BasicDBObject) dbObject.get("_id");
            code = StringUtil.toString(id.get("code"));
            serviceCalls++;
            String code = StringUtil.toString(id.get("code"));
            if (bandwidthMap.containsKey(code)) {
                Integer serviceCalls = bandwidthMap.get(code);
                bandwidthMap.put(code, ++serviceCalls);
            } else {
                bandwidthMap.put(code, 1);
            }
        }
        for (String code : bandwidthMap.keySet()) {
            Integer serviceCalls = bandwidthMap.get(code)/2;
            BigDecimal serviceBandwidth = NumberUtil.divideBigDecimal(BigDecimal.valueOf(serviceCalls), BigDecimal.valueOf(interval));
            saveServiceMetrics(code, "bandwidth", serviceBandwidth.toString(), endTime);
        }
        serviceCalls = serviceCalls/2;
        BigDecimal serviceBandwidth = NumberUtil.divideBigDecimal(BigDecimal.valueOf(serviceCalls), BigDecimal.valueOf(interval));
        saveServiceMetrics(code, "bandwidth", serviceBandwidth.toString(), endTime);
    }
@ -134,9 +141,6 @@ public class ServiceMonitorService {
        DBObject serviceGroup = getServiceGroupFields();
        // run aggregation
        AggregationOutput flowOutput = getBusinessLog().aggregate(match, flowGroup, sort);
        // run aggregation
        AggregationOutput serviceOutput = getBusinessLog().aggregate(match, serviceGroup, sort);
        //流程qps
        Integer flowCalls = 0;
        String routeId = "";
@ -157,16 +161,28 @@ public class ServiceMonitorService {
        BigDecimal flowQps = NumberUtil.divideBigDecimal(BigDecimal.valueOf(flowCalls), BigDecimal.valueOf(interval));
        saveServiceMetrics(routeId, "qps", flowQps.toString(), endTime);
        //服务带宽
        Integer serviceCalls = 0;
        String code = "";
        // run aggregation
        AggregationOutput serviceOutput = getBusinessLog().aggregate(match, serviceGroup, sort);
        Map<String, Integer> qpsMap = new HashMap<>();
        for (DBObject dbObject : serviceOutput.results()) {
            BasicDBObject id = (BasicDBObject) dbObject.get("_id");
            code = StringUtil.toString(id.get("code"));
            serviceCalls++;
            String code = StringUtil.toString(id.get("code"));
            if (qpsMap.containsKey(code)) {
                Integer serviceCalls = qpsMap.get(code);
                qpsMap.put(code, ++serviceCalls);
            } else {
                qpsMap.put(code, 1);
            }
        }
        for (String code : qpsMap.keySet()) {
            if (qpsMap.get(code) > 1) {
                Integer serviceCalls = qpsMap.get(code)/2;
                BigDecimal serviceBandwidth = NumberUtil.divideBigDecimal(BigDecimal.valueOf(serviceCalls), BigDecimal.valueOf(interval));
                saveServiceMetrics(code, "qps", serviceBandwidth.toString(), endTime);
            }
        }
        serviceCalls = serviceCalls/2;
        BigDecimal serviceQps = NumberUtil.divideBigDecimal(BigDecimal.valueOf(serviceCalls), BigDecimal.valueOf(interval));
        saveServiceMetrics(code, "bandwidth", serviceQps.toString(), endTime);
    }
    public void usage(String beginTime, String endTime) throws JsonProcessingException {
@ -183,7 +199,7 @@ public class ServiceMonitorService {
            Integer count = Integer.parseInt(StringUtil.toString(dbObject.get("count")));
            BasicDBObject id = (BasicDBObject) dbObject.get("_id");
            routeId = StringUtil.toString(id.get("routeId"));
            if (total == count) {
            if (total == count/2) {
                successCountF++;
            } else {
                failureCountF++;
@ -262,8 +278,8 @@ public class ServiceMonitorService {
            String code = StringUtil.toString(dbObject.get("code"));
            if (serviceMap.containsKey(code)) {
                DBObject dbObjectTemp = serviceMap.remove(code);
                String begin = StringUtil.toString(dbObjectTemp.get("fireTime"));
                String end = StringUtil.toString(dbObject.get("fireTime"));
                String begin = StringUtil.toString(dbObjectTemp.get("fireTimeSource"));
                String end = StringUtil.toString(dbObject.get("fireTimeSource"));
                long interval = getIntervalExact(begin, end);
                if (delayMap.containsKey(code)) {
                    BigDecimal delayTemp = delayMap.get(code);