示例#1
0
class GangliaReporter(Reporter):
    """
    A ganglia reporter that send metrics to ganglia ::

      reporter = GangliaReporter('Report Group Name',
                                 'localhost',
                                 8649,
                                 'udp',
                                 interval=60)
      reporter.start()

    :param default_group_name: default group name for ganglia
    :param host: hostname of gmond
    :param port: port of gmond
    :param protocol: protocol for gmond sockets
    :param interval: time between each reporting
    """

    def __init__(self, default_group_name, host, port, protocol="udp",
                 *args, **kwargs):
        super(GangliaReporter, self).__init__(*args, **kwargs)
        self.default_group_name = default_group_name
        self.gmetric = GMetric("{0}://{1}:{2}".format(protocol, host, port))
        self.groups = {}

    def set_group(self, metric_name, group_name):
        """Override the group name for certain metrics."""
        self.groups[metric_name] = group_name

    def write(self):
        for name, metric in self.registry:
            if isinstance(metric, Meter):
                self.send(name, 'Count', metric.count, 'int32', 'count')
                self.send(name, 'One Minute Rate', metric.one_minute_rate,
                          'double', 'per second')
                self.send(name, 'Five Minute Rate', metric.five_minute_rate,
                          'double', 'per second')
                self.send(name, 'Fifteen Minute Rate',
                          metric.fifteen_minute_rate, 'double', 'per second')
                self.send(name, 'Mean Rate', metric.mean_rate,
                          'double', 'per second')
            elif isinstance(metric, Gauge):
                self.send(name, 'Value', metric.value(), 'int32', 'value')
            elif isinstance(metric, Histogram):
                self.send(name, 'Count', metric.count, 'int32', 'count')
                self.send(name, 'Mean value', metric.mean,
                          'double', 'mean value')
                self.send(name, 'Variance', metric.variance,
                          'double', 'variance')
            elif isinstance(metric, Counter):
                self.send(name, 'Count', metric.count, 'int32', 'count')

    def send(self, name, tracker, value, kind, unit):
        if tracker:
            name = "{0} - {1}".format(name, tracker)
        group = self.groups.get(name, self.default_group_name)
        self.gmetric.send(name=name, value=value, type=kind,
                          units=unit, group=group)
示例#2
0
 def __init__(self,
              default_group_name,
              host,
              port,
              protocol="udp",
              *args,
              **kwargs):
     super(GangliaReporter, self).__init__(*args, **kwargs)
     self.default_group_name = default_group_name
     self.gmetric = GMetric("{0}://{1}:{2}".format(protocol, host, port))
     self.groups = {}
示例#3
0
class GangliaReporter(Reporter):
    """
    A ganglia reporter that send metrics to ganglia ::

      reporter = GangliaReporter('Report Group Name', 'localhost', 8649, 'udp', interval=60)
      reporter.start()

    :param default_group_name: default group name for ganglia
    :param host: hostname of gmond
    :param port: port of gmond
    :param protocol: protocol for gmond sockets
    :param interval: time between each reporting
    """

    def __init__(self, default_group_name, host, port, protocol="udp", *args, **kwargs):
        super(GangliaReporter, self).__init__(*args, **kwargs)
        self.default_group_name = default_group_name
        self.gmetric = GMetric("{0}://{1}:{2}".format(protocol, host, port))
        self.groups = {}

    def set_group(self, metric_name, group_name):
        """Override the group name for certain metrics."""
        self.groups[metric_name] = group_name

    def write(self):
        for name, metric in self.registry:
            if isinstance(metric, Meter):
                self.send(name, 'Count', metric.count, 'int32', 'count')
                self.send(name, 'One Minute Rate', metric.m1_rate, 'double', 'per second')
                self.send(name, 'Five Minute Rate', metric.m5_rate, 'double', 'per second')
                self.send(name, 'Fifteen Minute Rate', metric.m15_rate, 'double', 'per second')
                self.send(name, 'Mean Rate', metric.mean_rate, 'double', 'per second')
            elif isinstance(metric, Gauge):
                self.send(name, 'Value', metric.value(), 'int32', 'value')
            elif isinstance(metric, Histogram):
                self.send(name, 'Count', metric.count, 'int32', 'count')
                self.send(name, 'Mean value', metric.mean, 'double', 'mean value')
                self.send(name, 'Variance', metric.variance, 'double', 'variance')
            elif isinstance(metric, Counter):
                self.send(name, 'Count', metric.count, 'int32', 'count')

    def send(self, name, tracker, value, kind, unit):
        if tracker:
            name = "{0} - {1}".format(name, tracker)
        group = self.groups.get(name, self.default_group_name)
        self.gmetric.send(name=name, value=value, type=kind, units=unit, group=group)
示例#4
0
 def __init__(self, default_group_name, host, port, protocol="udp", *args, **kwargs):
     super(GangliaReporter, self).__init__(*args, **kwargs)
     self.default_group_name = default_group_name
     self.gmetric = GMetric("{0}://{1}:{2}".format(protocol, host, port))
     self.groups = {}