ONMSi Fiber Analytics User Manual Rev000 202302
ONMSi Fiber Analytics User Manual Rev000 202302
Viavi Solutions
1-844-GO-VIAVI
www.viavisolutions.com
Notice
Every effort was made to ensure that the information in this document was accurate at
the time of printing. However, information is subject to change without notice, and VIAVI
reserves the right to provide an addendum to this document with information not avail-
able at the time that this document was created.
Copyright
© Copyright 2023 VIAVI, LLC. All rights reserved. VIAVI, Enabling Broadband and
Optical Innovation, and its logo are trademarks of VIAVI, LLC. All other trademarks and
registered trademarks are the property of their respective owners. No part of this guide
may be reproduced or transmitted electronically or otherwise without written permission
of the publisher.
Trademarks
VIAVI and ONMSi are trademarks or registered trademarks of VIAVI in the United
States and/or other countries.
Ubuntu is a registered trademark of Canonical in the United Stated and/or other coun-
tries.
Red Hat ® Enterprise Linux ® is a registered trademark of Red Hat Inc. in the United
Stated and/or other countries.
Microsoft Internet Explorer and Microsoft Edge are either trademarks or registered
trademarks of Microsoft Corporation in the United States and/or other countries.
Firefox is a registered trademark of Mozilla Fundation in the United States and/or other
countries.
Specifications, terms, and conditions are subject to change without notice. All trade-
marks and registered trademarks are the property of their respective companies.
Ordering information
VIAVI has established processes in compliance with the Waste Electrical and Electronic
Equipment (WEEE) Directive, 2002/96/EC.
It is the responsibility of the equipment owner to return the equipment to VIAVI for
appropriate disposal. If the equipment was imported by a reseller whose name or logo
is marked on the equipment, then the owner should return the equipment directly to the
reseller.
Instructions for returning waste equipment to VIAVI can be found in the Environmental
section of VIAVI’s web site at www.viavisolutions.com. If you have questions
concerning disposal of your equipment, contact VIAVI’s WEEE Program Management
team.
Assumptions
This guide is intended for experienced users and admnistrators who want to implement
ONMSi effectively and efficiently. It is recommended to attend the ONMSi training to
learn how to install, configure, use, and troubleshoot the ONMSi.
Technical assistance
If you require technical assistance, call 1-844-GO-VIAVI. For the latest TAC informa-
tion, go to http://www.viavisolutions.com/en/services-and-support/support/technical-
assistance.
Recycling Information
VIAVI recommends that customers dispose of their instruments and peripherals in an
environnmentally sound manner. Potential methods include reuse of parts or whole
products and recycling of products components, and/or materials.
In the European Union, this label indicates that this product should not be disposed of
with household waste. Il should be deposited at an appropriate facility to enable
recovery and recycling.
Conventions
This guide uses naming conventions and symbols, as described in the following tables.
Description Example
User interface actions appear in this On the Status bar, click Start
typeface.
Buttons or switches that you press on Press the ON switch.
a unit appear in this TYPEFACE.
Description Example
Code and output messages appear in All results okay
this typeface.
Text you must type exactly as shown Type: a:\set.exe in the dialog box.
appears in this typeface.
Variables appear in this typeface. Type the new hostname.
Book references appear in this type- Refer to Newton’s Telecom Dictionary
face.
A vertical bar | means “or”: only one platform [a|b|e]
option can appear in a single com-
mand.
Square brackets [ ] indicate an login [platform name]
optional argument.
Slanted brackets < > group required <password>
arguments.
Description Example
A plus sign + indicates simultaneous key- Press Ctrl+s
strokes.
A comma indicates consecutive key strokes. Press Alt+f,s
A slanted bracket indicates choosing a sub- On the menu bar, click
menu from menu. Start > Program Files.
WARNING
This symbol represents a risk of electrical shock.
NOTE
This symbol represents a Note indicating related information or tip.
WARNING
Indicates a potentially hazardous situation which, if not avoided,
could result in death or serious injury.
CAUTION
Indicates a potentially hazardous situation which, if not avoided, may
result in minor or moderate injury.
This chapter provides a general description of the ONMSi requirements for installation
of the equipment.
Pre-requisite
Fiber Analytics is an extension to ONMSi (Optical Network Monitoring System)
providing fiber related data access through:
1 Full REST API
2 An SQL API
Installing and running Fiber Analytics supposes that an ONMSi is already installed.
• ONMSi version 5.00 or higher
• OTU 8000E or 5000
– Software version 21.63 or higher
In the scheduling window, parameter allows to store measurement into Fiber Analytics.
Note that the reference of the monitoring test should not be in smart acquisition mode.
renaming
Principle
Optionally, the Fiber Analytics application allows you to perform a renaming of some
additional attributes attached to ONMSi resources when exported from the ONMSi to
FA.
Additional attributes available for renaming are those of links, otu, domains and alarms.
Mapping definition
The renaming needs to be declared into a configuration file of Fiber Analytics. The YAML
configuration file is located in:
• Directory: <rfts_apps>/conf/fiberanalytics/model
• File: application-core-dbt.yaml
By editing that file, you can define the mapping between ONMSi additional attribute name and
the Fiber Analytics additional attribute name:
Procedure
• Login as support user on the ONMSi host
• Edit the 'application-core-dbt.yaml' and add a mapping (in the above example,
Section ID in ONMSi will be renamed in Cable ID in FA)
• restart Fiber Analytics model application
– $ rfts_ctrl restart -c fa-model
Introduction
The Fiber Analytics REST API consists of requests and responses to collect fiber data
produced by ONMSi (Optical Network Monitoring System), OTUs (Optical Test Unit)
model 8kv2 and/or 5k.
Those calls are proceeded by a fiber analytics web server. In the following documenta-
tion, we assume the web server base URL to access REST API is noted <fa-server>.
The REST API is usable after an authentication request on the ONMSi server. In the
following documentation, we assume the web server base URL to access ONMSi
authentication API is noted <onmsi-server>.
Notes:
• In case FA is in colocation with the ONMSi product, <fa-server> equals <onmsi-
server>
• The recommended configuration is to have separate servers.
Authentication
Pre-requisite
• Fiber Analytics installed on a server <fa-server>;
• ONMSi installed on a server <onmsi-server>;
• A valid Fiber Analytics API licence;
• An ONMSi user having the API profile.
Overview
The ONMSi server is in charge of authenticating the Fiber Analytics user.
Figure 2 Authentication
NOTE
Starting with Fiber Analytics 2.00, the authentication URL /api/private/fa/authenticate
is not anymore supported. Please, use /api/authenticate/jwt instead.
POST/api/authenticate/jwt
The POST <onmsi-server>/api/authenticate/jwt operation is used to authenticate and provide
a valid JWT token:
Summary
• Header:
– 'Content-Type': application/json
– 'Authorization': Basic with <user>and <password>
• Body:
– JSON object providing the requested role
– Role for Fiber Analytics should be set to 'faapi'
Body
{
"role": "faapi"
}
• Response message:
– JSON object providing the access token to be used by future API calls
Body
{
"accessToken": "eyJhbGciOiJSUzUxMiJ9.eyJzdWIiOiJmaWJlcmFuY-
Wx5dGljcyIsInJvbG......"
}
• Returned code:
– 200 OK
– 400 Bad Request: The role payload is missing
– 401 Unauthorized: Erroneous user/password or user not declared as API user in
ONMSi
Basic request
CURL request example
CURL request
curl -i -X POST \
-H "Content-Type:application/json" \
-H "Authorization:Basic ZmliZXJhbmFseXRpY3M6cGFzc3dvcmQ=" \
-d \
'{
"role": "faapi"
}' \
'http://topaz-onmsi-demo/api/authenticate/jwt'
In that previous example, the user 'faApiUser' with password 'faApiUser ' is
coded in the basic authorization field.
HTTP details
Request example
Response example
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 01 Apr 2021 12:42:05 GMT
Content-Type: application/json
Content-Length: 798
Connection: keep-alive
{"accessToken":"eyJhbGciOiJSUzUx-
MiJ9.eyJzdWIiOiJmaWJlcmFuYWx5dGljcyIsInJvbGUiOiJmYWFwaSIsImV4c
CI6MTYxNzM2NzMyNX0.bt1SJnAeYywsfUAYJ--
HnavV0MQLZ518dTxJUvN4hwAI7H8OFHygD58XbFRGT4bfq9Y8MKSNo8u4wtADy
4BPjOtcNbaJZf-JiiP8YBttXGKID1hNfx5PuIMSNAqaohKXb-
ty9Z31oKE3_Nae1-n0vMLVkvnjpP6QUx5XuXxGg0mVCG564wB4-lImeB3Du-
bwZV0QfCtg4HoA6hPL9C5BzYdiCDgeZRAkclcTEL0zdGWkQ_RRr3m8q8OoYRRJ
_M2fk4_HrwqwyT8fHGS_cOZlcVuyOxmI7HtgZq-
RqqGiOwoD4cbcwRDVkmAteO5ijDsTmAR88RKuFzJCZrC6rZ7ujwdTu2R3oKKAo
eH_AW80hv7BrvalpyjWyFhtcMXsBraG-
ZAqx3mPTxpRfVl8Lhy3XRhAH4Xms3A9Zf4Ul2UqY_JrP4Rm2XDnlvx8viq9RMs
fPyAE4zDJeD6Pm0QTRTVMvgf6Vhja_uB0oSHoI8mDjjcVaS7sa6Ya4elUkevRx
pw44g8axBnIKcm9i_QxD6BERAJeZ8Nx9uFTnQlK5Q74059jZ6I1YL6cAPMtTyu
AllcbBela1p5hlZ_mIbSw9m2wggAsWJ_v3CIxOq7msF4ZHzMpvWxQw_SXx3r2I
OvlANZj0fyvyrS5UYo-6obe_BvaLh2FZA-wbIiNzSqAg0htV5L8"}
To simplify the reading of the document, the above accessToken is noted <yourToken>
CAUTION
The GET requests are limited to return a MAXIMUM of 500 items. Client iterative fil-
tering (by rows) or paginated requests are necessary to fetch a large set of measure-
ments
GET /fa/api/measurements
The GET /fa/api/measurements operation is used to get full contents of measurements.
• Header:
– Authorization: Bearer <with JWT token provided by authentication>
• Response message:
– JSON Array of measurements
• Returned codes:
– 200 OK
– 400 Bad Request: When requested role does not exist.
– 401 Unauthorized: JWT token is missing, badly signed or expired. A detailed
message is provided.
Basic request
CURL request example
CURL request
curl -i -X GET \
-H "Authorization:Bearer eyJhbGciOiJSUzUx-
MiJ9.eyJzdWIiOiJmaWJlcmFuYWx5dGljcyIsInJvbGUiOiJmYWFwaSIsImV4c
CI6MTYxNzM2NzMyNX0.bt1SJnAeYywsfUAYJ--
HnavV0MQLZ518dTxJUvN4hwAI7H8OFHygD58XbFRGT4bfq9Y8MKSNo8u4wtADy
4BPjOtcNbaJZf-JiiP8YBttXGKID1hNfx5PuIMSNAqaohKXb-
ty9Z31oKE3_Nae1-n0vMLVkvnjpP6QUx5XuXxGg0mVCG564wB4-lImeB3Du-
bwZV0QfCtg4HoA6hPL9C5BzYdiCDgeZRAkclcTEL0zdGWkQ_RRr3m8q8OoYRRJ
_M2fk4_HrwqwyT8fHGS_cOZlcVuyOxmI7HtgZq-
RqqGiOwoD4cbcwRDVkmAteO5ijDsTmAR88RKuFzJCZrC6rZ7ujwdTu2R3oKKAo
eH_AW80hv7BrvalpyjWyFhtcMXsBraG-
ZAqx3mPTxpRfVl8Lhy3XRhAH4Xms3A9Zf4Ul2UqY_JrP4Rm2XDnlvx8viq9RMs
fPyAE4zDJeD6Pm0QTRTVMvgf6Vhja_uB0oSHoI8mDjjcVaS7sa6Ya4elUkevRx
pw44g8axBnIKcm9i_QxD6BERAJeZ8Nx9uFTnQlK5Q74059jZ6I1YL6cAPMtTyu
AllcbBela1p5hlZ_mIbSw9m2wggAsWJ_v3CIxOq7msF4ZHzMpvWxQw_SXx3r2I
OvlANZj0fyvyrS5UYo-6obe_BvaLh2FZA-wbIiNzSqAg0htV5L8 " \
'http://topaz-fa-demo/fa/api/measurements'
HTTP details
Request example
Authorization:Bearer eyJhbGciOiJSUzUx-
MiJ9.eyJzdWIiOiJmaWJlcmFuYWx5dGljcyIsInJvbGUiOiJmYWFwaSIsImV4c
CI6MTYxNzM2NzMyNX0.bt1SJnAeYywsfUAYJ--
HnavV0MQLZ518dTxJUvN4hwAI7H8OFHygD58XbFRGT4bfq9Y8MKSNo8u4wtADy
4BPjOtcNbaJZf-JiiP8YBttXGKID1hNfx5PuIMSNAqaohKXb-
ty9Z31oKE3_Nae1-n0vMLVkvnjpP6QUx5XuXxGg0mVCG564wB4-lImeB3Du-
bwZV0QfCtg4HoA6hPL9C5BzYdiCDgeZRAkclcTEL0zdGWkQ_RRr3m8q8OoYRRJ
_M2fk4_HrwqwyT8fHGS_cOZlcVuyOxmI7HtgZq-
RqqGiOwoD4cbcwRDVkmAteO5ijDsTmAR88RKuFzJCZrC6rZ7ujwdTu2R3oKKAo
eH_AW80hv7BrvalpyjWyFhtcMXsBraG-
ZAqx3mPTxpRfVl8Lhy3XRhAH4Xms3A9Zf4Ul2UqY_JrP4Rm2XDnlvx8viq9RMs
fPyAE4zDJeD6Pm0QTRTVMvgf6Vhja_uB0oSHoI8mDjjcVaS7sa6Ya4elUkevRx
pw44g8axBnIKcm9i_QxD6BERAJeZ8Nx9uFTnQlK5Q74059jZ6I1YL6cAPMtTyu
AllcbBela1p5hlZ_mIbSw9m2wggAsWJ_v3CIxOq7msF4ZHzMpvWxQw_SXx3r2I
OvlANZj0fyvyrS5UYo-6obe_BvaLh2FZA-wbIiNzSqAg0htV5L8
Host: topaz-fa-demo
Response example
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 01 Apr 2021 15:51:03 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Content-Encoding: gzip
Content-Range: 0-499/*
Content-Location: /measurements
[{"measurement":{"cdm": {"tests": [{"type": "OTDR", "label":
"OTDR", "results": {"data": {"otdrResults": {"distanceUnits":
"m", "measuredResults": [{"events": [{"id": 1, "idSlm": 1,
"lossdB": 1.709, "distance": 0, "distanceM": 0, "eventType":
"First Connector", "reflSaturated": false, "reflectancedB": -
32.81, "sectionLength": 0, "sectionLossdB": 0, "sectionLengthM":
0, "eventTestStatus": "fail", "lossAlarmFailed": true,
"reflAlarmFailed": true, "cumulativeLossdB": 0, "slopeAlarm-
Failed": false, "reflPeakDistanceM": 3.19}, {"id": 2, "idSlm":2,
"lossdB": 0, "slopedB": 0.219, "distance": 10628.49, "distanceM":
10628.49, "eventType" : : "Reflection", "slopedBkm": 0.2189999,
"reflSaturated": false, "reflectancedB": -56.42, "section-
Length": 10628.5, "sectionLossdB": 2.3329999, "sectionLengthM":
10628.5, "eventTestStatus": "pass", "lossAlarmFailed": false,
"reflAlarmFailed": false, "cumulativeLossdB": 2.333, "slope-
AlarmFailed": false,"reflPeakDistanceM": 10631.68}, {"id": 3,
Request for measurements with acquisition date more recent than 2023, january first
GET /fa/api/measurements?acquisitionDate=gte.2023-01-01T00:00:00
[
...
{
"acquisitionDate ": "2023-01-24T18:15:34+00:00",
"measurement": {
"schemaVersion": "1.0.0",
"internalKey": 400,
"cdm": {
// HERE TAKE PLACE THE CDM v2.1 with OTDR and
ONMSi tests
},
}
},
{
"acquisitionDate ": "2023-01-24T15:48:46+00:0",
"measurement": {
"schemaVersion": "1.0.0",
"internalKey": 401,
"cdm": {
// HERE TAKE PLACE THE CDM v2.1 with OTDR and
ONMSi tests
},
}
},
...
]
Herebelow are examples of complete measurements including OTDR and ONMSI test
type.
"model": "EOTDR2-NF-B1-CO",
"uniqueId": "EOTDR2-NF-B1-CO_00441",
"assetType": "T-BERD/MTS module",
"swVersion": "",
"calibrationDate": "2018-10-05"
}
],
"manufacturer": "VIAVI Solutions",
"calibrationDate": "2012-06-13"
},
"tests": [
{
"type": "OTDR",
"label": "OTDR",
"schemaVersion": "1.1.0",
"workflowId": null,
"configuration": {
"otdrSettings": {
"fiber": {
"number": 1,
"cableId": "Cable",
"fiberId": "Fiber",
"direction": "Loc A > Loc B",
"locationA": "Loc A",
"locationB": "Loc B",
"fiberLabel": ""
},
"setup": [
{
"pulse": "1us",
"range": "160km",
"refrIndex": 1.4692,
"resolution": "40m",
"scatterCoef": -81,
"wavelengthNm": 1625,
"bendOnSplicedB": 0,
"averagingTimeSec": 20,
"bendOnConnectordB": 0
}
],
"configFile": "",
"launchCable": {
"endDistance": null,
"endCableUsed": "No",
"startDistance": null,
"startCableUsed": "No",
"includeLinkEndConnector": false,
"includeLinkStartConnector": false
},
"otdrTopology": "Expert-SM",
"schemaVersion": 1,
"alarmThresholds": {
"type": "none"
}
}
},
"results": {
"data": {
"otdrResults": {
"distanceUnits": "m",
"schemaVersion": 1,
"measuredResults": [
{
"events": [
{
"id": 1,
"idSlm": -1,
"lossdB": 1.133,
"slopedB": null,
"distance": 0,
"eventType": "First Connector",
"reflSaturated": false,
"reflectancedB": -114.22,
"sectionLength": 0,
"eventTestStatus": "none",
"lossAlarmFailed": false,
"reflAlarmFailed": false,
"cumulativeLossdB": 0,
"slopeAlarmFailed": false
},
{
"id": 2,
"idSlm": -1,
"lossdB": -0.059,
"slopedB": 0.203,
"distance": 4081.03,
"eventType": "Splice",
"reflSaturated": false,
"reflectancedB": null,
"sectionLength": 4081.03,
"eventTestStatus": "none",
"lossAlarmFailed": false,
"reflAlarmFailed": false,
"cumulativeLossdB": 0.83,
"slopeAlarmFailed": false
},
{
"id": 3,
"idSlm": -1,
"lossdB": 0.178,
"slopedB": 0.204,
"distance": 8162.06,
"eventType": "Splice",
"reflSaturated": false,
"reflectancedB": null,
"sectionLength": 4081.03,
"eventTestStatus": "none",
"lossAlarmFailed": false,
"reflAlarmFailed": false,
"cumulativeLossdB": 1.607,
"slopeAlarmFailed": false
},
{
"id": 4,
"idSlm": -1,
"lossdB": 0.071,
"slopedB": 0.202,
"distance": 28240.73,
"eventType": "Splice",
"reflSaturated": false,
"reflectancedB": null,
"sectionLength": 20078.67,
"eventTestStatus": "none",
"lossAlarmFailed": false,
"reflAlarmFailed": false,
"cumulativeLossdB": 5.832,
"slopeAlarmFailed": false
},
{
"id": 5,
"idSlm": -1,
"lossdB": null,
"slopedB": 0.206,
"distance": 29750.71,
"eventType": "Fiber End",
"reflSaturated": false,
"reflectancedB": -56.33,
"sectionLength": 1509.98,
"eventTestStatus": "none",
"lossAlarmFailed": false,
"reflAlarmFailed": false,
"cumulativeLossdB": 6.215,
"slopeAlarmFailed": false
}
],
"linkOrldB": 31.24,
"linkLossdB": 6.215,
"acqDateTime": "2019-12-03T14:30:23",
"fiberLength": 29750.71,
"wavelengthNm": 1625,
"averageLossdB": 0.209,
"numberOfEvents": 5,
"maxSpliceMeasureddB": 0.176,
"wavelengthTestStatus": "none",
"maxConnectorMeasureddB": null,
"maxReflectanceMeasureddB": null
}
],
"resultsFilename": "generated-1575383424-EBAJ00441-
10264257-10264264-1.csor.json"
}
},
"status": "none",
"comment": "",
"testTime": "2019-12-03T14:30:23"
}
},
{
"type": "ONMSI",
"schemaVersion": "1.0.0",
"configuration": {
"monitoring": {
"otu": {
"uid": "lug_ubljz_8182929",
"name": "Malegi",
"port": 13
},
"link": {
"uid": "lug_ubljz_10264257",
"name": "MME/MVG/001-SSI/JLG/001#27",
"additionalAttributes": {
"Cable ID": "MME/MVG/001-SSI/JLG/001",
"FDMS port number": 27
}
},
"test": {
"uid": "lug_ubljz_10264264",
"scheduled": true
},
"domainList": [
{
"uid": "lug_ubljz_984208",
"name": "South"
},
{
"uid": "lug_ubljz_1141677",
"name": "KK"
},
{
"uid": "lug_ubljz_5161920",
"name": "Shimoga"
}
],
"domainTree": [
[
{
"uid": "lug_ubljz_984208",
"name": "South"
},
{
"uid": "lug_ubljz_1141677",
"name": "KK"
},
{
"uid": "lug_ubljz_5161920",
"name": "Shimoga"
}
]
],
"pointToPoint": {
"majorThresholddB": 3,
"minorThresholddB": 1,
"lastMarkerDistanceM": 29670.71,
"firstMarkerDistanceM": 244.86
}
}
},
"results": {
"data": {
"monitoring": {
"pointToPoint": {
"lastMarkerLeveldB": -7.34,
"firstMarkerLeveldB": -1.18,
"lastMarkerNoiseMargindB": 20.04
}
}
},
"status": "none",
"testTime": "2019-12-03T14:30:23"
}
}
],
"checkSum": "224189122c5b3f113471e38025c468c8"
}
}
{
"cdm": {
"tests": [
{
"type": "OTDR",
"label": "OTDR",
"results": {
"data": {
"otdrResults": {
"distanceUnits": "m",
"measuredResults": [
{
"acqDateTime": "2022-05-09T19:44:00+02:00",
"fiberLength": 0,
"fiberLengthM": 0,
"wavelengthNm": 1625,
"numberOfEvents": 0,
"wavelengthTestStatus": "none"
}
],
"resultsFilename": "acq_otuE-
BAJ00101_1_1652125464_2.msor.json"
}
},
"status": "none",
"comment": "",
"testTime": "2022-05-09T19:44:00+02:00"
},
"configuration": {
"otdrSettings": {
"fiber": {
"number": 0,
"cableId": "Cable_ID",
"fiberId": "5000-101_port2",
"direction": "Loc A > Loc B",
"locationA": "Loc A",
"locationB": "Loc B",
"fiberLabel": ""
},
"setup": [
{
"pulse": "10ns",
"range": "450m",
"refrIndex": 1.4685,
"resolution": "16cm",
"scatterCoef": -81,
"wavelengthNm": 1625,
"bendOnSplicedB": 0,
"averagingTimeSec": 20,
"bendOnConnectordB": 0
}
],
"configFile": "",
"launchCable": {
"endCableUsed": "No",
"startCableUsed": "No",
"includeLinkEndConnector": false,
"includeLinkStartConnector": false
},
"otdrTopology": "Expert-SM",
"alarmThresholds": {
"type": "fail",
"orldB": 27,
"spliceLossdB": 0.2,
"thresholdSet": "User",
"reflectancedB": -35,
"fiberLengthMin": 0.02,
"connectorLossdB": 0.7,
"slopeThresholds": [
{
"slopedBkm": 1,
"wavelengthNm": 1625
}
]
}
}
},
"schemaVersion": "1.2.0"
},
{
"type": "ONMSI",
"results": {
"data": {
"measurement": {
"buildTest": {
"createdBy": "admin",
"eventsAlarm": false,
"beginLeveldB": -27.91,
"beginDistanceM": 10.69,
"fiberEndDetected": false,
"splitterDetected": false
}
}
},
"status": "fail",
"testTime": "2022-05-09T19:44:00+02:00"
},
"configuration": {
"measurement": {
"otu": {
"uid": "hapy_cbbrm_20771",
"name": "otu-5000-00101",
"port": 2,
"portName": "OS(2)"
},
"link": {
"uid": "hapy_cbbrm_21045",
"name": "5000-101_port2"
},
"buildTest": {
"uid": "hapy_cbbrm_21058",
"name": "Build_Auto_New"
},
"domainList": [
{
"uid": "hapy_cbbrm_229",
"name": "Default"
}
],
"domainTree": [
[
{
"uid": "hapy_cbbrm_229",
"name": "Default"
}
]
],
"centralOffice": {
"uid": "hapy_cbbrm_21035",
"name": "CO SD Build",
"additionalAttributes": {
"External key": "CO SD Build"
}
}
}
},
"schemaVersion": "1.0.0"
}
],
"checkSum": "_NOT_EVALUATED_",
"assetInfo": {
"model": "OTU 5000",
CAUTION
The GET requests are limited to return a MAXIMUM of 500 items. Client iterative fil-
tering (by rows) or paginated requests are necessary to fetch a large set of alarms.
GET /fa/api/alarms
The GET /fa/api/alarms operation is used to get full contents of alarms.
• Header:
– Authorization: Bearer <with JWT token provided by authentication>
• Response message:
– JSON Array of alarms
• Returned codes:
– 200 OK
– 400 Bad Request: When requested role does not exist.
– 401 Unauthorized: JWT token is missing, badly signed or expired. A detailed
message is provided.
Basic request
CURL request example
CURL request
curl -i -X GET \
-H "Authorization:Bearer <yourToken>" \
'http://topaz-fa-demo/fa/api/alarms'
HTTP details
Request example
Host: topaz-fa-demo
Response example
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 09 Jun 2021 14:18:22 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Content-Encoding: gzip
Content-Range: 0-499/*
Content-Location: /alarms
[{"alarmUid":"hapy_cbbrm_121","updatedDate":"2022-05-
18T17:54:13.358+02:00","alarm":{"type": "EQUIPMENT_ALARM", "events":
[{"uid": "hapy_cbbrm_44148", "time": "2022-05-18T17:37:07+02:00",
"type": "NEW", "ackStatus": "UNACKNOWLEDGED", "clearStatus":
"UNCLEARED", "perceivedSeverity": "MAJOR"}, {"uid":
"hapy_cbbrm_44229", "time": "2022-05-18T17:54:13.212+02:00", "type":
"CLR", "ackStatus": "UNACKNOWLEDGED", "clearStatus": "CLEARED",
"userIdentifier": "admin", "systemIdentifier": "ONMSi",
"perceivedSeverity": "MAJOR"}], "origin": {"uid": "hapy_cbbrm_43587",
"type": "OTU"}, "context": {"otu": {"uid": "hapy_cbbrm_43587",
"name": "otuv2-system-test1", "device": "OTU 8000E", "ipAddress":
"otuv2-system-test1", "serialNumber": "0013", "softwareVersion":
"21.26", "parentDomainUids": ["hapy_cbbrm_229"]}, "domainList":
[{"uid": "hapy_cbbrm_229", "name": "Default"}], "domainTree":
[[{"uid": "hapy_cbbrm_229", "name": "Default"}]], "centralOffice":
{"uid": "hapy_cbbrm_44156", "name": "CO CO_Test_21_26",
"additionalAttributes": {"External key": "CO_CO_Test_21_26"}}},
"systemDn": "ONMSi", "ackStatus": "UNACKNOWLEDGED", "raisedTime":
"2022-05-18T17:37:07+02:00", "changedTime": "2022-05-
18T17:54:13.212+02:00", "clearStatus": "CLEARED", "probableCause":
"other", "schemaVersion": "1.0.0", "specificProblem":
"AUTOTEST_TEST_SYNCHRONIZATION", "latestClearedTime": "2022-05-
18T17:54:13.212+02:00", "perceivedSeverity": "MAJOR",
"maxPerceivedSeverity": "MAJOR"}},...
GET /fa/api/alarms?alarmUid=eq.hapy_cbbrm_11
CAUTION
ONMSi monitoring system is continuously updating the state of alarms according to
the state of the customer network. The API data reflects the LATEST state of alarms.
GET /fa/api/alarms?updatedDate=gte.2020-08-01T00:00:00&updated-
Date=lt.2020-08-
02T00:00:00
Response example
[
...
{
"alarmUid": "hapy_cbbrm_11",
"updatedDate": "2022-05-05T19:12:09.077+02:00",
"alarm": {
// HERE TAKE PLACE THE ALARM
}
},
{
"alarmUid": "hapy_cbbrm_13",
"updatedDate": "2022-05-05T19:15:29.165+02:00",
"alarm": {
// HERE TAKE PLACE THE ALARM
}
},
...
]
{
"type": "QUALITY_OF_SERVICE_ALARM",
"fault": {
"uid": "hapy_cbbrm_20721",
"faultType": "POINT_TO_POINT",
"geoLocation": {
"latitude": 41.91678837,
"longitude": 12.45494997
},
"pointToPoint": {
"attenuation": {
"distanceM": 6738.00,
"attenuationdB": -15.00
},
"localization": {
"uid": "hapy_cbbrm_20722",
"inLaunchCable": false,
"onOutOfSyncTest": false,
"lmOptEventAssocInvalid": true,
"opticalDistFromOriginM": 6738.00,
"cableLengthFromNetworkM": 0.00,
"lmOptEventAssocDisabled": false,
"originatingLinkChunkUid": "hapy_cbbrm_20610",
"distSecondLandmarkAfterM": 3859.72,
"optDistSecLandmarkAfterM": 4183.19,
"distSecondLandmarkBeforeM": 37.23,
"optDistSecLandmarkBeforeM": 61.71,
"secondaryLandmarkAfterName": "Parco Tor di Quinto",
"secondaryLandmarkBeforeName": "Piazzale Clodio"
},
"deviationLinkLossdB": 3.40,
"lastMarkerDistanceM": 10766.44,
"firstMarkerDistanceM": 36.45,
"pointToPointFaultType": "ATTENUATION",
"deviationFirstMarkerdB": 0.12
}
},
"events": [
{
"uid": "hapy_cbbrm_20723",
"time": "2022-05-09T17:35:44+02:00",
"type": "NEW",
"ackStatus": "UNACKNOWLEDGED",
"clearStatus": "UNCLEARED",
"additionalText": "FIBER_CUT",
"perceivedSeverity": "MAJOR"
},
{
"uid": "hapy_cbbrm_20757",
"time": "2022-05-09T17:41:09.844+02:00",
"type": "CMT",
"ackStatus": "UNACKNOWLEDGED",
"clearStatus": "UNCLEARED",
"additionalText": "J'y vais.",
"userIdentifier": "fer53986",
"perceivedSeverity": "MAJOR"
},
{
"uid": "hapy_cbbrm_45991",
"time": "2022-05-19T13:08:57.685+02:00",
"type": "CLR",
"ackStatus": "UNACKNOWLEDGED",
"clearStatus": "CLEARED",
"userIdentifier": "admin",
"systemIdentifier": "ONMSi",
"perceivedSeverity": "CRITICAL"
}
],
"origin": {
"uid": "hapy_cbbrm_19689",
"type": "LINK"
},
"context": {
"otu": {
"uid": "hapy_cbbrm_7497",
"name": "vOTU-BF-333",
"port": 1
},
"link": {
"uid": "hapy_cbbrm_19689",
"name": "vOTU-BF-333 OS(1)"
},
"test": {
"uid": "hapy_cbbrm_19696",
"name": "test1"
},
"domainList": [
{
"uid": "hapy_cbbrm_17151",
"name": "P2P-BFL"
},
{
"uid": "hapy_cbbrm_6777",
"name": "BFL"
}
],
"domainTree": [
[
{
"uid": "hapy_cbbrm_6777",
"name": "BFL"
},
{
"uid": "hapy_cbbrm_17151",
"name": "P2P-BFL"
}
]
],
"centralOffice": {
"uid": "hapy_cbbrm_20517",
"name": "Colosseo",
"additionalAttributes": {
"External key": "FNM_10006"
}
}
},
"details": "FIBER_CUT",
"systemDn": "OTU ID=7497, SN=EBAF33333",
"ackStatus": "ACKNOWLEDGED",
"raisedTime": "2022-05-09T17:35:44+02:00",
"changedTime": "2022-05-19T13:15:24.926+02:00",
"clearStatus": "UNCLEARED",
"probableCause": "thresholdCrossed",
"schemaVersion": "1.0.0",
"specificProblem": "ATTENUATION",
"latestClearedTime": "2022-05-19T13:08:57.685+02:00",
"perceivedSeverity": "CRITICAL",
"latestUnclearedTime": "2022-05-19T13:15:22.266+02:00",
"maxPerceivedSeverity": "CRITICAL"
}
"domainList": [
{
"uid": "hell_sfl6o_3842",
"name": "North"
},
{
"uid": "hell_sfl6o_731521",
"name": "RAJ"
},
{
"uid": "hell_sfl6o_799983",
"name": "Jaipur"
}
],
"domainTree": [
[
{
"uid": "hell_sfl6o_3842",
"name": "North"
},
{
"uid": "hell_sfl6o_731521",
"name": "RAJ"
},
{
"uid": "hell_sfl6o_799983",
"name": "Jaipur"
}
]
]
},
"details": "ATTENUATION",
"systemDn": "OTU ID=799985, SN=0",
"ackStatus": "UNACKNOWLEDGED",
"raisedTime": "2020-01-01T00:17:34+00:00",
"changedTime": "2020-01-01T00:19:01+00:00",
"clearStatus": "CLEARED",
"probableCause": "thresholdCrossed",
"schemaVersion": "1.0.0",
"specificProblem": "ATTENUATION",
"latestClearedTime": "2020-01-01T00:19:01+00:00",
"perceivedSeverity": "MAJOR",
"maxPerceivedSeverity": "MAJOR"
}
CAUTION
The GET requests are limited to return a MAXIMUM of 500 items. Client iterative fil-
tering (by rows) or paginated requests are necessary to fetch large set of homes.
GET /fa/api/homes
The GET /fa/api/homes operation is used to get full contents of homes.
• Header:
– Authorization: Bearer <with JWT token provided by authentication>
• Response message:
– JSON Array of homes
• Returned codes:
– 200 OK
– 400 Bad Request: When requested role does not exist.
– 401 Unauthorized: JWT token is missing, badly signed or expired. A detailed
message is provided.
Basic request
CURL request example
CURL request
curl -i -X GET \
-H "Authorization:Bearer <yourToken>" \
'http://topaz-fa-demo/fa/api/homes'
HTTP details
Request example
Authorization:Bearer <yourToken>
Host: topaz-fa-demo
Response example
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 09 Jun 2021 14:18:22 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Content-Encoding: gzip
Content-Range: 0-499/*
Content-Location: /homes
[{"homeUid":"hapy_cbbrm_3311","updatedDate":"2022-05-
16T17:13:29.477+02:00","home":{"vip": false, "name": "Home CO2-
01/01", "context": {"otu": {"uid": "hapy_cbbrm_6113", "name":
"otu-8000e-10548", "port": 2}, "link": {"uid": "hapy_cb-
brm_3303", "name": "CO2-01", "additionalAttributes": {"External
key": "CO2-01"}}, "test": {"uid": "hapy_cbbrm_3310", "name":
"CO2-01"}, "domainList": [{"uid": "hapy_cbbrm_22707", "name":
"Domain Jan"}, {"uid": "hapy_cbbrm_2593", "name": "PON"}],
"domainTree": [[{"uid": "hapy_cbbrm_22707", "name": "Domain
Jan"}], [{"uid": "hapy_cbbrm_2593", "name": "PON"}]], "central-
Office": {"uid": "hapy_cbbrm_3301", "name": "CO CO2", "addition-
alAttributes": {"External key": "CO_CO2"}}}, "updatedBy":
"supportONMSi", "identifier": "923785695535047", "schemaVer-
sion": "1.0.0", "peakMeasurementResult": {"uid": "hapy_cb-
brm_39515", "status": "OK", "reflector": {"name": "FBG-0dB",
"description": "1650nm FBG reflector (APC)", "reflectancedB": -
0.25}, "measuredBy": "admin", "insertionLossdB": 29.81,
"measurementDate": "2022-05-16T17:13:09", "distanceFrom-
OriginM": 10624.96, "levelFromReferencePointdB": 8.10, "uncon-
firmedInsertionLossdB": 29.81},
"referencePeakMeasurementResult": {"uid": "hapy_cbbrm_6748",
"status": "NEW", "measuredBy": "supportONMSi", "associationBy":
"supportONMSi", "associationDate": "2022-05-
05T17:36:25.234+02:00", "measurementDate": "2022-05-
05T17:35:45", "distanceFromOriginM": 10624.84, "levelFromRefer-
encePointdB": 7.64}}},...
GET /fa/api/homes?homeUid=eq.hapy_cbbrm_44172
CAUTION
ONMSi monitoring system is continuously updating state of homes according to the
state of the customer network. The API data reflects the LATEST state of homes.
GET /fa/api/homes?updatedDate=gte.2022-05-01T00:00:00&updated-
Date=lte.2022-06-01T00:00:00
[
...
{
"homeUid": "hapy_cbbrm_3311",
"updatedDate": "2022-05-16T17:13:29.477+02:00",
"home": {
// HERE TAKE PLACE THE HOME
}
},
{
"homeUid": "hapy_cbbrm_3312",
"updatedDate": "2022-05-16T17:13:29.508+02:00",
"home": {
// HERE TAKE PLACE THE HOME
}
},
...
]
[
{
"uid": "hapy_cbbrm_2593",
"name": "PON"
}
]
],
"centralOffice": {
"uid": "hapy_cbbrm_3301",
"name": "CO CO2",
"additionalAttributes": {
"External key": "CO_CO2"
}
}
},
"updatedBy": "supportONMSi",
"identifier": "923785695535047",
"schemaVersion": "1.0.0",
"peakMeasurementResult": {
"uid": "hapy_cbbrm_39515",
"status": "OK",
"reflector": {
"name": "FBG-0dB",
"description": "1650nm FBG reflector (APC)",
"reflectancedB": -0.25
},
"measuredBy": "admin",
"insertionLossdB": 29.81,
"measurementDate": "2022-05-16T17:13:09",
"distanceFromOriginM": 10624.96,
"levelFromReferencePointdB": 8.10,
"unconfirmedInsertionLossdB": 29.81
},
"referencePeakMeasurementResult": {
"uid": "hapy_cbbrm_6748",
"status": "NEW",
"measuredBy": "supportONMSi",
"associationBy": "supportONMSi",
"associationDate": "2022-05-05T17:36:25.234+02:00",
"measurementDate": "2022-05-05T17:35:45",
"distanceFromOriginM": 10624.84,
"levelFromReferencePointdB": 7.64
}
}
CAUTION
The GET requests are limited to return a MAXIMUM of 500 items. Client iterative fil-
tering (by rows) or paginated requests are necessary to fetch a large set of test
points.
GET /fa/api/test_points
The GET /fa/api/test_points operation is used to get full contents of test points.
• Header:
– Authorization: Bearer <with JWT token provided by authentication>
• Response message:
– JSON Array of test points
• Returned codes:
– 200 OK
– 400 Bad Request: When requested role does not exist.
– 401 Unauthorized: JWT token is missing, badly signed or expired. A detailed
message is provided.
Basic request
CURL request example
CURL request
curl -i -X GET \
-H "Authorization:Bearer <yourToken>" \
'http://topaz-fa-demo/fa/api/test_points'
HTTP details
Request example
Authorization:Bearer <yourToken>
Host: topaz-fa-demo
Response example
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 09 Jun 2021 14:18:22 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Content-Encoding: gzip
Content-Range: 0-499/*
Content-Location: /test_points
[{"test_point_uid":"hapy_cbbrm_26188","updatedDate":"2022-05-
12T14:19:57.416+02:00","testPoint":{"name": "TP SD_COs_1-01/1",
"context": {"link": {"uid": "hapy_cbbrm_26180", "name":
"SD_COs_1-01", "additionalAttributes": {"External key":
"SD_COs_1-01"}}, "test": {"uid": "hapy_cbbrm_26187", "name":
"SD_COs_1-01"}, "centralOffice": {"uid": "hapy_cbbrm_26178",
"name": "CO SD_COs_1", "additionalAttributes": {"External key":
"CO_SD_COs_1"}}}, "updatedBy": "supportONMSi", "schemaVersion":
"1.0.0"}},...
Request for a test point having a test point uid equals to hapy_cbbrm_26188
GET /fa/api/test_points?testPointUid=eq.hapy_cbbrm_26188
CAUTION
ONMSi monitoring system is continuously updating state of test points according to
the state of the customer network. The API data reflects the LATEST state of test
points.
GET /fa/api/test_points?updatedDate=gte.2022-05-
01T00:00:00&updatedDate=lte.2022-06-01T00:00:00
Paginated requests
Two ways are offered to control the limits and pagination:
• Either by HTTP range headers, used to describe the size of results and the size of
request.
• Or by 'limit' and 'offset' query parameters.
You are invited to read the full documentation for more details.
Full documentation
For a complete syntax of the requests, see:
Introduction
The Fiber Analytics SQL API provides simple and direct SQL access to the fiber data
produced by ONMSi and OTU model 8kv2 and/or 5k.
This data is stored in a PostgreSQL 12 database, with the TimescaleDB extension and
mostly as JSONB data. Documentation can be found here:
• PostgreSQL JSON operators: https://www.postgresql.org/docs/12/functions-
json.html
• TimescaleDB operators: https://docs.timescale.com/api/latest/#timescaledb-api-
reference
Authentication
Pre-requisite
· A well configured FA server
Connection parameters
• Host: <fa-server>
• Port: 42006
• Database: fiberanalytics
• User: fiberanalytics
• Password: <password>
• TLS/SSL Mode: require
<password> is the user-defined password for the fiberanalytics user. See below.
Additional information
• The fiberanalytics database is a postgresSQL database, version 12.
• The timescale database extension (hypertable) is activated on this database.
DBeaver
You can get familiar to the data model structure while browsing it with DBeaver.
Connection settings
Grafana
Grafana is a monitoring tool gaining in popularity and providing a simple querying inter-
face.
Data model
On the SQL API side, the data model is based on an ensemble of views: alarm,
build_test, home, measurement, monitoring_test and test_point.
Notes:
• When available, objects are identified by a universal identifier (uid). The numeric
part of this uid refers to the object id in ONMSi.
• Column types are JSONb, except for simple columns (dates, uids, etc);
Examples
SELECT
COALESCE(alarm.context #>> '{domainTree,0,0,uid}','Null') AS
"Top Domains",
COUNT(*) AS "Number"
FROM
alarm AS alarm
GROUP BY
1
ORDER BY
1
This query results in the following table:
SELECT
alarm.alarm #>> '{origin,type}' AS "Type",
COUNT(*) AS "Number"
FROM
alarm AS alarm
GROUP BY
1
This query results in the following table:
SELECT
initcap(alarm.alarm #>> '{origin,type}') AS origin,
1 AS value,
alarm.fault #>> '{geoLocation,latitude}' AS latitude,
alarm.fault #>> '{geoLocation,longitude}' AS longitude
FROM
alarm AS alarm
WHERE
alarm.alarm #>> '{clearStatus}' = 'UNCLEARED'
AND
alarm.fault #>> '{geoLocation,latitude}' IS NOT NULL
This query results in the following table:
Standard dashboards
Four Grafana dashboards are delivered with Fiber Analytics. They are dedicated to alarm
analysis and fiber quality analysis:
Notes:
– Filters and parameters are accessible on top of the dashboard; however, data
are often filtered out implicitly when it was found convenient to do so.
– Data are available for download in a CSV format. Go to the panel header,
click on the arrow, then inspect, data and finally adjust with the option you
want.
Panels
Alarms: Number of alarms according to filters.
Duration: Pie chart distribution of alarms duration. The drill-down fills up the Alarm
Details panel.
Alarm Details: Table listing the alarms on the link selected by drill down. Columns are
self-explanatory and the “More” column contains some available json data on the alarm.
Alarm Geolocation
Panels
Alarms: Number of alarms according to filters.
Alarm Details: Table listing the alarms on the link selected by drill down. Columns are
self-explanatory and the “More” column contains some available json data on the alarm.
Grafana built-in time filter: for computing link trend and displaying link linear attenu-
ation;
Panels
Links: Number of links according to filters.
Link Quality: Distribution of links quality according good and bad thresholds. The drill-
down on the pie chart fills up the Link Details panel.
Link Details: Table listing links according to a given link quality selected by drill-down.
Columns are self-explanatory. The “More” column aggregates some json-data available
for links (context, latest measurement, onmsi test). The drill-down fills up the Linear
Attenuation (dB/km), Event Distribution and the Event Details panels.
Event Distribution: Histogram distribution of the latest measurement events of the link
selected by drill-down as a function of link length segmentation.
Event Details: Table of the latest measurement events of the link selected by drill-
down. Column names are self-explanatory, and data is sorted from the worst loss to the
best to quickly identify bad events.
Panels
Events: Number of events according to filters.
Splice (loss): Distribution of splice quality according to splice thresholds. The drill-
down fills up the Event Details panel.
Slope (slope): Distribution of slope quality according to slope thresholds. The drill-
down fills up the Event Details panel.
Events Details: Table listing events type and quality selected by drill-down. Columns
are self-explanatory. The “More” column aggregates some available json-data
(onmsiTest, context, latestMeasurement).
VIAVI Solutions
North America: 1.844.GO VIAVI / 1.844.468.4284
Latin America +52 55 5543 6644
EMEA +49 7121 862273
APAC +1 512 201 6534
All Other Regions: viavisolutions.com/contacts
email [email protected]
address 7047 E. Greenway Pkwy, Suite 250, Scottsdale, AZ 85254, US