Skip to content

Commit

Permalink
Fix test failures in low-voltage PR (#1207)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
benjamink authored Sep 4, 2023
1 parent 74eef6f commit b514440
Show file tree
Hide file tree
Showing 9 changed files with 67 additions and 63 deletions.
56 changes: 32 additions & 24 deletions python/common/src/piscsi/sys_cmds.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,18 @@
"""
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
Expand Down Expand Up @@ -276,26 +281,29 @@ def get_throttled(enabled_modes, test_modes):
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 = []

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 t in test_modes:
matched_states.append(state_msgs[t])

return 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),
}

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])

return matched_states
else:
return []
1 change: 1 addition & 0 deletions python/web/requirements-dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ black==22.8.0
flake8==5.0.4
watchdog==2.1.9
requests==2.31.0
vcgencmd==0.1.1
23 changes: 15 additions & 8 deletions python/web/src/return_code_mapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion python/web/src/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
TEMPLATE_THEME_LEGACY = "classic"

# Enable throttle notifications
#
#
# Available modes:
# "0": "Under-voltage detected"
# "1": "Arm frequency capped"
Expand Down
12 changes: 5 additions & 7 deletions python/web/src/static/themes/classic/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
}


14 changes: 7 additions & 7 deletions python/web/src/static/themes/modern/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
}

Expand Down
5 changes: 2 additions & 3 deletions python/web/src/templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -73,13 +73,12 @@ <h1>
</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 %}
Expand Down
8 changes: 4 additions & 4 deletions python/web/src/web.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(),
Expand All @@ -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
],
}


Expand Down
9 changes: 0 additions & 9 deletions python/web/tests/api/test_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"]

0 comments on commit b514440

Please sign in to comment.