mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-07-06 11:52:10 +02:00
Add consumer & producer metrics
This commit is contained in:
parent
6a35a4599f
commit
0b08c930da
1 changed files with 49 additions and 3 deletions
|
|
@ -130,6 +130,27 @@ class Consumer(BaseProcessor):
|
||||||
if input_schema == None:
|
if input_schema == None:
|
||||||
raise RuntimeError("input_schema must be specified")
|
raise RuntimeError("input_schema must be specified")
|
||||||
|
|
||||||
|
if not hasattr(__class__, "request_metric"):
|
||||||
|
__class__.request_metric = Histogram(
|
||||||
|
'request_latency', 'Request latency (seconds)'
|
||||||
|
)
|
||||||
|
|
||||||
|
if not hasattr(__class__, "pubsub_metric"):
|
||||||
|
__class__.pubsub_metric = Info(
|
||||||
|
'pubsub', 'Pub/sub configuration'
|
||||||
|
)
|
||||||
|
|
||||||
|
if not hasattr(__class__, "processing_metric"):
|
||||||
|
__class__.processing_metric = Counter(
|
||||||
|
'processing_count', 'Processing count', ["status"]
|
||||||
|
)
|
||||||
|
|
||||||
|
__class__.pubsub_metric.info({
|
||||||
|
"input_queue": input_queue,
|
||||||
|
"subscriber": subscriber,
|
||||||
|
"input_schema": input_schema.__name__,
|
||||||
|
})
|
||||||
|
|
||||||
self.consumer = self.client.subscribe(
|
self.consumer = self.client.subscribe(
|
||||||
input_queue, subscriber,
|
input_queue, subscriber,
|
||||||
schema=JsonSchema(input_schema),
|
schema=JsonSchema(input_schema),
|
||||||
|
|
@ -143,11 +164,14 @@ class Consumer(BaseProcessor):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
||||||
self.handle(msg)
|
with __class__.request_metric.time():
|
||||||
|
self.handle(msg)
|
||||||
|
|
||||||
# Acknowledge successful processing of the message
|
# Acknowledge successful processing of the message
|
||||||
self.consumer.acknowledge(msg)
|
self.consumer.acknowledge(msg)
|
||||||
|
|
||||||
|
__class__.processing_metric.labels(status="success").inc()
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|
||||||
print("Exception:", e, flush=True)
|
print("Exception:", e, flush=True)
|
||||||
|
|
@ -155,6 +179,8 @@ class Consumer(BaseProcessor):
|
||||||
# Message failed to be processed
|
# Message failed to be processed
|
||||||
self.consumer.negative_acknowledge(msg)
|
self.consumer.negative_acknowledge(msg)
|
||||||
|
|
||||||
|
__class__.processing_metric.labels(status="error").inc()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def add_args(parser, default_input_queue, default_subscriber):
|
def add_args(parser, default_input_queue, default_subscriber):
|
||||||
|
|
||||||
|
|
@ -187,6 +213,11 @@ class ConsumerProducer(BaseProcessor):
|
||||||
'request_latency', 'Request latency (seconds)'
|
'request_latency', 'Request latency (seconds)'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if not hasattr(__class__, "output_metric"):
|
||||||
|
__class__.output_metric = Counter(
|
||||||
|
'output_count', 'Output items created'
|
||||||
|
)
|
||||||
|
|
||||||
if not hasattr(__class__, "pubsub_metric"):
|
if not hasattr(__class__, "pubsub_metric"):
|
||||||
__class__.pubsub_metric = Info(
|
__class__.pubsub_metric = Info(
|
||||||
'pubsub', 'Pub/sub configuration'
|
'pubsub', 'Pub/sub configuration'
|
||||||
|
|
@ -249,8 +280,8 @@ class ConsumerProducer(BaseProcessor):
|
||||||
__class__.processing_metric.labels(status="error").inc()
|
__class__.processing_metric.labels(status="error").inc()
|
||||||
|
|
||||||
def send(self, msg, properties={}):
|
def send(self, msg, properties={}):
|
||||||
|
|
||||||
self.producer.send(msg, properties)
|
self.producer.send(msg, properties)
|
||||||
|
__class__.output_metric.inc()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def add_args(
|
def add_args(
|
||||||
|
|
@ -285,6 +316,21 @@ class Producer(BaseProcessor):
|
||||||
output_queue = params.get("output_queue")
|
output_queue = params.get("output_queue")
|
||||||
output_schema = params.get("output_schema")
|
output_schema = params.get("output_schema")
|
||||||
|
|
||||||
|
if not hasattr(__class__, "output_metric"):
|
||||||
|
__class__.output_metric = Counter(
|
||||||
|
'output_count', 'Output items created'
|
||||||
|
)
|
||||||
|
|
||||||
|
if not hasattr(__class__, "pubsub_metric"):
|
||||||
|
__class__.pubsub_metric = Info(
|
||||||
|
'pubsub', 'Pub/sub configuration'
|
||||||
|
)
|
||||||
|
|
||||||
|
__class__.pubsub_metric.info({
|
||||||
|
"output_queue": output_queue,
|
||||||
|
"output_schema": output_schema.__name__,
|
||||||
|
})
|
||||||
|
|
||||||
super(Producer, self).__init__(**params)
|
super(Producer, self).__init__(**params)
|
||||||
|
|
||||||
if output_schema == None:
|
if output_schema == None:
|
||||||
|
|
@ -296,8 +342,8 @@ class Producer(BaseProcessor):
|
||||||
)
|
)
|
||||||
|
|
||||||
def send(self, msg, properties={}):
|
def send(self, msg, properties={}):
|
||||||
|
|
||||||
self.producer.send(msg, properties)
|
self.producer.send(msg, properties)
|
||||||
|
__class__.output_metric.inc()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def add_args(
|
def add_args(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue