monasca-agent/monagent/collector/checks_d/gearmand.py

72 lines
2.3 KiB
Python

from monagent.collector.checks import AgentCheck
class Gearman(AgentCheck):
@staticmethod
def get_library_versions():
try:
import gearman
version = gearman.__version__
except ImportError:
version = "Not Found"
except AttributeError:
version = "Unknown"
return {"gearman": version}
def _get_client(self, host, port):
try:
import gearman
except ImportError:
raise Exception("Cannot import Gearman module. Check the instructions to install" +
"this module at https://app.datadoghq.com/account/settings#integrations/gearman")
self.log.debug("Connecting to gearman at address %s:%s" % (host, port))
return gearman.GearmanAdminClient(["%s:%s" % (host, port)])
def _get_metrics(self, client, dimensions):
data = client.get_status()
running = 0
queued = 0
workers = 0
for stat in data:
running += stat['running']
queued += stat['queued']
workers += stat['workers']
unique_tasks = len(data)
self.gauge("gearman.unique_tasks", unique_tasks, dimensions=dimensions)
self.gauge("gearman.running", running, dimensions=dimensions)
self.gauge("gearman.queued", queued, dimensions=dimensions)
self.gauge("gearman.workers", workers, dimensions=dimensions)
self.log.debug("running %d, queued %d, unique tasks %d, workers: %d" %
(running, queued, unique_tasks, workers))
def _get_conf(self, instance):
host = instance.get('server', None)
port = instance.get('port', None)
if host is None:
self.warning("Host not set, assuming 127.0.0.1")
host = "127.0.0.1"
if port is None:
self.warning("Port is not set, assuming 4730")
port = 4730
dimensions = instance.get('dimensions', {})
return host, port, dimensions
def check(self, instance):
self.log.debug("Gearman check start")
host, port, dimensions = self._get_conf(instance)
client = self._get_client(host, port)
self.log.debug("Connected to gearman")
self._get_metrics(client, dimensions)