]> git.ipfire.org Git - collecty.git/blame - src/collecty/plugins/memory.py
graphs: Remove deprecated STACK command
[collecty.git] / src / collecty / plugins / memory.py
CommitLineData
f37913e8 1#!/usr/bin/python3
eed405de
MT
2###############################################################################
3# #
4# collecty - A system statistics collection daemon for IPFire #
5# Copyright (C) 2012 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
f37913e8 22from . import base
eed405de 23
03ba5630 24from ..colours import *
9db53c51 25from ..constants import *
eed405de 26
b1ea4956 27class GraphTemplateMemory(base.GraphTemplate):
0de83e4d 28 name = "memory"
eed405de 29
f181246a
MT
30 lower_limit = 0
31
29a4de67
MT
32 @property
33 def rrd_graph(self):
34 _ = self.locale.translate
35
36 return [
9db53c51
MT
37 # Headline
38 "COMMENT:%s" % EMPTY_LABEL,
39 "COMMENT:%s" % (COLUMN % _("Current")),
40 "COMMENT:%s" % (COLUMN % _("Average")),
41 "COMMENT:%s" % (COLUMN % _("Minimum")),
42 "COMMENT:%s\\j" % (COLUMN % _("Maximum")),
43
1eecd71a
MT
44 # Convert everything into bytes
45 "CDEF:mem_total_bytes=mem_total,1024,*",
46 "CDEF:mem_cached_bytes=mem_cached,1024,*",
47 "CDEF:mem_buffered_bytes=mem_buffered,1024,*",
48 "CDEF:mem_free_bytes=mem_free,1024,*",
49 "CDEF:swap_total_bytes=swap_total,1024,*",
50 "CDEF:swap_free_bytes=swap_free,1024,*",
51
52 # Compute used memory & swap
53 "CDEF:mem_used_bytes=mem_total_bytes,mem_free_bytes,-,mem_cached_bytes,-,mem_buffered_bytes,-",
54 "CDEF:swap_used_bytes=swap_total_bytes,swap_free_bytes,-",
55
56 "AREA:mem_used_bytes%s:%s" % (
9db53c51
MT
57 transparency(MEMORY_USED, AREA_OPACITY),
58 LABEL % _("Used Memory"),
59 ),
1eecd71a
MT
60 "GPRINT:mem_used_bytes_cur:%s" % LARGE_FLOAT,
61 "GPRINT:mem_used_bytes_avg:%s" % LARGE_FLOAT,
62 "GPRINT:mem_used_bytes_min:%s" % LARGE_FLOAT,
63 "GPRINT:mem_used_bytes_max:%s\\j" % LARGE_FLOAT,
9db53c51 64
cc615cc0 65 "AREA:mem_buffered_bytes%s:%s:STACK" % (
9db53c51
MT
66 transparency(MEMORY_BUFFERED, AREA_OPACITY),
67 LABEL % _("Buffered Data"),
68 ),
1eecd71a
MT
69 "GPRINT:mem_buffered_bytes_cur:%s" % LARGE_FLOAT,
70 "GPRINT:mem_buffered_bytes_avg:%s" % LARGE_FLOAT,
71 "GPRINT:mem_buffered_bytes_min:%s" % LARGE_FLOAT,
72 "GPRINT:mem_buffered_bytes_max:%s\\j" % LARGE_FLOAT,
73
cc615cc0 74 "AREA:mem_cached_bytes%s:%s:STACK" % (
1eecd71a
MT
75 transparency(MEMORY_CACHED, AREA_OPACITY),
76 LABEL % _("Cached Data")),
77 "GPRINT:mem_cached_bytes_cur:%s" % LARGE_FLOAT,
78 "GPRINT:mem_cached_bytes_avg:%s" % LARGE_FLOAT,
79 "GPRINT:mem_cached_bytes_min:%s" % LARGE_FLOAT,
80 "GPRINT:mem_cached_bytes_max:%s\\j" % LARGE_FLOAT,
81
cc615cc0 82 "AREA:mem_free_bytes%s:%s:STACK" % (
1eecd71a
MT
83 transparency(MEMORY_FREE, AREA_OPACITY),
84 LABEL % _("Free Memory"),
85 ),
86 "GPRINT:mem_free_bytes_cur:%s" % LARGE_FLOAT,
87 "GPRINT:mem_free_bytes_avg:%s" % LARGE_FLOAT,
88 "GPRINT:mem_free_bytes_min:%s" % LARGE_FLOAT,
89 "GPRINT:mem_free_bytes_max:%s\\j" % LARGE_FLOAT,
90
91 EMPTY_LINE,
92
93 "LINE:swap_used_bytes%s:%-15s" % (MEMORY_SWAP, LABEL % _("Used Swap Space")),
94 "GPRINT:swap_used_bytes_cur:%s" % LARGE_FLOAT,
95 "GPRINT:swap_used_bytes_avg:%s" % LARGE_FLOAT,
96 "GPRINT:swap_used_bytes_min:%s" % LARGE_FLOAT,
97 "GPRINT:swap_used_bytes_max:%s\\j" % LARGE_FLOAT,
03ba5630
MT
98
99 # Draw the outlines of the areas
1eecd71a
MT
100 "LINE1:mem_used_bytes%s" % MEMORY_USED,
101 "LINE1:mem_buffered_bytes%s::STACK" % MEMORY_BUFFERED,
102 "LINE1:mem_cached_bytes%s::STACK" % MEMORY_CACHED,
29a4de67 103 ]
b1ea4956 104
f181246a
MT
105 @property
106 def graph_title(self):
29a4de67 107 _ = self.locale.translate
9db53c51 108
f181246a 109 return _("Memory Usage")
73db5226 110
f181246a
MT
111 @property
112 def graph_vertical_label(self):
29a4de67 113 _ = self.locale.translate
9db53c51 114
1eecd71a 115 return _("Bytes")
eed405de 116
b1ea4956 117
72364063 118class MemoryObject(base.Object):
b1ea4956 119 rrd_schema = [
1eecd71a
MT
120 "DS:mem_total:GAUGE:0:U",
121 "DS:mem_cached:GAUGE:0:U",
122 "DS:mem_buffered:GAUGE:0:U",
123 "DS:mem_free:GAUGE:0:U",
124 "DS:swap_total:GAUGE:0:U",
125 "DS:swap_free:GAUGE:0:U",
b1ea4956
MT
126 ]
127
72364063
MT
128 @property
129 def id(self):
130 return "default"
0de83e4d 131
72364063 132 def collect(self):
1eecd71a
MT
133 meminfo = self.read_proc_meminfo()
134
135 return (
136 meminfo.get("MemTotal"),
137 meminfo.get("Cached"),
138 meminfo.get("Buffers"),
139 meminfo.get("MemFree"),
140 meminfo.get("SwapTotal"),
141 meminfo.get("SwapFree"),
142 )
72364063
MT
143
144
145class MemoryPlugin(base.Plugin):
146 name = "memory"
147 description = "Memory Usage Plugin"
148
c968f6d9 149 templates = [GraphTemplateMemory]
72364063
MT
150
151 @property
152 def objects(self):
153 yield MemoryObject(self)