]> git.ipfire.org Git - collecty.git/commitdiff
plugins: Split all plugins into separate files.
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 4 Aug 2012 10:21:52 +0000 (10:21 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 4 Aug 2012 10:21:52 +0000 (10:21 +0000)
collecty/plugins/__init__.py
collecty/plugins/base.py [new file with mode: 0644]
collecty/plugins/cpu.py [new file with mode: 0644]
collecty/plugins/loadavg.py [new file with mode: 0644]
collecty/plugins/memory.py [new file with mode: 0644]

index fd837114c20cc3639d889ce803190e4a37658b6e..a8af8157272bd79739f61ea0de3d935d888c4678 100644 (file)
 #                                                                             #
 ###############################################################################
 
-import os
-
-import rrdtool
-import time
-
-from threading import Thread
-
-from ..i18n import _
-
-registered_plugins = []
-
-def find(name):
-       for plugin in registered_plugins:
-               if plugin._type == name:
-                       return plugin
-
-def register(plugin):
-       registered_plugins.append(plugin)
-
-class Plugin(Thread):
-       def __init__(self, collecty, **kwargs):
-               Thread.__init__(self)
-               self.collecty = collecty
-
-               self.interval = int(kwargs.get("interval", 60))
-
-               # Keepalive options
-               self.heartbeat = 2
-               self.killed = False
-
-               self.wakeup = self.interval / self.heartbeat
-
-               self.file = kwargs.get("file", None)
-               if not self.file.startswith("/"):
-                       self.file = os.path.join("/var/rrd", self.file) 
-
-               self.data = []
-
-               self.create()
-       
-       def __repr__(self):
-               return "<Plugin %s>" % self._type
-       
-       def __str__(self):
-               return "Plugin %s %s" % (self._type, self.file)
-       
-       def run(self):
-               self.collecty.debug("%s started..." % self)
-               
-               c = 0
-               while True:
-                       if self.killed:
-                               self.update()
-                               self.collecty.debug("%s stoppped..." % self)
-                               return
-
-                       if c == 0:
-                               self.data.append(self.collect())
-                               self.collecty.debug("%s collectd: %s..." % (self, self.data[-1]))
-
-                               self.update()
-
-                               c = self.wakeup
-
-                       c = c - 1
-                       time.sleep(self.heartbeat)
-
-       def shutdown(self):
-               self.killed = True
-       
-       def time(self):
-               return int(time.time()) # Should return time as int in UTC
-
-       def create(self):
-               if not os.path.exists(self.file):
-                       rrdtool.create(self.file, *self._rrd)
-               
-       def update(self):
-               if self.data:
-                       self.collecty.debug("%s saving data..." % self)
-                       rrdtool.update(self.file, *self.data)
-                       self.data = []
-
-       def collect(self):
-               raise Exception, "Not implemented"
-
-       def graph(self, file, interval=None):
-               args = [ "--imgformat", "PNG",
-                                "-w", "580", # Width of the graph
-                                "-h", "240", # Height of the graph
-                               "--interlaced", "--slope-mode", ]
-
-               intervals = { None   : "-3h",
-                                         "hour" : "-1h",
-                                         "day"  : "-25h",
-                                         "week" : "-360h" }
-
-               args.append("--start")
-               if intervals.has_key(interval):
-                       args.append(intervals[interval])
-               else:
-                       args.append(interval)
-
-               info = { "file" : self.file }
-               for item in self._graph:
-                       try:
-                               args.append(item % info)
-                       except TypeError:
-                               args.append(item)
-
-               rrdtool.graph(file, *args)
-
-       def info(self):
-               return rrdtool.info(self.file)
-
-
-class PluginCpu(Plugin):
-       _name = "CPU Usage Plugin"
-       _type = "cpu"
-
-       _rrd = [ "DS:user:GAUGE:120:0:100",
-                        "DS:nice:GAUGE:120:0:100",
-                        "DS:sys:GAUGE:120:0:100",
-                        "DS:idle:GAUGE:120:0:100",
-                        "DS:wait:GAUGE:120:0:100",
-                        "DS:interrupt:GAUGE:120:0:100",
-                        "RRA:AVERAGE:0.5:1:2160",
-                        "RRA:AVERAGE:0.5:5:2016",
-                        "RRA:AVERAGE:0.5:15:2880",
-                        "RRA:AVERAGE:0.5:60:8760" ]
-
-       _graph = [ "DEF:user=%(file)s:user:AVERAGE",
-                          "DEF:nice=%(file)s:nice:AVERAGE",
-                          "DEF:sys=%(file)s:sys:AVERAGE",
-                          "DEF:idle=%(file)s:idle:AVERAGE",
-                          "DEF:wait=%(file)s:wait:AVERAGE",
-                          "DEF:interrupt=%(file)s:interrupt:AVERAGE",
-                          "AREA:user#ff0000:%-15s" % _("User"),
-                            "VDEF:usermin=user,MINIMUM",
-                            "VDEF:usermax=user,MAXIMUM",
-                            "VDEF:useravg=user,AVERAGE",
-                            "GPRINT:usermax:%12s\:" % _("Maximum") + " %6.2lf" ,
-                            "GPRINT:usermin:%12s\:" % _("Minimum") + " %6.2lf",
-                            "GPRINT:useravg:%12s\:" % _("Average") + " %6.2lf\\n",
-                          "STACK:nice#ff3300:%-15s" % _("Nice"),
-                                "VDEF:nicemin=nice,MINIMUM",
-                            "VDEF:nicemax=nice,MAXIMUM",
-                            "VDEF:niceavg=nice,AVERAGE",
-                            "GPRINT:nicemax:%12s\:" % _("Maximum") + " %6.2lf" ,
-                            "GPRINT:nicemin:%12s\:" % _("Minimum") + " %6.2lf",
-                            "GPRINT:niceavg:%12s\:" % _("Average") + " %6.2lf\\n",
-                          "STACK:sys#ff6600:%-15s" % _("System"),
-                            "VDEF:sysmin=sys,MINIMUM",
-                            "VDEF:sysmax=sys,MAXIMUM",
-                            "VDEF:sysavg=sys,AVERAGE",
-                            "GPRINT:sysmax:%12s\:" % _("Maximum") + " %6.2lf" ,
-                            "GPRINT:sysmin:%12s\:" % _("Minimum") + " %6.2lf",
-                            "GPRINT:sysavg:%12s\:" % _("Average") + " %6.2lf\\n",
-                          "STACK:wait#ff9900:%-15s" % _("Wait"),
-                            "VDEF:waitmin=wait,MINIMUM",
-                            "VDEF:waitmax=wait,MAXIMUM",
-                            "VDEF:waitavg=wait,AVERAGE",
-                            "GPRINT:waitmax:%12s\:" % _("Maximum") + " %6.2lf" ,
-                            "GPRINT:waitmin:%12s\:" % _("Minimum") + " %6.2lf",
-                            "GPRINT:waitavg:%12s\:" % _("Average") + " %6.2lf\\n",
-                          "STACK:interrupt#ffcc00:%-15s" % _("Interrupt"),
-                            "VDEF:interruptmin=interrupt,MINIMUM",
-                            "VDEF:interruptmax=interrupt,MAXIMUM",
-                            "VDEF:interruptavg=interrupt,AVERAGE",
-                            "GPRINT:interruptmax:%12s\:" % _("Maximum") + " %6.2lf" ,
-                            "GPRINT:interruptmin:%12s\:" % _("Minimum") + " %6.2lf",
-                            "GPRINT:interruptavg:%12s\:" % _("Average") + " %6.2lf\\n",
-                          "STACK:idle#ffff00:%-15s" % _("Idle"),
-                            "VDEF:idlemin=idle,MINIMUM",
-                            "VDEF:idlemax=idle,MAXIMUM",
-                            "VDEF:idleavg=idle,AVERAGE",
-                            "GPRINT:idlemax:%12s\:" % _("Maximum") + " %6.2lf" ,
-                            "GPRINT:idlemin:%12s\:" % _("Minimum") + " %6.2lf",
-                            "GPRINT:idleavg:%12s\:" % _("Average") + " %6.2lf\\n", ]
-
-       def __init__(self, collecty, **kwargs):
-               Plugin.__init__(self, collecty, **kwargs)
-       
-       def collect(self):
-               ret = "%s" % self.time()
-               f = open("/proc/stat")
-               for line in f.readlines():
-                       if not line.startswith("cpu"):
-                               continue
-                       a = line.split()
-                       if len(a) < 6:
-                               continue
-
-                       user = float(a[1])
-                       nice = float(a[2])
-                       sys = float(a[3])
-                       idle = float(a[4])
-                       wait = float(a[5])
-                       interrupt = float(a[6])
-                       sum = float(user + nice + sys + idle + wait + interrupt)
-
-                       ret += ":%s" % (user * 100 / sum)
-                       ret += ":%s" % (nice * 100 / sum)
-                       ret += ":%s" % (sys * 100 / sum)
-                       ret += ":%s" % (idle * 100 / sum)
-                       ret += ":%s" % (wait * 100 / sum)
-                       ret += ":%s" % (interrupt * 100 / sum)
-                       break
-
-               f.close()
-               return ret
-
-register(PluginCpu)
-
-
-class PluginLoad(Plugin):
-       _name = "Loadaverage Plugin"
-       _type = "load"
-
-       _rrd = ["DS:load1:GAUGE:120:0:U",
-                       "DS:load5:GAUGE:120:0:U",
-                       "DS:load15:GAUGE:120:0:U",
-                       "RRA:AVERAGE:0.5:1:2160",
-                       "RRA:AVERAGE:0.5:5:2016",
-                       "RRA:AVERAGE:0.5:15:2880",
-                       "RRA:AVERAGE:0.5:60:8760" ]
-
-       _graph = [ "DEF:load1=%(file)s:load1:AVERAGE",
-                          "DEF:load5=%(file)s:load5:AVERAGE",
-                          "DEF:load15=%(file)s:load15:AVERAGE",
-                          "AREA:load1#ff0000:%s" % _("Load average  1m"),
-                            "VDEF:load1min=load1,MINIMUM",
-                            "VDEF:load1max=load1,MAXIMUM",
-                            "VDEF:load1avg=load1,AVERAGE",
-                            "GPRINT:load1max:%12s\:" % _("Maximum") + " %6.2lf" ,
-                            "GPRINT:load1min:%12s\:" % _("Minimum") + " %6.2lf",
-                            "GPRINT:load1avg:%12s\:" % _("Average") + " %6.2lf\\n",
-                          "AREA:load5#ff9900:%s" % _("Load average  5m"),
-                                "VDEF:load5min=load5,MINIMUM",
-                            "VDEF:load5max=load5,MAXIMUM",
-                            "VDEF:load5avg=load5,AVERAGE",
-                            "GPRINT:load5max:%12s\:" % _("Maximum") + " %6.2lf" ,
-                            "GPRINT:load5min:%12s\:" % _("Minimum") + " %6.2lf",
-                            "GPRINT:load5avg:%12s\:" % _("Average") + " %6.2lf\\n",
-                          "AREA:load15#ffff00:%s" % _("Load average 15m"),
-                                "VDEF:load15min=load15,MINIMUM",
-                            "VDEF:load15max=load15,MAXIMUM",
-                            "VDEF:load15avg=load15,AVERAGE",
-                            "GPRINT:load15max:%12s\:" % _("Maximum") + " %6.2lf" ,
-                            "GPRINT:load15min:%12s\:" % _("Minimum") + " %6.2lf",
-                            "GPRINT:load15avg:%12s\:" % _("Average") + " %6.2lf\\n",
-                          "LINE:load5#dd8800",
-                          "LINE:load1#dd0000", ]
-
-       def __init__(self, collecty, **kwargs):
-               Plugin.__init__(self, collecty, **kwargs)
-
-       def collect(self):
-               ret = "%s" % self.time()
-               for load in os.getloadavg():
-                       ret += ":%s" % load
-               return ret
-
-register(PluginLoad)
-
-
-class PluginMem(Plugin):
-       _name = "Memory Usage Plugin"
-       _type = "mem"
-
-       _rrd = ["DS:used:GAUGE:120:0:100",
-                       "DS:cached:GAUGE:120:0:100",
-                       "DS:buffered:GAUGE:120:0:100",
-                       "DS:free:GAUGE:120:0:100",
-                       "DS:swap:GAUGE:120:0:100",
-                       "RRA:AVERAGE:0.5:1:2160",
-                       "RRA:AVERAGE:0.5:5:2016",
-                       "RRA:AVERAGE:0.5:15:2880",
-                       "RRA:AVERAGE:0.5:60:8760" ]
-
-       _graph = [ "DEF:used=%(file)s:used:AVERAGE",
-                          "DEF:cached=%(file)s:cached:AVERAGE",
-                          "DEF:buffered=%(file)s:buffered:AVERAGE",
-                          "DEF:free=%(file)s:free:AVERAGE",
-                          "DEF:swap=%(file)s:swap:AVERAGE",
-                          "AREA:used#0000ee:%-15s" % _("Used memory"),
-                            "VDEF:usedmin=used,MINIMUM",
-                            "VDEF:usedmax=used,MAXIMUM",
-                            "VDEF:usedavg=used,AVERAGE",
-                            "GPRINT:usedmax:%12s\:" % _("Maximum") + " %6.2lf" ,
-                            "GPRINT:usedmin:%12s\:" % _("Minimum") + " %6.2lf",
-                            "GPRINT:usedavg:%12s\:" % _("Average") + " %6.2lf\\n",
-                          "STACK:cached#0099ee:%-15s" % _("Cached data"),
-                            "VDEF:cachedmin=cached,MINIMUM",
-                            "VDEF:cachedmax=cached,MAXIMUM",
-                            "VDEF:cachedavg=cached,AVERAGE",
-                            "GPRINT:cachedmax:%12s\:" % _("Maximum") + " %6.2lf" ,
-                            "GPRINT:cachedmin:%12s\:" % _("Minimum") + " %6.2lf",
-                            "GPRINT:cachedavg:%12s\:" % _("Average") + " %6.2lf\\n",
-                          "STACK:buffered#4499ff:%-15s" % _("Buffered data"),
-                                "VDEF:bufferedmin=buffered,MINIMUM",
-                            "VDEF:bufferedmax=buffered,MAXIMUM",
-                            "VDEF:bufferedavg=buffered,AVERAGE",
-                            "GPRINT:bufferedmax:%12s\:" % _("Maximum") + " %6.2lf" ,
-                            "GPRINT:bufferedmin:%12s\:" % _("Minimum") + " %6.2lf",
-                            "GPRINT:bufferedavg:%12s\:" % _("Average") + " %6.2lf\\n",
-                          "STACK:free#7799ff:%-15s" % _("Free memory"),
-                            "VDEF:freemin=free,MINIMUM",
-                            "VDEF:freemax=free,MAXIMUM",
-                            "VDEF:freeavg=free,AVERAGE",
-                            "GPRINT:freemax:%12s\:" % _("Maximum") + " %6.2lf" ,
-                            "GPRINT:freemin:%12s\:" % _("Minimum") + " %6.2lf",
-                            "GPRINT:freeavg:%12s\:" % _("Average") + " %6.2lf\\n",
-                          "LINE3:swap#ff0000:%-15s" % _("Used Swap space"),
-                            "VDEF:swapmin=swap,MINIMUM",
-                            "VDEF:swapmax=swap,MAXIMUM",
-                            "VDEF:swapavg=swap,AVERAGE",
-                            "GPRINT:swapmax:%12s\:" % _("Maximum") + " %6.2lf" ,
-                            "GPRINT:swapmin:%12s\:" % _("Minimum") + " %6.2lf",
-                            "GPRINT:swapavg:%12s\:" % _("Average") + " %6.2lf\\n", ]
-
-       def __init__(self, collecty, **kwargs):
-               Plugin.__init__(self, collecty, **kwargs)
-
-       def collect(self):
-               ret = "%s" % self.time()
-               f = open("/proc/meminfo")
-               for line in f.readlines():
-                       if line.startswith("MemTotal:"):
-                               total = float(line.split()[1])
-                       if line.startswith("MemFree:"):
-                               free = float(line.split()[1])
-                       elif line.startswith("Buffers:"):
-                               buffered = float(line.split()[1])
-                       elif line.startswith("Cached:"):
-                               cached = float(line.split()[1])
-                       elif line.startswith("SwapTotal:"):
-                               swapt = float(line.split()[1])
-                       elif line.startswith("SwapFree:"):
-                               swapf = float(line.split()[1])
-
-               f.close()
-
-               ret += ":%s" % ((total - (free + buffered + cached)) * 100 / total)
-               ret += ":%s" % (cached * 100 / total)
-               ret += ":%s" % (buffered * 100 / total)
-               ret += ":%s" % (free * 100 / total)
-               ret += ":%s" % ((swapt - swapf) * 100 / swapt)
-
-               return ret
-
-register(PluginMem)
+import cpu
+import loadavg
+import memory
+
+registered_plugins = [
+       cpu.PluginCPU,
+       loadavg.PluginLoadAvg,
+       memory.PluginMemory,
+]
diff --git a/collecty/plugins/base.py b/collecty/plugins/base.py
new file mode 100644 (file)
index 0000000..df2a7e5
--- /dev/null
@@ -0,0 +1,121 @@
+#!/usr/bin/python
+###############################################################################
+#                                                                             #
+# collecty - A system statistics collection daemon for IPFire                 #
+# Copyright (C) 2012 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 <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+###############################################################################
+
+from threading import Thread
+
+from ..i18n import _
+
+class Plugin(Thread):
+       def __init__(self, collecty, **kwargs):
+               Thread.__init__(self)
+               self.collecty = collecty
+
+               self.interval = int(kwargs.get("interval", 60))
+
+               # Keepalive options
+               self.heartbeat = 2
+               self.killed = False
+
+               self.wakeup = self.interval / self.heartbeat
+
+               self.file = kwargs.get("file", None)
+               if not self.file.startswith("/"):
+                       self.file = os.path.join("/var/rrd", self.file) 
+
+               self.data = []
+
+               self.create()
+       
+       def __repr__(self):
+               return "<Plugin %s>" % self._type
+       
+       def __str__(self):
+               return "Plugin %s %s" % (self._type, self.file)
+       
+       def run(self):
+               self.collecty.debug("%s started..." % self)
+               
+               c = 0
+               while True:
+                       if self.killed:
+                               self.update()
+                               self.collecty.debug("%s stoppped..." % self)
+                               return
+
+                       if c == 0:
+                               self.data.append(self.collect())
+                               self.collecty.debug("%s collectd: %s..." % (self, self.data[-1]))
+
+                               self.update()
+
+                               c = self.wakeup
+
+                       c = c - 1
+                       time.sleep(self.heartbeat)
+
+       def shutdown(self):
+               self.killed = True
+
+       def time(self):
+               return int(time.time()) # Should return time as int in UTC
+
+       def create(self):
+               if not os.path.exists(self.file):
+                       rrdtool.create(self.file, *self._rrd)
+
+       def update(self):
+               if self.data:
+                       self.collecty.debug("%s saving data..." % self)
+                       rrdtool.update(self.file, *self.data)
+                       self.data = []
+
+       def collect(self):
+               raise Exception, "Not implemented"
+
+       def graph(self, file, interval=None):
+               args = [ "--imgformat", "PNG",
+                               "-w", "580", # Width of the graph
+                               "-h", "240", # Height of the graph
+                               "--interlaced", "--slope-mode", ]
+
+               intervals = { None   : "-3h",
+                                       "hour" : "-1h",
+                                       "day"  : "-25h",
+                                       "week" : "-360h" }
+
+               args.append("--start")
+               if intervals.has_key(interval):
+                       args.append(intervals[interval])
+               else:
+                       args.append(interval)
+
+               info = { "file" : self.file }
+               for item in self._graph:
+                       try:
+                               args.append(item % info)
+                       except TypeError:
+                               args.append(item)
+
+                       rrdtool.graph(file, *args)
+
+       def info(self):
+               return rrdtool.info(self.file)
+
diff --git a/collecty/plugins/cpu.py b/collecty/plugins/cpu.py
new file mode 100644 (file)
index 0000000..a19c39b
--- /dev/null
@@ -0,0 +1,120 @@
+#!/usr/bin/python
+###############################################################################
+#                                                                             #
+# collecty - A system statistics collection daemon for IPFire                 #
+# Copyright (C) 2012 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 <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+###############################################################################
+
+import base
+
+from ..i18n import _
+
+class PluginCPU(base.Plugin):
+       _name = "CPU Usage Plugin"
+       _type = "cpu"
+
+       _rrd = [ "DS:user:GAUGE:120:0:100",
+                        "DS:nice:GAUGE:120:0:100",
+                        "DS:sys:GAUGE:120:0:100",
+                        "DS:idle:GAUGE:120:0:100",
+                        "DS:wait:GAUGE:120:0:100",
+                        "DS:interrupt:GAUGE:120:0:100",
+                        "RRA:AVERAGE:0.5:1:2160",
+                        "RRA:AVERAGE:0.5:5:2016",
+                        "RRA:AVERAGE:0.5:15:2880",
+                        "RRA:AVERAGE:0.5:60:8760" ]
+
+       _graph = [ "DEF:user=%(file)s:user:AVERAGE",
+                          "DEF:nice=%(file)s:nice:AVERAGE",
+                          "DEF:sys=%(file)s:sys:AVERAGE",
+                          "DEF:idle=%(file)s:idle:AVERAGE",
+                          "DEF:wait=%(file)s:wait:AVERAGE",
+                          "DEF:interrupt=%(file)s:interrupt:AVERAGE",
+                          "AREA:user#ff0000:%-15s" % _("User"),
+                            "VDEF:usermin=user,MINIMUM",
+                            "VDEF:usermax=user,MAXIMUM",
+                            "VDEF:useravg=user,AVERAGE",
+                            "GPRINT:usermax:%12s\:" % _("Maximum") + " %6.2lf" ,
+                            "GPRINT:usermin:%12s\:" % _("Minimum") + " %6.2lf",
+                            "GPRINT:useravg:%12s\:" % _("Average") + " %6.2lf\\n",
+                          "STACK:nice#ff3300:%-15s" % _("Nice"),
+                                "VDEF:nicemin=nice,MINIMUM",
+                            "VDEF:nicemax=nice,MAXIMUM",
+                            "VDEF:niceavg=nice,AVERAGE",
+                            "GPRINT:nicemax:%12s\:" % _("Maximum") + " %6.2lf" ,
+                            "GPRINT:nicemin:%12s\:" % _("Minimum") + " %6.2lf",
+                            "GPRINT:niceavg:%12s\:" % _("Average") + " %6.2lf\\n",
+                          "STACK:sys#ff6600:%-15s" % _("System"),
+                            "VDEF:sysmin=sys,MINIMUM",
+                            "VDEF:sysmax=sys,MAXIMUM",
+                            "VDEF:sysavg=sys,AVERAGE",
+                            "GPRINT:sysmax:%12s\:" % _("Maximum") + " %6.2lf" ,
+                            "GPRINT:sysmin:%12s\:" % _("Minimum") + " %6.2lf",
+                            "GPRINT:sysavg:%12s\:" % _("Average") + " %6.2lf\\n",
+                          "STACK:wait#ff9900:%-15s" % _("Wait"),
+                            "VDEF:waitmin=wait,MINIMUM",
+                            "VDEF:waitmax=wait,MAXIMUM",
+                            "VDEF:waitavg=wait,AVERAGE",
+                            "GPRINT:waitmax:%12s\:" % _("Maximum") + " %6.2lf" ,
+                            "GPRINT:waitmin:%12s\:" % _("Minimum") + " %6.2lf",
+                            "GPRINT:waitavg:%12s\:" % _("Average") + " %6.2lf\\n",
+                          "STACK:interrupt#ffcc00:%-15s" % _("Interrupt"),
+                            "VDEF:interruptmin=interrupt,MINIMUM",
+                            "VDEF:interruptmax=interrupt,MAXIMUM",
+                            "VDEF:interruptavg=interrupt,AVERAGE",
+                            "GPRINT:interruptmax:%12s\:" % _("Maximum") + " %6.2lf" ,
+                            "GPRINT:interruptmin:%12s\:" % _("Minimum") + " %6.2lf",
+                            "GPRINT:interruptavg:%12s\:" % _("Average") + " %6.2lf\\n",
+                          "STACK:idle#ffff00:%-15s" % _("Idle"),
+                            "VDEF:idlemin=idle,MINIMUM",
+                            "VDEF:idlemax=idle,MAXIMUM",
+                            "VDEF:idleavg=idle,AVERAGE",
+                          "GPRINT:idlemax:%12s\:" % _("Maximum") + " %6.2lf" ,
+                          "GPRINT:idlemin:%12s\:" % _("Minimum") + " %6.2lf",
+                          "GPRINT:idleavg:%12s\:" % _("Average") + " %6.2lf\\n", ]
+
+       def __init__(self, collecty, **kwargs):
+               Plugin.__init__(self, collecty, **kwargs)
+
+       def collect(self):
+               ret = "%s" % self.time()
+               f = open("/proc/stat")
+               for line in f.readlines():
+                       if not line.startswith("cpu"):
+                               continue
+                       a = line.split()
+                       if len(a) < 6:
+                               continue
+
+                       user = float(a[1])
+                       nice = float(a[2])
+                       sys = float(a[3])
+                       idle = float(a[4])
+                       wait = float(a[5])
+                       interrupt = float(a[6])
+                       sum = float(user + nice + sys + idle + wait + interrupt)
+
+                       ret += ":%s" % (user * 100 / sum)
+                       ret += ":%s" % (nice * 100 / sum)
+                       ret += ":%s" % (sys * 100 / sum)
+                       ret += ":%s" % (idle * 100 / sum)
+                       ret += ":%s" % (wait * 100 / sum)
+                       ret += ":%s" % (interrupt * 100 / sum)
+                       break
+
+               f.close()
+               return ret
diff --git a/collecty/plugins/loadavg.py b/collecty/plugins/loadavg.py
new file mode 100644 (file)
index 0000000..cacebf7
--- /dev/null
@@ -0,0 +1,74 @@
+#!/usr/bin/python
+###############################################################################
+#                                                                             #
+# collecty - A system statistics collection daemon for IPFire                 #
+# Copyright (C) 2012 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 <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+###############################################################################
+
+import os
+
+import base
+
+from ..i18n import _
+
+class PluginLoadAvg(base.Plugin):
+       _name = "Loadaverage Plugin"
+       _type = "load"
+
+       _rrd = ["DS:load1:GAUGE:120:0:U",
+                       "DS:load5:GAUGE:120:0:U",
+                       "DS:load15:GAUGE:120:0:U",
+                       "RRA:AVERAGE:0.5:1:2160",
+                       "RRA:AVERAGE:0.5:5:2016",
+                       "RRA:AVERAGE:0.5:15:2880",
+                       "RRA:AVERAGE:0.5:60:8760" ]
+
+       _graph = [ "DEF:load1=%(file)s:load1:AVERAGE",
+                          "DEF:load5=%(file)s:load5:AVERAGE",
+                          "DEF:load15=%(file)s:load15:AVERAGE",
+                          "AREA:load1#ff0000:%s" % _("Load average  1m"),
+                            "VDEF:load1min=load1,MINIMUM",
+                            "VDEF:load1max=load1,MAXIMUM",
+                            "VDEF:load1avg=load1,AVERAGE",
+                            "GPRINT:load1max:%12s\:" % _("Maximum") + " %6.2lf" ,
+                            "GPRINT:load1min:%12s\:" % _("Minimum") + " %6.2lf",
+                            "GPRINT:load1avg:%12s\:" % _("Average") + " %6.2lf\\n",
+                          "AREA:load5#ff9900:%s" % _("Load average  5m"),
+                                "VDEF:load5min=load5,MINIMUM",
+                            "VDEF:load5max=load5,MAXIMUM",
+                            "VDEF:load5avg=load5,AVERAGE",
+                            "GPRINT:load5max:%12s\:" % _("Maximum") + " %6.2lf" ,
+                            "GPRINT:load5min:%12s\:" % _("Minimum") + " %6.2lf",
+                            "GPRINT:load5avg:%12s\:" % _("Average") + " %6.2lf\\n",
+                          "AREA:load15#ffff00:%s" % _("Load average 15m"),
+                                "VDEF:load15min=load15,MINIMUM",
+                            "VDEF:load15max=load15,MAXIMUM",
+                            "VDEF:load15avg=load15,AVERAGE",
+                            "GPRINT:load15max:%12s\:" % _("Maximum") + " %6.2lf" ,
+                            "GPRINT:load15min:%12s\:" % _("Minimum") + " %6.2lf",
+                            "GPRINT:load15avg:%12s\:" % _("Average") + " %6.2lf\\n",
+                          "LINE:load5#dd8800",
+                          "LINE:load1#dd0000", ]
+
+       def __init__(self, collecty, **kwargs):
+               Plugin.__init__(self, collecty, **kwargs)
+
+       def collect(self):
+               ret = "%s" % self.time()
+               for load in os.getloadavg():
+                       ret += ":%s" % load
+               return ret
diff --git a/collecty/plugins/memory.py b/collecty/plugins/memory.py
new file mode 100644 (file)
index 0000000..a152648
--- /dev/null
@@ -0,0 +1,109 @@
+#!/usr/bin/python
+###############################################################################
+#                                                                             #
+# collecty - A system statistics collection daemon for IPFire                 #
+# Copyright (C) 2012 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 <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+###############################################################################
+
+import base
+
+from ..i18n import _
+
+class PluginMemory(base.Plugin):
+       _name = "Memory Usage Plugin"
+       _type = "mem"
+
+       _rrd = ["DS:used:GAUGE:120:0:100",
+                       "DS:cached:GAUGE:120:0:100",
+                       "DS:buffered:GAUGE:120:0:100",
+                       "DS:free:GAUGE:120:0:100",
+                       "DS:swap:GAUGE:120:0:100",
+                       "RRA:AVERAGE:0.5:1:2160",
+                       "RRA:AVERAGE:0.5:5:2016",
+                       "RRA:AVERAGE:0.5:15:2880",
+                       "RRA:AVERAGE:0.5:60:8760" ]
+
+       _graph = [ "DEF:used=%(file)s:used:AVERAGE",
+                          "DEF:cached=%(file)s:cached:AVERAGE",
+                          "DEF:buffered=%(file)s:buffered:AVERAGE",
+                          "DEF:free=%(file)s:free:AVERAGE",
+                          "DEF:swap=%(file)s:swap:AVERAGE",
+                          "AREA:used#0000ee:%-15s" % _("Used memory"),
+                            "VDEF:usedmin=used,MINIMUM",
+                            "VDEF:usedmax=used,MAXIMUM",
+                            "VDEF:usedavg=used,AVERAGE",
+                            "GPRINT:usedmax:%12s\:" % _("Maximum") + " %6.2lf" ,
+                            "GPRINT:usedmin:%12s\:" % _("Minimum") + " %6.2lf",
+                            "GPRINT:usedavg:%12s\:" % _("Average") + " %6.2lf\\n",
+                          "STACK:cached#0099ee:%-15s" % _("Cached data"),
+                            "VDEF:cachedmin=cached,MINIMUM",
+                            "VDEF:cachedmax=cached,MAXIMUM",
+                            "VDEF:cachedavg=cached,AVERAGE",
+                            "GPRINT:cachedmax:%12s\:" % _("Maximum") + " %6.2lf" ,
+                            "GPRINT:cachedmin:%12s\:" % _("Minimum") + " %6.2lf",
+                            "GPRINT:cachedavg:%12s\:" % _("Average") + " %6.2lf\\n",
+                          "STACK:buffered#4499ff:%-15s" % _("Buffered data"),
+                                "VDEF:bufferedmin=buffered,MINIMUM",
+                            "VDEF:bufferedmax=buffered,MAXIMUM",
+                            "VDEF:bufferedavg=buffered,AVERAGE",
+                            "GPRINT:bufferedmax:%12s\:" % _("Maximum") + " %6.2lf" ,
+                            "GPRINT:bufferedmin:%12s\:" % _("Minimum") + " %6.2lf",
+                            "GPRINT:bufferedavg:%12s\:" % _("Average") + " %6.2lf\\n",
+                          "STACK:free#7799ff:%-15s" % _("Free memory"),
+                            "VDEF:freemin=free,MINIMUM",
+                            "VDEF:freemax=free,MAXIMUM",
+                            "VDEF:freeavg=free,AVERAGE",
+                            "GPRINT:freemax:%12s\:" % _("Maximum") + " %6.2lf" ,
+                            "GPRINT:freemin:%12s\:" % _("Minimum") + " %6.2lf",
+                            "GPRINT:freeavg:%12s\:" % _("Average") + " %6.2lf\\n",
+                          "LINE3:swap#ff0000:%-15s" % _("Used Swap space"),
+                            "VDEF:swapmin=swap,MINIMUM",
+                            "VDEF:swapmax=swap,MAXIMUM",
+                            "VDEF:swapavg=swap,AVERAGE",
+                            "GPRINT:swapmax:%12s\:" % _("Maximum") + " %6.2lf" ,
+                            "GPRINT:swapmin:%12s\:" % _("Minimum") + " %6.2lf",
+                            "GPRINT:swapavg:%12s\:" % _("Average") + " %6.2lf\\n", ]
+
+       def __init__(self, collecty, **kwargs):
+               Plugin.__init__(self, collecty, **kwargs)
+
+       def collect(self):
+               ret = "%s" % self.time()
+               f = open("/proc/meminfo")
+               for line in f.readlines():
+                       if line.startswith("MemTotal:"):
+                               total = float(line.split()[1])
+                       if line.startswith("MemFree:"):
+                               free = float(line.split()[1])
+                       elif line.startswith("Buffers:"):
+                               buffered = float(line.split()[1])
+                       elif line.startswith("Cached:"):
+                               cached = float(line.split()[1])
+                       elif line.startswith("SwapTotal:"):
+                               swapt = float(line.split()[1])
+                       elif line.startswith("SwapFree:"):
+                               swapf = float(line.split()[1])
+
+               f.close()
+
+               ret += ":%s" % ((total - (free + buffered + cached)) * 100 / total)
+               ret += ":%s" % (cached * 100 / total)
+               ret += ":%s" % (buffered * 100 / total)
+               ret += ":%s" % (free * 100 / total)
+               ret += ":%s" % ((swapt - swapf) * 100 / swapt)
+
+               return ret