Skip to main content

Metrics


id: py-Metrics

Metrics

The Metrics class provides access to performance counters and operational metrics. It is available globally as metrics in every Python processor.

Currently supports counters — more metric types may be added in future releases.


At a Glance

# Get or create a counter
processed = metrics.getCounter('orders.processed')
errors = metrics.getCounter('orders.errors')

# Update counters
processed.increment()
errors.increment(5)

# Read values
stream.logInfo(f'Processed: {processed.count}')

Methods

getCounter(name)

Retrieves or creates a counter metric.

ParameterTypeDescription
namestrCounter identifier

Returns: Counter

total_messages = metrics.getCounter('stream.messages.total')
failed_messages = metrics.getCounter('stream.messages.failed')

total_messages.increment()
if has_error:
failed_messages.increment()

Complete Example

OUTPUT_PORT = None
ERROR_PORT = None

def on_init():
global OUTPUT_PORT, ERROR_PORT
OUTPUT_PORT = processor.getOutputPort('Output')
ERROR_PORT = processor.getOutputPort('Error')

def on_message():
processed = metrics.getCounter('workflow.records.processed')
errors = metrics.getCounter('workflow.records.errors')

try:
validate_and_transform(message)
processed.increment()
stream.emit(message, OUTPUT_PORT)
except Exception:
errors.increment()
message.addStatus(Severity.ERROR, Status.create(VENDOR, 'PROCESSING_FAILED'))
stream.emit(message, ERROR_PORT)

def on_stream_end():
processed = metrics.getCounter('workflow.records.processed')
errors = metrics.getCounter('workflow.records.errors')

total = processed.count + errors.count
rate = (processed.count / total * 100) if total > 0 else 0

stream.logInfo(f'Stream complete: {processed.count} ok, {errors.count} errors ({rate:.1f}% success)')

See Also

  • Counter — Counter operations (increment, decrement, chaining)