mirror of
https://github.com/sprockets/sprockets.mixins.metrics.git
synced 2024-11-22 03:00:25 +00:00
Add InfluxDB example.
This commit is contained in:
parent
89cce19e4c
commit
cd61f418a4
2 changed files with 95 additions and 0 deletions
|
@ -16,3 +16,22 @@ as a base class.
|
|||
|
||||
.. literalinclude:: ../examples/statsd.py
|
||||
:pyobject: SimpleHandler
|
||||
|
||||
Sending measurements to InfluxDB
|
||||
--------------------------------
|
||||
This simple application sends per-request measurements to an InfluxDB
|
||||
server listening on ``localhost``. The mix-in is configured by passing
|
||||
a ``sprockets.mixins.metrics.influxdb`` key into the application settings
|
||||
as shown below.
|
||||
|
||||
.. literalinclude:: ../examples/influxdb.py
|
||||
:pyobject: make_application
|
||||
|
||||
The InfluxDB database and measurement name are also configured in the
|
||||
application settings object. The request handler is responsible for
|
||||
providing the tag and value portions of the measurement. The standard
|
||||
:class:`Metric Mixin API<sprockets.mixins.metrics.Mixin>` is used to set
|
||||
tagged values.
|
||||
|
||||
.. literalinclude:: ../examples/influxdb.py
|
||||
:pyobject: SimpleHandler
|
||||
|
|
76
examples/influxdb.py
Normal file
76
examples/influxdb.py
Normal file
|
@ -0,0 +1,76 @@
|
|||
import os
|
||||
import signal
|
||||
|
||||
from sprockets.mixins import metrics
|
||||
from tornado import gen, ioloop, web
|
||||
|
||||
|
||||
class SimpleHandler(metrics.InfluxDBMixin, web.RequestHandler):
|
||||
"""
|
||||
Simply emits a few metrics around the GET method.
|
||||
|
||||
The ``InfluxDBMixin`` sends all of the metrics gathered during
|
||||
the processing of a request as a single measurement when the
|
||||
request is finished. Each request of this sample will result
|
||||
in a single measurement using the service name as the key.
|
||||
|
||||
The following tag keys are defined by default:
|
||||
|
||||
handler="examples.influxdb.SimpleHandler"
|
||||
host="$HOSTNAME"
|
||||
method="GET"
|
||||
|
||||
and the following values are written:
|
||||
|
||||
duration=0.2573668956756592
|
||||
sleepytime=0.255108118057251
|
||||
slept=42
|
||||
status_code=204
|
||||
|
||||
The duration and status_code values are handled by the mix-in
|
||||
and the slept and sleepytime values are added in the method.
|
||||
|
||||
"""
|
||||
|
||||
@gen.coroutine
|
||||
def get(self):
|
||||
with self.execution_timer('sleepytime'):
|
||||
yield gen.sleep(0.25)
|
||||
self.increase_counter('slept', amount=42)
|
||||
self.set_status(204)
|
||||
self.finish()
|
||||
|
||||
|
||||
def _sig_handler(*args_):
|
||||
iol = ioloop.IOLoop.instance()
|
||||
iol.add_callback_from_signal(iol.stop)
|
||||
|
||||
|
||||
def make_application():
|
||||
"""
|
||||
Create a application configured to send metrics.
|
||||
|
||||
Measurements will be sent to the ``testing`` database on the
|
||||
configured InfluxDB instance. The measurement name is set
|
||||
by the ``service`` setting.
|
||||
|
||||
"""
|
||||
influx_url = 'http://{}:{}/write'.format(
|
||||
os.environ.get('INFLUX_HOST', '127.0.0.1'),
|
||||
os.environ.get('INFLUX_PORT', 8086))
|
||||
settings = {
|
||||
metrics.InfluxDBMixin.SETTINGS_KEY: {
|
||||
'measurement': 'cli',
|
||||
'database': 'testing',
|
||||
'write_url': influx_url,
|
||||
}
|
||||
}
|
||||
return web.Application([web.url('/', SimpleHandler)], **settings)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
app = make_application()
|
||||
app.listen(8000)
|
||||
signal.signal(signal.SIGINT, _sig_handler)
|
||||
signal.signal(signal.SIGTERM, _sig_handler)
|
||||
ioloop.IOLoop.instance().start()
|
Loading…
Reference in a new issue