From: Michael Tremer Date: Mon, 23 Nov 2015 00:56:23 +0000 (+0000) Subject: Add context switches plugin X-Git-Tag: 004~12 X-Git-Url: http://git.ipfire.org/?p=collecty.git;a=commitdiff_plain;h=27f02dbd8b357f4ced1f9040837f2dbdfef1a3b8 Add context switches plugin This monitors the number of context switches of the entire system. Signed-off-by: Michael Tremer --- diff --git a/Makefile.am b/Makefile.am index 2a2f233..1c4808e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -86,6 +86,7 @@ collectydir = $(pythondir)/collecty collectyplugins_PYTHON = \ src/collecty/plugins/base.py \ + src/collecty/plugins/contextswitches.py \ src/collecty/plugins/conntrack.py \ src/collecty/plugins/cpufreq.py \ src/collecty/plugins/disk.py \ diff --git a/src/collecty/plugins/__init__.py b/src/collecty/plugins/__init__.py index 648ac83..a82e236 100644 --- a/src/collecty/plugins/__init__.py +++ b/src/collecty/plugins/__init__.py @@ -22,6 +22,7 @@ from .base import Timer, get from . import base +from . import contextswitches from . import conntrack from . import cpufreq from . import disk diff --git a/src/collecty/plugins/contextswitches.py b/src/collecty/plugins/contextswitches.py new file mode 100644 index 0000000..f9194a0 --- /dev/null +++ b/src/collecty/plugins/contextswitches.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 GraphTemplateContextSwitches(base.GraphTemplate): + name = "context-switches" + + @property + def rrd_graph(self): + _ = self.locale.translate + + return [ + "DEF:ctxt=%(file)s:ctxt:AVERAGE", + + "AREA:ctxt#90EE90:%-15s" % _("Context Switches"), + "VDEF:ctxtmax=ctxt,MAXIMUM", + "VDEF:ctxtmin=ctxt,MINIMUM", + "VDEF:ctxtavg=ctxt,AVERAGE", + "GPRINT:ctxtmax:%12s\:" % _("Maximum") + " %6.2lf" , + "GPRINT:ctxtmin:%12s\:" % _("Minimum") + " %6.2lf" , + "GPRINT:ctxtavg:%12s\:" % _("Average") + " %6.2lf\\n", + ] + + lower_limit = 0 + + @property + def graph_title(self): + _ = self.locale.translate + return _("Context Switches") + + @property + def graph_vertical_label(self): + _ = self.locale.translate + return _("Context Switches/s") + + +class ContextSwitchesObject(base.Object): + rrd_schema = [ + "DS:ctxt:DERIVE:0:U", + ] + + @property + def id(self): + return "default" + + def collect(self): + expr = re.compile(r"^ctxt (\d+)$") + + with open("/proc/stat") as f: + for line in f.readlines(): + m = re.match(expr, line) + if m: + return m.group(1) + + +class ContextSwitchesPlugin(base.Plugin): + name = "context-switches" + description = "Context Switches Plugin" + + templates = [GraphTemplateContextSwitches] + + @property + def objects(self): + yield ContextSwitchesObject(self)