Using operator metrics

The Python Operator API provides runtime access to metrics similar to the access C++ APIs provide. Operator metrics are accessed through the streams.OperatorMetrics interface by obtaining a reference using OperatorContext.getMetrics().

For detailed information about Operator metrics, see the doxygen documentation. OperatorMetrics provides access to the system operator metrics using OperatorMetrics.InputPortMetricName and OperatorMetrics.OutputPortMetricName enumerations for metric names and OperatorMetrics.getInputPortMetric and OperatorMetrics.getOutputPortMetric.

Custom metrics can be created and fetched (including metrics that are defined by the operator model) using OperatorMetrics.createCustomMetric() and OperatorMetrics.getCustomMetric(). PE-level system metrics are similarly obtained through the streams.PEMetrics interface by obtaining a reference using OperatorContext.getPE().getMetrics().

All metrics are represented as a streams.Metric instance, with the mapping of the SPL int64 type to a Python int. The enumeration Metric.Kind indicates the kind of the metric (COUNTER, GAUGE, TIME) solely as an indication to external monitoring tools as to what the metric represents and how to display its value. A metric's kind has no impact on its function.

Creating a metric

opMetrics = self.getContext().getMetrics()

discardsMetric = opMetrics.createCustomMetric("nDiscardedTuples",
				"Number of discarded tuples", streams.Metric.Kind.COUNTER);

Usage:

if (discardTuple)
  discardsMetric.incrementValue(1)
else
  self.submitTuple(tuple, port)