Added sensor to --debug (#79)

* added inxi into snap.

* remove errors for inxi that occurs in snap env

* added sensors into debug output

- partially solves #74
- refactored

* Update core.py

fixed false renaming

* added warnings suppression

* added space after injection
This commit is contained in:
Vadym Stupakov 2020-08-06 22:14:12 +03:00 committed by GitHub
parent 4db945d726
commit e5dea5b883
1 changed files with 45 additions and 34 deletions

View File

@ -6,13 +6,16 @@ import os
import platform as pl import platform as pl
import re import re
import shutil import shutil
import subprocess as s
import sys import sys
import time import time
import warnings
from pathlib import Path from pathlib import Path
from subprocess import getoutput from pprint import pformat
from subprocess import getoutput, call, run
import psutil as p import psutil
warnings.filterwarnings("ignore")
# ToDo: # ToDo:
# - re-enable CPU fan speed display and make more generic and not only for thinkpad # - re-enable CPU fan speed display and make more generic and not only for thinkpad
@ -60,6 +63,12 @@ def get_sys_info():
Return sys info of inxi command with injected governors information Return sys info of inxi command with injected governors information
""" """
govs = " ".join(get_avail_gov()) govs = " ".join(get_avail_gov())
sensors = {"temperatures:": psutil.sensors_temperatures(),
"battery": psutil.sensors_battery(),
"fans": psutil.sensors_fans()}
sensors = pformat(sensors)
if shutil.which("inxi") is not None: if shutil.which("inxi") is not None:
sys_info = getoutput("inxi -Fzc0") sys_info = getoutput("inxi -Fzc0")
f = re.MULTILINE | re.DOTALL f = re.MULTILINE | re.DOTALL
@ -71,9 +80,15 @@ def get_sys_info():
p = re.compile(pattern=r"(.*)(CPU:)(\s+)(.+)", flags=f) p = re.compile(pattern=r"(.*)(CPU:)(\s+)(.+)", flags=f)
indent = " " * len(p.search(sys_info).group(3)) indent = " " * len(p.search(sys_info).group(3))
sys_info = p.sub(fr"\1\2{indent}Governors: {govs} \4", sys_info) sys_info = p.sub(fr"\1\2{indent}Governors: {govs} \4", sys_info)
# insert psutil sensors after Sensors:
p = re.compile(pattern=r"(.*)(Sensors:)(\s+)(.+)", flags=f)
indent = " " * len(p.search(sys_info).group(3))
sys_info = p.sub(fr"\1\2{indent}\n{sensors} \4", sys_info)
else: else:
sys_info = ("Warning: inxi is not installed.\n" sys_info = ("Warning: inxi is not installed.\n"
f"Governors: {govs}\n") f"Governors: {govs}\n"
f"Sensors: {sensors}\n")
return sys_info return sys_info
@ -82,7 +97,7 @@ def charging():
""" """
get charge state: is battery charging or discharging get charge state: is battery charging or discharging
""" """
bat_info = p.sensors_battery() bat_info = psutil.sensors_battery()
if bat_info is None: if bat_info is None:
state = True state = True
else: else:
@ -113,7 +128,7 @@ def get_avail_performance():
def get_current_gov(): def get_current_gov():
return s.getoutput("cpufreqctl --governor").strip().split(" ")[0] return getoutput("cpufreqctl --governor").strip().split(" ")[0]
# auto-cpufreq log file # auto-cpufreq log file
@ -121,7 +136,7 @@ auto_cpufreq_log_file = Path("/var/log/auto-cpufreq.log")
auto_cpufreq_log_file_snap = Path("/var/snap/auto-cpufreq/current/auto-cpufreq.log") auto_cpufreq_log_file_snap = Path("/var/snap/auto-cpufreq/current/auto-cpufreq.log")
# daemon check # daemon check
dcheck = s.getoutput("snapctl get daemon") dcheck = getoutput("snapctl get daemon")
def cpufreqctl(): def cpufreqctl():
@ -202,7 +217,7 @@ def deploy_daemon():
print("\n* Deploy auto-cpufreq remove script") print("\n* Deploy auto-cpufreq remove script")
shutil.copy(SCRIPTS_DIR / "auto-cpufreq-remove.sh", "/usr/bin/auto-cpufreq-remove") shutil.copy(SCRIPTS_DIR / "auto-cpufreq-remove.sh", "/usr/bin/auto-cpufreq-remove")
s.call("/usr/bin/auto-cpufreq-install", shell=True) call("/usr/bin/auto-cpufreq-install", shell=True)
# remove auto-cpufreq daemon # remove auto-cpufreq daemon
@ -223,7 +238,7 @@ def remove():
print("\nERROR:\nWas unable to turn on bluetooth on boot") print("\nERROR:\nWas unable to turn on bluetooth on boot")
# run auto-cpufreq daemon install script # run auto-cpufreq daemon install script
s.call("/usr/bin/auto-cpufreq-remove", shell=True) call("/usr/bin/auto-cpufreq-remove", shell=True)
# remove auto-cpufreq-remove # remove auto-cpufreq-remove
os.remove("/usr/bin/auto-cpufreq-remove") os.remove("/usr/bin/auto-cpufreq-remove")
@ -266,15 +281,15 @@ def countdown(s):
# set powersave and enable turbo # set powersave and enable turbo
def set_powersave(): def set_powersave():
print(f"Setting to use: \"{get_avail_powersave()}\" governor") print(f"Setting to use: \"{get_avail_powersave()}\" governor")
s.run(f"cpufreqctl --governor --set={get_avail_powersave()}", shell=True) run(f"cpufreqctl --governor --set={get_avail_powersave()}", shell=True)
if Path("/sys/devices/system/cpu/cpu0/cpufreq/energy_performance_preference").exists(): if Path("/sys/devices/system/cpu/cpu0/cpufreq/energy_performance_preference").exists():
s.run("cpufreqctl --epp --set=balance_power", shell=True) run("cpufreqctl --epp --set=balance_power", shell=True)
print("Setting to use: \"balance_power\" EPP") print("Setting to use: \"balance_power\" EPP")
# get system/CPU load # get system/CPU load
load1m, _, _ = os.getloadavg() load1m, _, _ = os.getloadavg()
# get CPU utilization as a percentage # get CPU utilization as a percentage
cpuload = p.cpu_percent(interval=1) cpuload = psutil.cpu_percent(interval=1)
print("\nTotal CPU usage:", cpuload, "%") print("\nTotal CPU usage:", cpuload, "%")
print("Total system load:", load1m, "\n") print("Total system load:", load1m, "\n")
@ -298,7 +313,7 @@ def mon_powersave():
# get system/CPU load # get system/CPU load
load1m, _, _ = os.getloadavg() load1m, _, _ = os.getloadavg()
# get CPU utilization as a percentage # get CPU utilization as a percentage
cpuload = p.cpu_percent(interval=1) cpuload = psutil.cpu_percent(interval=1)
print("\nTotal CPU usage:", cpuload, "%") print("\nTotal CPU usage:", cpuload, "%")
print("Total system load:", load1m, "\n") print("Total system load:", load1m, "\n")
@ -330,13 +345,13 @@ def mon_powersave():
# set performance and enable turbo # set performance and enable turbo
def set_performance(): def set_performance():
print(f"Setting to use: \"{get_avail_performance()}\" governor") print(f"Setting to use: \"{get_avail_performance()}\" governor")
s.run(f"cpufreqctl --governor --set={get_avail_performance()}", shell=True) run(f"cpufreqctl --governor --set={get_avail_performance()}", shell=True)
if os.path.exists("/sys/devices/system/cpu/cpu0/cpufreq/energy_performance_preference"): if os.path.exists("/sys/devices/system/cpu/cpu0/cpufreq/energy_performance_preference"):
s.run("cpufreqctl --epp --set=balance_performance", shell=True) run("cpufreqctl --epp --set=balance_performance", shell=True)
print("Setting to use: \"balance_performance\" EPP") print("Setting to use: \"balance_performance\" EPP")
load1m, _, _ = os.getloadavg() load1m, _, _ = os.getloadavg()
cpuload = p.cpu_percent(interval=1) cpuload = psutil.cpu_percent(interval=1)
print("\nTotal CPU usage:", cpuload, "%") print("\nTotal CPU usage:", cpuload, "%")
print("Total system load:", load1m, "\n") print("Total system load:", load1m, "\n")
@ -359,7 +374,7 @@ def mon_performance():
# get system/CPU load # get system/CPU load
load1m, _, _ = os.getloadavg() load1m, _, _ = os.getloadavg()
# get CPU utilization as a percentage # get CPU utilization as a percentage
cpuload = p.cpu_percent(interval=1) cpuload = psutil.cpu_percent(interval=1)
print("\nTotal CPU usage:", cpuload, "%") print("\nTotal CPU usage:", cpuload, "%")
print("Total system load:", load1m, "\n") print("Total system load:", load1m, "\n")
@ -411,10 +426,6 @@ def sysinfo():
""" """
get system information get system information
""" """
# added as a temp fix for issue: https://github.com/giampaolo/psutil/issues/1650
import warnings
warnings.filterwarnings("ignore")
print("\n" + "-" * 29 + " System information " + "-" * 30 + "\n") print("\n" + "-" * 29 + " System information " + "-" * 30 + "\n")
import distro import distro
@ -446,11 +457,11 @@ def sysinfo():
print("Linux kernel: " + pl.release()) print("Linux kernel: " + pl.release())
# driver check # driver check
driver = s.getoutput("cpufreqctl --driver") driver = getoutput("cpufreqctl --driver")
print("Driver: " + driver) print("Driver: " + driver)
cpu_arch = pl.machine() cpu_arch = pl.machine()
cpu_count = p.cpu_count() cpu_count = psutil.cpu_count()
print("Architecture:", cpu_arch) print("Architecture:", cpu_arch)
@ -466,10 +477,10 @@ def sysinfo():
print("Cores:", cpu_count) print("Cores:", cpu_count)
print("\n" + "-" * 30 + " Current CPU states " + "-" * 30 + "\n") print("\n" + "-" * 30 + " Current CPU states " + "-" * 30 + "\n")
print(f"CPU max frequency: {p.cpu_freq().max:.0f}MHz") print(f"CPU max frequency: {psutil.cpu_freq().max:.0f}MHz")
print(f"CPU min frequency: {p.cpu_freq().min:.0f}MHz") print(f"CPU min frequency: {psutil.cpu_freq().min:.0f}MHz")
core_usage = p.cpu_freq(percpu=True) core_usage = psutil.cpu_freq(percpu=True)
print("\nCPU frequency for each core:\n") print("\nCPU frequency for each core:\n")
core_num = 0 core_num = 0
@ -478,9 +489,9 @@ def sysinfo():
core_num += 1 core_num += 1
# get number of core temp sensors # get number of core temp sensors
core_temp_num = p.cpu_count(logical=False) core_temp_num = psutil.cpu_count(logical=False)
# get hardware temperatures # get hardware temperatures
core_temp = p.sensors_temperatures() core_temp = psutil.sensors_temperatures()
print("\nTemperature for each physical core:\n") print("\nTemperature for each physical core:\n")
core_num = 0 core_num = 0
@ -501,16 +512,16 @@ def sysinfo():
core_num += 1 core_num += 1
# print current fan speed | temporarily commented # print current fan speed | temporarily commented
# current_fans = p.sensors_fans()['thinkpad'][0].current # current_fans = psutil.sensors_fans()['thinkpad'][0].current
# print("\nCPU fan speed:", current_fans, "RPM") # print("\nCPU fan speed:", current_fans, "RPM")
# read log func # read log func
def read_log(): def read_log():
if os.getenv("PKG_MARKER") == "SNAP": if os.getenv("PKG_MARKER") == "SNAP":
s.call(["tail", "-n 50", "-f", str(auto_cpufreq_log_file_snap)]) call(["tail", "-n 50", "-f", str(auto_cpufreq_log_file_snap)])
elif os.path.isfile(auto_cpufreq_log_file): elif os.path.isfile(auto_cpufreq_log_file):
s.call(["tail", "-n 50", "-f", str(auto_cpufreq_log_file)]) call(["tail", "-n 50", "-f", str(auto_cpufreq_log_file)])
else: else:
print("\n" + "-" * 30 + " auto-cpufreq log " + "-" * 31 + "\n") print("\n" + "-" * 30 + " auto-cpufreq log " + "-" * 31 + "\n")
print("ERROR: auto-cpufreq log is missing.\n\nMake sure to run: \"auto-cpufreq --install\" first") print("ERROR: auto-cpufreq log is missing.\n\nMake sure to run: \"auto-cpufreq --install\" first")
@ -520,10 +531,10 @@ def read_log():
# check if program (argument) is running # check if program (argument) is running
def is_running(program, argument): def is_running(program, argument):
# iterate over all process id's found by psutil # iterate over all process id's found by psutil
for pid in p.pids(): for pid in psutil.pids():
try: try:
# requests the process information corresponding to each process id # requests the process information corresponding to each process id
proc = p.Process(pid) proc = psutil.Process(pid)
# check if value of program-variable that was used to call the function # check if value of program-variable that was used to call the function
# matches the name field of the plutil.Process(pid) output # matches the name field of the plutil.Process(pid) output
if program in proc.name(): if program in proc.name():