[ https://issues.apache.org/jira/browse/SCB-327?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16357787#comment-16357787 ]
ASF GitHub Bot commented on SCB-327: ------------------------------------ WillemJiang commented on a change in pull request #550: [SCB-327] Update metrics publish data module URL: https://github.com/apache/incubator-servicecomb-java-chassis/pull/550#discussion_r167116882 ########## File path: metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/monitor/CallMonitor.java ########## @@ -17,79 +17,76 @@ package org.apache.servicecomb.metrics.core.monitor; -import java.util.ArrayList; -import java.util.List; +import java.util.HashMap; import java.util.Map; import org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx; -import org.apache.servicecomb.metrics.common.CallMetric; -import org.apache.servicecomb.metrics.common.DoubleMetricValue; -import org.apache.servicecomb.metrics.common.LongMetricValue; -import org.apache.servicecomb.metrics.common.MetricsDimension; +import org.apache.servicecomb.metrics.common.MetricsConst; import org.apache.servicecomb.metrics.core.utils.MonitorUtils; import com.netflix.servo.monitor.BasicCounter; import com.netflix.servo.monitor.MonitorConfig; import com.netflix.servo.monitor.StepCounter; +import com.netflix.servo.tag.Tags; public class CallMonitor { - private final String prefix; + private final Map<String, StatusCounter> statusCounters; - private final Map<String, Map<String, DimensionCounter>> dimensionCounters; + private final String operation; - public CallMonitor(String prefix) { - this.prefix = prefix; - this.dimensionCounters = new ConcurrentHashMapEx<>(); - this.dimensionCounters.put(MetricsDimension.DIMENSION_STATUS, new ConcurrentHashMapEx<>()); + private final String stage; + + private final String role; + + public CallMonitor(String operation, String stage, String role) { + this.operation = operation; + this.stage = stage; + this.role = role; + + this.statusCounters = new ConcurrentHashMapEx<>(); } - public void increment(String dimensionKey, String... dimensionValues) { - for (String dimensionValue : dimensionValues) { - DimensionCounter counter = dimensionCounters.get(dimensionKey) - .computeIfAbsent(dimensionValue, d -> new DimensionCounter( - new BasicCounter(MonitorConfig.builder(prefix + ".total").withTag(dimensionKey, dimensionValue).build()), - new StepCounter(MonitorConfig.builder(prefix + ".tps").withTag(dimensionKey, dimensionValue).build()))); - counter.increment(); - } + public void increment(String statusCode) { + StatusCounter counter = statusCounters + .computeIfAbsent(statusCode, d -> new StatusCounter(operation, stage, role, statusCode)); + counter.increment(); } - public CallMetric toMetric(int windowTimeIndex) { - List<LongMetricValue> totalValues = new ArrayList<>(); - List<DoubleMetricValue> tpsValues = new ArrayList<>(); - for (Map<String, DimensionCounter> dimensionCounter : dimensionCounters.values()) { - for (DimensionCounter counter : dimensionCounter.values()) { - totalValues.add(new LongMetricValue(counter.getTotal().getValue(windowTimeIndex).longValue(), - MonitorUtils.convertTags(counter.getTotal()))); - tpsValues.add( - new DoubleMetricValue(MonitorUtils.adjustValue(counter.getTps().getValue(windowTimeIndex).doubleValue()), - MonitorUtils.convertTags(counter.getTps()))); - } + public Map<String, Double> measure(int windowTimeIndex) { + Map<String, Double> metrics = new HashMap<>(); + for (StatusCounter counter : statusCounters.values()) { + metrics.putAll(counter.measure(windowTimeIndex)); } - - return new CallMetric(this.prefix, totalValues, tpsValues); + return metrics; } - class DimensionCounter { - private final BasicCounter total; + class StatusCounter { + private final BasicCounter totalCount; private final StepCounter tps; - public BasicCounter getTotal() { - return total; - } - - public StepCounter getTps() { - return tps; - } + public StatusCounter(String operation, String stage, String role, String statusCode) { + MonitorConfig config = MonitorConfig.builder(MetricsConst.SERVICECOMB_INVOCATION) + .withTag(MetricsConst.TAG_STATUS, statusCode).withTag(MetricsConst.TAG_OPERATION, operation) + .withTag(MetricsConst.TAG_STAGE, stage).withTag(MetricsConst.TAG_ROLE, role).build(); - public DimensionCounter(BasicCounter total, StepCounter tps) { - this.total = total; - this.tps = tps; + this.totalCount = new BasicCounter( + config.withAdditionalTag(Tags.newTag(MetricsConst.TAG_STATISTIC, "totalCount"))); + this.tps = new StepCounter(config.withAdditionalTag(Tags.newTag(MetricsConst.TAG_STATISTIC, "tps"))); } public void increment() { - total.increment(); + totalCount.increment(); tps.increment(); } + + public Map<String, Double> measure(int windowTimeIndex) { Review comment: Do we still need to support window time here? ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > Update metrics publish data module > ---------------------------------- > > Key: SCB-327 > URL: https://issues.apache.org/jira/browse/SCB-327 > Project: Apache ServiceComb > Issue Type: Sub-task > Components: Java-Chassis > Affects Versions: java-chassis-1.0.0-m1 > Reporter: yangyongzheng > Assignee: yangyongzheng > Priority: Major > Fix For: java-chassis-1.0.0-m1 > > > Change data publish from RegistryMetric model to map > adjust metrics publish format to spring cloud netflix style -- This message was sent by Atlassian JIRA (v7.6.3#76005)