Last active
November 15, 2015 17:52
-
-
Save kawashirov/85cd2e144b4e5150f76c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python3 | |
# encoding=utf8 | |
from .abstract_stats_page import AbstractStatsPage | |
from ..utils import mu | |
class Iface_StatsPage(AbstractStatsPage): | |
def __init__(self, **kwargs): | |
kwargs.setdefault('type', 'Интерфейсы') | |
super(Iface_StatsPage, self).__init__(**kwargs) | |
def generate(self, vgdoc): | |
srcs = self.rrd_provider.get_srcs({r'^interface-([a-zA-Z0-9_-]+)/if_octets.rrd$': 1}) | |
self.log.info('Все источники: {!s}'.format(srcs)) | |
doc, tag, text = vgdoc.tagtext() | |
for src in srcs: | |
self.log.info('Обрабатываю источник: {:s}'.format(src)) | |
with vgdoc.page_title(): | |
text('Использование сети на интерфейсе ') | |
with tag('code'): text(src) | |
for modgen in (_model_octets, _model_packets): | |
try: | |
self.full_model(vgdoc, modgen(src, vgdoc)) | |
except Exception: | |
self.log.exception('Не могу нарисвать octets для {:s}.'.format(src)) | |
def _model_octets(src, vgdoc): | |
n_ds = lambda n: 'ds_{:s}'.format(n) | |
n_calc = lambda n: 'ca_{:s}'.format(n) | |
n_area = lambda n: 'ar_{:s}'.format(n) | |
n_trend = lambda n: 'tr_{:s}'.format(n) | |
n_rule = lambda n: 'hr_{:s}'.format(n) | |
return { | |
'title': 'Трафик на интерфейсе <code>{:s}</code>'.format(src), | |
'title_mode': 'asis', | |
'rrd_files': {'octets': 'interface-{:s}/if_octets.rrd'.format(src), }, | |
'graphs': [{ | |
'name': 'octets', | |
'rrd_defines': mu.join( | |
mu.ddef(n_ds('rx'), 'octets', rrd_name='rx'), | |
mu.ddef(n_ds('tx'), 'octets', rrd_name='tx'), | |
mu.cdefr(n_calc('rx'), '{:s},8,*'.format(n_ds('rx'))), | |
mu.cdefr(n_calc('tx'), '{:s},8,*'.format(n_ds('tx'))), | |
mu.cdefr(n_area('rx'), n_calc('rx')), | |
mu.cdefr(n_area('tx'), '0,{:s},-'.format(n_calc('tx'))), | |
mu.cdefb_trend(n_trend('rx'), n_area('rx')), | |
mu.cdefb_trend(n_trend('tx'), n_area('tx')), | |
mu.vdefb(n_rule('rx'), n_area('rx'), 'avg'), | |
mu.vdefb(n_rule('tx'), n_area('tx'), 'avg'), | |
mu.vdefs_naxl(n_calc('rx'), fmt='%4.1lf %s'), | |
mu.vdefs_naxl(n_calc('tx'), fmt='%4.1lf %s'), | |
), | |
'areas': [ | |
{'ref_name': n_area('rx'), 'color': (0, 191, 0, 127)}, | |
{'ref_name': n_area('tx'), 'color': (0, 0, 191, 127)}, | |
], | |
'hrules': [ | |
{'ref_name': n_rule('rx'), 'color': (0, 191, 0)}, | |
{'ref_name': n_rule('tx'), 'color': (0, 0, 191)}, | |
], | |
'lines': [ | |
{'ref_name': n_trend('rx'), 'color': (0, 127, 0)}, | |
{'ref_name': n_trend('tx'), 'color': (0, 0, 127)}, | |
], | |
}], | |
'legends': [{ | |
'cols': mu.cols_naxl(), | |
'rows': [{ | |
'type': 'reference', | |
'legend_name': 'Принято', | |
'ref_graph': 'octets', | |
'ref_name': mu.row_ref_naxl(n_calc('rx')), | |
'box': {'color_bg': (0, 191, 0, 127), 'color_fg': (0, 127, 0)}, | |
'unit': 'бит/cек.', | |
}, { | |
'type': 'reference', | |
'legend_name': 'Отправлено', | |
'ref_graph': 'octets', | |
'ref_name': mu.row_ref_naxl(n_calc('tx')), | |
'box': {'color_bg': (0, 0, 191, 127), 'color_fg': (0, 0, 127)}, | |
'unit': 'бит/cек.', | |
}], | |
}], | |
'cols': mu.cols_naxl(), | |
} | |
def _model_packets(src, vgdoc): | |
n_calc = lambda n: 'ca_{:s}'.format(n) | |
n_area = lambda n: 'ar_{:s}'.format(n) | |
n_trend = lambda n: 'tr_{:s}'.format(n) | |
n_rule = lambda n: 'hr_{:s}'.format(n) | |
return { | |
'title': 'Пакетов на интерфейсе <code>{:s}</code>'.format(src), | |
'title_mode': 'asis', | |
'rrd_files': { | |
'packets': 'interface-{:s}/if_packets.rrd'.format(src), | |
'errors': 'interface-{:s}/if_errors.rrd'.format(src), | |
}, | |
'graphs': [{ | |
'name': 'packets', | |
'rrd_defines': mu.join( | |
mu.ddef(n_calc('prx'), 'packets', rrd_name='rx'), | |
mu.ddef(n_calc('ptx'), 'packets', rrd_name='tx'), | |
mu.ddef(n_calc('erx'), 'errors', rrd_name='rx'), | |
mu.ddef(n_calc('etx'), 'errors', rrd_name='tx'), | |
mu.cdefr(n_area('prx'), n_calc('prx')), | |
mu.cdefr(n_area('ptx'), '0,{:s},-'.format(n_calc('ptx'))), | |
mu.cdefr(n_area('erx'), n_calc('erx')), | |
mu.cdefr(n_area('etx'), '0,{:s},-'.format(n_calc('etx'))), | |
mu.cdefb_trend(n_trend('prx'), n_area('prx')), | |
mu.cdefb_trend(n_trend('ptx'), n_area('ptx')), | |
mu.vdefb(n_rule('prx'), n_area('prx'), 'avg'), | |
mu.vdefb(n_rule('ptx'), n_area('ptx'), 'avg'), | |
mu.vdefs_naxl(n_calc('prx'), fmt='%4.1lf%s'), | |
mu.vdefs_naxl(n_calc('ptx'), fmt='%4.1lf%s'), | |
mu.vdefs_naxl(n_calc('erx'), fmt='%4.1lf%s'), | |
mu.vdefs_naxl(n_calc('etx'), fmt='%4.1lf%s'), | |
), | |
'areas': [ | |
{'ref_name': n_area('prx'), 'color': (0, 191, 0, 127)}, | |
{'ref_name': n_area('ptx'), 'color': (0, 0, 191, 127)}, | |
], | |
'hrules': [ | |
{'ref_name': n_rule('prx'), 'color': (0, 191, 0), 'dashes': (5, 5)}, | |
{'ref_name': n_rule('ptx'), 'color': (0, 0, 191), 'dashes': (5, 5)}, | |
], | |
'lines': [ | |
{'ref_name': n_area('erx'), 'color': (191, 127, 0)}, | |
{'ref_name': n_area('etx'), 'color': (191, 0, 127)}, | |
{'ref_name': n_trend('prx'), 'color': (0, 127, 0)}, | |
{'ref_name': n_trend('ptx'), 'color': (0, 0, 127)}, | |
], | |
}], | |
'legends': [{ | |
'cols': mu.cols_naxl(), | |
'rows': [{ | |
'type': 'reference', | |
'legend_name': 'Принято пакетов', | |
'ref_graph': 'packets', | |
'ref_name': mu.row_ref_naxl(n_calc('prx')), | |
'box': {'color_bg': (0, 191, 0, 127), 'color_fg': (0, 127, 0)}, | |
'unit': '/cек.', | |
}, { | |
'type': 'reference', | |
'legend_name': 'Отправлено пакетов', | |
'ref_graph': 'packets', | |
'ref_name': mu.row_ref_naxl(n_calc('ptx')), | |
'box': {'color_bg': (0, 0, 191, 127), 'color_fg': (0, 0, 127)}, | |
'unit': '/cек.', | |
}, { | |
'type': 'reference', | |
'legend_name': 'Ошибок принятия', | |
'ref_graph': 'packets', | |
'ref_name': mu.row_ref_naxl(n_calc('erx')), | |
'box': {'color_fg': (191, 127, 0)}, | |
'unit': '/cек.', | |
}, { | |
'type': 'reference', | |
'legend_name': 'Ошибок отправки', | |
'ref_graph': 'packets', | |
'ref_name': mu.row_ref_naxl(n_calc('etx')), | |
'box': {'color_fg': (191, 0, 127)}, | |
'unit': '/cек.', | |
}], | |
}], | |
'cols': mu.cols_naxl(), | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
# encoding=utf8 | |
from .abstract_stats_page import AbstractStatsPage | |
from ..utils import cu, mu | |
class Weather_StatsPage(AbstractStatsPage): | |
def __init__(self, **kwargs): | |
kwargs.setdefault('type', 'Погода') | |
super(Weather_StatsPage, self).__init__(**kwargs) | |
self.__srcs_good = set(kwargs.get('srcs_good', set())) | |
def generate(self, vgdoc): | |
srcs_all = self.rrd_provider.get_srcs({r'^weather/temperature-([a-zA-Z0-9_-]+).rrd$': 1}) | |
srcs_good = srcs_all & self.__srcs_good | |
srcs_bad = srcs_all - self.__srcs_good | |
self.log.info('Все источники: {0!s}'.format(srcs_all)) | |
self.log.info('Хорошие источники: {0!s}'.format(srcs_good)) | |
self.log.info('Плохие источники: {0!s}'.format(srcs_bad)) | |
n_data_src = lambda s: 'd_{:s}'.format(s) | |
n_row_ref = lambda v, s: '{:s}_{:s}'.format(v, n_data_src(s)) | |
# Сборка и запуск модели | |
self.full_model(vgdoc, { | |
'title': 'Температура в Красноярске', | |
'rrd_files': {src: 'weather/temperature-{0!s}.rrd'.format(src) for src in srcs_all}, | |
'graphs': [{ | |
'name': 'temp', | |
'rrd_defines': mu.join( | |
[mu.ddef(n_data_src(src), src) for src in srcs_all], | |
mu.cdefb_cc('cc_vn__good', 'min', [n_data_src(src) for src in srcs_good]), | |
mu.cdefb_cc('cc_va__good', 'avg', [n_data_src(src) for src in srcs_good]), | |
mu.cdefb_cc('cc_vx__good', 'max', [n_data_src(src) for src in srcs_good]), | |
mu.cdefb_trend('trend__good', 'cc_va__good'), | |
[mu.vdefs_naxl(n_data_src(src), fmt='%3.1lf') for src in srcs_all], | |
mu.vdefb('vn__good', 'cc_vn__good', 'min', fmt='%3.1lf'), | |
mu.vdefb('va__good', 'cc_va__good', 'avg', fmt='%3.1lf'), | |
mu.vdefb('vx__good', 'cc_vx__good', 'max', fmt='%3.1lf'), | |
mu.vdefb('vl__good', 'cc_va__good', 'last', fmt='%3.1lf'), | |
), | |
'hrules': [ | |
{'ref_name': 'vn__good', 'color': (0, 0, 255), 'dashes': (5, 5)}, | |
{'ref_name': 'va__good', 'color': (0, 0, 0), 'dashes': (5, 5)}, | |
{'ref_name': 'vx__good', 'color': (255, 0, 0), 'dashes': (5, 5)}, | |
], | |
'lines': mu.join([{ | |
'ref_name': n_data_src(src), | |
'color': cu.color_rnd(src), | |
'width': 1, | |
'dashes': (10, 5), | |
} for src in srcs_bad], [{ | |
'ref_name': n_data_src(src), | |
'color': cu.color_rnd(src), | |
'width': 1, | |
} for src in srcs_good], { | |
'ref_name': 'trend__good', | |
'width': 2} | |
), | |
}], | |
'legends': [{ | |
'cols': mu.cols_naxl(), | |
'rows': mu.join({ | |
'type': 'header', | |
'title': 'Не точные источники <small>(не учитываются в общем среднем)</small>', | |
}, [{ | |
'type': 'reference', | |
'ref_graph': 'temp', | |
'ref_name': lambda x, s=src: n_row_ref(x, s), | |
'box': {'color_fg': cu.color_rnd(src), 'style': 'dashed'}, | |
'legend_name': src, | |
'unit': '°C', | |
} for src in srcs_bad], { | |
'type': 'header', | |
'title': 'Точные источники <small>(учитываются в общем среднем)</small>', | |
}, [{ | |
'type': 'reference', | |
'ref_graph': 'temp', | |
'ref_name': lambda x, s=src: n_row_ref(x, s), | |
'box': {'color_fg': cu.color_rnd(src)}, | |
'legend_name': src, | |
'unit': '°C', | |
} for src in srcs_good], { | |
'type': 'reference', | |
'ref_graph': 'temp', | |
'ref_name': lambda v: '{:s}__good'.format(v), | |
'box': {'color_fg': (0,), }, | |
'legend_strong': True, | |
'legend_name': 'В общем', | |
'unit': '°C', | |
}), | |
}] | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment