Backend Architecture & Packages
Technical design of the environment used in the App Builder Workshop. The backend is split into one Catalog package per vertical. Participants get the package of their chosen exercise from the DataMiner Catalog; we provide and maintain these packages so the hands-on sessions run smoothly. How packages reach participants is described in Participant Enablement.
Note
Element names, fields, thresholds, and scenario values in the backend pages are a proposed design and still need to be confirmed.
Design Principles
| # | Principle | Consequence |
|---|---|---|
| 1 | One package per vertical | Each exercise is deployed independently from the Catalog. Packages can coexist on the same DataMiner System. |
| 2 | A vertical-specific data model | Each package deploys its own DOM module with definitions in the vertical's own language (e.g. Event in broadcast, Mission in space). |
| 3 | All metadata lives in DOM | Customer, criticality, impact, owners, locations, limits, and schedules are DOM fields. No service or element properties. |
| 4 | DOM links to DataMiner by ID | Each DOM object stores the ID of its linked DataMiner service or element. |
| 5 | Only real-time data comes from elements | Parameter values, alarms, and trends come from the elements (and the service alarm state aggregated from them). |
| 6 | AI is not part of the backend | Summaries, recommendations, and copilot answers are created by agents in the Specialized Agents Workshop at runtime and never stored. |
| 7 | Every problem must be answerable | Each problem has the data it needs and a seeded scenario that produces a clear answer. |
Packages
| Package (Catalog item) | DOM module | Top-level object | Asset object | Details |
|---|---|---|---|---|
| Empower – Telco | empower_telco |
Network Service | Network Element | Telco Package |
| Empower – Satellite & Space | empower_satellite |
Mission | Ground Segment Asset | Satellite & Space Package |
| Empower – Media & Broadcast | empower_media |
Event | Signal Chain Device | Media & Broadcast Package |
| Empower – Infrastructure | empower_infrastructure |
Infrastructure System | Critical Asset | Infrastructure Package |
| Empower – Government & Public Safety | empower_government |
Operational Network | Field Asset | Government & Public Safety Package |
Vertical Terminology
The same underlying concepts get a vertical-specific name in each data model.
| Concept | Telco | Satellite & Space | Media & Broadcast | Infrastructure | Government & Public Safety |
|---|---|---|---|---|---|
| Top-level object ↔ DataMiner service | Network Service | Mission | Event | Infrastructure System | Operational Network |
| Asset ↔ DataMiner element | Network Element | Ground Segment Asset | Signal Chain Device | Critical Asset | Field Asset |
| Location | PoP / Data Center | Ground Station | Facility | Site | Location (own definition) |
| Customer | Customer Segment | Customer | Rights Holder | Operator | Agency |
| Impact | Subscribers | Customers Served | Expected Audience | Users Served | Population Covered |
| Criticality | SLA Tier | Mission Priority | Event Tier | Criticality | Mission Criticality |
| Owner / team | Service Owner / NOC | Mission Manager / Operations Center | Event Producer / MCR Team | System Owner / Control Room | Network Owner / Command Center |
| Schedule | – | Contact Window (own definition) | Event start and end | – | – |
Architecture
flowchart LR
CAT[(DataMiner Catalog)] -->|deploy| PKG[Vertical package]
subgraph DMS[DataMiner System]
PKG --> DOM[DOM module<br/>vertical data model]
PKG --> SVC[3 DataMiner services]
PKG --> EL[9 elements]
PKG --> SCR[Scenario scripts]
DOM -. service ID .-> SVC
DOM -. element ID .-> EL
SVC --> EL
SCR -->|real-time values| EL
end
DOM -->|metadata| APP[Participant app]
EL -->|parameters · alarms · trends| APP
SVC -->|alarm state| APP
Package Contents
Every vertical package contains the same kinds of components:
| Component | Purpose |
|---|---|
| Install script | Creates the DOM module, elements, services, and view, then seeds the DOM instances with the IDs of the created objects |
| DOM module | The vertical data model (definitions, sections, fields) |
| DOM seed data | 3 top-level objects, 9 assets, plus schedules/locations where the vertical needs them |
| Elements (9) | Real-time data sources, 3 per top-level object |
| DataMiner services (3) | Group the 3 elements of each top-level object; provide the aggregated alarm state |
| Alarm and trend templates | Thresholds and trending for the parameters the problems need |
| Scenario scripts | Baseline, StartScenario, and Reset for this vertical |
| View | Empower/<Vertical> |
Installation Flow
sequenceDiagram
participant C as Catalog
participant I as Install script
participant D as DataMiner
C->>I: Deploy package
I->>D: Create or update DOM module (idempotent)
I->>D: Create 9 elements, assign alarm and trend templates
I->>D: Create 3 services and the view
I->>D: Create DOM instances with service and element IDs
I->>D: Schedule the Baseline script
The install script is idempotent: redeploying the package updates the model and seed data without creating duplicates.
Linking DOM to DataMiner
| DOM object | Link field | Points to |
|---|---|---|
| Top-level object | DataMiner Service |
The DataMiner service that groups its elements |
| Asset | DataMiner Element |
The element that provides its real-time data |
| Asset | Parent link (DOM) | Its top-level object |
The install script creates the services and elements first and then writes their IDs into the DOM instances, so the link is always correct for the system the package is deployed on.
Important
Participants must be able to join DOM data with real-time data in App Builder. The ID stored in DOM must therefore also be available as a column in the element, service, and alarm data sources. See Open Decisions.
Real-Time Data
| Data | Source | Access in App Builder (verify) |
|---|---|---|
| Metadata and schedules | DOM module of the vertical | GQI – DOM instances |
| Parameter values | Elements | GQI – parameters / parameter tables |
| Trend data | Elements (trended parameters, ≥ 24 h) | Trend (line chart) component |
| Active alarms (severity, age) | Elements | GQI – alarms |
| Alarm history | Elements | GQI – alarms (history) |
| Alarm state | DataMiner service (aggregated from its elements) | GQI – services |
Scenario Engine
Each package has its own three scripts, so verticals can run independently on the same system.
| Script | Trigger | Responsibility |
|---|---|---|
Empower_<Vertical>_Baseline |
Scheduler, every 60 s | Pushes normal values with noise to the 9 elements and applies the 24 h trend drifts. Does not touch DOM. |
Empower_<Vertical>_StartScenario |
Manually, 30 min before the session (T0) | Pushes the incident values that raise the seeded alarms, and sets DOM schedule times (events, contact windows) relative to T0 |
Empower_<Vertical>_Reset |
Manually, between sessions | Returns elements to baseline and clears incidents. Optional full reset restarts the trend drifts. |
Timeline (relative to T0):
| Time | Event | Why |
|---|---|---|
| T0 − 24 h | Trend drifts start (package install or full reset) | Trend-based problems need 24 h of history |
| T0 − 12 h | One short, self-clearing alarm per top-level object | Gives each one a last incident in the alarm history |
| T0 | Seeded incidents start; schedules are set | Alarms are ~30 min old at session start |
| T0 + 25 min | Delayed incidents (where a vertical needs them) | Crosses thresholds during the session |
| T0 + 30 min | Session starts |
Important
- Deploy each package at least 24 hours before the first session.
- Date/time values are written as local wall-clock time without a UTC offset.
Data Availability Matrix
Check that every problem has the data it needs. DOM = vertical data model · SS = service alarm state · AA = active alarms (incl. age) · AH = alarm history · PV = parameter values · TR = trend data.
| Package | Problem | DOM | SS | AA | AH | PV | TR |
|---|---|---|---|---|---|---|---|
| Telco | Priority Dashboard | ✔ | ✔ | ✔ | |||
| Telco | Customer Impact View | ✔ | ✔ | ✔ | |||
| Telco | Capacity Risk Workspace | ✔ | ✔ | ✔ | ✔ | ||
| Satellite & Space | Mission Readiness Dashboard | ✔ | ✔ | ✔ | |||
| Satellite & Space | Ground Segment Workspace | ✔ | ✔ | ✔ | ✔ | ||
| Satellite & Space | Customer Service Assurance View | ✔ | ✔ | ✔ | ✔ | ||
| Media & Broadcast | Event Operations Center | ✔ | ✔ | ✔ | |||
| Media & Broadcast | Executive Service Overview | ✔ | ✔ | ✔ | |||
| Media & Broadcast | Incident Workspace | ✔ | ✔ | ✔ | ✔ | ||
| Infrastructure | Operations Control Center | ✔ | ✔ | ✔ | |||
| Infrastructure | Critical Asset Dashboard | ✔ | ✔ | ✔ | ✔ | ||
| Infrastructure | Regional Operations View | ✔ | ✔ | ✔ | |||
| Government | Incident Coordination Workspace | ✔ | ✔ | ||||
| Government | Command Center Dashboard | ✔ | ✔ | ✔ | |||
| Government | Risk Prioritization View | ✔ | ✔ |
Source Repository (proposed)
One solution builds all five packages, sharing common code.
Empower.sln
├── Empower.Common/ shared code: DataAPI client, DOM helpers, scenario engine
├── Empower.Telco/
│ ├── Empower.Telco.Package/ package project → Catalog item "Empower – Telco"
│ ├── Empower.Telco.Install/ install script (DOM, elements, services, seed data)
│ └── Empower.Telco.Scenario/ Baseline, StartScenario, Reset
├── Empower.SatelliteSpace/ same structure
├── Empower.MediaBroadcast/ same structure
├── Empower.Infrastructure/ same structure
└── Empower.GovernmentPublicSafety/ same structure
The pipeline builds each package project and publishes it to the Catalog as a private item for the organization.
Naming Convention
| Object | Pattern | Example |
|---|---|---|
| Catalog item | Empower – <Vertical> |
Empower – Telco |
| DOM module | empower_<vertical> |
empower_telco |
| View | Empower/<Vertical> |
Empower/Telco |
| Service | Name of the top-level object | Brussels 5G Core |
| Element | <PREFIX>-<OBJECT>-<ASSET> |
TEL-BRU5G-UPF |
| Script | Empower_<Vertical>_<Action> |
Empower_Telco_StartScenario |
Out of Scope for the Backend
| Item | Where it lives instead |
|---|---|
| AI summaries, recommended actions, copilot answers | Agents in the Specialized Agents Workshop (runtime only) |
| Health or risk scores | The participant's app logic |
| Tickets | Not included – see Open Decisions |
| Service and element properties | Replaced by the vertical DOM model |
Open Decisions
| # | Topic | Options |
|---|---|---|
| 1 | Which ID links DOM to DataMiner | DataMiner identifies elements and services by DMA ID/element ID and DMA ID/service ID. Confirm which GUID is meant, and that the same key is available as a column in the GQI element, service, and alarm data sources so participants can join. DOM also offers a native ElementFieldDescriptor (DataMiner 10.2+) for element links. |
| 2 | Tickets | (a) Leave them out – alarms and alarm history cover the problems (current design) · (b) Add a Ticket definition to the vertical DOM model |
| 3 | DataAPI | Verify availability on the target system and that alarm and trend templates can be assigned to the generated protocols. Alternative: simulated connectors in the package |
| 4 | Shared or dedicated systems | If several participants share one system, the vertical scenario is shared too. Decide whether each participant gets their own system or facilitators run StartScenario once per vertical |
| 5 | Multi-day trainings | Trend drifts plateau after 24 h. Run a full reset ≥ 24 h before each training day, or make the drift window configurable |
Readiness Checklist
Per deployed package:
- [ ] Package deployed from the Catalog ≥ 24 h before the session
- [ ] DOM module exists with all definitions and seed instances
- [ ] Every DOM instance links to an existing service or element
- [ ] 9 elements and 3 services exist, alarm and trend templates assigned
- [ ]
Baselineis scheduled and has been running for ≥ 24 h - [ ] Every top-level object has at least one cleared alarm in its history
- [ ]
StartScenariotriggered 30 min before the session; DOM schedules show upcoming times - [ ] DOM and real-time data can be joined in App Builder
- [ ] For each of the 3 problems, the seeded answer is visible in the data
- [ ]
Resetrestores the baseline between sessions