File: metrics.py

package info (click to toggle)
python-aiomeasures 0.5.14-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 672 kB
  • sloc: python: 5,173; makefile: 159
file content (86 lines) | stat: -rw-r--r-- 2,595 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
"""
    We’ll walk through the types of metrics supported by DogStatsD in Python,
    but the principles are easily translated into other languages.
"""

__all__ = [
    'Metric', 'CountingMetric', 'GaugeMetric',
    'HistogramMetric', 'SetMetric', 'TimingMetric'
]


class Metric:

    __slots__ = ('name', 'value', 'rate', 'delta', 'tags')

    def __init__(self, name, value, rate=None, delta=False, tags=None):
        """
        Parameters:
            name (str): name of the metric
            value (obj): value of the metric
            rate (float): sample of metric (optional)
        """

        self.name = name
        self.value = value
        self.rate = rate
        self.delta = delta
        self.tags = tags

    def __eq__(self, other):
        if isinstance(other, Metric):
            other = other.__str__()
        return self.__str__() == other

    def __repr__(self):
        args = ['%s=%s' for attr in ()]
        for attr in ('name', 'value', 'rate', 'delta', 'tags'):
            value = getattr(self, attr, None)
            if value is not None:
                args.append('%s=%r' % (attr, value))
        return '<%s(%s)>' % (self.__class__.__name__, ', '.join(args))


class CountingMetric(Metric):
    """Count things.

    Counters track how many times something happened per second,
    like the number of database requests or page views.
    """


class GaugeMetric(Metric):
    """Measure the value of a particular thing over time.

    Gauges measure the value of a particular thing at a particular time,
    like the amount of fuel in a car’s gas tank or the number of users
    connected to a system.
    """


class HistogramMetric(Metric):
    """Measure the statistical distribution of a set of values.

    Histograms track the statistical distribution of a set of values,
    like the duration of a number of database queries or the size of files
    uploaded by users.
    """


class SetMetric(Metric):
    """Count the number of unique elements in a group.

    Sets are used to count the number of unique elements in a group.
    If you want to track the number of unique visitor to your site,
    sets are a great way to do that.
    """


class TimingMetric(Metric):
    """Measure the statistical distribution of a set of values.

    StatsD only supports histograms for timing, not generic values (like
    the size of uploaded files or the number of rows returned from a query).
    Timers are essentially a special case of histograms, so they are treated
    in the same manner by DogStatsD for backwards compatibility.
    """