73 lines
2.3 KiB
Python
73 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)
|