added dynamic color support for cpu_usage (#376)
* added dynamic color support for cpu_usage * some minor fixes to pass build tests * added new PyPI requirement to documentation * removed explicit setting self.color in CpuUsage as a response to @facetoe removed explicitly setting self.color and instead set the class wide variable color to #FFFFFF to not have the output been shown in black.
This commit is contained in:
parent
42d9955a9b
commit
c9c83bfce4
@ -1,7 +1,9 @@
|
|||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from string import Formatter
|
from string import Formatter
|
||||||
|
import re
|
||||||
|
|
||||||
from i3pystatus import IntervalModule
|
from i3pystatus import IntervalModule
|
||||||
|
from i3pystatus.core.color import ColorRangeModule
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from natsort import natsorted as sorted
|
from natsort import natsorted as sorted
|
||||||
@ -9,12 +11,13 @@ except ImportError:
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class CpuUsage(IntervalModule):
|
class CpuUsage(IntervalModule, ColorRangeModule):
|
||||||
"""
|
"""
|
||||||
Shows CPU usage.
|
Shows CPU usage.
|
||||||
The first output will be inacurate.
|
The first output will be inacurate.
|
||||||
|
|
||||||
Linux only
|
Linux only
|
||||||
|
Requires the PyPI package 'colour'.
|
||||||
|
|
||||||
.. rubric:: Available formatters
|
.. rubric:: Available formatters
|
||||||
|
|
||||||
@ -28,14 +31,19 @@ class CpuUsage(IntervalModule):
|
|||||||
format_all = "{core}:{usage:02}%"
|
format_all = "{core}:{usage:02}%"
|
||||||
exclude_average = False
|
exclude_average = False
|
||||||
interval = 1
|
interval = 1
|
||||||
color = None
|
color = '#FFFFFF'
|
||||||
|
dynamic_color = False
|
||||||
|
upper_limit = 100
|
||||||
settings = (
|
settings = (
|
||||||
("format", "format string."),
|
("format", "format string."),
|
||||||
("format_all", ("format string used for {usage_all} per core. "
|
("format_all", ("format string used for {usage_all} per core. "
|
||||||
"Available formaters are {core} and {usage}. ")),
|
"Available formaters are {core} and {usage}. ")),
|
||||||
("exclude_average", ("If True usage average of all cores will "
|
("exclude_average", ("If True usage average of all cores will "
|
||||||
"not be in format_all.")),
|
"not be in format_all.")),
|
||||||
("color", "HTML color code #RRGGBB")
|
("color", "HTML color code #RRGGBB"),
|
||||||
|
("dynamic_color", "Set color dynamically based on CPU usage. Note: this overrides color_up"),
|
||||||
|
("start_color", "Hex or English name for start of color range, eg '#00FF00' or 'green'"),
|
||||||
|
("end_color", "Hex or English name for end of color range, eg '#FF0000' or 'red'")
|
||||||
)
|
)
|
||||||
|
|
||||||
def init(self):
|
def init(self):
|
||||||
@ -43,6 +51,17 @@ class CpuUsage(IntervalModule):
|
|||||||
self.prev_busy = defaultdict(int)
|
self.prev_busy = defaultdict(int)
|
||||||
self.formatter = Formatter()
|
self.formatter = Formatter()
|
||||||
|
|
||||||
|
self.key = re.findall('usage_cpu\d+', self.format)
|
||||||
|
if len(self.key) == 1:
|
||||||
|
self.key = self.key[0]
|
||||||
|
else:
|
||||||
|
self.key = 'usage_cpu'
|
||||||
|
|
||||||
|
if not self.dynamic_color:
|
||||||
|
self.start_color = self.color
|
||||||
|
self.end_color = self.color
|
||||||
|
self.colors = self.get_hex_color_range(self.start_color, self.end_color, int(self.upper_limit))
|
||||||
|
|
||||||
def get_cpu_timings(self):
|
def get_cpu_timings(self):
|
||||||
"""
|
"""
|
||||||
reads and parses /proc/stat
|
reads and parses /proc/stat
|
||||||
@ -118,8 +137,10 @@ class CpuUsage(IntervalModule):
|
|||||||
usage = self.get_usage()
|
usage = self.get_usage()
|
||||||
usage['usage_all'] = self.gen_format_all(usage)
|
usage['usage_all'] = self.gen_format_all(usage)
|
||||||
|
|
||||||
|
color = self.get_gradient(usage[self.key], self.colors, int(self.upper_limit))
|
||||||
|
|
||||||
self.data = usage
|
self.data = usage
|
||||||
self.output = {
|
self.output = {
|
||||||
"full_text": self.format.format_map(usage),
|
"full_text": self.format.format_map(usage),
|
||||||
"color": self.color
|
"color": color
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user