Search in sources :

Example 1 with Node

use of org.apache.skywalking.apm.collector.storage.ui.common.Node in project incubator-skywalking by apache.

the class TopologyBuilder method build.

Topology build(List<IApplicationComponentUIDAO.ApplicationComponent> applicationComponents, List<IApplicationMappingUIDAO.ApplicationMapping> applicationMappings, List<IApplicationMetricUIDAO.ApplicationMetric> applicationMetrics, List<IApplicationReferenceMetricUIDAO.ApplicationReferenceMetric> callerReferenceMetric, List<IApplicationReferenceMetricUIDAO.ApplicationReferenceMetric> calleeReferenceMetric, Step step, long startTimeBucket, long endTimeBucket, long startSecondTimeBucket, long endSecondTimeBucket) {
    Map<Integer, String> components = changeNodeComp2Map(applicationComponents);
    Map<Integer, Integer> mappings = changeMapping2Map(applicationMappings);
    filterZeroSourceOrTargetReference(callerReferenceMetric);
    filterZeroSourceOrTargetReference(calleeReferenceMetric);
    calleeReferenceMetric = calleeReferenceMetricFilter(calleeReferenceMetric);
    List<Node> nodes = new LinkedList<>();
    applicationMetrics.forEach(applicationMetric -> {
        int applicationId = applicationMetric.getId();
        Application application = applicationCacheService.getApplicationById(applicationId);
        ApplicationNode applicationNode = new ApplicationNode();
        applicationNode.setId(applicationId);
        applicationNode.setName(application.getApplicationCode());
        applicationNode.setType(components.getOrDefault(application.getApplicationId(), Const.UNKNOWN));
        applicationNode.setSla(SLACalculator.INSTANCE.calculate(applicationMetric.getErrorCalls(), applicationMetric.getCalls()));
        try {
            applicationNode.setCallsPerSec(applicationMetric.getCalls() / secondBetweenService.calculate(applicationId, startSecondTimeBucket, endSecondTimeBucket));
        } catch (ParseException e) {
            logger.error(e.getMessage(), e);
        }
        applicationNode.setAvgResponseTime(applicationMetric.getDurations() / applicationMetric.getCalls());
        applicationNode.setApdex(ApdexCalculator.INSTANCE.calculate(applicationMetric.getSatisfiedCount(), applicationMetric.getToleratingCount(), applicationMetric.getFrustratedCount()));
        applicationNode.setAlarm(false);
        try {
            Alarm alarm = alarmService.loadApplicationAlarmList(Const.EMPTY_STRING, step, startTimeBucket, endTimeBucket, 1, 0);
            if (alarm.getItems().size() > 0) {
                applicationNode.setAlarm(true);
            }
        } catch (ParseException e) {
            logger.error(e.getMessage(), e);
        }
        applicationNode.setNumOfServer(serverService.getAllServer(applicationId, startSecondTimeBucket, endSecondTimeBucket).size());
        try {
            Alarm alarm = alarmService.loadInstanceAlarmList(Const.EMPTY_STRING, step, startTimeBucket, endTimeBucket, 1000, 0);
            applicationNode.setNumOfServerAlarm(alarm.getItems().size());
        } catch (ParseException e) {
            logger.error(e.getMessage(), e);
        }
        try {
            Alarm alarm = alarmService.loadServiceAlarmList(Const.EMPTY_STRING, step, startTimeBucket, endTimeBucket, 1000, 0);
            applicationNode.setNumOfServiceAlarm(alarm.getItems().size());
        } catch (ParseException e) {
            logger.error(e.getMessage(), e);
        }
        nodes.add(applicationNode);
    });
    List<Call> calls = new LinkedList<>();
    Set<Integer> nodeIds = new HashSet<>();
    callerReferenceMetric.forEach(referenceMetric -> {
        Application source = applicationCacheService.getApplicationById(referenceMetric.getSource());
        Application target = applicationCacheService.getApplicationById(referenceMetric.getTarget());
        if (BooleanUtils.valueToBoolean(target.getIsAddress()) && !mappings.containsKey(target.getApplicationId())) {
            if (!nodeIds.contains(target.getApplicationId())) {
                ConjecturalNode conjecturalNode = new ConjecturalNode();
                conjecturalNode.setId(target.getApplicationId());
                conjecturalNode.setName(target.getApplicationCode());
                conjecturalNode.setType(components.getOrDefault(target.getApplicationId(), Const.UNKNOWN));
                nodes.add(conjecturalNode);
                nodeIds.add(target.getApplicationId());
            }
        }
        Set<Integer> applicationNodeIds = buildNodeIds(nodes);
        if (!applicationNodeIds.contains(source.getApplicationId())) {
            ApplicationNode applicationNode = new ApplicationNode();
            applicationNode.setId(source.getApplicationId());
            applicationNode.setName(source.getApplicationCode());
            applicationNode.setType(components.getOrDefault(source.getApplicationId(), Const.UNKNOWN));
            applicationNode.setApdex(100);
            applicationNode.setSla(100);
            nodes.add(applicationNode);
        }
        Call call = new Call();
        call.setSource(source.getApplicationId());
        call.setSourceName(source.getApplicationCode());
        int actualTargetId = mappings.getOrDefault(target.getApplicationId(), target.getApplicationId());
        call.setTarget(actualTargetId);
        call.setTargetName(applicationCacheService.getApplicationById(actualTargetId).getApplicationCode());
        call.setAlert(false);
        call.setCallType(components.get(referenceMetric.getTarget()));
        try {
            call.setCallsPerSec(referenceMetric.getCalls() / secondBetweenService.calculate(source.getApplicationId(), startSecondTimeBucket, endSecondTimeBucket));
        } catch (ParseException e) {
            logger.error(e.getMessage(), e);
        }
        call.setAvgResponseTime(referenceMetric.getDurations() / referenceMetric.getCalls());
        calls.add(call);
    });
    calleeReferenceMetric.forEach(referenceMetric -> {
        Application source = applicationCacheService.getApplicationById(referenceMetric.getSource());
        Application target = applicationCacheService.getApplicationById(referenceMetric.getTarget());
        if (source.getApplicationId() == Const.NONE_APPLICATION_ID) {
            if (!nodeIds.contains(source.getApplicationId())) {
                VisualUserNode visualUserNode = new VisualUserNode();
                visualUserNode.setId(source.getApplicationId());
                visualUserNode.setName(Const.USER_CODE);
                visualUserNode.setType(Const.USER_CODE.toUpperCase());
                nodes.add(visualUserNode);
                nodeIds.add(source.getApplicationId());
            }
        }
        if (BooleanUtils.valueToBoolean(source.getIsAddress())) {
            if (!nodeIds.contains(source.getApplicationId())) {
                ConjecturalNode conjecturalNode = new ConjecturalNode();
                conjecturalNode.setId(source.getApplicationId());
                conjecturalNode.setName(source.getApplicationCode());
                conjecturalNode.setType(components.getOrDefault(source.getApplicationId(), Const.UNKNOWN));
                nodeIds.add(source.getApplicationId());
                nodes.add(conjecturalNode);
            }
        }
        Call call = new Call();
        call.setSource(source.getApplicationId());
        call.setSourceName(source.getApplicationCode());
        call.setTarget(target.getApplicationId());
        call.setTargetName(target.getApplicationCode());
        call.setAlert(false);
        if (source.getApplicationId() == Const.NONE_APPLICATION_ID) {
            call.setCallType(Const.EMPTY_STRING);
        } else {
            call.setCallType(components.get(referenceMetric.getTarget()));
        }
        try {
            call.setCallsPerSec(referenceMetric.getCalls() / secondBetweenService.calculate(target.getApplicationId(), startSecondTimeBucket, endSecondTimeBucket));
        } catch (ParseException e) {
            logger.error(e.getMessage(), e);
        }
        call.setAvgResponseTime(referenceMetric.getDurations() / referenceMetric.getCalls());
        calls.add(call);
    });
    Topology topology = new Topology();
    topology.setCalls(calls);
    topology.setNodes(nodes);
    return topology;
}
Also used : Call(org.apache.skywalking.apm.collector.storage.ui.common.Call) Node(org.apache.skywalking.apm.collector.storage.ui.common.Node) ConjecturalNode(org.apache.skywalking.apm.collector.storage.ui.application.ConjecturalNode) VisualUserNode(org.apache.skywalking.apm.collector.storage.ui.common.VisualUserNode) ApplicationNode(org.apache.skywalking.apm.collector.storage.ui.application.ApplicationNode) ApplicationNode(org.apache.skywalking.apm.collector.storage.ui.application.ApplicationNode) Topology(org.apache.skywalking.apm.collector.storage.ui.common.Topology) LinkedList(java.util.LinkedList) Alarm(org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm) VisualUserNode(org.apache.skywalking.apm.collector.storage.ui.common.VisualUserNode) ParseException(java.text.ParseException) ConjecturalNode(org.apache.skywalking.apm.collector.storage.ui.application.ConjecturalNode) Application(org.apache.skywalking.apm.collector.storage.table.register.Application) HashSet(java.util.HashSet)

