diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetricQueryService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetricQueryService.java index 589c79acf0c4ea6643d9173c8723ee8b819921df..a43879355cae004484463b25e809d3509275bb15 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetricQueryService.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/MetricQueryService.java @@ -20,25 +20,32 @@ package org.apache.skywalking.oap.server.core.query; import java.io.IOException; import java.text.ParseException; -import java.util.*; +import java.util.ArrayList; +import java.util.List; import org.apache.skywalking.apm.util.StringUtil; import org.apache.skywalking.oap.server.core.Const; import org.apache.skywalking.oap.server.core.analysis.Downsampling; import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics; -import org.apache.skywalking.oap.server.core.query.entity.*; -import org.apache.skywalking.oap.server.core.query.sql.*; +import org.apache.skywalking.oap.server.core.query.entity.IntValues; +import org.apache.skywalking.oap.server.core.query.entity.Thermodynamic; +import org.apache.skywalking.oap.server.core.query.sql.KeyValues; +import org.apache.skywalking.oap.server.core.query.sql.Where; import org.apache.skywalking.oap.server.core.storage.StorageModule; import org.apache.skywalking.oap.server.core.storage.annotation.ValueColumnIds; import org.apache.skywalking.oap.server.core.storage.query.IMetricsQueryDAO; +import org.apache.skywalking.oap.server.library.module.ModuleManager; import org.apache.skywalking.oap.server.library.module.Service; -import org.apache.skywalking.oap.server.library.module.*; import org.apache.skywalking.oap.server.library.util.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author peng-yongsheng */ public class MetricQueryService implements Service { + private static final Logger logger = LoggerFactory.getLogger(MetricQueryService.class); + private final ModuleManager moduleManager; private IMetricsQueryDAO metricQueryDAO; @@ -53,10 +60,17 @@ public class MetricQueryService implements Service { return metricQueryDAO; } - public IntValues getValues(final String indName, final List ids, final Downsampling downsampling, final long startTB, + public IntValues getValues(final String indName, final List ids, final Downsampling downsampling, + final long startTB, final long endTB) throws IOException { if (CollectionUtils.isEmpty(ids)) { - throw new RuntimeException("IDs can't be null"); + /** + * Don't support query values w/o ID. but UI still did this(as bug), + * we return an empty list, and a debug level log, + * rather than an exception, which always being considered as a serious error from new users. + */ + logger.debug("query metrics[{}] w/o IDs", indName); + return new IntValues(); } Where where = new Where(); @@ -68,7 +82,8 @@ public class MetricQueryService implements Service { return getMetricQueryDAO().getValues(indName, downsampling, startTB, endTB, where, ValueColumnIds.INSTANCE.getValueCName(indName), ValueColumnIds.INSTANCE.getValueFunction(indName)); } - public IntValues getLinearIntValues(final String indName, final String id, final Downsampling downsampling, final long startTB, + public IntValues getLinearIntValues(final String indName, final String id, final Downsampling downsampling, + final long startTB, final long endTB) throws IOException, ParseException { List durationPoints = DurationUtils.INSTANCE.getDurationPoints(downsampling, startTB, endTB); List ids = new ArrayList<>(); @@ -81,7 +96,8 @@ public class MetricQueryService implements Service { return getMetricQueryDAO().getLinearIntValues(indName, downsampling, ids, ValueColumnIds.INSTANCE.getValueCName(indName)); } - public Thermodynamic getThermodynamic(final String indName, final String id, final Downsampling downsampling, final long startTB, + public Thermodynamic getThermodynamic(final String indName, final String id, final Downsampling downsampling, + final long startTB, final long endTB) throws IOException, ParseException { List durationPoints = DurationUtils.INSTANCE.getDurationPoints(downsampling, startTB, endTB); List ids = new ArrayList<>();