Merge pull request #428 from facetoe/disk_metric

Add flexibility in calculating criticality.
This commit is contained in:
facetoe 2016-08-08 16:27:34 +08:00 committed by GitHub
commit b6122ae2ee

View File

@ -1,15 +1,23 @@
import os
from i3pystatus import IntervalModule
from .core.util import round_dict
class Disk(IntervalModule):
"""
Gets ``{used}``, ``{free}``, ``{avail}`` and ``{total}`` amount of bytes on the given mounted filesystem.
Obtains usage statistics from the given mounted filesystem.
These values can also be expressed as percentages with the ``{percentage_used}``, ``{percentage_free}``
and ``{percentage_avail}`` formats.
.. rubric:: Available formatters
* `{used}` used space (unit determined by divisor)
* `{free}` free space (unit determined by divisor)
* `{avail}` avail space (unit determined by divisor)
* `{total}` total space (unit determined by divisor)
* `{percentage_used}` percentage used
* `{percentage_free}` percentage free
* `{percentage_avail}` percentage avail
"""
settings = (
@ -19,6 +27,9 @@ class Disk(IntervalModule):
("display_limit", "if more space is available than this limit the module is hidden"),
("critical_limit", "critical space limit (see critical_color)"),
("critical_color", "the critical color"),
("critical_metric",
"the metric used for calculating the critical limit. Available metrics are "
"used, free, avail, percentage_free, percentage_avail and percentage_used."),
("color", "the common color"),
("round_size", "precision, None for INT"),
("mounted_only", "display only if path is a valid mountpoint"),
@ -29,6 +40,7 @@ class Disk(IntervalModule):
color = "#FFFFFF"
color_not_mounted = "#FFFFFF"
critical_color = "#FF0000"
critical_metric = 'avail'
format = "{free}/{avail}"
format_not_mounted = None
divisor = 1024 ** 3
@ -64,8 +76,6 @@ class Disk(IntervalModule):
self.output = {}
return
critical = available < self.critical_limit
cdict = {
"total": (stat.f_bsize * stat.f_blocks) / self.divisor,
"free": (stat.f_bsize * stat.f_bfree) / self.divisor,
@ -75,6 +85,12 @@ class Disk(IntervalModule):
"percentage_avail": stat.f_bavail / stat.f_blocks * 100,
"percentage_used": (stat.f_blocks - stat.f_bfree) / stat.f_blocks * 100,
}
if self.critical_metric not in cdict:
raise Exception("{} is not a valid critical_metric. Available metrics: {}"
.format(self.critical_metric, list(cdict.keys())))
critical = cdict[self.critical_metric] < self.critical_limit
round_dict(cdict, self.round_size)
self.data = cdict