[OpenNMS/opennms] 609bbc: update RHEL10 instructions (#8812)
joseanesONMS via opennms-cvs <[email protected]>
| Newsgroups | gmane.network.opennms.cvs |
|---|---|
| Message-ID | <OpenNMS/opennms/push/refs/heads/jira/NMS-20106-manage-users-primevue/[email protected]> |
Branch: refs/heads/jira/NMS-20106-manage-users-primevue
Home: https://github.com/OpenNMS/opennms
Commit: 609bbc6034793f4c1718b661240b37de63d4aa53
https://github.com/OpenNMS/opennms/commit/609bbc6034793f4c1718b661240b37de63d4aa53
Author: mershad-manesh <[email protected]>
Date: 2026-08-24 (Mon, 24 Aug 2026)
Changed paths:
M docs/modules/deployment/pages/repos/rhel-centos/horizon-rhel10.adoc
Log Message:
-----------
update RHEL10 instructions (#8812)
Commit: 798127593134f31e4c3ac7973dfa3a1c0952697a
https://github.com/OpenNMS/opennms/commit/798127593134f31e4c3ac7973dfa3a1c0952697a
Author: Morteza E <[email protected]>
Date: 2026-08-24 (Mon, 24 Aug 2026)
Changed paths:
M .circleci/epoch
Log Message:
-----------
force a build
Commit: 968b4510e4361dd6696a4ec950c1fd40d4211d93
https://github.com/OpenNMS/opennms/commit/968b4510e4361dd6696a4ec950c1fd40d4211d93
Author: Morteza E <[email protected]>
Date: 2026-08-24 (Mon, 24 Aug 2026)
Changed paths:
M .circleci/epoch
M docs/modules/deployment/pages/repos/rhel-centos/horizon-rhel10.adoc
Log Message:
-----------
Merge branch 'foundation-2026' into release-36.x
Commit: 8ffec7276f52983f58d5b41fe9b841ed69a76c63
https://github.com/OpenNMS/opennms/commit/8ffec7276f52983f58d5b41fe9b841ed69a76c63
Author: Morteza E <[email protected]>
Date: 2026-08-24 (Mon, 24 Aug 2026)
Changed paths:
M .circleci/epoch
Log Message:
-----------
force a build
Commit: 8860e08a486786ee0c926225d8bab38ce51b3e20
https://github.com/OpenNMS/opennms/commit/8860e08a486786ee0c926225d8bab38ce51b3e20
Author: Christian Pape <[email protected]>
Date: 2026-08-25 (Tue, 25 Aug 2026)
Changed paths:
M core/db/pom.xml
M dependencies/quartz/pom.xml
Log Message:
-----------
NMS-20236: use mchange-commons-java version 0.6.1
Commit: ffdd98b3ed13cd781d3531c482f0d90cd08e2dff
https://github.com/OpenNMS/opennms/commit/ffdd98b3ed13cd781d3531c482f0d90cd08e2dff
Author: CI/CD System <[email protected]>
Date: 2026-08-25 (Tue, 25 Aug 2026)
Changed paths:
M core/db/pom.xml
M dependencies/quartz/pom.xml
Log Message:
-----------
Merge remote-tracking branch 'origin/foundation-2024' into foundation-2025
Commit: e5d10988a35d1b80dbc7fd666e4224c4feb7de5f
https://github.com/OpenNMS/opennms/commit/e5d10988a35d1b80dbc7fd666e4224c4feb7de5f
Author: Morteza E <[email protected]>
Date: 2026-08-25 (Tue, 25 Aug 2026)
Changed paths:
M core/db/pom.xml
M dependencies/quartz/pom.xml
Log Message:
-----------
Merge remote-tracking branch 'origin/foundation-2025' into foundation-2026
Commit: 5d627a04e820d57ce9cfeb12556b7ae51434a4a1
https://github.com/OpenNMS/opennms/commit/5d627a04e820d57ce9cfeb12556b7ae51434a4a1
Author: Morteza E <[email protected]>
Date: 2026-08-25 (Tue, 25 Aug 2026)
Changed paths:
M docs/modules/deployment/pages/repos/rhel-centos/horizon-rhel10.adoc
Log Message:
-----------
Merge remote-tracking branch 'origin/release-36.x' into develop
Commit: 8d0a708fb1f395e95a82668005a22eba58c168ac
https://github.com/OpenNMS/opennms/commit/8d0a708fb1f395e95a82668005a22eba58c168ac
Author: Marshall Massengill <[email protected]>
Date: 2026-08-25 (Tue, 25 Aug 2026)
Changed paths:
M features/graph/provider/legacy/pom.xml
M features/graph/provider/legacy/src/main/java/org/opennms/netmgt/graph/provider/legacy/LegacyEdge.java
A features/graph/provider/legacy/src/test/java/org/opennms/netmgt/graph/provider/legacy/LegacyEdgeTest.java
A features/topology-map/org.opennms.features.topology.api/src/main/java/org/opennms/features/topology/api/topo/LinkDetailsAware.java
M features/topology-map/plugins/org.opennms.features.topology.plugins.topo.linkd/src/main/java/org/opennms/features/topology/plugins/topo/linkd/internal/LinkdEdge.java
M features/topology-map/plugins/org.opennms.features.topology.plugins.topo.linkd/src/test/java/org/opennms/features/topology/plugins/topo/linkd/internal/EnhancedLinkdTopologyProviderTest.java
Log Message:
-----------
NMS-20254: Expose a discovered link's interfaces on its graph API edge (#8811)
* NMS-20254: Carry a discovered link's interfaces onto its graph edge
Enlinkd resolves the interface at each end of a link: the rows are one-sided,
but the service layer pairs them and the updaters look each ifIndex up in the
SNMP interface table. The Vaadin plugin keeps that on LinkdEdge's two ports, and
it stopped there, because converting a legacy edge to a graph-API edge kept only
the id, label, namespace and endpoint node refs.
Edges that know their link now say so through LinkDetailsAware, and the
conversion copies both ifIndexes and the discovery protocol into the edge
properties. The graph REST layer already serializes that bag, so nothing there
changed. The interface, rather than an instanceof on the plugin's edge class,
keeps the generic graph module off a Vaadin plugin.
The keys live on LegacyEdge, not GenericProperties, which is offered for any
element. Values are strings because the REST converters have no case for a boxed
Integer and fall back to toString() regardless, as nodeID already does. All
three are optional, and the builder drops nulls, so an end discovery could not
resolve is absent.
Tested against real provider-built edges and their clones, which is all
getEdges() ever returns.
Unblocks the weathermap link metrics, which need (node, ifIndex) per direction.
It does not retire the UI's parseIfIndex regex on its own: that reads
/api/v2/enlinkd/{nodeId}, not /api/v2/graphs.
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <[email protected]>
---------
Co-authored-by: Copilot Autofix powered by AI <[email protected]>
Commit: e57195b8e6c0c914bca00145dc48ce19d843c867
https://github.com/OpenNMS/opennms/commit/e57195b8e6c0c914bca00145dc48ce19d843c867
Author: Scott Theleman <[email protected]>
Date: 2026-08-25 (Tue, 25 Aug 2026)
Changed paths:
M core/web-assets/src/main/assets/style/opennms-theme.scss
M opennms-base-assembly/src/main/filtered/etc/search-actions.xml
M opennms-webapp/src/main/webapp/WEB-INF/jsp/alarm/list.jsp
M opennms-webapp/src/main/webapp/account/selfService/passwordGate.jsp
M opennms-webapp/src/main/webapp/includes/bootstrap-footer.jsp
M opennms-webapp/src/main/webapp/includes/bootstrap.jsp
M opennms-webapp/src/main/webapp/login.jsp
M smoke-test/src/test/java/org/opennms/smoketest/AdminPageIT.java
M smoke-test/src/test/java/org/opennms/smoketest/MenuHeaderIT.java
M ui/packages/onms-ui/src/components/OnmsDialog.vue
M ui/packages/onms-ui/src/components/OnmsDrawer.vue
M ui/src/components/Common/FormField.vue
M ui/src/components/Device/DCBTable.vue
M ui/src/components/Layout/Footer.vue
M ui/src/components/Logs/Editor.vue
M ui/src/components/Logs/Logs.vue
M ui/src/components/Nodes/ColumnSelectionDrawer.vue
M ui/src/components/Nodes/NodeAdvancedFiltersDrawer.vue
M ui/src/components/SCV/SCVForm.vue
M ui/src/components/SnmpConfiguration/SnmpConfigDetailsPanel.vue
M ui/src/containers/Map.vue
M ui/src/main/App.vue
M ui/src/styles/onms-base.scss
M ui/src/styles/opennms-styles.scss
M ui/tests/components/Common/FormField.test.ts
Log Message:
-----------
NMS-20182: Various UI fixes after the PrimeVue / OnmsUI migration (#8808)
* NMS-20182: Keep legacy <textarea>s readable in dark mode
The alarm detail page's Sticky Memo and Journal Memo textareas carry no
`.form-control` class, so Bootstrap gives them no explicit background or
text color. In dark mode PrimeVue emits `color-scheme: dark` on the
document, which inherits into the legacy JSP page and makes the browser
paint those textareas with dark UA field colors on a light-only page.
Add `textarea` to the existing rule that already pins native selects,
checkboxes and radios to `color-scheme: light`, so legacy textareas stay
dark-on-light in both themes. Only the menu bundle imports this
stylesheet, so the SPA's PrimeVue Textarea (which sets its colors from
theme tokens) is unaffected.
* NMS-20182: Stop a:visited from overriding button label colors
`a:visited` has a pseudo-class in the selector, so it outranks Bootstrap's
single-class `.btn-secondary`. Any list-page menu item that was both an
anchor with an href and an already-visited URL therefore lost its white
label: "View all alarms" and "Short/Long Listing" on the alarm list,
"View all events" and the "Next" pagination button on the event list. The
items rendered as anchors without an href ("Advanced Search", "Severity
Legend", "Help") are never :visited, which is why they stayed white.
The rule was redundant anyway — the `a` rule above it already colors
visited links, since an author declaration beats the UA's visited color —
so drop it from both places it was declared and leave a note about why it
should not come back. Also drop the two `text-white` workarounds it had
prompted on the alarm list, and DCBTable's scoped `a:visited`, so its
node links keep one color in both states.
* Add Vue Resource Graphs, Geographical Map and Topological Map to 'search-actions.xml' so they are searchable.
* NMS-20182: Lock page scroll while a drawer or modal dialog is open
The drawers are modal, but PrimeVue defaults `blockScroll` to false, so the
wheel over an open drawer scrolled the node table behind it — the page's
scrollbar sat at the viewport edge and read as the drawer's. In the Advanced
Filters drawer it was worse: that drawer's own scroller made two adjacent
scrollbars, only one of which belonged to it.
Turn `blockScroll` on in the seam wrappers — unconditionally for Drawer,
tracking `modal` for Dialog, which also covers OnmsConfirmationDialog and
OnmsMessageDialog.
That alone is not enough here. `html { overflow-x: hidden }` makes <html> the
SPA's scroll container, so the body class PrimeVue toggles never reaches the
element that actually scrolls; lock <html> off that class instead. Match open
`.p-overlay-mask` elements as well, because PrimeVue's block/unblock is not
reference-counted: closing a dialog opened inside an open drawer removed the
body class and unlocked the page while the drawer was still up. Add
`scrollbar-gutter: stable` so hiding the page scrollbar does not shift the
fixed Menubar and side rail — PrimeVue's `padding-right` compensation only
moves in-flow content.
Finally, drop the two node drawers' inner `height: 100%; overflow: auto`, so
PrimeVue's `.p-drawer-content` is each drawer's single scroll container.
* NMS-20182: Align the SNMP Add button with the inputs beside it
The button sat outside any FormField, so it never skipped the vertical space
its siblings' labels occupy and its top edge landed a label-height above their
inputs. An eyeballed `margin-top` had been standing in for that space and was
too small.
Give FormField a `reserveLabelSpace` prop instead: with no label of its own it
lays out an aria-hidden, `for`-less <label> so an unlabelled field still lines
its control up with the labelled fields next to it. A real <label> element is
what makes this work — the label line box comes from the global `label`
typography, which a <span> would not pick up — and it keeps the stand-in in
step with the labelled case for free.
The Add button now sits in such a FormField and needs no offset of its own;
matching the input height keeps their centers aligned as before.
* NMS-20182: Sit the JSP footer at the bottom of a short page
JSP pages left #content a plain block, so the footer stopped wherever the
content ended: on a short page it floated hundreds of pixels above the bottom
of the window (157px into a 969px viewport on the node list). The Vue SPA does
not have this problem because its layout grid is `min-height: 100vh` with a 1fr
content row that takes up the slack.
Give #content the same shape with flexbox. Block layout has no way to push a
last child down — auto margins only work in flex and grid — so the container has
to become a flex column.
Page markup must not become flex items in the process: that stretches
inline-level children (the outage list's .btn-group grew to the full content
width), collapses ones sized by auto margins (the reports page's <hr> shrank to
nothing) and stops margin collapsing. So bootstrap.jsp wraps everything but the
footer in a new #content-body div, leaving #content with exactly two flex items
and all page markup inside a plain block, where it lays out exactly as before.
#content-body takes the slack; the footer follows it.
Also drop the SPA's default body margin, which sat outside .app-layout's
`min-height: 100vh`: it made every page overflow the viewport by ~16px, so even
a page that fit scrolled and its footer never reached the bottom of the window.
Both stacks now put the footer exactly at the bottom edge.
* NMS-20182: Drop the SPA footer's 1rem spacer div
The spacer sat inside the layout's footer row, making it 57px tall instead of
41px. A page whose content needs the full height left over from the header —
SNMP Config, OpenAPI and Resource Graphs all want exactly 868px at a 969px
viewport — therefore overflowed by the spacer's 16px and grew a scrollbar with
nothing to scroll to. Those three now fit exactly, and the footer looks the same
without it: it keeps its own 0.5rem padding and top border.
* NMS-20182: Stop Map, Logs and SCV clipping the footer
Each of these pages sizes its tall element with a hand-picked `calc(100vh - x)`,
and each x was too small for the chrome actually above and below it, so the page
overflowed the viewport and pushed the footer off the bottom of the window — most
visibly on the map, where the footer was cut in half.
Derive the subtraction instead of guessing it: the masthead comes off via
--onms-header-height, then the 41px footer band, then whatever that page stacks
around the element — a breadcrumb row, card padding, a heading, a filter box.
Each site spells the terms out so the next person can check the arithmetic
against what they see. Map was 21px over, Logs 62px, SCV 7px; all three now fit
exactly, at a 969px viewport and at 720px.
The Logs page needed both halves of its card: capping only the editor left the
log list, with its heading and filter box, as the taller column.
* NMS-20182: Address PR review on the footer and scroll-lock changes
Four fixes from review:
Wrap the custom-footer includes in a block of their own. They are emitted after
the footer, so an install's markup was landing as a direct flex item of #content
— the exact case #content-body exists to prevent. Confirmed with a test include:
as flex items a <span> stretched from 160px to the full 1562px and an <hr> sized
by auto margins collapsed to zero.
Lock page scroll on the dialog and drawer masks specifically, not on
`.p-overlay-mask` alone. DataTable, Tree, TreeTable, Image, Galleria and SpeedDial
put that class on their masks unconditionally, so the broader selector would have
frozen page scroll for the length of a table's loading state the day anyone wires
up OnmsTable's loading prop.
Replace the 41px footer band literal with an --onms-footer-height token, defined
in Footer.vue next to the element it describes and mirroring how Menubar.vue owns
--onms-header-height. `.footer` takes its min-height from the token so the two
cannot drift, and the four pages that size against it now consume it.
Close #content-body and #content on login.jsp and passwordGate.jsp. They include
bootstrap.jsp but deliberately not bootstrap-footer.jsp, so nothing else closed
the divs it opens. Both stay footer-less.
* fix smoke tests
Commit: e2ff9f3702a99825578524f86c66d478cfa30c97
https://github.com/OpenNMS/opennms/commit/e2ff9f3702a99825578524f86c66d478cfa30c97
Author: CI/CD System <[email protected]>
Date: 2026-08-25 (Tue, 25 Aug 2026)
Changed paths:
M core/db/pom.xml
M core/web-assets/src/main/assets/style/opennms-theme.scss
M dependencies/quartz/pom.xml
M features/graph/provider/legacy/pom.xml
M features/graph/provider/legacy/src/main/java/org/opennms/netmgt/graph/provider/legacy/LegacyEdge.java
A features/graph/provider/legacy/src/test/java/org/opennms/netmgt/graph/provider/legacy/LegacyEdgeTest.java
A features/topology-map/org.opennms.features.topology.api/src/main/java/org/opennms/features/topology/api/topo/LinkDetailsAware.java
M features/topology-map/plugins/org.opennms.features.topology.plugins.topo.linkd/src/main/java/org/opennms/features/topology/plugins/topo/linkd/internal/LinkdEdge.java
M features/topology-map/plugins/org.opennms.features.topology.plugins.topo.linkd/src/test/java/org/opennms/features/topology/plugins/topo/linkd/internal/EnhancedLinkdTopologyProviderTest.java
M opennms-base-assembly/src/main/filtered/etc/search-actions.xml
M opennms-webapp/src/main/webapp/WEB-INF/jsp/alarm/list.jsp
M opennms-webapp/src/main/webapp/account/selfService/passwordGate.jsp
M opennms-webapp/src/main/webapp/includes/bootstrap-footer.jsp
M opennms-webapp/src/main/webapp/includes/bootstrap.jsp
M opennms-webapp/src/main/webapp/login.jsp
M smoke-test/src/test/java/org/opennms/smoketest/AdminPageIT.java
M smoke-test/src/test/java/org/opennms/smoketest/MenuHeaderIT.java
M ui/packages/onms-ui/src/components/OnmsDialog.vue
M ui/packages/onms-ui/src/components/OnmsDrawer.vue
M ui/src/components/Common/FormField.vue
M ui/src/components/Device/DCBTable.vue
M ui/src/components/Layout/Footer.vue
M ui/src/components/Logs/Editor.vue
M ui/src/components/Logs/Logs.vue
M ui/src/components/Nodes/ColumnSelectionDrawer.vue
M ui/src/components/Nodes/NodeAdvancedFiltersDrawer.vue
M ui/src/components/SCV/SCVForm.vue
M ui/src/components/SnmpConfiguration/SnmpConfigDetailsPanel.vue
M ui/src/containers/Map.vue
M ui/src/main/App.vue
M ui/src/styles/onms-base.scss
M ui/src/styles/opennms-styles.scss
M ui/tests/components/Common/FormField.test.ts
Log Message:
-----------
Merge remote-tracking branch 'origin/foundation-2026' into release-36.x
Commit: 09512ffba78050f54927c28291e768e22f22b96e
https://github.com/OpenNMS/opennms/commit/09512ffba78050f54927c28291e768e22f22b96e
Author: Scott Theleman <[email protected]>
Date: 2026-08-25 (Tue, 25 Aug 2026)
Changed paths:
M core/web-assets/package.json
M core/web-assets/pnpm-lock.yaml
M core/web-assets/src/main/assets/js/apps/onms-classifications/views/modals/popover.html
Log Message:
-----------
NMS-20250: Dependabot security triage for 'core/web-assets' (August 2026) (#8813)
* NMS-20250: Render confirm-popover text with ng-bind instead of ng-bind-html
* NMS-20250: Drop unused babel-preset-es2015-nostrict devDependency
Removes 52 packages from the lockfile.
Commit: 4878ca79035df0e0d46c59724ee2999d0c90fc8d
https://github.com/OpenNMS/opennms/commit/4878ca79035df0e0d46c59724ee2999d0c90fc8d
Author: CI/CD System <[email protected]>
Date: 2026-08-25 (Tue, 25 Aug 2026)
Changed paths:
M core/web-assets/package.json
M core/web-assets/pnpm-lock.yaml
M core/web-assets/src/main/assets/js/apps/onms-classifications/views/modals/popover.html
Log Message:
-----------
Merge remote-tracking branch 'origin/foundation-2026' into release-36.x
Commit: 6d5a9d0ab83aac6ecdba4c7369548512b97a53d6
https://github.com/OpenNMS/opennms/commit/6d5a9d0ab83aac6ecdba4c7369548512b97a53d6
Author: CI/CD System <[email protected]>
Date: 2026-08-25 (Tue, 25 Aug 2026)
Changed paths:
M core/db/pom.xml
M core/web-assets/package.json
M core/web-assets/pnpm-lock.yaml
M core/web-assets/src/main/assets/js/apps/onms-classifications/views/modals/popover.html
M core/web-assets/src/main/assets/style/opennms-theme.scss
M dependencies/quartz/pom.xml
M features/graph/provider/legacy/pom.xml
M features/graph/provider/legacy/src/main/java/org/opennms/netmgt/graph/provider/legacy/LegacyEdge.java
A features/graph/provider/legacy/src/test/java/org/opennms/netmgt/graph/provider/legacy/LegacyEdgeTest.java
A features/topology-map/org.opennms.features.topology.api/src/main/java/org/opennms/features/topology/api/topo/LinkDetailsAware.java
M features/topology-map/plugins/org.opennms.features.topology.plugins.topo.linkd/src/main/java/org/opennms/features/topology/plugins/topo/linkd/internal/LinkdEdge.java
M features/topology-map/plugins/org.opennms.features.topology.plugins.topo.linkd/src/test/java/org/opennms/features/topology/plugins/topo/linkd/internal/EnhancedLinkdTopologyProviderTest.java
M opennms-base-assembly/src/main/filtered/etc/search-actions.xml
M opennms-webapp/src/main/webapp/WEB-INF/jsp/alarm/list.jsp
M opennms-webapp/src/main/webapp/account/selfService/passwordGate.jsp
M opennms-webapp/src/main/webapp/includes/bootstrap-footer.jsp
M opennms-webapp/src/main/webapp/includes/bootstrap.jsp
M opennms-webapp/src/main/webapp/login.jsp
M smoke-test/src/test/java/org/opennms/smoketest/AdminPageIT.java
M smoke-test/src/test/java/org/opennms/smoketest/MenuHeaderIT.java
M ui/packages/onms-ui/src/components/OnmsDialog.vue
M ui/packages/onms-ui/src/components/OnmsDrawer.vue
M ui/src/components/Common/FormField.vue
M ui/src/components/Device/DCBTable.vue
M ui/src/components/Layout/Footer.vue
M ui/src/components/Logs/Editor.vue
M ui/src/components/Logs/Logs.vue
M ui/src/components/Nodes/ColumnSelectionDrawer.vue
M ui/src/components/Nodes/NodeAdvancedFiltersDrawer.vue
M ui/src/components/SCV/SCVForm.vue
M ui/src/components/SnmpConfiguration/SnmpConfigDetailsPanel.vue
M ui/src/containers/Map.vue
M ui/src/main/App.vue
M ui/src/styles/onms-base.scss
M ui/src/styles/opennms-styles.scss
M ui/tests/components/Common/FormField.test.ts
Log Message:
-----------
Merge remote-tracking branch 'origin/release-36.x' into develop
Commit: b9ad63b5948e9e4df47a3ba40bc2cbb3f2b177fe
https://github.com/OpenNMS/opennms/commit/b9ad63b5948e9e4df47a3ba40bc2cbb3f2b177fe
Author: Marshall Massengill <[email protected]>
Date: 2026-08-26 (Wed, 26 Aug 2026)
Changed paths:
M opennms-config/src/main/java/org/opennms/netmgt/config/EventTranslatorConfigFactory.java
A opennms-config/src/test/java/org/opennms/netmgt/config/EventTranslatorConfigReloadTest.java
Log Message:
-----------
NMS-20258: Keep the DataSource across an event translator config reload (#8814)
EventTranslatorConfigFactory.update() unmarshalled the new configuration
through an overload that passed a null DataSource, so m_dbConnFactory was
cleared on every reload. SqlValueSpec reads that field when it evaluates,
so after the first reloadDaemonConfig for the Translator every mapping
holding a type="sql" value threw
NullPointerException: Cannot invoke "javax.sql.DataSource.getConnection()"
because "this.m_db" is null
and stopped translating until OpenNMS was restarted. Mappings without a sql
value kept working, which is why the reload looked successful.
update() was the only caller of the single-argument overload, so it now
passes the DataSource it already holds and the overload is gone.
Reproduced on a live 36.0.4 instance against a translation whose values are
resolved in sql. The shipped translator-configuration.xml resolves ifDescr,
ifName and ifAlias that way, so a reload leaves the default link-down and
link-up translations broken. Present unchanged since 2012 and on every
maintained branch.
Commit: 167337244656caa2ad3a649ac6b9dbcf5c662240
https://github.com/OpenNMS/opennms/commit/167337244656caa2ad3a649ac6b9dbcf5c662240
Author: CI/CD System <[email protected]>
Date: 2026-08-26 (Wed, 26 Aug 2026)
Changed paths:
M opennms-config/src/main/java/org/opennms/netmgt/config/EventTranslatorConfigFactory.java
A opennms-config/src/test/java/org/opennms/netmgt/config/EventTranslatorConfigReloadTest.java
Log Message:
-----------
Merge remote-tracking branch 'origin/foundation-2024' into foundation-2025
Commit: b673d2484793c18d5380c48bd5ccf02b04af56c2
https://github.com/OpenNMS/opennms/commit/b673d2484793c18d5380c48bd5ccf02b04af56c2
Author: CI/CD System <[email protected]>
Date: 2026-08-26 (Wed, 26 Aug 2026)
Changed paths:
M opennms-config/src/main/java/org/opennms/netmgt/config/EventTranslatorConfigFactory.java
A opennms-config/src/test/java/org/opennms/netmgt/config/EventTranslatorConfigReloadTest.java
Log Message:
-----------
Merge remote-tracking branch 'origin/foundation-2025' into foundation-2026
Commit: 48b76a191dd69c2acee461b7582bba1a41630d24
https://github.com/OpenNMS/opennms/commit/48b76a191dd69c2acee461b7582bba1a41630d24
Author: Marshall Massengill <[email protected]>
Date: 2026-08-26 (Wed, 26 Aug 2026)
Changed paths:
M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/SnmpConfigRestService.java
M opennms-webapp-rest/src/test/java/org/opennms/web/rest/v2/SnmpConfigRestServiceIT.java
Log Message:
-----------
NMS-20262: Make the JSON snmp-config download a faithful restore (#8816)
GET /snmp-config/download?format=json serialized SnmpConfig through its
getters, and those getters substitute a default when the backing field is
null (timeout and retry return 0, port 161, max-vars-per-pdu 10, and so
on). Every value a definition inherited from the top-level config was
therefore written out as an explicit one, and re-uploading the file
through POST /snmp-config/upload pinned each definition's timeout and
retry to 0 - agents that had been polling on the global 1800 ms timeout
were left with none. The XML pair was unaffected because JAXB binds to
the fields.
Serialize the download from the fields instead, dropping nulls, so the
file carries only what was actually configured. The upload path and the
other JSON endpoints keep the existing mapper.
Co-authored-by: Marshall Massengill <[email protected]>
Commit: 25cd7ac0163d23134e1ba278cc362e963fb850e1
https://github.com/OpenNMS/opennms/commit/25cd7ac0163d23134e1ba278cc362e963fb850e1
Author: CI/CD System <[email protected]>
Date: 2026-08-26 (Wed, 26 Aug 2026)
Changed paths:
M opennms-config/src/main/java/org/opennms/netmgt/config/EventTranslatorConfigFactory.java
A opennms-config/src/test/java/org/opennms/netmgt/config/EventTranslatorConfigReloadTest.java
M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/SnmpConfigRestService.java
M opennms-webapp-rest/src/test/java/org/opennms/web/rest/v2/SnmpConfigRestServiceIT.java
Log Message:
-----------
Merge remote-tracking branch 'origin/foundation-2026' into release-36.x
Commit: 6bf8c338ae2f8065055d434fed91dfbe99d00c77
https://github.com/OpenNMS/opennms/commit/6bf8c338ae2f8065055d434fed91dfbe99d00c77
Author: CI/CD System <[email protected]>
Date: 2026-08-26 (Wed, 26 Aug 2026)
Changed paths:
M opennms-config/src/main/java/org/opennms/netmgt/config/EventTranslatorConfigFactory.java
A opennms-config/src/test/java/org/opennms/netmgt/config/EventTranslatorConfigReloadTest.java
M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/SnmpConfigRestService.java
M opennms-webapp-rest/src/test/java/org/opennms/web/rest/v2/SnmpConfigRestServiceIT.java
Log Message:
-----------
Merge remote-tracking branch 'origin/release-36.x' into develop
Commit: a5ab207cbc3999a2fdf9e0a7f578cb986677f94c
https://github.com/OpenNMS/opennms/commit/a5ab207cbc3999a2fdf9e0a7f578cb986677f94c
Author: mershad-manesh <[email protected]>
Date: 2026-08-27 (Thu, 27 Aug 2026)
Changed paths:
M opennms-services/src/main/java/org/opennms/netmgt/poller/pollables/PendingPollEvent.java
M opennms-services/src/test/java/org/opennms/netmgt/poller/PollerQueryManagerDaoIT.java
Log Message:
-----------
Fix flaky testInterfaceReparented and a related outage event-ID race in PendingPollEvent (#8815)
Commit: 334c627d758f9be390e459993e94b790fcf4726a
https://github.com/OpenNMS/opennms/commit/334c627d758f9be390e459993e94b790fcf4726a
Author: Marshall Massengill <[email protected]>
Date: 2026-08-27 (Thu, 27 Aug 2026)
Changed paths:
M opennms-services/src/main/java/org/opennms/netmgt/collectd/CollectableService.java
M opennms-services/src/test/java/org/opennms/netmgt/collectd/CollectableServiceTest.java
M opennms-services/src/test/java/org/opennms/netmgt/collectd/CollectdIT.java
M opennms-services/src/test/java/org/opennms/netmgt/collectd/ThresholdIT.java
Log Message:
-----------
NMS-19979: clear data collection alarms after a restart or collectd reload (#8774)
* NMS-19979: clear data collection alarms after a restart or collectd reload
A dataCollectionFailed alarm never cleared if collection recovered across an
OpenNMS restart or a collectd configuration reload.
CollectableService keeps the last collection status in memory and updateStatus()
only emits an event on a transition. That status was seeded to SUCCEEDED, and
both a restart and rebuildScheduler() discard and rebuild every
CollectableService, so the recovery was no longer a transition, no
dataCollectionSucceeded was sent, and the alarm was orphaned.
Seed it to UNKNOWN instead. The first collection then always transitions,
whichever way it goes: a success emits dataCollectionSucceeded and clears the
alarm the previous generation left behind, and a failure emits
dataCollectionFailed exactly as before. Subsequent collections are unchanged,
so this costs one extra event per collected service per restart or reload, not
one per collection cycle.
An unmatched dataCollectionSucceeded creates a Normal severity alarm of its own,
which the default alarmd cleanUp rule deletes after five minutes.
* NMS-19979: Update collectd tests for the first-collection succeeded event
Seeding m_status to UNKNOWN makes the first successful collection of every
scheduling generation a transition, so it now emits dataCollectionSucceeded.
Two existing tests assumed that event never fired.
ThresholdIT anticipates it once per generation. A nodeCategoryMembershipChanged
event unschedules and reschedules the node, building a fresh CollectableService,
so the reschedule reports success again after the second category change.
CollectdIT.testOneMatchingSpec performs real collections, so it accounts for the
send explicitly rather than loosening tearDown's verifyNoMoreInteractions.
Commit: 2ba73e1539cfbf11943eb2379a5dba239e2f017f
https://github.com/OpenNMS/opennms/commit/2ba73e1539cfbf11943eb2379a5dba239e2f017f
Author: CI/CD System <[email protected]>
Date: 2026-08-27 (Thu, 27 Aug 2026)
Changed paths:
M opennms-services/src/main/java/org/opennms/netmgt/poller/pollables/PendingPollEvent.java
M opennms-services/src/test/java/org/opennms/netmgt/poller/PollerQueryManagerDaoIT.java
Log Message:
-----------
Merge remote-tracking branch 'origin/foundation-2026' into release-36.x
Commit: 48c6e502187ba2b8344f59f6558e2c16c1fcafd8
https://github.com/OpenNMS/opennms/commit/48c6e502187ba2b8344f59f6558e2c16c1fcafd8
Author: CI/CD System <[email protected]>
Date: 2026-08-27 (Thu, 27 Aug 2026)
Changed paths:
M opennms-services/src/main/java/org/opennms/netmgt/collectd/CollectableService.java
M opennms-services/src/test/java/org/opennms/netmgt/collectd/CollectableServiceTest.java
M opennms-services/src/test/java/org/opennms/netmgt/collectd/CollectdIT.java
M opennms-services/src/test/java/org/opennms/netmgt/collectd/ThresholdIT.java
Log Message:
-----------
Merge remote-tracking branch 'origin/foundation-2024' into foundation-2025
Commit: 3f4bb3e089774cf3022e5c3e490f221ee1a473d3
https://github.com/OpenNMS/opennms/commit/3f4bb3e089774cf3022e5c3e490f221ee1a473d3
Author: CI/CD System <[email protected]>
Date: 2026-08-27 (Thu, 27 Aug 2026)
Changed paths:
M opennms-services/src/main/java/org/opennms/netmgt/poller/pollables/PendingPollEvent.java
M opennms-services/src/test/java/org/opennms/netmgt/poller/PollerQueryManagerDaoIT.java
Log Message:
-----------
Merge remote-tracking branch 'origin/release-36.x' into develop
Commit: 7224c0246ba7c6cb4142fb69dcaae5af43398358
https://github.com/OpenNMS/opennms/commit/7224c0246ba7c6cb4142fb69dcaae5af43398358
Author: CI/CD System <[email protected]>
Date: 2026-08-27 (Thu, 27 Aug 2026)
Changed paths:
M opennms-services/src/main/java/org/opennms/netmgt/collectd/CollectableService.java
M opennms-services/src/test/java/org/opennms/netmgt/collectd/CollectableServiceTest.java
M opennms-services/src/test/java/org/opennms/netmgt/collectd/CollectdIT.java
M opennms-services/src/test/java/org/opennms/netmgt/collectd/ThresholdIT.java
Log Message:
-----------
Merge remote-tracking branch 'origin/foundation-2025' into foundation-2026
Commit: 6ac56f2630835856338eaa1428d9dec0e9f77a68
https://github.com/OpenNMS/opennms/commit/6ac56f2630835856338eaa1428d9dec0e9f77a68
Author: CI/CD System <[email protected]>
Date: 2026-08-27 (Thu, 27 Aug 2026)
Changed paths:
M opennms-services/src/main/java/org/opennms/netmgt/collectd/CollectableService.java
M opennms-services/src/test/java/org/opennms/netmgt/collectd/CollectableServiceTest.java
M opennms-services/src/test/java/org/opennms/netmgt/collectd/CollectdIT.java
M opennms-services/src/test/java/org/opennms/netmgt/collectd/ThresholdIT.java
Log Message:
-----------
Merge remote-tracking branch 'origin/foundation-2026' into release-36.x
Commit: ee6df0b663b92bf776257bca63d5ea2d454d50a4
https://github.com/OpenNMS/opennms/commit/ee6df0b663b92bf776257bca63d5ea2d454d50a4
Author: CI/CD System <[email protected]>
Date: 2026-08-27 (Thu, 27 Aug 2026)
Changed paths:
M opennms-services/src/main/java/org/opennms/netmgt/collectd/CollectableService.java
M opennms-services/src/test/java/org/opennms/netmgt/collectd/CollectableServiceTest.java
M opennms-services/src/test/java/org/opennms/netmgt/collectd/CollectdIT.java
M opennms-services/src/test/java/org/opennms/netmgt/collectd/ThresholdIT.java
Log Message:
-----------
Merge remote-tracking branch 'origin/release-36.x' into develop
Commit: e23ed1a215fd0499c5ddac9e0a23b792276710f8
https://github.com/OpenNMS/opennms/commit/e23ed1a215fd0499c5ddac9e0a23b792276710f8
Author: joseanesONMS <[email protected]>
Date: 2026-08-28 (Fri, 28 Aug 2026)
Changed paths:
M features/bsm/rest/impl/pom.xml
M features/status/rest/pom.xml
M opennms-openapi-docs/pom.xml
M opennms-webapp-rest/pom.xml
A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/SystemReportRestService.java
M opennms-webapp-rest/src/main/webapp/WEB-INF/applicationContext-cxf-rest-v2.xml
M opennms-webapp-rest/src/main/webapp/WEB-INF/menu/menu-template-default.json
M opennms-webapp-rest/src/main/webapp/WEB-INF/menu/menu-template.json
A opennms-webapp-rest/src/test/java/org/opennms/web/rest/v2/SystemReportRestServiceTest.java
M opennms-webapp/src/main/webapp/WEB-INF/applicationContext-spring-security.xml
M smoke-test/src/test/java/org/opennms/smoketest/MenuHeaderIT.java
A ui/src/containers/SystemReport.vue
M ui/src/main/router/index.ts
M ui/src/services/index.ts
A ui/src/services/systemReportService.ts
A ui/src/types/systemReport.ts
A ui/tests/systemReport.test.ts
Log Message:
-----------
NMS-20154: Migrate the Generate System Report page to Vue UI (#8824)
* NMS-20154: /api/v2/system-report metadata endpoints for the new report page
Adds a read-only SystemReportRestService exposing the visible report plugins and
formatters as JSON so a PrimeVue Generate System Report page can build its form.
The systemReport bean is wired into the REST v2 context through the SOA service
registry, mirroring the legacy dispatcher wiring, and the endpoints are gated to
ROLE_ADMIN since the report bundles logs and configuration. Report generation
itself continues to stream from the existing SystemReportController.
* NMS-20154: PrimeVue Generate System Report page
Replaces the legacy systemReport JSP form with a PrimeVue page at /system-report:
plugin checkboxes with an All master toggle, a report-type Select, and an optional
file name. The page loads its options from /api/v2/system-report and, on Generate,
posts operation=run to the existing SystemReportController through a hidden iframe
so the browser streams the report download without navigating away. The route is
admin-gated to match the endpoint.
* NMS-20154: wire systemReport via the root-context serviceRegistry bean
serviceRegistry is a root-context bean (applicationContext-soa.xml) and the CXF
/api/v2 servlet context has the root as its parent, so a direct ref resolves it —
matching the legacy dispatcher wiring. Replaces the earlier onmsgi:reference,
which had no matching OSGi service registration.
* NMS-20154: point the Support menu entry at the new system report page
Repoints the "Generate System Report" menu item from the legacy
admin/support/systemReportList.htm JSP to the PrimeVue page at
ui/index.html#/system-report.
* NMS-20154: report-service unit test and a generating-report notice
Adds a SystemReportRestService unit test covering the visible-only filtering and
DTO mapping for plugins and formatters. The page now shows a notice on Generate
that the report is being built and may take a while on a large system, since the
report is produced on demand (plugins run and logs/config are gathered and
compressed before the streamed download begins) and the browser cannot signal
when that download completes.
* NMS-20154: address review — surface generation failures, sanitize filename
The Generate flow now detects when the hidden download frame loads an error page
(a failed download never loads it) and surfaces the failure instead of silently
doing nothing. The optional filename is sanitized to word characters the same way
the server does, and omitted when it would collapse to an empty name. The default
report format returns to the legacy 'text', plugin checkbox ids are made
whitespace-safe, the context path is derived from the URL when the menu base is
unavailable, and a non-admin deep-link no longer flashes a load error before the
route guard redirects. Also drops the dead JSON-shape fallback in the service.
* NMS-20154: update the smoke assertion for the new system report page
The Support -> Generate System Report menu entry now opens the PrimeVue
page (ui/index.html#/system-report), which renders the /ui breadcrumb
(div.breadcrumbs) and an OnmsButton. MenuHeaderIT still waited on the
legacy JSP DOM (ol.breadcrumb 'System Reports' and a Bootstrap submit
input), so testMenuEntries timed out. Point it at the new page's
breadcrumb link and generate button.
* NMS-20154: use Onms-XXX wrappers and a REST download for system report
Address review on the Generate System Report page:
- Swap direct PrimeVue (Card, Checkbox, Select, InputText) for the
@opennms/onms-ui wrappers (OnmsCard/OnmsCheckbox/OnmsSelect/
OnmsInputText); the binary OnmsCheckbox drives per-plugin selection
through an explicit add/remove toggle.
- Replace the hidden-iframe form POST to the legacy systemReport.htm
with a POST /api/v2/system-report/generate that streams the report as
an attachment, consumed via composables/useDownload. The endpoint
ports FormatterView (resolve formatter, run selected plugins, sanitize
filename) and rejects unknown/non-streaming formatters and empty
plugin sets with 400s. Generation is admin-only in spring-security.
- Cover the endpoint (stream order, attachment header, filename
sanitising, the 400 paths) and rewrite the page test for the new flow.
* NMS-20154: give the sibling v2 REST ITs the system-report class on their test classpath
features/status/rest and features/bsm/rest/impl boot opennms-webapp-rest's
shared applicationContext-cxf-rest-v2.xml in their ITs. That context now
instantiates SystemReportRestService and defines the systemReport bean
(class org.opennms.systemreport.SystemReport), which opennms-webapp-rest
declares provided (non-transitive), so those ITs failed to load the whole
context with a ClassNotFoundException. Add system-report as a test-scope
dependency in both modules, mirroring the existing topology-views/jsonStore
entries that cover the same shared-context requirement.
* NMS-20154: re-run CI (flaky smoke test AdminPasswordGateIT, unrelated)
* NMS-20154: put system-report on the openapi-docs classpath
The swagger scan reflects over SystemReportRestService's declared fields, so
the type of m_systemReport must be resolvable when opennms-openapi-docs builds.
webapp-rest declares the system-report feature as provided (non-transitive),
so add it here at provided scope too — matching the topology-views entry that
exists for the same reason and the sibling fixes in bsm/rest and status/rest.
Commit: 3720b4d574de6708cc18b553e145ae08c13177e8
https://github.com/OpenNMS/opennms/commit/3720b4d574de6708cc18b553e145ae08c13177e8
Author: joseanesONMS <[email protected]>
Date: 2026-08-31 (Mon, 31 Aug 2026)
Changed paths:
A opennms-webapp-rest/127.0.0.1.tm4.epoch
A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/DashboardRestService.java
A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/api/DashboardRestApi.java
A opennms-webapp-rest/src/test/java/org/opennms/web/rest/v2/DashboardRestServiceIT.java
A opennms-webapp-rest/tmlog4.log
M opennms-webapp/src/main/webapp/WEB-INF/applicationContext-spring-security.xml
M opennms-webapp/src/main/webapp/includes/quicksearch-box.jsp
M ui/package.json
M ui/pnpm-lock.yaml
A ui/src/components/Dashboard/DashboardFilterControl.vue
A ui/src/components/Dashboard/DashboardGrid.vue
A ui/src/components/Dashboard/DashboardToolbar.vue
A ui/src/components/Dashboard/PanelFrame.vue
A ui/src/components/Dashboard/PanelOptionsDialog.vue
A ui/src/components/Dashboard/defaultLayout.ts
A ui/src/components/Dashboard/filter.ts
A ui/src/components/Dashboard/panels/HtmlContentPanel.vue
A ui/src/components/Dashboard/panels/NotesPanel.vue
A ui/src/components/Dashboard/panels/SamplePanel.vue
A ui/src/components/Dashboard/registry.ts
A ui/src/components/Dashboard/severity.ts
A ui/src/components/Dashboard/timeframe.ts
A ui/src/composables/useDashboardRefresh.ts
A ui/src/containers/Dashboard.vue
M ui/src/main/router/index.ts
A ui/src/services/dashboardService.ts
A ui/src/stores/dashboardStore.ts
A ui/src/types/dashboard.ts
A ui/tests/components/Dashboard/HtmlContentPanel.test.ts
A ui/tests/components/Dashboard/filter.test.ts
A ui/tests/components/Dashboard/registry.test.ts
A ui/tests/components/Dashboard/severity.test.ts
A ui/tests/components/Dashboard/timeframe.test.ts
A ui/tests/composables/useDashboardRefresh.test.ts
A ui/tests/services/dashboardService.test.ts
A ui/tests/stores/dashboardStore.test.ts
Log Message:
-----------
NMS-19851: configurable dashboard framework (base) (#8721)
* NMS-19851: Configurable system-wide dashboard (milestones 1-2 + persistence backend)
Adds a configurable, PrimeVue-based Vue 3 dashboard under /ui (route
/dashboard) to begin replacing the legacy JSP homepage, plus the REST
endpoint to persist its layout.
Frontend (ui/):
- Panel framework: registry, Pinia store, default layout, PanelFrame chrome
(PrimeVue Panel), and a sample panel. Panels receive resolved filter /
timeframe / refresh contracts.
- DashboardGrid uses grid-layout-plus for drag + resize (edit mode only);
geometry flows grid -> store, add/remove/collapse flow store -> grid.
- Toolbar: global timeframe, refresh interval + pause (NMS-4404), add panel,
save/edit; per-panel collapse/rename/remove.
- Global filter control (NMS-10507): surveillance categories + IP match.
- dashboardService talks to /api/v2/dashboard/system (404 -> built-in default).
Backend (opennms-webapp-rest):
- DashboardRestApi / DashboardRestService: GET/PUT /api/v2/dashboard/system,
persisting one system-wide JSON layout document via JsonStore.
Addresses NMS-11946 (collapse/rearrange/hide) and lays groundwork for
NMS-4433 (new panel types). Future: per-user / named dashboards reuse the
same layout document by varying its scope.
* NMS-19851: Add first real dashboard panels (notifications, status overview, nodes with alarms)
Replaces the placeholder default layout with three panels matching the legacy
homepage boxes:
- Notifications: outstanding-notice counts from /rest/notifications/summary.
- Status Overview: Chart.js doughnut of alarm counts by severity, read from
/api/v2/alarms totalCount per severity (FIQL alarm.severity==).
- Nodes with Pending Alarms: alarms grouped by node with count + max severity.
Adds a shared severity util (ordering, labels, OpenNMS-standard colors) and a
notificationService. Panels refetch on the global refresh tick.
* NMS-19851: Status Overview outages donut + News Feed panel
- Status Overview now shows BOTH legacy doughnuts (alarms + outages), sourced
from /api/v2/status/summary/nodes/{alarms,outages} (nodes grouped by unacked
alarms / current outages), replacing the prior alarms-only per-severity count.
- New News Feed panel from /api/v2/newsfeed (title/link/short description/tags).
Adds statusService and newsfeedService; both panels added to the default layout.
* NMS-19851: Add Pending Situations and Service Outages panels
- Pending Situations: alarms filtered isSituation==true (/api/v2/alarms), with
severity, affected-node/alarm counts.
- Nodes with Service Outages: currently-open outages from /api/v2/outages
(FIQL ifRegainedService==epoch), node + service name.
Adds outageService and situationService; refactors the default layout into a
three-column arrangement (situations/alarms/outages, status overview,
notifications/news) via a small panel() helper.
* NMS-19851: Add Regional Status map panel
Leaflet/OSM map (vue-leaflet) replicating the legacy homepage map: geolocated
nodes (/api/v2/nodes assetRecord) with markers colored by each node's highest
alarm severity (derived from /api/v2/alarms). Handles grid resize via
ResizeObserver -> invalidateSize. Added to the registry + default layout.
* NMS-19851: Wider middle column in default dashboard layout
Match the legacy homepage proportions: 3 / 6 / 3 of the 12-col grid (was even
4/4/4). Left = situations/alarms/outages, center (wide) = status overview + map,
right = notifications/news. Individual panels remain resizable via the grid.
* NMS-19851: Add Availability (24h) panel
Replicates the legacy "Availability Over the Past 24 Hours" categories box from
GET /rest/availability (RTC category data: outage-text, availability-text,
availability-class). Table of category / outages / availability with an Overall
Service Availability total row; availability colored by class. No new backend
needed. Added to registry + default layout (center column, under Status Overview).
* NMS-19851: Add Business Services and Applications (with pending alarms) panels
Both replicate the legacy summary boxes from the existing status REST
(/api/v2/status/business-services and /status/applications) — no new backend
needed; the list-with-severity endpoints already exist in StatusRestService.
Shared StatusListPanel renders name + severity badge, filtered to problem
severities (WARNING+). Added to registry + left column of the default layout.
* NMS-19851: Search widgets, original-layout order, toolbar tooltips + fullscreen
- Add Quick Search (node id/label/IP -> element/nodeList.htm), and Resource
Graphs / KSC Reports launcher panels (link to legacy chooser pages; full
typeahead is a follow-up).
- Default layout now mirrors the legacy homepage column order/positions for
easy comparison: left = situations/alarms/outages/BSM/apps/news; center =
status/availability/map; right = notifications/resource-graphs/KSC/quick-search.
- Toolbar: title tooltips on the timeframe + refresh selects (and pause), and a
Full screen button (Fullscreen API on the dashboard container) for NOC displays.
* NMS-19851: Dashboard panel polish (map, donuts, panel height, double titles)
- PanelFrame: make the PrimeVue Panel content wrappers flex to a bounded height
so fill-height panels (map, charts) size correctly instead of overflowing.
- Regional Status: always renders the map (even with no nodes); remembers pan +
zoom across reloads via localStorage; empty-state shown as a small pill.
- Status Overview: thicker donuts (cutout 55%) that fit the box (no longer cut).
- Resource Graphs / KSC Reports: drop the redundant in-panel title (the panel
header already shows it).
* NMS-19851: Fix fullscreen, footer overlap, overlay font, donut resize
- web.xml: Permissions-Policy was fullscreen=() which blocked the Fullscreen API;
changed to fullscreen=(self). Toolbar fullscreen toggle now also falls back to
a CSS "maximize" if the API is unavailable.
- DashboardGrid: add bottom padding so the app's fixed copyright bar no longer
cuts the last panels.
- Dashboard: global style so PrimeVue overlays (teleported to <body>) use the app
sans-serif font instead of the serif default (fixes combo-box dropdown font).
- Status Overview: donuts resize with the panel (ResizeObserver) and are clipped
to the box.
* NMS-19851: Per-panel options dialog, fixed/auto height, Notes + HTML panels
- Per-panel options dialog (gear): height mode + panel-type-specific settings.
- Height mode per panel: 'fixed' (fixed grid height + scrollbar) or 'auto'
(PanelFrame measures natural content height; DashboardGrid fits the cell, so
empty list panels shrink to a couple of lines). Auto panels aren't manually
resizable and their height isn't persisted. Registry defaults match the legacy
homepage: News Feed / Availability / Status Overview / Regional map = fixed,
all the list panels = auto.
- New panels: Notes (free text in options) and HTML Content (iframe to a URL;
same-origin per the frame-src CSP).
* NMS-19851: Fix panel overlap from auto-height (manual vertical compaction)
grid-layout-plus doesn't recompact on programmatic height changes, so auto-height
resizes (and add/remove) could leave panels overlapping. Add our own vertical
compaction (place each item at the lowest non-colliding y in its columns) run
after auto-height changes and reconcile.
* NMS-19851: Fix fixed-panel height chain, internal scroll vs footer, HTML URL validation
- Fixed panels now actually bound + scroll: the PrimeVue 4 chain has an extra
.p-panel-content-wrapper between container and content that wasn't flexed —
add it. This fixes News Feed/Availability scrollbars AND the Regional map
(the map now gets a real height and renders tiles even with no nodes).
- Dashboard scrolls internally (flex column; grid is the scroll region) and the
content chain gets a definite height via :has(#dashboard-root), so a tall
dashboard no longer overflows past the app footer/copyright bar.
- HTML Content options: validate the URL — external (cross-origin) URLs are
rejected with an explanation (blocked by frame-src 'self' CSP) before applying.
* NMS-19851: Auto-height panels shrink to content (min-h=1, no reserved whitespace)
Auto panels were clamped to the registry minSize.h, leaving whitespace under
short content (and reserving space visibly in edit mode). Use min-h=1 for
auto-height panels so the cell hugs the measured content.
* NMS-19851: Add Top N panel (rank entities by a chosen KPI over the timeframe)
New 'topn' panel: ranks by a selectable KPI with sort direction and N (options
dialog). Default KPI = Node Response Time (ICMP), descending, N=5. Data via the
measurements API (POST /rest/measurements): enumerate matching resources from
/rest/resources, query one AVERAGE bucket over the resolved timeframe, sort,
take N. KPI registry (topnService) is extensible for more KPIs.
* NMS-19851: TopN measurements use a normal-resolution step (fix NaN)
A single range-sized RRD bucket returns NaN; query at ~range/1000 (min 5min)
and average the series for the aggregate.
* NMS-19851: Fix auto-height measurement + dark-mode panel theming
- PanelFrame now wraps the PrimeVue Panel in a real <div> (frameRef) and measures
that for auto-height — the component ref didn't reliably expose a DOM node, so
auto panels never shrank (the leftover whitespace). Auto panels now fit content.
- Panel surface/header/text/border use Feather theme variables
(--feather-elevation-background-2 / -primary-text-on-surface / -border-on-surface),
which adapt under .open-dark — so panels are legible in dark mode instead of
white-with-invisible-text.
* NMS-19851: Tighten panel padding + compact columns on mount (less whitespace)
Reduce PrimeVue panel header/content padding so short auto panels (Resource
Graphs, KSC, etc.) don't round up to an extra grid row, and run a vertical
compaction pass shortly after mount so columns stack tight once panels report
their auto heights.
* NMS-19851: Real compaction (fresh refs), severity-shading option, legacy->new button
- DashboardGrid: compaction now reassigns the layout with FRESH item objects (and
vertical-compact enabled) so grid-layout-plus actually re-renders compacted
positions — removes the leftover gaps in saved layouts (e.g. Resource Graphs/KSC).
- Per-panel "Shade rows by severity" option (legacy-style) for Pending Situations,
Nodes with Pending Alarms, and Availability — rows tinted by severity.
- Legacy homepage: "Try the new Dashboard (beta)" button below the Quick Search box
(links to /opennms/ui/#/dashboard).
* NMS-19851: Auto-height actually applies (always reassign) + service-types backend/combo
- DashboardGrid: grid-layout-plus only re-renders when the layout ARRAY ref/length
changes (watch on [layout, length]); it ignored in-place h/y mutations. compactLayout
now ALWAYS reassigns fresh item objects, so auto-height + compaction truly apply
(this was why the whitespace "did nothing").
- Backend: DashboardRestService gains GET /api/v2/dashboard/service-types (id+name)
via ServiceTypeDao; rebuilt + deployed the webapp-rest jar.
- Quick Search: "Providing service" combo populated from that endpoint, posting the
service id to element/nodeList.htm (matches the legacy box).
* NMS-19851: Pixel-perfect panel heights, panel/category deep-links, dedup availability total
Spacing (real fix): switch the grid to pixel units — row-height=1, vertical
margin=0, h measured in px. Auto panels size to exactly their content height plus
a 12px gap (was rounding up to the next ~56px row, which caused the persistent
whitespace). Fixed panels fill the cell minus that 12px gap. Old/default layouts
(h in ~44px row units) are auto-converted to px on load.
Linking parity with the legacy front page:
- Panel titles deep-link (Situations/Alarms -> alarm/list.htm, Outages ->
outage/list.htm, Applications -> application/index.jsp, Availability ->
rtc/index.jsp, Notifications -> notification/index.jsp, Resource Graphs ->
graph/index.jsp, KSC -> KSC/index.jsp). Plain text while in edit mode so the
header stays a drag handle.
- Availability category names link to rtc/category.jsp (outage detail).
Availability: render the REST "Total" section's "Overall Service Availability"
row as the bold total instead of appending our own computed row (removes the
duplicate).
Legacy homepage "Try the new Dashboard" button: blue -> light gray.
* NMS-19851: BSM title deep-link + readable donut legend in dark mode
- Business Services panel title now links to the BSM topology view
(topology?provider=Business Services&layout=Hierarchy Layout&szl=1).
- Status Overview donut legends read the Feather text color so labels are
legible on the dark surface (Chart.js' default gray was unreadable); a
MutationObserver recolors them live when the .open-dark theme is toggled.
* NMS-19851: Metric Chart panel — line chart of one entity/metric over the timeframe
New 'metric-chart' panel type: Chart.js line chart of a single metric on a
single entity over the panel's resolved timeframe. Entity and metric are
single-selects in the panel options (entity list = entities with data for
the chosen metric); defaults: localhost / Node Response Time (ICMP).
Reuses the Top-N KPI registry and measurements data path (listKpiSources
extracted from queryTopn).
* NMS-19851: Hide Sample Panel from the Add Panel picker
Registry 'hidden' flag: the panel stays registered (renders if a layout
references it, handy for framework debugging) but is no longer offered
in production via Add Panel.
* NMS-19851: 'Reset to default' in edit mode — restore the factory layout
store.applyFactoryDefault() swaps in createDefaultLayout() (legacy homepage
parity incl. the Regional Map) and marks dirty; persists on Save. Fixes the
gap where a saved layout always shadowed the built-in default with no way
back (store.reset() only reloads the saved doc).
* NMS-19851: Status Overview donut slices deep-link in context (legacy parity)
Clicking a severity slice navigates to the legacy severity-filtered node
list (status/index.jsp?type=nodes&strategy={alarms|outages}&severityFilter=),
matching the original homepage status-box onclick; pointer cursor on hover.
* NMS-19851: adapt the dashboard to current develop
FeatherDS is gone from the UI stack: the SORT enum import moves to its
vendored home in @/types, and the panel styling swaps the feather CSS
variables for the PrimeVue tokens the rest of /ui uses, including the
computed-style reads that color the Chart.js legends. grid-layout-plus is
the only dependency develop did not already carry.
* NMS-19851: dashboard test suite and admin-only layout writes
Adds the missing automated coverage: store behavior (load/save/dirty
tracking, panel operations, geometry sync, override resolution), panel
registry and default-layout consistency, timeframe range math, severity
helpers, the service fallback paths, the global refresh timer, and a REST
integration test for the layout document lifecycle and service types.
The layout endpoint gets the security it implied but never enforced:
every user can read the system dashboard, only admins can save it —
enforced by Spring Security rules and an in-code check, and covered by
the integration test.
* NMS-19851: fix adversarial review findings on the dashboard
Correctness: the grid now applies a loaded layout (a layout-revision watch
rebuilds geometry, and geometry is only written back while editing, so a
saved arrangement is no longer overwritten by defaults on open); a failed
load keeps the current layout instead of fabricating the default that a
Save would then persist; a partial/corrupt stored document is normalized
so it can't crash every user's homepage; route re-entry preserves unsaved
edits. Top-N maps measurements to sources by the label index the backend
returns (not position, which is hash-ordered); Nodes-with-Alarms counts
only unacknowledged WARNING+ alarms; Top-N and the metric chart guard
against stale concurrent responses.
Security: the HTML-content iframe only loads validated same-origin http(s)
URLs (a persisted javascript:/data: URL no longer executes); the app-wide
fullscreen Permissions-Policy relaxation is reverted (the toolbar falls
back to CSS maximize); the dashboard security rules no longer shadow the
/api/v2 GET catch-all; Edit/Save are admin-only, matching the layout PUT.
Features: the global filter (surveillance categories resolved to node ids,
plus IP match) now constrains the node-scoped panels; a custom timeframe
gains a real date-range picker and panels react to from/to; the newsfeed
honors opennms.newsFeedPanel.show=false without any outbound request.
Adds tests for the store, service normalization/errors, the filter helper,
Top-N mapping, and the iframe URL guard.
* NMS-19851: move timeframeRange into the framework timeframe helper
The preset-to-epoch-range resolver is a timeframe concern used by both the
Top-N and metric-chart panels; moving it out of topnService lets the panel
groups be split cleanly without the framework depending on a panel service.
* NMS-19851: configurable dashboard framework (base)
The layout engine and its supporting framework, with an empty default
dashboard: grid-layout-plus grid with drag/resize/collapse/rename/remove,
the panel registry and Add-panel picker, one system-wide layout persisted
as JSON via /api/v2/dashboard (admin-only writes), the global refresh
timer with pause, the timeframe and filter toolbar controls, and full-
screen. Ships the three content-agnostic panels used to exercise the
framework — Sample (hidden), Notes, and HTML Content — and a beta link to
the dashboard on the legacy homepage. Parity panels (NMS-20126) and the
new panels (NMS-20127) build on this and introduce the default layout.
* NMS-19851: resolve dashboard filter categories via the node search that filters
The bare /api/v2/nodes?category=NAME parameter is ignored and returns every
node, so the global filter's category selection resolved to all node ids and
did not filter. Use the node search property that actually constrains by
membership (_s=category.name==NAME).
* NMS-19851: drop accidentally committed ui/node_modules symlink
A stray symlink to a local worktree's node_modules was committed with the
base framework change; it makes the CI pnpm install fail with ENOTDIR when it
tries to create the real node_modules directory.
* NMS-19851: onms-ui seam migration, auto-fit layout option, auto-height compaction fix
Move the dashboard framework chrome off direct PrimeVue onto the
@opennms/onms-ui Onms-* wrappers (NMS-20081 seam), so the framework
passes the no-direct-primevue lint rule. PanelFrame's edit icons move
into the panel header slot since OnmsPanel forwards only that slot.
Add an auto-fit ("squeeze") layout option persisted on the layout doc
and toggleable in edit mode: panels pack up and down against their
neighbours, or stay free-form. Fix the auto-height race where an async
layout reload reset measured panel heights back to their authored
placeholder and left gaps — measured heights are now cached and reused
across rebuilds, so collapse/expand and initial load pack tightly.
* NMS-19851: satisfy arrow-parens lint on listPanelDefinitions
* NMS-19851: satisfy stylistic lint in the dashboard tests !smoke
The develop refresh brought stricter stylistic eslint rules that the
dashboard test files predate; build-ui was red on 17 auto-fixable
object-curly-spacing/arrow-parens/brace-style errors. lint:fix output only;
the 52 dashboard tests still pass.
Commit: 9f67e117854225dfa35da8d40adc746eec7449b1
https://github.com/OpenNMS/opennms/commit/9f67e117854225dfa35da8d40adc746eec7449b1
Author: Jose Anes <[email protected]>
Date: 2026-08-31 (Mon, 31 Aug 2026)
Changed paths:
M core/db/pom.xml
M core/web-assets/package.json
M core/web-assets/pnpm-lock.yaml
M core/web-assets/src/main/assets/js/apps/onms-classifications/views/modals/popover.html
M core/web-assets/src/main/assets/style/opennms-theme.scss
M dependencies/quartz/pom.xml
M docs/modules/deployment/pages/repos/rhel-centos/horizon-rhel10.adoc
M features/bsm/rest/impl/pom.xml
M features/graph/provider/legacy/pom.xml
M features/graph/provider/legacy/src/main/java/org/opennms/netmgt/graph/provider/legacy/LegacyEdge.java
A features/graph/provider/legacy/src/test/java/org/opennms/netmgt/graph/provider/legacy/LegacyEdgeTest.java
M features/status/rest/pom.xml
A features/topology-map/org.opennms.features.topology.api/src/main/java/org/opennms/features/topology/api/topo/LinkDetailsAware.java
M features/topology-map/plugins/org.opennms.features.topology.plugins.topo.linkd/src/main/java/org/opennms/features/topology/plugins/topo/linkd/internal/LinkdEdge.java
M features/topology-map/plugins/org.opennms.features.topology.plugins.topo.linkd/src/test/java/org/opennms/features/topology/plugins/topo/linkd/internal/EnhancedLinkdTopologyProviderTest.java
M opennms-base-assembly/src/main/filtered/etc/search-actions.xml
M opennms-config/src/main/java/org/opennms/netmgt/config/EventTranslatorConfigFactory.java
A opennms-config/src/test/java/org/opennms/netmgt/config/EventTranslatorConfigReloadTest.java
M opennms-openapi-docs/pom.xml
M opennms-services/src/main/java/org/opennms/netmgt/collectd/CollectableService.java
M opennms-services/src/main/java/org/opennms/netmgt/poller/pollables/PendingPollEvent.java
M opennms-services/src/test/java/org/opennms/netmgt/collectd/CollectableServiceTest.java
M opennms-services/src/test/java/org/opennms/netmgt/collectd/CollectdIT.java
M opennms-services/src/test/java/org/opennms/netmgt/collectd/ThresholdIT.java
M opennms-services/src/test/java/org/opennms/netmgt/poller/PollerQueryManagerDaoIT.java
A opennms-webapp-rest/127.0.0.1.tm4.epoch
M opennms-webapp-rest/pom.xml
A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/DashboardRestService.java
M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/SnmpConfigRestService.java
A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/SystemReportRestService.java
A opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/api/DashboardRestApi.java
M opennms-webapp-rest/src/main/webapp/WEB-INF/applicationContext-cxf-rest-v2.xml
M opennms-webapp-rest/src/main/webapp/WEB-INF/menu/menu-template-default.json
M opennms-webapp-rest/src/main/webapp/WEB-INF/menu/menu-template.json
A opennms-webapp-rest/src/test/java/org/opennms/web/rest/v2/DashboardRestServiceIT.java
M opennms-webapp-rest/src/test/java/org/opennms/web/rest/v2/SnmpConfigRestServiceIT.java
A opennms-webapp-rest/src/test/java/org/opennms/web/rest/v2/SystemReportRestServiceTest.java
A opennms-webapp-rest/tmlog4.log
M opennms-webapp/src/main/webapp/WEB-INF/applicationContext-spring-security.xml
M opennms-webapp/src/main/webapp/WEB-INF/jsp/alarm/list.jsp
M opennms-webapp/src/main/webapp/account/selfService/passwordGate.jsp
M opennms-webapp/src/main/webapp/includes/bootstrap-footer.jsp
M opennms-webapp/src/main/webapp/includes/bootstrap.jsp
M opennms-webapp/src/main/webapp/includes/quicksearch-box.jsp
M opennms-webapp/src/main/webapp/login.jsp
M smoke-test/src/test/java/org/opennms/smoketest/AdminPageIT.java
M smoke-test/src/test/java/org/opennms/smoketest/MenuHeaderIT.java
M ui/package.json
M ui/packages/onms-ui/src/components/OnmsDialog.vue
M ui/packages/onms-ui/src/components/OnmsDrawer.vue
M ui/pnpm-lock.yaml
M ui/src/components/Common/FormField.vue
A ui/src/components/Dashboard/DashboardFilterControl.vue
A ui/src/components/Dashboard/DashboardGrid.vue
A ui/src/components/Dashboard/DashboardToolbar.vue
A ui/src/components/Dashboard/PanelFrame.vue
A ui/src/components/Dashboard/PanelOptionsDialog.vue
A ui/src/components/Dashboard/defaultLayout.ts
A ui/src/components/Dashboard/filter.ts
A ui/src/components/Dashboard/panels/HtmlContentPanel.vue
A ui/src/components/Dashboard/panels/NotesPanel.vue
A ui/src/components/Dashboard/panels/SamplePanel.vue
A ui/src/components/Dashboard/registry.ts
A ui/src/components/Dashboard/severity.ts
A ui/src/components/Dashboard/timeframe.ts
M ui/src/components/Device/DCBTable.vue
M ui/src/components/Layout/Footer.vue
M ui/src/components/Logs/Editor.vue
M ui/src/components/Logs/Logs.vue
M ui/src/components/Nodes/ColumnSelectionDrawer.vue
M ui/src/components/Nodes/NodeAdvancedFiltersDrawer.vue
M ui/src/components/SCV/SCVForm.vue
M ui/src/components/SnmpConfiguration/SnmpConfigDetailsPanel.vue
A ui/src/composables/useDashboardRefresh.ts
A ui/src/containers/Dashboard.vue
M ui/src/containers/Map.vue
A ui/src/containers/SystemReport.vue
M ui/src/main/App.vue
M ui/src/main/router/index.ts
A ui/src/services/dashboardService.ts
M ui/src/services/index.ts
A ui/src/services/systemReportService.ts
A ui/src/stores/dashboardStore.ts
M ui/src/styles/onms-base.scss
M ui/src/styles/opennms-styles.scss
A ui/src/types/dashboard.ts
A ui/src/types/systemReport.ts
M ui/tests/components/Common/FormField.test.ts
A ui/tests/components/Dashboard/HtmlContentPanel.test.ts
A ui/tests/components/Dashboard/filter.test.ts
A ui/tests/components/Dashboard/registry.test.ts
A ui/tests/components/Dashboard/severity.test.ts
A ui/tests/components/Dashboard/timeframe.test.ts
A ui/tests/composables/useDashboardRefresh.test.ts
A ui/tests/services/dashboardService.test.ts
A ui/tests/stores/dashboardStore.test.ts
A ui/tests/systemReport.test.ts
Log Message:
-----------
Merge origin/develop into NMS-20106 (security-config union) !smoke
Compare: https://github.com/OpenNMS/opennms/compare/38f8f2d42d68...9f67e1178542
To unsubscribe from these emails, change your notification settings at https://github.com/OpenNMS/opennms/settings/notifications
_______________________________________________
Please read the OpenNMS Mailing List FAQ:
http://www.opennms.org/wiki/index.php?page=MailingListFaq
opennms-cvs mailing list
To *unsubscribe* or change your subscription options, see the bottom of this page:
https://lists.sourceforge.net/lists/listinfo/opennms-cvs