Skip to content

Instantly share code, notes, and snippets.

@Slach
Last active January 20, 2017 06:14
Show Gist options
  • Save Slach/00c86b1341f738bc9dd5 to your computer and use it in GitHub Desktop.
Save Slach/00c86b1341f738bc9dd5 to your computer and use it in GitHub Desktop.
cyclone + pynba monitoring
# -*- coding: utf-8 -*-
from coffee_server.common.service_singletone import service
import pynba.util.script as pynba
import cyclone.web
import platform
if platform.system() != 'Windows':
import resource
class CoffeePynbaMonitor(pynba.ScriptMonitor):
def __init__(
self, address,
hostname=None, scriptname=None, servername=None, reporter=None, tags=None, autostart=True
):
self.status = None
super(CoffeePynbaMonitor, self).__init__(
address, hostname, scriptname, servername, reporter, tags, autostart
)
def stop(self):
self.collector.stop()
usage = resource.getrusage(resource.RUSAGE_SELF)
self.collector.memory_peak = usage.ru_maxrss
self.ru_utime = usage.ru_utime - self.resources.ru_utime
self.ru_stime = usage.ru_stime - self.resources.ru_stime
return self
def send(self):
self.stop()
timers = [timer for timer in self.collector.timers if timer.elapsed]
document_size = self.collector.document_size
memory_peak = self.collector.memory_peak
ru_utime = self.ru_utime
ru_stime = self.ru_stime
self.reporter(
self.servername,
self.hostname,
self.scriptname,
self.collector.elapsed,
timers=timers,
ru_utime=ru_utime,
ru_stime=ru_stime,
document_size=document_size,
memory_peak=memory_peak,
status=self.status,
memory_footprint=None,
schema=None,
tags=self.collector.tags
)
self.flush()
class CustomPynbaMonitoringMixin(cyclone.web.RequestHandler):
def prepare(self):
self.set_header("Content-Type", "application/json")
self.pynba = CoffeePynbaMonitor(
address=(service.config['pynba']['server'], service.config['pynba']['port']),
hostname=self.request.host,
scriptname=self.request.path,
tags={'action': self.__class__.__name__ + '.' + self.request.method}
)
def on_finish(self):
self.pynba.collector.document_size = int(self._headers.get('Content-Length'))
self.pynba.status = self.get_status()
self.pynba.send()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment