]>
Commit | Line | Data |
---|---|---|
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 | 22 | import os |
5125dbcd MT |
23 | import re |
24 | ||
25 | from . import base | |
26 | ||
03ba5630 | 27 | from ..colours import * |
5125dbcd | 28 | |
406ffc08 MT |
29 | class 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 | 64 | class 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 |
95 | class 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) |