Currently I am using NOKIA BBU and NOKIA NETACT.
If any alarm is received in NOKIA BBU, then, it will reach to NOKIA NETACT server and the email alert is sent.
In the future I don’t want to use NOKIA NETACT . I want all the alarm received in NOKIA BBU to be pushed in SQL or EXCEL database and from there I would like to send and email alert.
Does any one know
1.Which protocol does NOKIA BBU takes to push the alerts to the NETACT server?
2.Is there any tools which receives the alarms directly from NOKIA BBU and send a email alert?
3.Is there any other methods to push the BBU alarms directly to Excel or SQL database server?
Note: I tried boda-lite but it seems like it is not working anymore and the username and password donot match. Can any one help me?
Hi, @P_C, I believe you can’t connect without NETACT. Protocol should be proprietary. Instead of that external systems can subscribe to NETACT CORBA notifications. Here is “proof-of-concept” java code for that:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.omg.CORBA.IntHolder;
import org.omg.CORBA.ORB;
import org.omg.CORBA.ORBPackage.InvalidName;
import org.omg.CosNotification.EventType;
import org.omg.CosNotification.Property;
import org.omg.CosNotification.StructuredEvent;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
import org.omg.PortableServer.POAManagerPackage.AdapterInactive;
import org.omg.PortableServer.POAPackage.ServantNotActive;
import org.omg.PortableServer.POAPackage.WrongPolicy;
import org.omg.TimeBase.UtcT;
import org.omg.TimeBase.UtcTHelper;
import com.nsn.oss.nbi.internal.corba.ManagedGenericIRPConstDefs.StringTypeOpt;
import com.nsn.oss.nbi.internal.corba.ManagedGenericIRPConstDefs.StringTypeOptHolder;
import com.nsn.oss.nbi.internal.corba.ManagedGenericIRPSystem.InvalidParameter;
import com.nsn.oss.nbi.internal.corba.ManagedGenericIRPSystem.OperationNotSupported;
import com.nsn.oss.nbi.internal.corba.ManagedGenericIRPSystem.ParameterNotSupported;
import com.nsn.oss.nbi.internal.corba.NotificationIRPConstDefs.NotificationTypesSetHolder;
import com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.GetNotificationCategories;
public class AlarmClient {
private com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.NotificationIRP _notifIrp = null;
public String alarmFilter ="";
private final long UNIX_OFFSET = 122192928000000000L;
public String delimiter = ";";
private org.omg.CORBA.ORB _notificationOrb = null;
private String _notifyServer = null;
private org.omg.CORBA.Object _notifySrvr = null;
private String _attId = "";
private IRPManager _irpMan = null;
public int timetick = 15;
public static void main(String[] args) {
AlarmClient ac = new AlarmClient();
ac.startNotifications();
try {
Thread.sleep(20000);
} catch (InterruptedException e) {
e.printStackTrace();
}
ac.stopNotifications();
}
private String readIOR(String iorType) {
File f = new File("/d/oss/global/var/NSN-nbi3gc/ior/NotificationIRP.ior");
BufferedReader br;
String iorContents = null;
try {
br = new BufferedReader(new FileReader(f));
iorContents = br.readLine();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
return iorContents;
}
private void alarmPrint(StructuredEvent alarm){
String result = "";
UtcT timeValue = null;
Date dt;
DateFormat df;
if (alarm.filterable_data != null) {
for (Property filterableData: alarm.filterable_data) {
String fieldName = filterableData.name;
switch (fieldName){
case "b":
timeValue = UtcTHelper.extract(filterableData.value);
dt = new Date((timeValue.time - UNIX_OFFSET) / 10000);
df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
result = result + df.format(dt) + delimiter;
break;
case "e":
result = result + filterableData.value.extract_string() + delimiter;
break;
case "i":
result = result + filterableData.value.extract_string() + delimiter;
break;
}
}
}
System.out.println(result);
}
public void startNotifications(){
_irpMan = new IRPManager();
_notificationOrb = ORB.init(new String[0], null);
org.omg.CORBA.ORB orb = ORB.init(new String[0], null);
org.omg.CORBA.Object rootObj = orb.string_to_object(readIOR("NotificationIRP"));
_notifIrp = com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.NotificationIRPHelper.narrow(rootObj);
POA poa;
try {
poa = POAHelper.narrow(_notificationOrb.resolve_initial_references("RootPOA"));
poa.the_POAManager().activate();
_notifySrvr = poa.servant_to_reference(_irpMan);
_notifyServer = _notificationOrb.object_to_string(_notifySrvr);
String[] aCat = _notifIrp.get_notification_categories(new NotificationTypesSetHolder());
StringTypeOpt alarmFltr = new StringTypeOpt();
alarmFltr.value(alarmFilter);
_attId = _notifIrp.attach_push(_notifyServer, timetick, aCat, alarmFltr, "");
(new notificationThread()).start();
} catch (InvalidName | AdapterInactive | ParameterNotSupported |
com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.AtLeastOneNotificationCategoryNotSupported |
InvalidParameter | com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.Attach |
com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.AlreadySubscribed | ServantNotActive |
WrongPolicy | GetNotificationCategories | OperationNotSupported e) {
e.printStackTrace();
}
}
public void stopNotifications() {
try {
_notifIrp.detach(_notifyServer, _attId);
_notificationOrb.shutdown(true);
} catch (com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.DetachException | ParameterNotSupported
| InvalidParameter e) {
e.printStackTrace();
}
}
public int renewSubscription() {
com.nsn.oss.nbi.internal.corba.NotificationIRPConstDefs.SubscriptionStateHolder arg2 = new com.nsn.oss.nbi.internal.corba.NotificationIRPConstDefs.SubscriptionStateHolder();
IntHolder arg3 = new IntHolder();
StringTypeOptHolder arg1 = new StringTypeOptHolder();
arg1.value.value(alarmFilter);
try {
_notifIrp.get_subscription_status(_attId, arg1, arg2, arg3);
} catch (InvalidParameter | com.nsn.oss.nbi.internal.corba.ManagedGenericIRPSystem.OperationNotSupported
| com.nsn.oss.nbi.internal.corba.NotificationIRPSystem.GetSubscriptionStatus e) {
e.printStackTrace();
}
return arg2.value.value();
}
private class IRPManager extends org.omg.CosNotifyComm.SequencePushConsumerPOA{
@Override
public void push_structured_events(StructuredEvent[] notifications) throws org.omg.CosEventComm.Disconnected {
for (StructuredEvent alarm: notifications) {
alarmPrint(alarm);
}
}
@Override
public void offer_change(EventType[] arg0, EventType[] arg1) throws org.omg.CosNotifyComm.InvalidEventType {
System.out.println("Offer Change!");
}
@Override
public void disconnect_sequence_push_consumer() {
System.out.println("Disconnected!");
}
}
private class notificationThread extends Thread {
public void run() {
_notificationOrb.run();
}
}
}
Thankyou for you response but i am planning to remove NETACT server.
For example, If I remove NETACT server, I had to look over all the 14 NOKIA BBU in different tabs in the browser and a person has to be assigned.
Thus, If there is any tool/program which will push/pull the data to my local database like the way it pulls/push data from BBU to NOKIA NETACT server. Then I will create a create a code which will send a email when ever the data is received in the server. So that I am aware whenever the alarm comes.
Do you know the protocol used to sync the data from BBU to NOKIA NETACT Server?
Then, it would be possible to create a server like NETACT with a simple feature which will send email whenever the alert is detected.
Looking on the Wireshark capture It looks like the data is communicated using TLS1.2 but don’t know if it is or not. For example If its communicated using TLS 1.2 then how do we pull the data to the local server.
Can you please explain what does the above java code do and how it works? Does is pulls data from Nokia BBU directly?
Using these API is it possible to push the alarm to local database like sql etc… But i don’t know how to use it using postman and which protocol is used to sync alarm data to my local database
The code above is to print to console notifications (alarms) immediately then it recieved in NETACT. It is works only with NETACT.
I had to look over all the 14 NOKIA BBU in different tabs in the browser and a person has to be assigned.
In the browser you can open DevTools (F12 or Ctrl+Shift+I), network tab. Now you can watch how it recieves alarms. Does it sends periodical requests or use websockets or anything else. Then implement that algorithm in any programming language you want. This should be described in documentation (I have no access).
Looking on to the wire shark and connecting the BBU directly to my laptop it seems like its using TCP TLS1.2 protocol. Is there any medium that can push the data to SQL server or EXCEL.