Example 2 with Node

use of org.apache.skywalking.apm.collector.storage.ui.common.Node in project incubator-skywalking by apache.

the class ServiceTopologyService method getServiceTopology.

public Topology getServiceTopology(Step step, int serviceId, long startTimeBucket, long endTimeBucket, long startSecondTimeBucket, long endSecondTimeBucket) throws ParseException {
    logger.debug("startTimeBucket: {}, endTimeBucket: {}", startTimeBucket, endTimeBucket);
    List<IApplicationComponentUIDAO.ApplicationComponent> applicationComponents = applicationComponentUIDAO.load(step, startTimeBucket, endTimeBucket);
    Map<Integer, String> components = new HashMap<>();
    applicationComponents.forEach(component -> components.put(component.getApplicationId(), ComponentsDefine.getInstance().getComponentName(component.getComponentId())));
    List<IServiceReferenceMetricUIDAO.ServiceReferenceMetric> referenceMetrics = serviceReferenceMetricUIDAO.getFrontServices(step, startTimeBucket, endTimeBucket, MetricSource.Callee, serviceId);
    referenceMetrics.addAll(serviceReferenceMetricUIDAO.getBehindServices(step, startTimeBucket, endTimeBucket, MetricSource.Caller, serviceId));
    Set<Integer> nodeIds = new HashSet<>();
    List<Call> calls = new LinkedList<>();
    referenceMetrics.forEach(referenceMetric -> {
        nodeIds.add(referenceMetric.getSource());
        nodeIds.add(referenceMetric.getTarget());
        Call call = new Call();
        call.setSource(referenceMetric.getSource());
        call.setTarget(referenceMetric.getTarget());
        call.setAvgResponseTime(referenceMetric.getDurations() / referenceMetric.getCalls());
        call.setCallType(components.getOrDefault(serviceNameCacheService.get(referenceMetric.getTarget()).getApplicationId(), Const.UNKNOWN));
        try {
            int applicationId = serviceNameCacheService.get(referenceMetric.getTarget()).getApplicationId();
            call.setCallsPerSec(referenceMetric.getCalls() / secondBetweenService.calculate(applicationId, startSecondTimeBucket, endSecondTimeBucket));
        } catch (ParseException e) {
            logger.error(e.getMessage(), e);
        }
        call.setAlert(false);
        calls.add(call);
    });
    List<Node> serviceNodes = serviceMetricUIDAO.getServicesMetric(step, startTimeBucket, endTimeBucket, MetricSource.Callee, nodeIds);
    Set<Integer> gotNodes = new HashSet<>();
    serviceNodes.forEach(serviceNode -> gotNodes.add(serviceNode.getId()));
    Set<Integer> callerNodeIds = new HashSet<>();
    nodeIds.forEach(nodeId -> {
        if (!gotNodes.contains(nodeId)) {
            callerNodeIds.add(nodeId);
        }
    });
    serviceNodes.addAll(serviceMetricUIDAO.getServicesMetric(step, startTimeBucket, endTimeBucket, MetricSource.Caller, callerNodeIds));
    serviceNodes.forEach(serviceNode -> {
        ServiceName serviceName = serviceNameCacheService.get(serviceNode.getId());
        serviceNode.setName(serviceName.getServiceName());
    });
    if (callerNodeIds.contains(Const.NONE_SERVICE_ID)) {
        VisualUserNode userNode = new VisualUserNode();
        userNode.setId(Const.NONE_SERVICE_ID);
        userNode.setName(Const.USER_CODE);
        userNode.setType(Const.USER_CODE.toUpperCase());
        serviceNodes.add(userNode);
    }
    Topology topology = new Topology();
    topology.setCalls(calls);
    topology.setNodes(serviceNodes);
    return topology;
}
Also used : Call(org.apache.skywalking.apm.collector.storage.ui.common.Call) HashMap(java.util.HashMap) Node(org.apache.skywalking.apm.collector.storage.ui.common.Node) VisualUserNode(org.apache.skywalking.apm.collector.storage.ui.common.VisualUserNode) Topology(org.apache.skywalking.apm.collector.storage.ui.common.Topology) LinkedList(java.util.LinkedList) ServiceName(org.apache.skywalking.apm.collector.storage.table.register.ServiceName) VisualUserNode(org.apache.skywalking.apm.collector.storage.ui.common.VisualUserNode) ParseException(java.text.ParseException) HashSet(java.util.HashSet)

