11import logging
22import os
33
4- from azure .core . exceptions import ResourceExistsError
5- from azure . identity import ManagedIdentityCredential
6- from azure . storage . queue import QueueClient , QueueMessage
7- from opentelemetry .metrics import get_meter_provider
4+ from azure .monitor . opentelemetry . exporter import AzureMonitorMetricExporter
5+ from opentelemetry import metrics
6+ from opentelemetry . sdk . metrics import MeterProvider
7+ from opentelemetry .sdk . metrics . export import PeriodicExportingMetricReader
88
99logger = logging .getLogger (__name__ )
1010
11-
1211class Queue :
1312 def __init__ (self , queue_name ):
1413 logger .exception ("init Queue" )
@@ -33,13 +32,21 @@ def __init__(self, queue_name):
3332 except ResourceExistsError :
3433 pass
3534
35+ exporter = AzureMonitorMetricExporter (connection_string = os .environ ["APPLICATIONINSIGHTS_CONNECTION_STRING" ])
36+ reader = PeriodicExportingMetricReader (exporter )
37+ metrics .set_meter_provider (MeterProvider (metric_readers = [reader ]))
38+ self .meter = metrics .get_meter (__name__ )
39+ self .gauge = self .meter .create_gauge (self .queue_name , unit = "messages" , description = "Queue length" )
40+
3641 self .metrics ()
3742
3843 def add (self , message : str ):
3944 self .client .send_message (message )
45+ self .metrics ()
4046
4147 def delete (self , message : str | QueueMessage ):
4248 self .client .delete_message (message )
49+ self .metrics ()
4350
4451 def items (self , limit = 50 ):
4552 return self .client .receive_messages (max_messages = limit )
@@ -51,27 +58,18 @@ def item(self):
5158 return self .client .receive_message ()
5259
5360 def metrics (self ):
54- logger .exception ("going into metrics" )
61+ logger .exception ("record the metrics" )
5562 try :
5663 properties = self .client .get_queue_properties ()
5764 self .message_count = properties .approximate_message_count
5865 except Exception as e :
5966 logger .exception (e )
6067 self .message_count = None
61- return None
68+ return
6269
6370 try :
64- logger .exception ("going into metrics" )
65- meter = get_meter_provider ().get_meter ("queue_metrics" )
66-
67- gauge = meter .create_gauge (
68- name = self .queue_name ,
69- description = "Approximate number of messages in the queue" ,
70- unit = "messages" ,
71- )
72-
73- if self .message_count is not None :
74- gauge .record (self .message_count )
71+ print (f"Reporting queue size: { self .message_count } " )
72+ self .gauge .set (self .message_count , {"queue_name" : self .queue_name })
7573
7674 except Exception as e :
7775 logger .exception (e )
0 commit comments