mentat.stats.rrd module
This module contains object encapsulation of RRDTOOL for easier usage in Mentat project.
Overview
In Mentat RRD databases are used to store quick periodical performance statistics. Each database file is configured to store only single dataset and when generating charts multiple RRD files must be combined when necessary to create more complex charts. This approach has the benefit of very easy way of deleting datasets, that are not required anymore, or obsolete and not appearing in life data anymore.
Every RRD database file is configured in following way:
internal dataset name:
eventcnt
default step: 300 seconds (5 minutes)
raw storage size: 3 months
aggregated storage size: 1 year (min, max, avg)
The whole RRD handling functionality is implemented in RrdStats
, which
receives certain parameters (like locations of database and chart files) upon
instantination and those can be then omitted from calls to all other methods. See
the documentation below for more details.
There is a definition of color palette in COLOR_PALETTE
constant value, which
contains all possible colors usable in RRD charts.
The implementation is based on Python library rrdtool
(PyPI,
documentation).
RRD database identifier naming convention
Names of RRD database files are constructed as follows:
type.snake_case_name.rrd
When being processed, each RRD database file name is split at .
character,
which yields three tokens:
type: type, category, or group of the dataset
snake_case_name: escaped name of the dataset, anything
[^-_a-zA-Z0-9]
is replaced with_
file suffix
The idea behind the naming scheme is, that statistics are being calculated
separatelly for multiple message groups, for example according to the name of the
detector, categories, etc. The type
token should uniquelly indentify each of
these groups. The snake_case_name
then contains underscore-escaped name of
the detector/category/etc.
The type.snake_case_name
pair is called db_id
in further documentation
and it is unique identifier of the dataset.
Example usage
>>> rrd_stats = mentat.stats.rrd.RrdStats('/var/tmp', '/var/tmp')
>>> stats.find_dbs()
defaultdict(<class 'list'>, {})
>>> rrd_stats.prepare_db('typea.test_a')
('/var/tmp/utest_rrdstats/typea.testa.rrd', True)
>>> rrd_stats.prepare_db('typea.test_b')
('/var/tmp/utest_rrdstats/typea.testb.rrd', True)
>>> rrd_stats.prepare_db('typeb.test_a')
('/var/tmp/utest_rrdstats/typeb.testa.rrd', True)
>>> rrd_stats.prepare_db('typeb.test_b')
('/var/tmp/utest_rrdstats/typeb.testb.rrd', True)
>>> stats.find_dbs()
defaultdict(<class 'list'>, {'typeb': [('typeb.test_a', 'typeb', 'test_a', '/var/tmp/typeb.test_a.rrd', False), ('typeb.test_b', 'typeb', 'test_b', '/var/tmp/typeb.test_b.rrd', False)], 'typea': [('typea.test_a', 'typea', 'test_a', '/var/tmp/typea.test_a.rrd', False), ('typea.test_b', 'typea', 'test_b', '/var/tmp/typea.test_b.rrd', False)]})
- class mentat.stats.rrd.RrdStats(rrds_dir, reports_dir, step=300)[source]
Bases:
object
Class implementing RRD database file management and chart generation.
- static clean(name)[source]
Cleanup given name so it can be used as RRD database file name.
- Parameters:
name (str) – Name to be cleaned.
- Returns:
Name with all forbidden characters escaped with
_
.- Return type:
str
- export(ds_id)[source]
Export whole RRD database into JSON structure.
- Parameters:
ds_id (str) – Identifier of the dataset.
- Returns:
Absolute filesystem path to the prepared RRD database file as string, boolean flag marking creation of new fileand axported dataset as JSON structure.
- Return type:
tuple
- find_dbs(flt_type=None)[source]
Find all currently available RRD database files.
- Parameters:
flt_type (str) – Dataset type filter to dump part of the full result.
- Returns:
Structured dictionary containing list of RRD database metadata structures for each type.
- Return type:
collections.defaultdict
- generate(tst, flt_type=None)[source]
Generate all available RRD charts, spark charts and JSON export files.
- Parameters:
tst (int) – Upper time boundary as unix timestamp.
flt_type (str) – Dataset type filter to dump part of the full result.
- Returns:
List of generated files.
- Return type:
list of str
- lookup(flt_type=None)[source]
Lookup all available RRD charts, spark charts and JSON export files.
- Parameters:
flt_type (str) – Dataset type filter to dump part of the full result.
- Returns:
List of available charts.
- Return type:
list of dict
- prepare_db(ds_id, time_start=None)[source]
Ensure existence of appropriate RRD database file for storing single data set.
- Parameters:
ds_id (str) – Identifier of the dataset.
time_start (int) – Name to be cleaned.
- Returns:
Absolute filesystem path to the prepared RRD database file as string and boolean flag marking creation of new file.
- Return type:
tuple
- update(ds_id, value, tst=None)[source]
Update given RRD database.
- Parameters:
ds_id (str) – Identifier of the dataset.
value (int) – Value to be set.
tst (int) – Update timestamp.
- Returns:
Absolute filesystem path to the prepared RRD database file as string and boolean flag marking creation of new file.
- Return type:
tuple
- update_all(value, tst=None, flt_type=None)[source]
Updade all RRD database files with given value.
- Parameters:
value (int) – Value to be set.
tst (int) – Update timestamp.
flt_type (str) – Dataset type filter to dump part of the full result.
- Returns:
List of updated RRD database files.
- Return type:
list of tuples
- exception mentat.stats.rrd.RrdStatsException(description)[source]
Bases:
Exception
Base class for all RrdStats specific exceptions.
The
rrdtool
module does not provide enough granularity with its exceptions and it is necessary to parse the exception string to determine the exact problem. This module provides custom set of exceptions to diferentiate between different problems.
- exception mentat.stats.rrd.RrdsCreateException(description)[source]
Bases:
RrdStatsException
Exceptions occuring during creating of RRD database files.
- exception mentat.stats.rrd.RrdsExportException(description)[source]
Bases:
RrdStatsException
Exceptions occuring during exporting of RRD database files.
- exception mentat.stats.rrd.RrdsGraphException(description)[source]
Bases:
RrdStatsException
Exceptions occuring during generating of RRD charts.
- exception mentat.stats.rrd.RrdsUpdateException(description)[source]
Bases:
RrdStatsException
Exceptions occuring during updating of RRD database files.