chore: added README

mem-usage
Jef Roosens 2022-12-26 18:32:29 +01:00
parent 52fbf8ce5d
commit 8fbad5d673
1 changed files with 60 additions and 0 deletions

60
README.md 100644
View File

@ -0,0 +1,60 @@
# V metrics
This library defines an interface for implementing a metrics collector & an
accompanying exporter interface for serializing the data in some way. A
thread-safe implementation of the collector interface is provided, which
utilizes a combination of atomic operations & `lock`/`rlock` to ensure the data
structure can be safely used concurrently. An implementation of a
Prometheus-compatible exporter is planned.
This library takes a lot of inspiration from the Rust
[metrics crate](https://docs.rs/metrics/latest/metrics/index.html).
Note that this library is still in development, and stuff might still change.
## Metric types
Just like the Rust crate, this library defines three types of metrics.
### Counter
A counter is a `u64` value that can only be monotonically incremented. One
example of such value is the amount of requests a web server has processed.
### Gauge
A gauge is an `f64` value describing a metric that can arbitrarily increase or
decrease over time. It can be freely added to, subtracted from or plainly set
to an absolute value. This could for example be used to track memory usage.
### Histogram
A histogram is an arbitrarily growing list of `f64` values. These values can
then be used to provide statistical analysis over time. The processing of these
values is left to the exporter to decide. The metrics collector solely stores
these values.
## Interfaces
As mentioned above, this library defines two interfaces. These can either be
used by using one of the provided implementations, or a user can freely
implement their own versions.
### `MetricsCollector`
A metrics collector is responsible for receiving and storing the types of
metrics. Two implementations are provided, namely `DefaultCollector` and
`NullCollector`. The former is the above-mentioned thread-safe implementation,
while the latter is an implementation that does absolutely nothing. The usecase
I have in mind for this seemingly useless version is when it's configurable
whether a piece of software should collect metrics or not. If the answer is no,
the developer could simply use a `NullCollector`, without having to change any
of the other code. All calls to the metrics collector will just get silently
ignored.
### `MetricsExporter`
A metrics exporter is responsible for converting the data stored in a metrics
collector into some format that can then be processed by some other means. The
classic example would be exporting to a Prometheus-compatible text format,
which could then be ingressed by Prometheus and processed further.