use of io.opencensus.stats.View in project instrumentation-java by census-instrumentation.
the class MeasureToViewMap method registerView.
/**
* Enable stats collection for the given {@link View}.
*/
synchronized void registerView(View view, Clock clock) {
exportedViews = null;
View existing = registeredViews.get(view.getName());
if (existing != null) {
if (existing.equals(view)) {
// Ignore views that are already registered.
return;
} else {
throw new IllegalArgumentException("A different view with the same name is already registered: " + existing);
}
}
Measure measure = view.getMeasure();
Measure registeredMeasure = registeredMeasures.get(measure.getName());
if (registeredMeasure != null && !registeredMeasure.equals(measure)) {
throw new IllegalArgumentException("A different measure with the same name is already registered: " + registeredMeasure);
}
registeredViews.put(view.getName(), view);
if (registeredMeasure == null) {
registeredMeasures.put(measure.getName(), measure);
}
Timestamp now = clock.now();
mutableMap.put(view.getMeasure().getName(), MutableViewData.create(view, now));
}
use of io.opencensus.stats.View in project instrumentation-java by census-instrumentation.
the class MetricUtils method viewToMetricDescriptor.
@javax.annotation.Nullable
static MetricDescriptor viewToMetricDescriptor(View view) {
if (view.getWindow() instanceof View.AggregationWindow.Interval) {
// Only creates Metric for cumulative stats.
return null;
}
List<LabelKey> labelKeys = new ArrayList<LabelKey>();
for (TagKey tagKey : view.getColumns()) {
// TODO: add description
labelKeys.add(LabelKey.create(tagKey.getName(), ""));
}
Measure measure = view.getMeasure();
Aggregation aggregation = view.getAggregation();
return MetricDescriptor.create(view.getName().asString(), view.getDescription(), getUnit(measure, aggregation), getType(measure, aggregation), labelKeys);
}
use of io.opencensus.stats.View in project instrumentation-java by census-instrumentation.
the class StatszZPageHandler method groupViewsByDirectoriesAndGetMeasures.
// Parses view names, creates a tree that represents the directory structure and put each view
// under appropriate directory. Also gets measures from the given views.
// Directories are the namespaces in view name, separated by '/'.
private static void groupViewsByDirectoriesAndGetMeasures(Set<View> views, TreeNode root, Map<String, Measure> measures, Set<View> cachedViews) {
for (View view : views) {
if (cachedViews.contains(view)) {
continue;
}
cachedViews.add(view);
List<String> dirs = PATH_SPLITTER.splitToList(view.getName().asString());
TreeNode node = root;
for (int i = 0; i < dirs.size(); i++) {
if (node == null) {
// Should never happen. Work around the nullness checker.
break;
}
String dir = dirs.get(i);
if ("".equals(dir) && i == 0) {
// In case view name starts with a '/'.
continue;
}
node.views++;
if (i != dirs.size() - 1) {
// Non-leaf node (directory node)
node.children.putIfAbsent(dir, new TreeNode());
node = node.children.get(dir);
} else {
// Leaf node (view node)
node.children.putIfAbsent(dir, new TreeNode(view.getName()));
}
}
Measure measure = view.getMeasure();
measures.putIfAbsent(measure.getName(), measure);
}
}
use of io.opencensus.stats.View in project instrumentation-java by census-instrumentation.
the class StatszZPageHandler method emitViewData.
private static void emitViewData(/*@Nullable*/
ViewData viewData, View.Name viewName, PrintWriter out, Formatter formatter) {
if (viewData == null) {
formatter.format("<p class=\"view\">No Stats found for View %s.</p>", viewName.asString());
return;
}
View view = viewData.getView();
emitViewInfo(view, viewData.getWindowData(), out, formatter);
formatter.format("<p class=\"view\">Stats for View: %s</p>", view.getName().asString());
formatter.format("<table cellspacing=0 cellpadding=0>");
emitViewDataTableHeader(view, out, formatter);
for (Entry<List<TagValue>, AggregationData> /*@Nullable*/
entry : viewData.getAggregationMap().entrySet()) {
emitViewDataRow(view, entry, out, formatter);
}
out.write("</table>");
out.write("<p></p>");
}
use of io.opencensus.stats.View in project instrumentation-java by census-instrumentation.
the class Repl method registerAllViews.
private static void registerAllViews() {
// Defining the distribution aggregations
Aggregation latencyDistribution = Distribution.create(BucketBoundaries.create(Arrays.asList(// >=1s, >=2s, >=4s, >=6s]
0.0, 25.0, 50.0, 75.0, 100.0, 200.0, 400.0, 600.0, 800.0, 1000.0, 2000.0, 4000.0, 6000.0)));
Aggregation lengthsDistribution = Distribution.create(BucketBoundaries.create(Arrays.asList(// >=800B, >=1000B]
0.0, 5.0, 10.0, 20.0, 40.0, 60.0, 80.0, 100.0, 200.0, 400.0, 600.0, 800.0, 1000.0)));
// Define the count aggregation
Aggregation countAggregation = Aggregation.Count.create();
// So tagKeys
List<TagKey> noKeys = new ArrayList<TagKey>();
// Define the views
View[] views = new View[] { View.create(Name.create("ocjavametrics/latency"), "The distribution of latencies", M_LATENCY_MS, latencyDistribution, Collections.singletonList(KEY_METHOD)), View.create(Name.create("ocjavametrics/lines_in"), "The number of lines read in from standard input", M_LINES_IN, countAggregation, noKeys), View.create(Name.create("ocjavametrics/errors"), "The number of errors encountered", M_ERRORS, countAggregation, Collections.singletonList(KEY_METHOD)), View.create(Name.create("ocjavametrics/line_lengths"), "The distribution of line lengths", M_LINE_LENGTHS, lengthsDistribution, noKeys) };
// Create the view manager
ViewManager vmgr = Stats.getViewManager();
// Then finally register the views
for (View view : views) {
vmgr.registerView(view);
}
}
Aggregations