Fix network widget speed calculation (#7679)

- Fix the speed to calculate on bits instead of bytes so the speed transfer rates are more accurate
- Add PHPDoc blocks to the dashboard class (No code changes)
This commit is contained in:
frytimo
2025-12-24 11:48:15 -05:00
committed by GitHub
parent 29e5d5d628
commit 75b5f00812
2 changed files with 150 additions and 43 deletions

View File

@@ -159,21 +159,21 @@ class linux_system_information extends system_information {
foreach ($data as $line) { foreach ($data as $line) {
if (strpos($line, $interface . ':') !== false) { if (strpos($line, $interface . ':') !== false) {
$parts = preg_split('/\s+/', trim(str_replace(':', ' ', $line))); $parts = preg_split('/\s+/', trim(str_replace(':', ' ', $line)));
$rx_bytes = (int) $parts[1]; $rx_bits = ((int) $parts[1]) * 10; // convert from bytes per second to bits per second.
$tx_bytes = (int) $parts[9]; $tx_bits = ((int) $parts[9]) * 10; // convert from bytes per second to bits per second.
$now = microtime(true); $now = microtime(true);
if (!isset($last[$interface])) { if (!isset($last[$interface])) {
$last[$interface] = ['rx' => $rx_bytes, 'tx' => $tx_bytes, 'time' => $now]; $last[$interface] = ['rx' => $rx_bits, 'tx' => $tx_bits, 'time' => $now];
return ['rx_bps' => 0, 'tx_bps' => 0]; return ['rx_bps' => 0, 'tx_bps' => 0];
} }
$delta_time = $now - $last[$interface]['time']; $delta_time = $now - $last[$interface]['time'];
$delta_rx = $rx_bytes - $last[$interface]['rx']; $delta_rx = $rx_bits - $last[$interface]['rx'];
$delta_tx = $tx_bytes - $last[$interface]['tx']; $delta_tx = $tx_bits - $last[$interface]['tx'];
$last[$interface] = ['rx' => $rx_bytes, 'tx' => $tx_bytes, 'time' => $now]; $last[$interface] = ['rx' => $rx_bits, 'tx' => $tx_bits, 'time' => $now];
return [ return [
'rx_bps' => $delta_rx / $delta_time, 'rx_bps' => $delta_rx / $delta_time,

View File

@@ -30,30 +30,92 @@
class dashboard { class dashboard {
/** /**
* declare constant variables * Application name constant
*
* @var string
*/ */
const app_name = 'dashboard'; const app_name = 'dashboard';
/**
* Application UUID constant
*
* @var string
*/
const app_uuid = '55533bef-4f04-434a-92af-999c1e9927f7'; const app_uuid = '55533bef-4f04-434a-92af-999c1e9927f7';
/** /**
* declare the variables * Database object instance
*
* @var database
*/ */
private $database; private $database;
/**
* Name of the current entity
*
* @var string
*/
private $name; private $name;
/**
* Current table name
*
* @var string
*/
private $table; private $table;
/**
* Array of table names
*
* @var array
*/
private $tables; private $tables;
/**
* Field name for toggle operations
*
* @var string
*/
private $toggle_field; private $toggle_field;
/**
* Valid toggle values
*
* @var array
*/
private $toggle_values; private $toggle_values;
/**
* Field name for description
*
* @var string
*/
private $description_field; private $description_field;
/**
* Location for redirects
*
* @var string
*/
private $location; private $location;
/**
* UUID prefix for database operations
*
* @var string
*/
private $uuid_prefix; private $uuid_prefix;
/** /**
* Constructor for the class. * Constructor for the dashboard class
* *
* This method initializes the object with setting_array and session data. * Initializes the dashboard object with optional settings and sets up
* default values for tables, toggle fields, and other properties.
* *
* @param array $setting_array An optional array of settings to override default values. Defaults to []. * @param array $setting_array Optional configuration array, may contain:
* - 'database': Database instance to use
*
* @return void
*/ */
public function __construct(array $setting_array = []) { public function __construct(array $setting_array = []) {
//set objects //set objects
@@ -71,13 +133,18 @@ class dashboard {
} }
/** /**
* Deletes one or multiple records. * Deletes one or multiple dashboard records
* *
* @param array $records An array of record IDs to delete, where each ID is an associative array * This method deletes dashboard records and all related child records
* containing 'uuid' and 'checked' keys. The 'checked' value indicates * (widgets, widget groups) from the database. It validates permissions
* whether the corresponding checkbox was checked for deletion. * and token before performing the deletion.
* *
* @return void No return value; this method modifies the database state and sets a message. * @param array $records An array of record IDs to delete, where each element is an
* associative array containing:
* - 'dashboard_uuid': The UUID of the dashboard to delete
* - 'checked': Boolean string ('true'/'false') indicating if selected
*
* @return void Exits with redirect on token validation failure, otherwise returns nothing
*/ */
public function delete($records) { public function delete($records) {
//assign the variables //assign the variables
@@ -139,13 +206,18 @@ class dashboard {
} }
/** /**
* Toggles the state of one or more records. * Toggles the enabled/disabled state of one or more dashboard records
* *
* @param array $records An array of record IDs to delete, where each ID is an associative array * This method toggles the dashboard_enabled field between 'true' and 'false'
* containing 'uuid' and 'checked' keys. The 'checked' value indicates * for the specified records. It validates permissions and token before
* whether the corresponding checkbox was checked for deletion. * performing the toggle operation.
* *
* @return void No return value; this method modifies the database state and sets a message. * @param array $records An array of record IDs to toggle, where each element is an
* associative array containing:
* - 'dashboard_uuid': The UUID of the dashboard to toggle
* - 'checked': Boolean string ('true'/'false') indicating if selected
*
* @return void Exits with redirect on token validation failure, otherwise returns nothing
*/ */
public function toggle($records) { public function toggle($records) {
//assign the variables //assign the variables
@@ -213,13 +285,19 @@ class dashboard {
} }
/** /**
* Copies one or more records * Copies one or more dashboard records and their associated widgets
* *
* @param array $records An array of record IDs to delete, where each ID is an associative array * This method creates duplicate copies of dashboard records along with all
* containing 'uuid' and 'checked' keys. The 'checked' value indicates * associated widgets and widget groups. It handles parent-child widget
* whether the corresponding checkbox was checked for deletion. * relationships and appends '(copy)' to the description field. It validates
* permissions and token before performing the copy operation.
* *
* @return void No return value; this method modifies the database state and sets a message. * @param array $records An array of record IDs to copy, where each element is an
* associative array containing:
* - 'dashboard_uuid': The UUID of the dashboard to copy
* - 'checked': Boolean string ('true'/'false') indicating if selected
*
* @return void Exits with redirect on token validation failure, otherwise returns nothing
*/ */
public function copy($records) { public function copy($records) {
//assign the variables //assign the variables
@@ -346,11 +424,18 @@ class dashboard {
} }
/** /**
* Delete one or multiple dashboard widgets. * Delete one or multiple dashboard widgets
* *
* This method deletes the specified dashboard widgets based on their UUIDs and user permissions. * This method deletes the specified dashboard widgets and their associated
* widget group assignments based on their UUIDs. It validates permissions
* and token before performing the deletion.
* *
* @param array $records An array of records to delete, where each record contains a 'dashboard_widget_uuid' key. * @param array $records An array of records to delete, where each element is an
* associative array containing:
* - 'dashboard_widget_uuid': The UUID of the widget to delete
* - 'checked': Boolean string ('true'/'false') indicating if selected
*
* @return bool Returns false if permission is denied, otherwise void
*/ */
public function delete_widgets($records) { public function delete_widgets($records) {
//assign the variables //assign the variables
@@ -403,11 +488,18 @@ class dashboard {
} }
/** /**
* Toggle the enabled state of dashboard widgets. * Toggle the enabled state of dashboard widgets
* *
* This method updates the database with new toggle states for the specified records. * This method toggles the widget_enabled field between 'true' and 'false'
* for the specified widget records. It validates permissions and token
* before performing the toggle operation.
* *
* @param array $records An array of records to update. * @param array $records An array of records to toggle, where each element is an
* associative array containing:
* - 'dashboard_widget_uuid': The UUID of the widget to toggle
* - 'checked': Boolean string ('true'/'false') indicating if selected
*
* @return bool Returns false if permission is denied, otherwise void
*/ */
public function toggle_widgets($records) { public function toggle_widgets($records) {
//assign the variables //assign the variables
@@ -478,13 +570,21 @@ class dashboard {
} }
/** /**
* Assign dashboard widgets. * Assign dashboard widgets to a group
* *
* This method assigns multiple records to a group in the database. * This method assigns multiple widget records to a specific group within
* a dashboard. It creates widget group associations and filters out any
* existing assignments to avoid duplicates. It validates permissions and
* token before performing the assignment.
* *
* @param array $records The list of dashboard widget records to assign. * @param array $records An array of widget records to assign, where each element
* @param string $dashboard_uuid The UUID of the dashboard. * is an associative array containing:
* @param string $group_uuid The UUID of the group. * - 'dashboard_widget_uuid': The UUID of the widget to assign
* - 'checked': Boolean string ('true'/'false') indicating if selected
* @param string $dashboard_uuid The UUID of the dashboard to assign widgets to
* @param string $group_uuid The UUID of the group to assign widgets to
*
* @return bool Returns false if permission is denied, otherwise void
*/ */
public function assign_widgets($records, $dashboard_uuid, $group_uuid) { public function assign_widgets($records, $dashboard_uuid, $group_uuid) {
//assign the variables //assign the variables
@@ -566,14 +666,21 @@ class dashboard {
} }
/** /**
* Unassign widgets from a dashboard. * Unassign widgets from a dashboard group
* *
* This method removes the specified widgets from the dashboard and its groups. * This method removes the specified widgets and their child widgets from
* a specific group within a dashboard. It deletes the widget group associations
* while leaving the actual widgets intact. It validates permissions and token
* before performing the unassignment.
* *
* @param array $records An array of records to unassign, where each record contains * @param array $records An array of widget records to unassign, where each element
* the 'dashboard_widget_uuid' key. * is an associative array containing:
* @param string $dashboard_uuid The UUID of the dashboard from which to unassign the widgets. * - 'dashboard_widget_uuid': The UUID of the widget to unassign
* @param string $group_uuid The UUID of the group from which to unassign the widgets. * - 'checked': Boolean string ('true'/'false') indicating if selected
* @param string $dashboard_uuid The UUID of the dashboard to unassign widgets from
* @param string $group_uuid The UUID of the group to unassign widgets from
*
* @return bool Returns false if permission is denied, otherwise void
*/ */
public function unassign_widgets($records, $dashboard_uuid, $group_uuid) { public function unassign_widgets($records, $dashboard_uuid, $group_uuid) {
//assign the variables //assign the variables