/** * Copyright 2016 Yahoo Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.yahoo.pulsar.broker.stats; import com.google.common.collect.Maps; import com.yahoo.pulsar.common.stats.Metrics; import java.util.ArrayList; import java.util.List; import java.util.Map; /** */ public class BrokerOperabilityMetrics { private final List<Metrics> metricsList; private final String localCluster; private final TopicLoadStats topicLoadStats; private final String brokerName; public BrokerOperabilityMetrics(String localCluster, String brokerName) { this.metricsList = new ArrayList<>(); this.localCluster = localCluster; this.topicLoadStats = new TopicLoadStats(); this.brokerName = brokerName; } public List<Metrics> getMetrics() { generate(); return metricsList; } private void generate() { metricsList.add(getTopicLoadMetrics()); } Metrics getTopicLoadMetrics() { Map<String, String> dimensionMap = Maps.newHashMap(); dimensionMap.put("broker", brokerName); dimensionMap.put("cluster", localCluster); dimensionMap.put("metric", "topic_load_times"); Metrics dMetrics = Metrics.create(dimensionMap); topicLoadStats.updateStats(); dMetrics.put("brk_topic_load_time_mean_ms", topicLoadStats.meanTopicLoadMs); dMetrics.put("brk_topic_load_time_median_ms", topicLoadStats.medianTopicLoadMs); dMetrics.put("brk_topic_load_time_95percentile_ms", topicLoadStats.topicLoad95Ms); dMetrics.put("brk_topic_load_time_99_percentile_ms", topicLoadStats.topicLoad99Ms); dMetrics.put("brk_topic_load_time_99_9_percentile_ms", topicLoadStats.topicLoad999Ms); dMetrics.put("brk_topic_load_time_99_99_percentile_ms", topicLoadStats.topicsLoad9999Ms); dMetrics.put("brk_topic_load_rate_s", (1000 * topicLoadStats.topicLoadCounts) / topicLoadStats.elapsedIntervalMs); return dMetrics; } public void reset() { metricsList.clear(); } public void recordTopicLoadTimeValue(long topicLoadLatencyMs) { topicLoadStats.recordTopicLoadTimeValue(topicLoadLatencyMs); } }