User Tools
This is an old revision of the document!
Table of Contents
EMS NOVA Development Details
Updated by Anna Dowling 04/10/2022
Overview
The purpose of the EMS Nova project is to bring the look and feel as well as the technology stack of the existing ems application up to date. The EMS is one of Errigals main, heavily used applications, yet the application display could be considered quite outdated. The applications front end technology stack is currently a mixture of grails gsp controllers and GWT. These are old technologies which are no longer favoured. As well as the age of them, they are also quite limiting when it comes to implementing more complex or detailed front end features.
EMS Nova application uses a number of services:
- ems-nova for the Angular frontend
- idms-proxy for middle-ware and backend data
- user profile for authentication
- MDC for interfacing with discovery data via idms-proxy apis
- mdc-translator for Ui parameter translation mappings for rendering ui components for discovered data
- elastic-replicator for data replication for alarm, ticket and device data into elastic-search and event notifications for real time front end updates.
- elastic-search for data storage - queried via idms-proxy
Repo:
- See also: Elastic Replicator (Elastic Replicator)
- See also: IDMS Proxy
Architecture
Project Documents
For further information see nova requirements documentationhere
Local Dev App Urls
Development Configuration
Project can be pointed at local or server deployed version of all api endpoints. See src/config/config.json for environment configuration for local dev.
For further information on application configuration for local development see README.MD
Deployment
The ems-nova is deployed to the load balancer server in /var/www/html/ems-nova. Its environment specific variables are passed via the config/config.json file to the app at runtime.
Current Config Fields Are:
{
"deployment": {
"build": {
"identifier": "ems-nova » ems-nova-feature-branches » REL-4.1.0 REL-4.1.0.4",
"branch": "REL-4.1.0",
"number": "4",
"buildTime": "2022-08-11 17:28:55",
"deploymentTime": "2022-08-17 16:12:17"
}
},
"authConfig": {
"contextPath": "ems-nova",
"userProfileUrl": "https://nova.errigal.com/userprofile",
"redirectUri": "https://nova.errigal.com/ems-nova/callback",
"clientId": "bfcb7b00-8c6d-4a1c-b5f6-0353416301fd"
},
"snmpConfig": {
"emsUrl": "https://nova.errigal.com/SnmpManager/errigalEMS",
"snmpManagerUrl": "https://nova.errigal.com/SnmpManager"
},
"proxyConfig": {
"proxyApiUrl": "https://nova.errigal.com/idms-proxy/api/v0",
"sseEndPoint": "/replicator/sse",
"refreshIntervalMs": 300000
},
"ticketerConfig": {
"ticketerUrl": "https://nova.errigal.com/ticketer-light",
"ignoredTicketStatuses": ["Closed", "Alarm Resolved", "Alarm Resolved - Auto Closed", "Alarm Clear Received", "OEM Support Ticket Resolved", "PM Completed", "Work Completed", "PM Completed - Requires Attention", "PM Completed - Failed", "Info Provided Ticket Close", "Deleted"]
},
"hostTreeConfig": {
"hostTreeFilterBounds": 3
},
"hotJarConfig": {
"hotJarEnabled": true,
"hotJarSiteId": 2914835,
"hotJarSnippetVersion": 6
},
"mapConfig": {
"googleMapsAPIKey": "AIzaSyA706_ucy_2gp6tDklZF72f_Lw3ipZK3zY"
},
"analytics": {
"analyticsKey": "UA-158352259-10"
},
"commonHeaderConfig": {
"headerUrl": "https://nova.errigal.com/errigal-common-header/",
"config": "nova",
"version": "2.0",
"css": "style.css",
"suiteName": "IDMS - Demo Instance -",
"appName": "EMS Nova"
},
"tableauConfig": [
{
"name": "Ticket Dashboard",
"url": "https://reports.noc-in-a-box.com/#/site/ExteNetQA/views/ExteNetTicketsv1_1/StoryTkts?:iid=1",
"image": "ticketDashboardIcon.svg"
},
{
"name": "Outage Dashboard",
"url": "https://reports.noc-in-a-box.com/#/site/ExteNetQA/views/Outagesv1_0/StoryOutage?:iid=3",
"image": "outageDashboardIcon.svg"
},
{
"name": "MTTR Dashboard",
"url": "https://reports.noc-in-a-box.com/#/site/ExteNetQA/views/ExteNetTicketDurations/TktsDurDash?:iid=1",
"image": "mttrDashboardIcon.svg"
}
]
}
Permissions
Permissions are retrieved from userprofile for the current user on authentication. These are leverage to control what the use has authorization to access within the application. The below diagram outlines the permissions data storage model and retrieval touchpoints.
Permissions can be set via userprofile on the SnmpManager profile associated with a user. To understand what permissions map to what area in the ems-nova front end a string search of the code will show the validation on individual ui components e.g. derived-tree. PLEASE NOTE: If multiple of the same permission are assigned nova will default to the lowest access permission type (e.g FULL and VIEW = VIEW. See also ems_nova.CheckPermissionsDirective, ems_nova.PermissionService. Current full list of current permissions is as follows:
- DERIVED_TREE - CREATE
- DERIVED_TREE - DELETE
- DERIVED_TREE - FULL
- DERIVED_TREE - MODIFY
- DERIVED_TREE - VIEW
- DEVICE_ALARM - FULL
- DEVICE_ALARM - VIEW
- DEVICE_ALARM_SYNC - FULL
- DEVICE_ALL_PARAMETERS - VIEW
- DEVICE_ALL_PARAMETERS_SYNC - FULL
- DEVICE_CONFIG - FULL
- DEVICE_INFO - FULL
- DEVICE_INFO - VIEW
- DEVICE_REBOOT - FULL
- DEVICE_THRESHOLD - FULL
- DEVICE_THRESHOLD - VIEW
- DEVICE_TICKET - FULL
- DEVICE_TICKET - VIEW
- VIEW_DEVICE_IN_LEGACY_EMS - VIEW
UI Configuration via MDC Translator
CI/CD
Ansible Playbooks
ansible-playbook -i ../env-configuration/nova/hosts.ini --diff --vault-id @prompt ems-nova.yml --extra-vars "jenkins_build_name='ems-nova-feature-branches/job/jobName' appFileExtension='.jar' jenkins_job_build_num=buildNumber actions='upload,configure,deploy'"









