in oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/rt/PromQLExprQueryVisitor.java [561:631]
private MetricInfo buildMetricInfo(String metricName,
Layer layer,
Scope scope,
Map<LabelName, String> sysLabelMap,
Optional<String> valueLabel,
Optional<String> topNEntityName,
Optional<String> recordName,
boolean isMultiIntValues) throws IllegalExpressionException {
MetricInfo metricInfo = new MetricInfo(metricName);
valueLabel.ifPresent(s ->
{
if (isMultiIntValues) {
metricInfo.getLabels().add(new LabelValuePair(LabelName.LABELS.getLabel(), s));
} else {
DataLabel dataLabel = new DataLabel();
dataLabel.put(s);
for (Map.Entry<String, String> label : dataLabel.entrySet()) {
metricInfo.getLabels().add(new LabelValuePair(label.getKey(), label.getValue()));
}
}
});
metricInfo.getLabels().add(new LabelValuePair(LabelName.LAYER.getLabel(), layer.name()));
switch (scope) {
case Service:
metricInfo.getLabels().add(new LabelValuePair(LabelName.SCOPE.getLabel(), Scope.Service.name()));
if (topNEntityName.isPresent()) {
metricInfo.getLabels().add(new LabelValuePair(LabelName.SERVICE.getLabel(), topNEntityName.get()));
} else if (recordName.isPresent()) {
metricInfo.getLabels().add(new LabelValuePair(LabelName.RECORD.getLabel(), recordName.get()));
} else {
checkLabels(sysLabelMap, LabelName.SERVICE);
metricInfo.getLabels()
.add(new LabelValuePair(LabelName.SERVICE.getLabel(), sysLabelMap.get(LabelName.SERVICE)));
}
break;
case ServiceInstance:
metricInfo.getLabels().add(new LabelValuePair(LabelName.SCOPE.getLabel(), Scope.ServiceInstance.name()));
if (topNEntityName.isPresent()) {
metricInfo.getLabels().add(new LabelValuePair(LabelName.SERVICE_INSTANCE.getLabel(), topNEntityName.get()));
} else if (recordName.isPresent()) {
metricInfo.getLabels().add(new LabelValuePair(LabelName.RECORD.getLabel(), recordName.get()));
} else {
checkLabels(sysLabelMap, LabelName.SERVICE, LabelName.SERVICE_INSTANCE);
metricInfo.getLabels()
.add(new LabelValuePair(LabelName.SERVICE.getLabel(), sysLabelMap.get(LabelName.SERVICE)));
metricInfo.getLabels()
.add(new LabelValuePair(
LabelName.SERVICE_INSTANCE.getLabel(),
sysLabelMap.get(LabelName.SERVICE_INSTANCE)
));
}
break;
case Endpoint:
metricInfo.getLabels().add(new LabelValuePair(LabelName.SCOPE.getLabel(), Scope.Endpoint.name()));
if (topNEntityName.isPresent()) {
metricInfo.getLabels().add(new LabelValuePair(LabelName.ENDPOINT.getLabel(), topNEntityName.get()));
} else if (recordName.isPresent()) {
metricInfo.getLabels().add(new LabelValuePair(LabelName.RECORD.getLabel(), recordName.get()));
} else {
checkLabels(sysLabelMap, LabelName.SERVICE, LabelName.ENDPOINT);
metricInfo.getLabels()
.add(new LabelValuePair(LabelName.SERVICE.getLabel(), sysLabelMap.get(LabelName.SERVICE)));
metricInfo.getLabels()
.add(new LabelValuePair(LabelName.ENDPOINT.getLabel(), sysLabelMap.get(LabelName.ENDPOINT)));
}
break;
}
return metricInfo;
}