use of com.hortonworks.streamline.streams.metrics.topology.TopologyMetrics in project streamline by hortonworks.
the class TopologyMetricsContainer method initTopologyMetrics.
private TopologyMetrics initTopologyMetrics(Map<String, Object> conf, String className) {
try {
TopologyMetrics topologyMetrics = instantiate(className);
topologyMetrics.init(conf);
return topologyMetrics;
} catch (IllegalAccessException | InstantiationException | ClassNotFoundException | ConfigException e) {
throw new RuntimeException("Can't initialize Topology metrics instance - Class Name: " + className, e);
}
}
use of com.hortonworks.streamline.streams.metrics.topology.TopologyMetrics in project streamline by hortonworks.
the class TopologyMetricsService method getTopologyMetricsInstance.
private TopologyMetrics getTopologyMetricsInstance(Topology topology) {
Namespace namespace = environmentService.getNamespace(topology.getNamespaceId());
if (namespace == null) {
throw new RuntimeException("Corresponding namespace not found: " + topology.getNamespaceId());
}
TopologyMetrics topologyMetrics = topologyMetricsContainer.findInstance(namespace);
if (topologyMetrics == null) {
throw new RuntimeException("Can't find Topology Metrics for such namespace " + topology.getNamespaceId());
}
return topologyMetrics;
}
use of com.hortonworks.streamline.streams.metrics.topology.TopologyMetrics in project streamline by hortonworks.
the class TopologyMetricsContainer method initializeInstance.
@Override
protected TopologyMetrics initializeInstance(Namespace namespace) {
String streamingEngine = namespace.getStreamingEngine();
MappedTopologyMetricsImpl metricsImpl;
// Only Storm is supported as streaming engine
try {
metricsImpl = MappedTopologyMetricsImpl.valueOf(streamingEngine);
} catch (IllegalArgumentException e) {
throw new RuntimeException("Unsupported streaming engine: " + streamingEngine, e);
}
// FIXME: "how to initialize" is up to implementation detail - now we just only consider about Storm implementation
Map<String, Object> conf = buildStormTopologyMetricsConfigMap(namespace, streamingEngine, subject);
String className = metricsImpl.getClassName();
TopologyMetrics topologyMetrics = initTopologyMetrics(conf, className);
String timeSeriesDB = namespace.getTimeSeriesDB();
if (timeSeriesDB != null && !timeSeriesDB.isEmpty()) {
String querierKey = MappedTimeSeriesQuerierImpl.getName(streamingEngine, timeSeriesDB);
MappedTimeSeriesQuerierImpl timeSeriesQuerierImpl;
try {
timeSeriesQuerierImpl = MappedTimeSeriesQuerierImpl.valueOf(querierKey);
} catch (IllegalArgumentException e) {
throw new RuntimeException("Unsupported streaming engine and time-series DB combination: " + streamingEngine + " & " + timeSeriesDB, e);
}
// FIXME: "how to initialize" is up to implementation detail - now we just only consider about Storm & AMS implementation
Map<String, String> confTimeSeriesQuerier = buildAMSTimeSeriesQuerierConfigMap(namespace, timeSeriesDB);
className = timeSeriesQuerierImpl.getClassName();
TimeSeriesQuerier timeSeriesQuerier = initTimeSeriesQuerier(confTimeSeriesQuerier, className);
topologyMetrics.setTimeSeriesQuerier(timeSeriesQuerier);
}
return topologyMetrics;
}
use of com.hortonworks.streamline.streams.metrics.topology.TopologyMetrics in project streamline by hortonworks.
the class TopologyMetricsService method getTopNAndOtherComponentsLatency.
public List<Pair<String, Double>> getTopNAndOtherComponentsLatency(Topology topology, String asUser, int nOfTopN) throws IOException {
TopologyMetrics topologyMetrics = getTopologyMetricsInstance(topology);
Map<String, TopologyMetrics.ComponentMetric> metricsForTopology = topologyMetrics.getMetricsForTopology(CatalogToLayoutConverter.getTopologyLayout(topology), asUser);
List<Pair<String, Double>> topNAndOther = new ArrayList<>();
List<ImmutablePair<String, Double>> latencyOrderedComponents = metricsForTopology.entrySet().stream().map((x) -> new ImmutablePair<>(x.getValue().getComponentName(), x.getValue().getProcessedTime())).sorted((c1, c2) -> {
if (c2.getValue() == null) {
// assuming c1 is bigger
return -1;
} else {
return c2.getValue().compareTo(c1.getValue());
}
}).collect(toList());
latencyOrderedComponents.stream().limit(nOfTopN).forEachOrdered(topNAndOther::add);
double sumLatencyOthers = latencyOrderedComponents.stream().skip(nOfTopN).filter((x) -> x.getValue() != null).mapToDouble(Pair::getValue).sum();
topNAndOther.add(new ImmutablePair<>("Others", sumLatencyOthers));
return topNAndOther;
}
Aggregations