Skip to content

Conversation

@MP-Tool
Copy link
Contributor

@MP-Tool MP-Tool commented Sep 12, 2025

Problem:

While working on server management, I noticed that the frontend was making tons of unnecessary API calls to servers that have a "Not OK" status. Every time you visit a server page with an unreachable server, the UI tries to fetch system stats, CPU info, memory data, and container information - all of which are guaranteed to fail with 500 errors, flooding the browser console.

This creates several issues:

  • Browser console spam with repeated 500 errors from GetSystemStats and GetSystemInformation
  • Pointless backend load from requests that will never succeed
  • Poor user experience with constant failed API calls
  • Network traffic waste for unreachable servers

Solution:

I've added server availability guards to prevent API calls to unreachable servers:

  1. New Helper Function: useIsServerAvailable() that checks if server state is not Disabled or NotOk
  2. Protected API Calls: All server-related queries now use the enabled option to check server availability first
  3. Consistent Pattern: Applied the same logic across all server components

The fix uses React Query's enabled option with server status checks:

const isServerAvailable = useIsServerAvailable(serverId);
const stats = useRead("GetSystemStats", { server: id }, {
  enabled: isServerAvailable,
  refetchInterval: 10_000 
});

This means:

  • No more 500 error spam in console when servers are down
  • No more unnecessary API calls to unreachable servers
  • Better performance and reduced backend load
  • Cleaner user experience when managing server infrastructure
  • Everything still works perfectly when servers are online

The changes are backward compatible and respect existing server status logic that was already in place in some components.

const server = useServer(serverId);
return server &&
server.info.state !== Types.ServerState.Disabled &&
server.info.state !== Types.ServerState.NotOk;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is simpler body:

  const server = useServer(serverId);
  return server?.info.state === Types.ServerState.Ok

Copy link
Member

@mbecker20 mbecker20 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall LGTM after the useIsServerAvailable simplification

@mbecker20 mbecker20 merged commit fd10b96 into moghtech:1.19.4 Sep 14, 2025
@mbecker20 mbecker20 mentioned this pull request Sep 14, 2025
mbecker20 pushed a commit that referenced this pull request Sep 14, 2025
…843)

* Implement server availability checks in various components

* Refactor server availability check to ensure only healthy servers are identified
mbecker20 added a commit that referenced this pull request Sep 14, 2025
* start 1.19.4

* deploy 1.19.4-dev-1

* try smaller binaries with cargo strip

* deploy 1.19.4-dev-2

* smaller binaries with cargo strip

* Fix Submit Dialog Button Behavior with 500 Errors on Duplicate Names (#819)

* Implement enhanced error handling and messaging for resource creation

* Implement improved error handling for resource creation across alerter, build, and sync

* Implement error handling improvements for resource copying and validation feedback

* Adjust error handling for resource creation to distinguish validation errors from unexpected system errors

* Refactor resource creation error handling by removing redundant match statements and simplifying the error propagation in multiple API modules.

* fmt

* bump indexmap

* fix account selector showing empty when account no longer found

* clean up theme logic, ensure monaco and others get up to date current theme

* enforce disable_non_admin_create for tags. Clean up status code responses

* update server cache concurrency controller

* deploy 1.19.4-dev-3

* Allow signing in by pressing enter (#830)

* Improve dialog overflow handling to prevent clipping of content (#828)

* Add Email notification entry to community.md (#824)

* Add clickable file path to show/hide file contents in StackInfo (#827)

* add clickable file path to show/hide file contents in StackInfo

Also added CopyButton due to the new functionality making the file path not selectable.

* Move clicking interaction to CardHeader

* Avoid sync edge cases of having toggle show function capturing showContents from outside

Co-authored-by: Maxwell Becker <[email protected]>

* Format previous change

* Add `default_show_contents` to `handleToggleShow`

---------

Co-authored-by: Maxwell Becker <[email protected]>

* deploy 1.19.4-dev-4

* avoid stake info ShowHideButton double toggle

* Allow multiple simultaneous Action runs for use with Args

* deploy 1.19.4-dev-5

* feat: persist all table sorting states including unsorted (#832)

- Always save sorting state to localStorage, even when empty/unsorted
- Fixes issue where 'unsorted' state was not persisted across page reloads
- Ensures consistent and predictable sorting behavior for all DataTable components

* autofocus on login username field (#837)

* Fix unnecessary auth queries flooding console on login page (#842)

* Refactor authentication error handling to use serror::Result and status codes

* Enable user query only when JWT is present

* Enable query execution in useRead only if JWT is present

* Revert backend auth changes - keep PR focused on frontend only

* Fix unnecessary API queries to unreachable servers flooding console (#843)

* Implement server availability checks in various components

* Refactor server availability check to ensure only healthy servers are identified

* cargo fmt

* fmt

* Auth error handling with status codes (#841)

* Refactor authentication error handling to use serror::Result and status codes

* Refactor error messages

* Refactor authentication error handling to include status codes and improve error messages

* clean up

* clean

* fmt

* invalid user id also UNAUTHORIZED

* deploy 1.19.4-dev-6

* deploy 1.19.4-dev-7

---------

Co-authored-by: Marcel Pfennig <[email protected]>
Co-authored-by: jack <[email protected]>
Co-authored-by: Guten <[email protected]>
Co-authored-by: Paulo Roberto Albuquerque <[email protected]>
Co-authored-by: Lorenzo Farnararo <[email protected]>
@MP-Tool MP-Tool deleted the fix/server-status-based-api-queries branch September 14, 2025 20:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants