Fix event counter counting events more than once

main
Rhys Bailey 2024-01-06 15:05:43 +11:00
parent e4ef9d58e6
commit af85a6bf3b
1 changed files with 10 additions and 1 deletions

View File

@ -25,6 +25,7 @@ class CustomCollector(object):
self.stats_url = _url self.stats_url = _url
self.process_stats = {} self.process_stats = {}
self.previous_event_id = None self.previous_event_id = None
self.previous_event_start_time = None
self.all_events = {} self.all_events = {}
def add_metric_process(self, metric, camera_stats, camera_name, pid_name, process_name, cpu_or_memory, process_type): def add_metric_process(self, metric, camera_stats, camera_name, pid_name, process_name, cpu_or_memory, process_type):
@ -223,7 +224,13 @@ class CustomCollector(object):
try: try:
# change url from stats to events # change url from stats to events
events = json.loads(urlopen(self.stats_url.replace('stats', 'events')).read()) events_url = self.stats_url.replace('stats', 'events')
if self.previous_event_start_time:
events_url = events_url + '?after=' + str(self.previous_event_start_time)
events = json.loads(urlopen(events_url).read())
except error.URLError as e: except error.URLError as e:
logging.error("URLError while opening Frigate events url %s: %s", self.stats_url, e) logging.error("URLError while opening Frigate events url %s: %s", self.stats_url, e)
return return
@ -231,6 +238,7 @@ class CustomCollector(object):
if not self.previous_event_id: if not self.previous_event_id:
# ignore all previous events on startup # ignore all previous events on startup
self.previous_event_id = events[0]['id'] self.previous_event_id = events[0]['id']
self.previous_event_start_time = int(events[0]['start_time'])
camera_events = CounterMetricFamily('frigate_camera_events', 'Count of camera events since exporter started', labels=['camera', 'label']) camera_events = CounterMetricFamily('frigate_camera_events', 'Count of camera events since exporter started', labels=['camera', 'label'])
@ -256,6 +264,7 @@ class CustomCollector(object):
camera_events.add_metric([camera, label], label_value) camera_events.add_metric([camera, label], label_value)
self.previous_event_id = events[0]['id'] self.previous_event_id = events[0]['id']
self.previous_event_start_time = int(events[0]['start_time'])
yield camera_events yield camera_events