From 5125dbcd5cc35927f4e56cfc580c3fc1fc6bb0bd Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 24 Nov 2015 02:24:06 +0000 Subject: [PATCH] Add system interrupts plugin This will graph all system interrupts Signed-off-by: Michael Tremer --- Makefile.am | 1 + src/collecty/plugins/__init__.py | 1 + src/collecty/plugins/interrupts.py | 87 ++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 src/collecty/plugins/interrupts.py diff --git a/Makefile.am b/Makefile.am index 1c4808e..7e406b6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -93,6 +93,7 @@ collectyplugins_PYTHON = \ src/collecty/plugins/entropy.py \ src/collecty/plugins/__init__.py \ src/collecty/plugins/interface.py \ + src/collecty/plugins/interrupts.py \ src/collecty/plugins/latency.py \ src/collecty/plugins/loadavg.py \ src/collecty/plugins/memory.py \ diff --git a/src/collecty/plugins/__init__.py b/src/collecty/plugins/__init__.py index a82e236..19d889a 100644 --- a/src/collecty/plugins/__init__.py +++ b/src/collecty/plugins/__init__.py @@ -28,6 +28,7 @@ from . import cpufreq from . import disk from . import entropy from . import interface +from . import interrupts from . import latency from . import loadavg from . import processor diff --git a/src/collecty/plugins/interrupts.py b/src/collecty/plugins/interrupts.py new file mode 100644 index 0000000..20ff038 --- /dev/null +++ b/src/collecty/plugins/interrupts.py @@ -0,0 +1,87 @@ +#!/usr/bin/python3 +############################################################################### +# # +# collecty - A system statistics collection daemon for IPFire # +# Copyright (C) 2015 IPFire development team # +# # +# This program is free software: you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation, either version 3 of the License, or # +# (at your option) any later version. # +# # +# This program is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program. If not, see . # +# # +############################################################################### + +import re + +from . import base + +from ..i18n import _ + +class GraphTemplateSystemInterrupts(base.GraphTemplate): + name = "system-interrupts" + + @property + def rrd_graph(self): + _ = self.locale.translate + + return [ + "DEF:intr=%(file)s:intr:AVERAGE", + + "AREA:intr#90EE90:%-15s" % _("System Interrupts"), + "VDEF:intrmax=intr,MAXIMUM", + "VDEF:intrmin=intr,MINIMUM", + "VDEF:intravg=intr,AVERAGE", + "GPRINT:intrmax:%12s\:" % _("Maximum") + " %6.2lf" , + "GPRINT:intrmin:%12s\:" % _("Minimum") + " %6.2lf" , + "GPRINT:intravg:%12s\:" % _("Average") + " %6.2lf\\n", + ] + + lower_limit = 0 + + @property + def graph_title(self): + _ = self.locale.translate + return _("System Interrupts") + + @property + def graph_vertical_label(self): + _ = self.locale.translate + return _("System Interrupts/s") + + +class SystemInterruptsObject(base.Object): + rrd_schema = [ + "DS:intr:DERIVE:0:U", + ] + + @property + def id(self): + return "default" + + def collect(self): + expr = re.compile(r"^intr (\d+)") + + with open("/proc/stat") as f: + for line in f.readlines(): + m = re.match(expr, line) + if m: + return m.group(1) + + +class SystemInterruptsPlugin(base.Plugin): + name = "system-interrupts" + description = "System Interrupts Plugin" + + templates = [GraphTemplateSystemInterrupts] + + @property + def objects(self): + yield SystemInterruptsObject(self) -- 2.39.2