Skip to content

Commit

Permalink
Add Prometheus metrics for OpenStreetMap API usage
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelvl committed Nov 18, 2018
1 parent eb1f37a commit 2484642
Show file tree
Hide file tree
Showing 2 changed files with 122 additions and 1 deletion.
2 changes: 1 addition & 1 deletion osm/changeset.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-

import os, sys, time
from osmapi import OsmApi
from osmapi_prom import OsmApi
import diff
import pprint
import geojson as gj
Expand Down
121 changes: 121 additions & 0 deletions osm/osmapi_prom.py
@@ -0,0 +1,121 @@
# -*- coding: utf-8 -*-

"""
The OsmApi module is a wrapper for the OpenStreetMap API.
"""

import osmapi
import prometheus_client

# Node operations
m_events = prometheus_client.Counter('openstreetmap_api_events',
'OpenStreetMap API requests',
['operation'])

m_bytes = prometheus_client.Counter('openstreetmap_api_bytes',
'OpenStreetMap API bytes',
['operation', 'direction'])

class OsmApi(osmapi.OsmApi):

#def __init__(self, *args, **kwargs):
# self.proxy = osmapi.OsmApi(*args, **kwargs)

def _doop(self, op, *args, **kwargs):
m_events.labels(op).inc()
self.operation = op
d = getattr(osmapi.OsmApi, op)(self, *args, **kwargs)
self.operation = 'undef'
return d

##################################################
# Node #
##################################################

def NodeGet(self, *args, **kwargs):
return self._doop('NodeGet', *args, **kwargs)

def NodeHistory(self, *args, **kwargs):
return self._doop('NodeHistory', *args, **kwargs)

def NodeWays(self, *args, **kwargs):
return self._doop('NodeWays', *args, **kwargs)

def NodeRelations(self, *args, **kwargs):
return self._doop('NodeRelations', *args, **kwargs)

def NodesGet(self, *args, **kwargs):
return self._doop('NodesGet', *args, **kwargs)

# ##################################################
# # Way #
# ##################################################

def WayGet(self, *args, **kwargs):
return self._doop('WayGet', *args, **kwargs)

def WayHistory(self, *args, **kwargs):
return self._doop('WayHistory', *args, **kwargs)

def WayRelations(self, *args, **kwargs):
return self._doop('WayRelations', *args, **kwargs)

def WayFull(self, *args, **kwargs):
return self._doop('WayFull', *args, **kwargs)

def WaysGet(self, *args, **kwargs):
return self._doop('WaysGet', *args, **kwargs)

# ##################################################
# # Relation #
# ##################################################

def RelationGet(self, *args, **kwargs):
return self._doop('RelationGet', *args, **kwargs)

def RelationHistory(self, *args, **kwargs):
return self._doop('RelationHistory', *args, **kwargs)

def RelationRelations(self, *args, **kwargs):
return self._doop('RelationRelations', *args, **kwargs)

def RelationFullRecur(self, *args, **kwargs):
return self._doop('RelationFullRecur', *args, **kwargs)

def RelationFull(self, *args, **kwargs):
return self._doop('RelationFull', *args, **kwargs)

def RelationsGet(self, *args, **kwargs):
return self._doop('RelationsGet', *args, **kwargs)

# ##################################################
# # Changeset #
# ##################################################

def ChangesetGet(self, *args, **kwargs):
return self._doop('ChangesetGet', *args, **kwargs)

def ChangesetDownload(self, *args, **kwargs):
return self._doop('ChangesetDownload', *args, **kwargs)

def ChangesetsGet(self, *args, **kwargs):
return self._doop('ChangesetsGet', *args, **kwargs)

# ##################################################
# # Notes #
# ##################################################

def NotesGet(self, *args, **kwargs):
return self._doop('NotesGet', *args, **kwargs)

def NoteGet(self, *args, **kwargs):
return self._doop('NoteGet', *args, **kwargs)

##################################################
# Internal http function #
##################################################
def _get(self, path):
d = osmapi.OsmApi._get(self, path)
m_bytes.labels(self.operation, 'rx').inc(len(d))
return d

0 comments on commit 2484642

Please sign in to comment.