Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

lobby: modern dashboard replacement development #7244

Closed
29 of 30 tasks
fichtner opened this issue Feb 15, 2024 · 7 comments
Closed
29 of 30 tasks

lobby: modern dashboard replacement development #7244

fichtner opened this issue Feb 15, 2024 · 7 comments
Assignees
Labels
feature Adding new functionality roadmap Major roadmap item
Milestone

Comments

@fichtner
Copy link
Member

fichtner commented Feb 15, 2024

Important notices

Before you add a new report, we ask you kindly to acknowledge the following:

Is your feature request related to a problem? Please describe.

The dashboard needs a modern replacement with better sandboxing and all widgets either need to be compatible or rewritten (also the ones in plugins).

Describe the solution you like

Develop a secondary dashboard in the development version to try these ideas. Most likely this will remain hidden in the development version when 24.7 comes out.

Current list of work items:

Missing functionality

  • Add widget button
  • replace getTranslations() and api binding of canAccessEndpoints() with metadata (xml) files
  • investigate unix domain socket connection limit. socket connections seem to be no issue, instead the GUI will lock up with sufficient keep-alive connections. Cause unknown at the moment but it seems to be related to the socket open handling on the PHP side as both scaling up the lighty workers does not affect the result and the configd backend is still reachable in a locked state.
  • investigate themeability. Most of the styling is done properly through CSS, although there is some scripted styling to facilitate animations.

Widgets

  • System Information (static section)
  • CPU usage
  • Memory usage
  • Traffic Graph
  • Interfaces
  • Interface statistics
  • Firewall state table size
  • MBUF usage
  • SWAP usage
  • Disk usage
  • CARP statistics
  • Gateway statistics
  • Firewall log
  • Monit checks
  • Static picture?
  • RSS feed ? (Announcements)
  • System log
  • Thermal sensors
  • IPsec tunnel statistics
  • OpenVPN tunnel statistics
  • Wireguard peers
  • Services
  • Deciso hardware widget
  • ETPro telemetry

Describe alternatives you considered

N/A

Additional context

N/A

@fichtner fichtner added the feature Adding new functionality label Feb 15, 2024
@fichtner fichtner added this to the 24.7 milestone Feb 15, 2024
@AdSchellevis
Copy link
Member

added progress / todo items in the ticket.

AdSchellevis added a commit that referenced this issue Apr 29, 2024
… this will add buffering as well, which will result in sluggish behavior for dashboard widgets when webui compression is enabled. (#7244)
AdSchellevis added a commit that referenced this issue Jul 4, 2024
Add basic structure, but needs further formatting.
@fichtner fichtner added the roadmap Major roadmap item label Jul 16, 2024
@fichtner
Copy link
Member Author

@AdSchellevis the update to RC2 make the dashboard wonky for many and a nice observation was made here:

https://www.reddit.com/r/opnsense/comments/1e71y4g/comment/ldyiwxt/

(my browser's cached copy of /ui/js/widgets/BaseWidget.js did not have the isConfigurable() function, causing all the widget rendering calls to fail.)

It appears that there is an apparent lack of cache_safe() relevant usage. I also don't know how things like this can be made cache safe when embedded into JS pages:

import BaseWidget from "./BaseWidget.js";

@Tragen
Copy link

Tragen commented Jul 19, 2024

Our CMS does it like
<link rel="stylesheet" type="text/css" media="all and (min-width: 1265px)" href="[css/page.css?d=202109070922](view-source:/css/page.css?d=202109070922)">
So it adds a date to the link of the file so it's reloaded if you use a newer version.
I don't know if this works inside JS to load a JS and it's more work if you change a file.

@fichtner
Copy link
Member Author

@Tragen yes we do have a similar construct:

return "{$url}?v=" . substr(md5($info['mtime']), 0, 16);

Need to look into how the JS files are imported by one another or if the page needs to define their presence anyway (best case).

@AdSchellevis
Copy link
Member

@fichtner as far as I know you can't use similar trickery on js import statements. This likely needs to be taken care of on the server end (lighttpd)

@AdSchellevis
Copy link
Member

@fichtner this 314d975 might help, but only for new cases.

@swhite2
Copy link
Member

swhite2 commented Aug 5, 2024

36560aa should make the imports cache safe

swhite2 added a commit that referenced this issue Aug 5, 2024
…ts, for #7244"

This reverts commit 314d975.

With 36560aa we don't need this one anymore
AdSchellevis pushed a commit that referenced this issue Aug 5, 2024
…ts, for #7244"

This reverts commit 314d975.

With 36560aa we don't need this one anymore
fichtner pushed a commit that referenced this issue Aug 6, 2024
PR: #7244

(cherry picked from commit 36560aa)
(cherry picked from commit 211a4fe)
(cherry picked from commit a99e880)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature Adding new functionality roadmap Major roadmap item
Development

No branches or pull requests

4 participants