Fix bug by adding a 'tries' counter so reading websocket data can return (#7470)

* add a tries counter so reading websocket data can fail

* fix empty constructor parameters when creating a permission_filter

* Use the message topic for debugging info instead of payload data

* use a socket disconnect exception instead of runtime exception

* Add a wait state for re-connecting to websocket server

* Add PHPDoc return information for connect_to_ws_server method

* Remove the cannot send message for already removed resource

* Remove param in the method call to handle_websocket_event
This commit is contained in:
frytimo
2025-08-27 10:53:01 -03:00
committed by GitHub
parent efdb23ee4b
commit c9e7e5e7ee
5 changed files with 38 additions and 12 deletions

View File

@@ -115,8 +115,21 @@ class system_dashboard_service extends base_websocket_system_service {
count($cpu_percent_per_core)
));
// Send the broadcast
$this->respond($response);
$show_disconnect_message = true;
try {
// Send the broadcast
$this->respond($response);
} catch (\socket_disconnected_exception $sde) {
// wait until we connect again
while (!$this->connect_to_ws_server()) {
if ($show_disconnect_message) {
$this->warn("Websocket server disconnected");
$show_disconnect_message = false;
}
sleep(1);
}
$this->warn("Websocket server connected");
}
}
@@ -129,16 +142,18 @@ class system_dashboard_service extends base_websocket_system_service {
// Get the subscriber permissions
$permissions = $subscriber->get_permissions();
// Create a filter
$filter = filter_chain::and_link([new permission_filter()]);
// Create a filter for broadcaster => permission
$permission_filter = new permission_filter([self::get_service_name() => 'system_view_cpu']);
// Match them to create a filter
foreach (self::PERMISSIONS as $permission) {
if (in_array($permission, $permissions)) {
$filter->add_permission($permission);
$permission_filter->add_permission($permission);
}
}
$filter = filter_chain::and_link([$permission_filter]);
// Return the filter with user permissions to ensure they can't receive information they shouldn't
return $filter;
}