Fix test failures in low-voltage PR (#1207)

* fix lint checks in web python

* fix lint checks in common python

* rework to pass tests in docker

* fix css style lint

* fix css style syntax
This commit is contained in:
Benjamin Krein 2023-09-04 11:08:42 -04:00 committed by GitHub
parent 74eef6f9cc
commit b514440957
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 63 additions and 59 deletions

View File

@ -3,13 +3,18 @@ Module with methods that interact with the Pi system
"""
import subprocess
import logging
import sys
from subprocess import run, CalledProcessError
from shutil import disk_usage
from re import findall, match
from socket import socket, gethostname, AF_INET, SOCK_DGRAM
from pathlib import Path
from platform import uname
from vcgencmd import Vcgencmd
try:
from vcgencmd import Vcgencmd
except ImportError:
pass
from piscsi.return_codes import ReturnCodes
from piscsi.common_settings import SHELL_ERROR
@ -276,26 +281,29 @@ class SysCmds:
they're triggered. test_modes works similarly to enabled_mode but will
ALWAYS display the modes listed for troubleshooting styling.
"""
vcgcmd = Vcgencmd()
t_states = vcgcmd.get_throttled()['breakdown']
matched_states = []
if "vcgencmd" in sys.modules:
vcgcmd = Vcgencmd()
t_states = vcgcmd.get_throttled()["breakdown"]
matched_states = []
state_msgs = {
"0": ("error", ReturnCodes.UNDER_VOLTAGE_DETECTED),
"1": ("warning", ReturnCodes.ARM_FREQUENCY_CAPPED),
"2": ("error", ReturnCodes.CURRENTLY_THROTTLED),
"3": ("warning", ReturnCodes.SOFT_TEMPERATURE_LIMIT_ACTIVE),
"16": ("warning", ReturnCodes.UNDER_VOLTAGE_HAS_OCCURRED),
"17": ("warning", ReturnCodes.ARM_FREQUENCY_CAPPING_HAS_OCCURRED),
"18": ("warning", ReturnCodes.THROTTLING_HAS_OCCURRED),
"19": ("warning", ReturnCodes.SOFT_TEMPERATURE_LIMIT_HAS_OCCURRED),
}
state_msgs = {
"0": ("error", ReturnCodes.UNDER_VOLTAGE_DETECTED),
"1": ("warning", ReturnCodes.ARM_FREQUENCY_CAPPED),
"2": ("error", ReturnCodes.CURRENTLY_THROTTLED),
"3": ("warning", ReturnCodes.SOFT_TEMPERATURE_LIMIT_ACTIVE),
"16": ("warning", ReturnCodes.UNDER_VOLTAGE_HAS_OCCURRED),
"17": ("warning", ReturnCodes.ARM_FREQUENCY_CAPPING_HAS_OCCURRED),
"18": ("warning", ReturnCodes.THROTTLING_HAS_OCCURRED),
"19": ("warning", ReturnCodes.SOFT_TEMPERATURE_LIMIT_HAS_OCCURRED),
}
for k in t_states:
if t_states[k] and k in enabled_modes:
matched_states.append(state_msgs[k])
for k in t_states:
if t_states[k] and k in enabled_modes:
matched_states.append(state_msgs[k])
for t in test_modes:
matched_states.append(state_msgs[t])
for t in test_modes:
matched_states.append(state_msgs[t])
return matched_states
return matched_states
else:
return []

View File

@ -4,3 +4,4 @@ black==22.8.0
flake8==5.0.4
watchdog==2.1.9
requests==2.31.0
vcgencmd==0.1.1

View File

@ -51,21 +51,28 @@ class ReturnCodeMapper:
ReturnCodes.EXTRACTIMAGE_COMMAND_ERROR:
_("Unable to extract archive: %(error)s"),
ReturnCodes.UNDER_VOLTAGE_DETECTED:
_("Under voltage detected - Make sure to use a proper power source (2.5+ amps)."),
_("Potential instability - Under voltage detected - Make sure to use a sufficient "
"power source (2.5+ amps)."),
ReturnCodes.ARM_FREQUENCY_CAPPED:
_("ARM frequency capped - Ensure proper airflow/cooling."),
_("Potential instability - ARM frequency capped - Ensure sufficient airflow/cooling."),
ReturnCodes.CURRENTLY_THROTTLED:
_("Currently throttled - Make sure to use a proper power source (2.5+ amps)."),
_("Potential instability - Currently throttled - Make sure to use a sufficient power "
"source (2.5+ amps)."),
ReturnCodes.SOFT_TEMPERATURE_LIMIT_ACTIVE:
_("Soft-temperature limit active - Ensure proper airflow/cooling."),
_("Potential instability - Soft-temperature limit active - Ensure sufficient "
"airflow/cooling."),
ReturnCodes.UNDER_VOLTAGE_HAS_OCCURRED:
_("Under voltage has occurred since last reboot. Make sure to use a proper power source (2.5+ amps)."),
_("Potential instability - Under voltage has occurred since last reboot. Make sure "
"to use a sufficient power source (2.5+ amps)."),
ReturnCodes.ARM_FREQUENCY_CAPPING_HAS_OCCURRED:
_("ARM frequency capping has occurred since last reboot. Ensure proper airflow/cooling."),
_("Potential instability - ARM frequency capping has occurred since last reboot. "
"Ensure sufficient airflow/cooling."),
ReturnCodes.THROTTLING_HAS_OCCURRED:
_("Throttling has occurred since the last reboot. Make sure to use a proper power source (2.5+ amps)."),
_("Potential instability - Throttling has occurred since the last reboot. Make sure "
"to use a sufficient power source (2.5+ amps)."),
ReturnCodes.SOFT_TEMPERATURE_LIMIT_HAS_OCCURRED:
_("Soft temperature limit has occurred since last reboot. Ensure proper airflow/cooling."),
_("Potential instability - Soft temperature limit has occurred since last reboot. "
"Ensure sufficient airflow/cooling."),
}
# fmt: on