Example 3 with Node

use of org.apache.skywalking.apm.collector.storage.ui.common.Node in project incubator-skywalking by apache.

the class ServiceMetricEsUIDAO method getServicesMetric.

@Override
public List<Node> getServicesMetric(Step step, long startTime, long endTime, MetricSource metricSource, Collection<Integer> serviceIds) {
    String tableName = TimePyramidTableNameBuilder.build(step, ServiceMetricTable.TABLE);
    SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(tableName);
    searchRequestBuilder.setTypes(ServiceMetricTable.TABLE_TYPE);
    searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
    BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
    boolQuery.must().add(QueryBuilders.rangeQuery(ServiceMetricTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime));
    boolQuery.must().add(QueryBuilders.termsQuery(ServiceMetricTable.COLUMN_SERVICE_ID, serviceIds));
    boolQuery.must().add(QueryBuilders.termQuery(ServiceMetricTable.COLUMN_SOURCE_VALUE, metricSource.getValue()));
    searchRequestBuilder.setQuery(boolQuery);
    searchRequestBuilder.setSize(0);
    TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms(ServiceMetricTable.COLUMN_SERVICE_ID).field(ServiceMetricTable.COLUMN_SERVICE_ID).size(100);
    aggregationBuilder.subAggregation(AggregationBuilders.sum(ServiceMetricTable.COLUMN_TRANSACTION_CALLS).field(ServiceMetricTable.COLUMN_TRANSACTION_CALLS));
    aggregationBuilder.subAggregation(AggregationBuilders.sum(ServiceMetricTable.COLUMN_TRANSACTION_ERROR_CALLS).field(ServiceMetricTable.COLUMN_TRANSACTION_ERROR_CALLS));
    searchRequestBuilder.addAggregation(aggregationBuilder);
    SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
    List<Node> nodes = new LinkedList<>();
    Terms serviceIdTerms = searchResponse.getAggregations().get(ServiceMetricTable.COLUMN_SERVICE_ID);
    serviceIdTerms.getBuckets().forEach(serviceIdBucket -> {
        int serviceId = serviceIdBucket.getKeyAsNumber().intValue();
        Sum callsSum = serviceIdBucket.getAggregations().get(ServiceMetricTable.COLUMN_TRANSACTION_CALLS);
        Sum errorCallsSum = serviceIdBucket.getAggregations().get(ServiceMetricTable.COLUMN_TRANSACTION_ERROR_CALLS);
        ServiceNode serviceNode = new ServiceNode();
        serviceNode.setId(serviceId);
        serviceNode.setCalls((long) callsSum.getValue());
        serviceNode.setSla((int) (((callsSum.getValue() - errorCallsSum.getValue()) / callsSum.getValue()) * 10000));
        nodes.add(serviceNode);
    });
    return nodes;
}
Also used : ServiceNode(org.apache.skywalking.apm.collector.storage.ui.service.ServiceNode) TermsAggregationBuilder(org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder) SearchRequestBuilder(org.elasticsearch.action.search.SearchRequestBuilder) BoolQueryBuilder(org.elasticsearch.index.query.BoolQueryBuilder) Node(org.apache.skywalking.apm.collector.storage.ui.common.Node) ServiceNode(org.apache.skywalking.apm.collector.storage.ui.service.ServiceNode) Terms(org.elasticsearch.search.aggregations.bucket.terms.Terms) Sum(org.elasticsearch.search.aggregations.metrics.sum.Sum) DurationPoint(org.apache.skywalking.apm.collector.storage.utils.DurationPoint) SearchResponse(org.elasticsearch.action.search.SearchResponse)

