parent
33e9cde0f4
commit
73bd58a973
2 changed files with 41 additions and 4 deletions
|
|
@ -68,16 +68,20 @@ def check_cooling_results(sensors, test_object) -> None:
|
||||||
|
|
||||||
# Build report
|
# Build report
|
||||||
report_labels = ['Idle']
|
report_labels = ['Idle']
|
||||||
|
average_labels = []
|
||||||
if 'Sysbench' in sensors.temp_labels:
|
if 'Sysbench' in sensors.temp_labels:
|
||||||
|
average_labels.append('Sysbench')
|
||||||
report_labels.extend(['Sysbench', 'Cooldown'])
|
report_labels.extend(['Sysbench', 'Cooldown'])
|
||||||
if 'Prime95' in sensors.temp_labels:
|
if 'Prime95' in sensors.temp_labels:
|
||||||
|
average_labels.append('Prime95')
|
||||||
report_labels.append('Prime95')
|
report_labels.append('Prime95')
|
||||||
if 'Cooldown' not in report_labels:
|
if 'Cooldown' not in report_labels:
|
||||||
report_labels.append('Cooldown')
|
report_labels.append('Cooldown')
|
||||||
if len(sensors.temp_labels.intersection(['Prime95', 'Sysbench'])) < 1:
|
if len(sensors.temp_labels.intersection(['Prime95', 'Sysbench'])) < 1:
|
||||||
# Include overall max temp if needed
|
# Include overall max temp if needed
|
||||||
report_labels.append('Max')
|
report_labels.append('Max')
|
||||||
for line in sensors.generate_report(*report_labels, only_cpu=True):
|
for line in sensors.generate_report(
|
||||||
|
*report_labels, only_cpu=True, include_avg_for=average_labels):
|
||||||
test_object.report.append(f' {line}')
|
test_object.report.append(f' {line}')
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,8 +42,9 @@ class Sensors():
|
||||||
self.background_thread: Thread | None = None
|
self.background_thread: Thread | None = None
|
||||||
self.data: dict[Any, Any] = get_sensor_data()
|
self.data: dict[Any, Any] = get_sensor_data()
|
||||||
self.history: list[tuple[str, dict]] = []
|
self.history: list[tuple[str, dict]] = []
|
||||||
self.out_path: pathlib.Path | str | None = None
|
self.history_index: dict[str, int] = {}
|
||||||
self.history_next_label: str = 'Idle'
|
self.history_next_label: str = 'Idle'
|
||||||
|
self.out_path: pathlib.Path | str | None = None
|
||||||
self.temp_labels: set = set(['Current', 'Max'])
|
self.temp_labels: set = set(['Current', 'Max'])
|
||||||
|
|
||||||
def clear_temps(self, next_label: str, save_history: bool = True) -> None:
|
def clear_temps(self, next_label: str, save_history: bool = True) -> None:
|
||||||
|
|
@ -53,7 +54,22 @@ class Sensors():
|
||||||
|
|
||||||
# Save history
|
# Save history
|
||||||
if save_history:
|
if save_history:
|
||||||
self.history.append((prev_label, deepcopy(self.data)))
|
cur_data = deepcopy(self.data)
|
||||||
|
|
||||||
|
# Calculate averages
|
||||||
|
for adapters in cur_data.values():
|
||||||
|
for sources in adapters.values():
|
||||||
|
for name in sources:
|
||||||
|
temp_list = sources[name]['Temps']
|
||||||
|
try:
|
||||||
|
sources[name]['Average'] = sum(temp_list) / len(temp_list)
|
||||||
|
except ZeroDivisionError:
|
||||||
|
LOG.error('Failed to calculate averate temp for %s', name)
|
||||||
|
sources[name]['Average'] = 0
|
||||||
|
|
||||||
|
# Add to history
|
||||||
|
self.history.append((prev_label, cur_data))
|
||||||
|
self.history_index[prev_label] = len(self.history) - 1
|
||||||
|
|
||||||
# Clear data
|
# Clear data
|
||||||
for adapters in self.data.values():
|
for adapters in self.data.values():
|
||||||
|
|
@ -78,9 +94,15 @@ class Sensors():
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def generate_report(
|
def generate_report(
|
||||||
self, *temp_labels, colored=True, only_cpu=False) -> list[str]:
|
self,
|
||||||
|
*temp_labels: str,
|
||||||
|
colored: bool = True,
|
||||||
|
only_cpu: bool = False,
|
||||||
|
include_avg_for: list[str] | None = None,
|
||||||
|
) -> list[str]:
|
||||||
"""Generate report based on given temp_labels, returns list."""
|
"""Generate report based on given temp_labels, returns list."""
|
||||||
report = []
|
report = []
|
||||||
|
include_avg_for = include_avg_for if include_avg_for else []
|
||||||
|
|
||||||
for section, adapters in sorted(self.data.items()):
|
for section, adapters in sorted(self.data.items()):
|
||||||
if only_cpu and not section.startswith('CPU'):
|
if only_cpu and not section.startswith('CPU'):
|
||||||
|
|
@ -94,6 +116,10 @@ class Sensors():
|
||||||
for label in temp_labels:
|
for label in temp_labels:
|
||||||
if label != 'Current':
|
if label != 'Current':
|
||||||
line += f' {label.lower()}: '
|
line += f' {label.lower()}: '
|
||||||
|
if label in include_avg_for:
|
||||||
|
avg_temp = self.get_avg_temp(
|
||||||
|
label, section, adapter, source, colored)
|
||||||
|
line += f'{avg_temp} / '
|
||||||
line += get_temp_str(
|
line += get_temp_str(
|
||||||
source_data.get(label, '???'),
|
source_data.get(label, '???'),
|
||||||
colored=colored,
|
colored=colored,
|
||||||
|
|
@ -113,6 +139,13 @@ class Sensors():
|
||||||
# Done
|
# Done
|
||||||
return report
|
return report
|
||||||
|
|
||||||
|
def get_avg_temp(self, label, section, adapter, source, colored) -> str:
|
||||||
|
"""Get average temp from history, return str."""
|
||||||
|
# NOTE: This is Super-ugly
|
||||||
|
label_index = self.history_index[label]
|
||||||
|
avg_temp = self.history[label_index][1][section][adapter][source]['Average']
|
||||||
|
return get_temp_str(avg_temp, colored=colored)
|
||||||
|
|
||||||
def get_cpu_temp(self, label) -> float:
|
def get_cpu_temp(self, label) -> float:
|
||||||
"""Get temp for label from any CPU source, returns float.
|
"""Get temp for label from any CPU source, returns float.
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue