Metrics to measure data from different sources and report to a monitoring system (e.g. Prometheus)
Project description
pimetrics
A set of Probes to measure values from different sources and report them to a reporting system (e.g. Prometheus)
Classes
NAME
pimetrics.probe - A set of Probes to measure values from different sources and report them to a reporting system (e.g. Prometheus)
CLASSES
abc.ABC(builtins.object)
Probe
FileProbe
SysFSProbe
ProcessProbe
APIProbe(Probe, abc.ABC)
builtins.object
Probes
class Probe(abc.ABC)
| Base class for the pimetrics probe. Calling code should call Probe.run() to measure a new value.
| Measuring goes through the following flow:
| - measure() measures a new data point
| -> process() performs any processing logic on the measured data
| -> report() reports the processed value to a reporting system (e.g. prometheus)
|
| When creating a derived class, at least the following should be overrideen:
| - measure() to implement the measuring logic
| - report() to report the measured value to the reporting system
|
| More complex systems may override process() to separate the measument logic from any more complex
| data processing logic.
|
| Method resolution order:
| Probe
| abc.ABC
| builtins.object
|
| Methods defined here:
|
| __init__(self)
| Constructor
|
| measure(self)
| Measure one or more values. Override this method to implement measuring algorithm
|
| measured(self)
| Returns the last measured & processed value
|
| process(self, output)
| Process any measured data before reporting it. By default, this passed through the measured data
|
| report(self, output)
| Report the measured data to the reporting system. Base method records the measured value. It can be
| retrieved through Probe.measured().
|
| run(self)
| Measure, process & report a data point.
|
| This method typically should not need to be overriden.
|
| ----------------------------------------------------------------------
| Data descriptors defined here:
|
| __dict__
| dictionary for instance variables (if defined)
|
| __weakref__
| list of weak references to the object (if defined)
|
| ----------------------------------------------------------------------
| Data and other attributes defined here:
|
| __abstractmethods__ = frozenset({'measure'})
class FileProbe(Probe)
| FileProbe(filename)
|
| FileProbe measures (reads) the value of a specified file.
|
| Any processing logic can be implemented in an overriden process() method. The default implementation
| returns the full content of the file.
|
| Method resolution order:
| FileProbe
| Probe
| abc.ABC
| builtins.object
|
| Methods defined here:
|
| __init__(self, filename)
| Constructor. Filename specifies the file to be measured
|
| Throws a FileNotFoundError exception if the file does not exist at the time of object creation.
|
| measure(self)
| Measure one or more values. Override this method to implement measuring algorithm
|
| ----------------------------------------------------------------------
| Data and other attributes defined here:
|
| __abstractmethods__ = frozenset()
|
| ----------------------------------------------------------------------
| Methods inherited from Probe:
|
| measured(self)
| Returns the last measured & processed value
|
| process(self, output)
| Process any measured data before reporting it. By default, this passed through the measured data
|
| report(self, output)
| Report the measured data to the reporting system. Base method records the measured value. It can be
| retrieved through Probe.measured().
|
| run(self)
| Measure, process & report a data point.
|
| This method typically should not need to be overriden.
|
| ----------------------------------------------------------------------
| Data descriptors inherited from Probe:
|
| __dict__
| dictionary for instance variables (if defined)
|
| __weakref__
| list of weak references to the object (if defined)
class SysFSProbe(FileProbe)
| SysFSProbe(filename, divider=1)
|
| SysFSProbe extends FileProbe for use in measuring single-line files in /sys filesystems.
|
| Since /sys values may be larger than needed for reporting (e.g. clock frequencies measured in Hz,
| rather than more user-friendly MHz, the constructor takes a divider argument to divide the measured
| value before reporting it.
|
| Method resolution order:
| SysFSProbe
| FileProbe
| Probe
| abc.ABC
| builtins.object
|
| Methods defined here:
|
| __init__(self, filename, divider=1)
| Class constructor.
|
| filename specifies the file to be measured.
| divider specifies the value the measured value will be divided by.
|
| e.g. if the measured value is in Hz, but we want to report in MHz, specify 1000000. The default is 1.
|
| measure(self)
| Measure the value in the file, taking into account the specified divider.
|
| ----------------------------------------------------------------------
| Data and other attributes defined here:
|
| __abstractmethods__ = frozenset()
|
| ----------------------------------------------------------------------
| Methods inherited from Probe:
|
| measured(self)
| Returns the last measured & processed value
|
| process(self, output)
| Process any measured data before reporting it. By default, this passed through the measured data
|
| report(self, output)
| Report the measured data to the reporting system. Base method records the measured value. It can be
| retrieved through Probe.measured().
|
| run(self)
| Measure, process & report a data point.
|
| This method typically should not need to be overriden.
|
| ----------------------------------------------------------------------
| Data descriptors inherited from Probe:
|
| __dict__
| dictionary for instance variables (if defined)
|
| __weakref__
| list of weak references to the object (if defined)
class ProcessProbe(Probe)
| ProcessProbe(cmd)
|
| ProcessProbe measures values reported by an externally spawned process.
|
| Typical example would be to report latency & packet loss measured by a ping command.
| See https://github.com/clambin/pinger for an example
|
| Method resolution order:
| ProcessProbe
| Probe
| abc.ABC
| builtins.object
|
| Methods defined here:
|
| __init__(self, cmd)
| Class constructor. cmd specifies the command to run
|
| measure(self)
| Read the output of the spawned command. Processing logic should be in ProcessProbe.process().
|
| running(self)
| Check if the spawned process is still running. Useful to see if the Probe should be recreated.
|
| ----------------------------------------------------------------------
| Data and other attributes defined here:
|
| __abstractmethods__ = frozenset()
|
| ----------------------------------------------------------------------
| Methods inherited from Probe:
|
| measured(self)
| Returns the last measured & processed value
|
| process(self, output)
| Process any measured data before reporting it. By default, this passed through the measured data
|
| report(self, output)
| Report the measured data to the reporting system. Base method records the measured value. It can be
| retrieved through Probe.measured().
|
| run(self)
| Measure, process & report a data point.
|
| This method typically should not need to be overriden.
|
| ----------------------------------------------------------------------
| Data descriptors inherited from Probe:
|
| __dict__
| dictionary for instance variables (if defined)
|
| __weakref__
| list of weak references to the object (if defined)
class APIProbe(Probe, abc.ABC)
| APIProbe(url)
|
| APIProbe measures values reported by an API. See https://github.com/clambin/pimon for an example.
|
| Currently only HTTP GET & POST are supported.
|
| Since API calls require specific setup, measure should be overriden to specify application-specific logic.
|
| Method resolution order:
| APIProbe
| Probe
| abc.ABC
| builtins.object
|
| Methods defined here:
|
| __init__(self, url)
| Constructor
|
| get(self, endpoint=None, headers=None, body=None, params=None)
| Call the API via HTTP GET
|
| post(self, endpoint=None, headers=None, body=None)
| Call the API via HTTP POST
|
| ----------------------------------------------------------------------
| Data and other attributes defined here:
|
| __abstractmethods__ = frozenset({'measure'})
|
| ----------------------------------------------------------------------
| Methods inherited from Probe:
|
| measure(self)
| Measure one or more values. Override this method to implement measuring algorithm
|
| measured(self)
| Returns the last measured & processed value
|
| process(self, output)
| Process any measured data before reporting it. By default, this passed through the measured data
|
| report(self, output)
| Report the measured data to the reporting system. Base method records the measured value. It can be
| retrieved through Probe.measured().
|
| run(self)
| Measure, process & report a data point.
|
| This method typically should not need to be overriden.
|
| ----------------------------------------------------------------------
| Data descriptors inherited from Probe:
|
| __dict__
| dictionary for instance variables (if defined)
|
| __weakref__
| list of weak references to the object (if defined)
class Probes(builtins.object)
| Convenience class to make code a little simpler.
|
| Rather than calling Probe().run() for each probe, one can register each probe through Probes.register(probe)
| and then call Probes.run() to measure all registed probes.
|
| Methods defined here:
|
| __init__(self)
| Class constructor
|
| measured(self)
| Get the last value of each registered probe.
|
| Values are returned in the order the probes were registed in.
|
| register(self, probe)
| Register a probe
|
| run(self)
| Run all probes
|
| ----------------------------------------------------------------------
| Data descriptors defined here:
|
| __dict__
| dictionary for instance variables (if defined)
|
| __weakref__
| list of weak references to the object (if defined)
Examples
See the following github sources for examples:
- https://github.com/clambin/pimon - Docker container to report Raspberry Pi CPU speed, temperature & fan status to prometheus.
- https://github.com/clambin/pinger - Measures the latency and packet loss to one of more hosts and reports the data to Prometheus.
Author
- Christophe Lambin
License
This project is licensed under the MIT License - see the LICENSE.md file for details
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
pimetrics-0.2.0.tar.gz
(5.9 kB
view details)
File details
Details for the file pimetrics-0.2.0.tar.gz.
File metadata
- Download URL: pimetrics-0.2.0.tar.gz
- Upload date:
- Size: 5.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.3.1 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.7.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7787ad3b302205dd21bdf41684f69ed3364eb758e4e88601d4bbc9bc4316cddf
|
|
| MD5 |
cf119ebbddb13b8a3b8960d350bc0db7
|
|
| BLAKE2b-256 |
452d642ffd0791494c9bf18a0a60ba816f1976b4bbe5ae5a7a9b917f9b45a0e6
|