Source code for duct.sources.riak
"""
.. module:: riak
:platform: Any
:synopsis: A source module for Riak metrics
.. moduleauthor:: Jeremy Thurgood <firxen@gmail.com>
"""
from zope.interface import implementer
from duct.interfaces import IDuctSource
from duct.objects import Source
from duct.utils import HTTPRequest
[docs]
@implementer(IDuctSource)
class RiakStats(Source):
"""Returns GET/PUT rates for a Riak node
:param url: Riak stats URL
:type url: str.
:param useragent: User-Agent header to use
:type useragent: str.
**Metrics:**
:(service name).latency: Time to complete request
"""
async def _get_stats_from_node(self):
url = self.config.get('url', f'http://{self.hostname}:8098/stats')
ua = self.config.get('useragent', 'Duct Riak stats checker')
return await HTTPRequest().getJson(url, headers={'User-Agent': ua})
[docs]
async def get(self):
stats = await self._get_stats_from_node()
get_rate = stats['node_gets'] / 60.0
put_rate = stats['node_puts'] / 60.0
return [
self.createEvent(
'ok', 'GETs per second for past minute', get_rate,
prefix="gets_per_second"),
self.createEvent(
'ok', 'PUTs per second for past minute', put_rate,
prefix="puts_per_second"),
]