Aggregations

Node (org.apache.skywalking.apm.collector.storage.ui.common.Node)3 ParseException (java.text.ParseException)2 HashSet (java.util.HashSet)2 LinkedList (java.util.LinkedList)2 Call (org.apache.skywalking.apm.collector.storage.ui.common.Call)2 Topology (org.apache.skywalking.apm.collector.storage.ui.common.Topology)2 VisualUserNode (org.apache.skywalking.apm.collector.storage.ui.common.VisualUserNode)2 HashMap (java.util.HashMap)1 Application (org.apache.skywalking.apm.collector.storage.table.register.Application)1 ServiceName (org.apache.skywalking.apm.collector.storage.table.register.ServiceName)1 Alarm (org.apache.skywalking.apm.collector.storage.ui.alarm.Alarm)1 ApplicationNode (org.apache.skywalking.apm.collector.storage.ui.application.ApplicationNode)1 ConjecturalNode (org.apache.skywalking.apm.collector.storage.ui.application.ConjecturalNode)1 ServiceNode (org.apache.skywalking.apm.collector.storage.ui.service.ServiceNode)1 DurationPoint (org.apache.skywalking.apm.collector.storage.utils.DurationPoint)1 SearchRequestBuilder (org.elasticsearch.action.search.SearchRequestBuilder)1 SearchResponse (org.elasticsearch.action.search.SearchResponse)1 BoolQueryBuilder (org.elasticsearch.index.query.BoolQueryBuilder)1 Terms (org.elasticsearch.search.aggregations.bucket.terms.Terms)1 TermsAggregationBuilder (org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder)1