[OpenNMS/opennms] b9ad63: NMS-20258: Keep the DataSource across an event tra...
joseanesONMS via opennms-cvs <[email protected]>
| Newsgroups | gmane.network.opennms.cvs |
|---|---|
| Message-ID | <OpenNMS/opennms/push/refs/heads/jira/NMS-20126-parity-panels/[email protected]> |
Branch: refs/heads/jira/NMS-20126-parity-panels
Home: https://github.com/OpenNMS/opennms
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: 8a969b32aa237afe2b1e2348b5ddd0af3449b1f3
https://github.com/OpenNMS/opennms/commit/8a969b32aa237afe2b1e2348b5ddd0af3449b1f3
Author: Jose Anes <[email protected]>
Date: 2026-08-31 (Mon, 31 Aug 2026)
Changed paths:
M features/bsm/rest/impl/pom.xml
M features/status/rest/pom.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
M opennms-webapp-rest/pom.xml
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
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
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
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:
-----------
Merge origin/develop into NMS-20126 after the base PR squash-merged
The dashboard base (#8721) landed as a squash, so the shared Dashboard files
show add/add against this branch; develop's copies are byte-identical to the
base content this branch already merged, so the branch's versions win. !smoke
Compare: https://github.com/OpenNMS/opennms/compare/c162051e5cf0...8a969b32aa23
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