Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
b40cbeb
feat(conf): associations-view in auth policy
rezib Nov 19, 2025
59f38f7
feat(conf): associations-view in default policy
rezib Nov 19, 2025
a141ab0
feat(conf): associations params in agent conf
rezib Nov 19, 2025
9bf82ec
docs: update configuration reference
rezib Nov 25, 2025
2c05780
feat(agent): add /associations endpoint
rezib Nov 19, 2025
67ff74a
feat(gateway): reverse-proxy associations to agent
rezib Nov 19, 2025
091e63d
chore(dev): add associations-view perm in dev env
rezib Nov 19, 2025
d9f40a4
chore(dev): crawl associations assets
rezib Nov 19, 2025
2d7526a
tests: add missing slurmrestd assets
rezib Nov 19, 2025
8a56048
tests: add associations assets
rezib Nov 19, 2025
eb0b0b7
tests(agent): cover associations endpoint
rezib Nov 24, 2025
9fad570
feat(front): support requesting associations
rezib Nov 19, 2025
e715f18
feat(front): introduce accounts page
rezib Nov 19, 2025
8e9e9cb
feat(front): account details page
rezib Nov 24, 2025
47ab528
refactor(front): move breadcrumb in component
rezib Nov 25, 2025
1e71ba3
feat(front): introduce user page
rezib Nov 25, 2025
56db2c2
feat(front): link user/account in job page
rezib Nov 25, 2025
e4c853d
feat(front): add links to user/account jobs
rezib Nov 25, 2025
247d947
fix(front): reinitialize jobs filter if in query
rezib Nov 25, 2025
5b920ac
refactor(front): factorize renderQosLabel()
rezib Nov 25, 2025
899d77d
tests(front): update JobView tests w/ new links
rezib Nov 25, 2025
61ae650
tests(front): cover AccountBreadcrumb component
rezib Nov 25, 2025
7f51613
tests(front): cover AccountTreeNode
rezib Nov 26, 2025
e157d15
tests(front): cover AccountsView
rezib Nov 26, 2025
fe86a67
tests(front): cover AccountView
rezib Nov 26, 2025
b55eb0e
tests(front): cover UserView
rezib Nov 26, 2025
e8a79cf
chore(assets): add accounts pages screenshots
rezib Nov 25, 2025
16cf771
docs: mention accounts feature in overview
rezib Nov 25, 2025
54b46af
docs: mention accounts visualization in README.md
rezib Nov 25, 2025
42189cb
fix(front): skip rendering empty job account
rezib Nov 27, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
on a job running on a node (#663).
- Add support for running under a subfolder prefix on HTTP server.
- Add catch-all route to report page not found with button to clusters.
- Support requesting accounts and users associations with their limits.
- Add page to list account tree from Slurm accounting (#262).
- Add entry in left menu to access accounts page.
- Add page to get details of a specific account with all its user
associations.
- Add page to get details of a specific user with all its accounts
associations.
- Add links to user and account pages in job details page.
- agent:
- Automatically discover latest Slurm REST API version supported by
`slurmrestd` among the list of Slurm-web supported versions declared in
Expand All @@ -26,9 +34,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Implement Slurm REST API adapter from v0.0.41 to v0.0.42.
- Implement Slurm REST API adapter from v0.0.42 to v0.0.43.
- Implement Slurm REST API adapter from v0.0.43 to v0.0.44.
- Add `/associations` route to get list of accounts, users and limits.
- gateway:
- Add `/agent/{cluster}/ping` route to reverse-proxy request to agent `/ping`
endpoint.
- Add `/agent/{cluster}/associations` route to reverse-proxy request to agent
`/associations` endpoint.
- Possibility to validate agent SSL/TLS certificate with custom CA certificate
as an alternative to system default CA certificates (#254).
- Replace at runtime base path placeholder in pre-built UI assets by URL path
Expand All @@ -42,6 +53,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
supported Slurm REST API versions.
- Introduce `[agents]` > `cacert` gateway parameter for custom path to CA
certificate to validate agent SSL/TLS certificate.
- Introduce `associations-view` action in authorization policy.
- Add permission on `associations-view` to all authenticated users in default
authorization policy.
- Introduce `[filters]` > `associations` parameter in agent configuration.
- Introduce `[cache]` > `associations` parameter in agent configuration.
- cli: Introduce `slurm-web` unified executable with subcommands (#655).
- docs: Add manpage for unified `slurm-web` command.

Expand Down Expand Up @@ -89,7 +105,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
command.

### Fixed
- front: Dark mode rendering of info and error messages in clusters list (#661).
- front:
- Dark mode rendering of info and error messages in clusters list (#661).
- Re-initialize all jobs filters in runtime store as soon as a filter is
present in query.
- gateway: Use agent provided version instead of agent minimal version from
settings to reverse proxy the requests (#656).
- front: Update dependencies to fix CVE-2025-64718 (js-yaml), CVE-2025-64756
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ Many features in a reactive & responsive web UI:
* Colored badges to visualize job status at a glance
* GPU resources utilization monitoring
* Advanced visualization of node status with racking topology
* Intuitive visualization of QOS and advanced reservations
* Intuitive visualization of account tree, QOS and advanced reservations
* Dark mode support
* Multi-clusters support
* LDAP authentication (including Active Directory support)
Expand Down
2 changes: 2 additions & 0 deletions assets/screenshots/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,6 @@ shadowed:
- screenshot_cores_tablet.png
- screenshot_qos.png
- screenshot_reservations.png
- screenshot_accounts_tree.png
- screenshot_account_page.png
- screenshot_perms.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
15 changes: 15 additions & 0 deletions conf/vendor/agent.yml
Original file line number Diff line number Diff line change
Expand Up @@ -340,6 +340,17 @@ filters:
doc: |
List of accounts fields selected in slurmrestd API, all other fields are
filtered out.
associations:
type: list
content: str
default:
- account
- max
- parent_account
- qos
- user
doc: |
List of associations fields selected in slurmrestd API, all other fields are filtered out.

policy:
definition:
Expand Down Expand Up @@ -483,6 +494,10 @@ cache:
type: int
default: 60
doc: Expiration delay in seconds for accounts in cache
associations:
type: int
default: 120
doc: Expiration delay in seconds for associations in cache

metrics:
enabled:
Expand Down
2 changes: 1 addition & 1 deletion conf/vendor/policy.ini

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions conf/vendor/policy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ actions:
Get _QOS_ entry in main menu and permission to view the list of defined QOS.
view-accounts: |
Permission to filter jobs by account.
associations-view: |
Get _Accounts_ entry in main menu and permission to view the list of
associations (accounts, users and limits).
view-reservations: |
Get _Reservations_ entry in main menu and permission to view the list of
defined reservations.
Expand Down
2 changes: 1 addition & 1 deletion dev/conf/policy.ini.j2
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ special={{ users[3].login }}
actions=view-stats,view-jobs

[admin]
actions=view-stats,view-jobs,view-nodes,view-partitions,view-qos,view-accounts,view-reservations,cache-view,cache-reset
actions=view-stats,view-jobs,view-nodes,view-partitions,view-qos,view-accounts,associations-view,view-reservations,cache-view,cache-reset

[special]
actions=view-qos
Expand Down
7 changes: 7 additions & 0 deletions dev/crawler/agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ def __init__(
Asset("qos", "qos", self._crawl_qos),
Asset("reservations", "reservations", self._crawl_reservations),
Asset("accounts", "accounts", self._crawl_accounts),
Asset("associations", "associations", self._crawl_associations),
Asset(
"metrics-nodes-hour",
"metrics-nodes-hour",
Expand Down Expand Up @@ -159,6 +160,12 @@ def _crawl_accounts(self):
"accounts",
)

def _crawl_associations(self):
self.dump_component_query(
f"/v{get_version()}/associations",
"associations",
)

def _crawl_metrics_nodes_hour(self):
if self.metrics:
self.dump_component_query(
Expand Down
7 changes: 7 additions & 0 deletions dev/crawler/gateway.py
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,7 @@ def __init__(
Asset("qos", "qos", self._crawl_qos),
Asset("reservations", "reservations", self._crawl_reservations),
Asset("accounts", "accounts", self._crawl_accounts),
Asset("associations", "associations", self._crawl_associations),
Asset("racksdb", "racksdb-draw-coordinates", self._crawl_racksdb),
Asset(
"metrics",
Expand Down Expand Up @@ -803,6 +804,12 @@ def _crawl_accounts(self):
"accounts",
)

def _crawl_associations(self):
self.dump_component_query(
f"/api/agents/{self.cluster.name}/associations",
"associations",
)

def _crawl_racksdb(self):
# RacksDB infrastructure diagram
self.dump_component_query(
Expand Down
8 changes: 8 additions & 0 deletions dev/crawler/slurmrestd.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,7 @@ def __init__(
Asset("qos", "slurm-qos", self._crawl_qos),
Asset("accounts", "slurm-accounts", self._crawl_accounts),
Asset("reservations", "slurm-reservations", self._crawl_reservations),
Asset("associations", "slurmdb-associations", self._crawl_associations),
}

super().__init__(
Expand Down Expand Up @@ -840,3 +841,10 @@ def _crawl_reservations(self):
f"/slurm/v{self.api_version}/reservations",
"slurm-reservations",
)

def _crawl_associations(self):
# Download associations
self.dump_component_query(
f"/slurmdb/v{self.api_version}/associations",
"slurmdb-associations",
)
21 changes: 21 additions & 0 deletions docs/modules/conf/examples/agent.ini
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,22 @@ reservations=
accounts=
name

# List of associations fields selected in slurmrestd API, all other fields are
# filtered out.
#
# Default value:
# - account
# - max
# - parent_account
# - qos
# - user
associations=
account
max
parent_account
qos
user

[policy]

# Path to RBAC policy definition file with available actions
Expand Down Expand Up @@ -588,6 +604,11 @@ reservations=60
# Default value: 60
accounts=60

# Expiration delay in seconds for associations in cache
#
# Default value: 120
associations=120

[metrics]

# Determine if metrics feature and integration with Prometheus (or
Expand Down
35 changes: 35 additions & 0 deletions docs/modules/conf/partials/conf-agent.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -685,6 +685,30 @@ filtered out.
* `name`


|-

|associations
|list[str]
|List of associations fields selected in slurmrestd API, all other fields are filtered out.





*Default:*


* `account`

* `max`

* `parent_account`

* `qos`

* `user`


|-


Expand Down Expand Up @@ -1055,6 +1079,17 @@ _No default value_

|-

|associations
|int
|Expiration delay in seconds for associations in cache




*Default:* `120`

|-


|===

Expand Down
5 changes: 5 additions & 0 deletions docs/modules/conf/partials/policy-actions.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,11 @@ compute nodes in cluster with their status in Slurm.
|Permission to filter jobs by account.


|associations-view
|Get _Accounts_ entry in main menu and permission to view the list of
associations (accounts, users and limits).


|view-reservations
|Get _Reservations_ entry in main menu and permission to view the list of
defined reservations.
Expand Down
1 change: 1 addition & 0 deletions docs/modules/overview/images/screenshot_account_page.png
1 change: 1 addition & 0 deletions docs/modules/overview/images/screenshot_accounts_tree.png
21 changes: 21 additions & 0 deletions docs/modules/overview/pages/overview.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,27 @@ job-specific GPU usage, and troubleshoot — without needing deep knowledge of
Slurm's CLI commands. This streamlined visibility significantly improves
productivity and resource efficiency in GPU-accelerated workloads.

== Account Hierarchy

Slurm-web provides an interactive accounts page that displays the account
hierarchy for each cluster. This feature enables users and administrators to:

- **Visualize Account Structure:** Display parent/child account relationships in
a tree view, helping users and admins understand project or organizational
hierarchies at a glance.
- **Intuitive Insights:** Inspect account-specific information, such as resource
limits with visual representation of their overrides, associated users, and
QOS assignments, directly from the interface.
- **Easy Navigation:** Links allow you to traverse account structures, with
users and their associations.

image::screenshot_accounts_tree.png[width=80%]

image::screenshot_account_page.png[width=80%]

The accounts interface streamlines account management, improves clarity into
Slurm account policies, and reduces the need for complex CLI queries.

== Advanced Reservations

Resources can be pre-allocated for a particular usage in Slurm with *advanced
Expand Down
9 changes: 8 additions & 1 deletion frontend/src/components/MainMenu.vue
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ import {
PlayCircleIcon,
CpuChipIcon,
SwatchIcon,
XMarkIcon
XMarkIcon,
UserGroupIcon
} from '@heroicons/vue/24/outline'
import { TagIcon } from '@heroicons/vue/16/solid'

Expand All @@ -41,6 +42,12 @@ const navigation = [
route: 'reservations',
icon: CalendarIcon,
permission: 'view-reservations'
},
{
name: 'Accounts',
route: 'accounts',
icon: UserGroupIcon,
permission: 'associations-view'
}
]
</script>
Expand Down
Loading
Loading