View File

@ -33,7 +33,7 @@ TEMPLATE_THEME_DEFAULT = "modern"
TEMPLATE_THEME_LEGACY = "classic"
# Enable throttle notifications
#
#
# Available modes:
# "0": "Under-voltage detected"
# "1": "Arm frequency capped"

View File

@ -173,7 +173,7 @@ summary.filename {
margin-left: -27px;
}
div.throttle_notice > div {
div.throttle-notice > div {
display: grid;
align-items: center;
background-color: #efefef;
@ -185,23 +185,21 @@ div.throttle_notice > div {
justify-content: center;
}
div.throttle_notice > div.error {
div.throttle-notice > div.error {
background-color: #dc3545;
align-items: center;
}
div.throttle_notice > div.warning {
div.throttle-notice > div.warning {
background-color: #ffc107;
align-items: center;
}
div.throttle_notice > div a {
div.throttle-notice > div a {
color: black;
text-decoration: none;
}
div.throttle_notice > div a:hover {
div.throttle-notice > div a:hover {
text-decoration: underline;
}

View File

@ -476,7 +476,7 @@ div.footer div.theme-change-hint a {
------------------------------------------------------------------------------
*/
div.throttle_notice > div {
div.throttle-notice > div {
display: grid;
align-items: center;
background-color: #efefef;
@ -487,29 +487,29 @@ div.throttle_notice > div {
font-weight: bold;
}
div.throttle_notice > div.error {
div.throttle-notice > div.error {
background-color: var(--danger);
background-image: url("icons/error.svg");
color: #fff;
align-items: center;
}
div.throttle_notice > div.warning {
div.throttle-notice > div.warning {
background-color: var(--warning);
background-image: url("icons/warning.svg");
align-items: center;
}
div.throttle_notice > div > span.message {
padding-left: 3rem;
div.throttle-notice > div > span.message {
padding-left: 3rem;
}
div.throttle_notice > div a {
div.throttle-notice > div a {
color: black;
text-decoration: none;
}
div.throttle_notice > div a:hover {
div.throttle-notice > div a:hover {
text-decoration: underline;
}

View File

@ -73,13 +73,12 @@
</div>
</div>
<div class="throttle_notice">
<div class="throttle-notice">
{% if (env["throttle_status"]|length > 0) %}
{% for category, response in env["throttle_status"] %}
<div class="{{ category }}">
<span class="message" title="{{ response['msg'] }}"><a
href="https://www.raspberrypi.com/documentation/computers/configuration.html#undervoltage-warning">Potential
instability due to: {{ response['msg'] }}</a></span>
href="https://www.raspberrypi.com/documentation/computers/configuration.html#undervoltage-warning">{{ response['msg'] }}</a></span>
</div>
{% endfor %}
{% endif %}

View File

@ -90,8 +90,7 @@ def get_env_info():
else:
username = None
throttled_statuses = sys_cmd.get_throttled(
THROTTLE_NOTIFY_MODES, THROTTLE_TEST_MODES)
throttled_statuses = sys_cmd.get_throttled(THROTTLE_NOTIFY_MODES, THROTTLE_TEST_MODES)
return {
"running_env": sys_cmd.running_env(),
@ -111,8 +110,9 @@ def get_env_info():
"cd_suffixes": tuple(server_info["sccd"]),
"rm_suffixes": tuple(server_info["scrm"]),
"mo_suffixes": tuple(server_info["scmo"]),
"throttle_status":
[(s[0], ReturnCodeMapper.add_msg({"return_code":s[1]})) for s in throttled_statuses],
"throttle_status": [
(s[0], ReturnCodeMapper.add_msg({"return_code": s[1]})) for s in throttled_statuses
],
}

View File

@ -286,12 +286,3 @@ def test_rename_system(env, http_client):
response_data = response.json()
assert response_data["data"]["system_name"] == old_name
def test_throttle_notification(http_client):
response = http_client.get("/")
response_data = response.json()
assert response.status_code == 200
assert response_data["status"] == STATUS_SUCCESS
assert "Under voltage detected" in response_data["data"]