]> git.ipfire.org Git - oddments/collecty.git/blame - src/collecty/plugins/interrupts.py
interrupts: Rename to interrupts from system-interrupts
[oddments/collecty.git] / src / collecty / plugins / interrupts.py
CommitLineData
5125dbcd
MT
1#!/usr/bin/python3
2###############################################################################
3# #
4# collecty - A system statistics collection daemon for IPFire #
5# Copyright (C) 2015 IPFire development team #
6# #
7# This program is free software: you can redistribute it and/or modify #
8# it under the terms of the GNU General Public License as published by #
9# the Free Software Foundation, either version 3 of the License, or #
10# (at your option) any later version. #
11# #
12# This program is distributed in the hope that it will be useful, #
13# but WITHOUT ANY WARRANTY; without even the implied warranty of #
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
15# GNU General Public License for more details. #
16# #
17# You should have received a copy of the GNU General Public License #
18# along with this program. If not, see <http://www.gnu.org/licenses/>. #
19# #
20###############################################################################
21
f41e95b4 22import os
5125dbcd
MT
23import re
24
25from . import base
26
03ba5630 27from ..colours import *
5125dbcd 28
406ffc08
MT
29class GraphTemplateInterrupts(base.GraphTemplate):
30 name = "interrupts"
5125dbcd
MT
31
32 @property
33 def rrd_graph(self):
34 _ = self.locale.translate
35
36 return [
03ba5630 37 "AREA:intr%s:%-15s" % (
406ffc08 38 lighten(PRIMARY, AREA_OPACITY), _("Interrupts"),
03ba5630 39 ),
cd8bba0b
MT
40 "GPRINT:intr_max:%12s\:" % _("Maximum") + " %6.2lf" ,
41 "GPRINT:intr_min:%12s\:" % _("Minimum") + " %6.2lf" ,
42 "GPRINT:intr_avg:%12s\:" % _("Average") + " %6.2lf\\n",
03ba5630 43 "LINE1:intr%s" % PRIMARY,
5125dbcd
MT
44 ]
45
46 lower_limit = 0
47
48 @property
49 def graph_title(self):
50 _ = self.locale.translate
7c9f74ac
MT
51
52 if self.object.irq is None:
406ffc08 53 return _("Interrupts")
7c9f74ac
MT
54
55 return _("Interrupt %s") % self.object.irq
5125dbcd
MT
56
57 @property
58 def graph_vertical_label(self):
59 _ = self.locale.translate
7c9f74ac
MT
60
61 return _("Interrupts/s")
5125dbcd
MT
62
63
406ffc08 64class InterruptObject(base.Object):
5125dbcd
MT
65 rrd_schema = [
66 "DS:intr:DERIVE:0:U",
67 ]
68
f41e95b4
MT
69 def init(self, irq=None):
70 self.irq = irq
71
5125dbcd
MT
72 @property
73 def id(self):
f41e95b4
MT
74 if self.irq is None:
75 return "default"
76
77 return "%s" % self.irq
5125dbcd
MT
78
79 def collect(self):
f41e95b4
MT
80 stat = self.read_proc_stat()
81
82 # Get a list of all interrupt events
83 interrupts = stat.get("intr").split()
84
85 # The first value is the sum of all interrupts
86 total = interrupts.pop(0)
5125dbcd 87
f41e95b4
MT
88 if self.irq is None:
89 return total
90
91 # Otherwise return the value for a specific IRQ
92 return interrupts[self.irq]
5125dbcd
MT
93
94
406ffc08
MT
95class InterruptsPlugin(base.Plugin):
96 name = "interrupts"
97 description = "Interrupts Plugin"
5125dbcd 98
406ffc08 99 templates = [GraphTemplateInterrupts]
5125dbcd
MT
100
101 @property
102 def objects(self):
406ffc08 103 yield InterruptObject(self)
f41e95b4
MT
104
105 for irq in os.listdir("/sys/kernel/irq"):
106 try:
107 irq = int(irq)
108 except (ValueError, TypeError):
109 continue
110
406ffc08 111 yield InterruptObject(self, irq)