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.
I am working on something similar, and wonder if you found any way to achieve this?
Currently i am collecting the files from about 1000 BBUs every 5 minutes and we analyze these, and it works nicely.
Yet, the better option is to use the soap APIs, and i am stuck at the certificate stage (vendor authentication failure).
I am trying to register my script as a manager (which means my script will present itself as a netact server). Yet, i am stuck here and cant bypass this stage.
If you want to get rid of Netact and you need to generate fault Management related reports through inhouse product,Which is absolutely possible.There are two ways to do it.
1)using the SNMP agent installed in the node.–Any Telecommunication equipment by nokia or Ericsson has its own SNMP Suite(most of the time Net-SNMP).you can check init.d or systemd to find out what is the running snmpd on the node.after finding it out edit the config file to route the traps to what ever the SNMP Manager you have.(Splunk ITSI,Net-SNMP Manager etc.)for net-snmp check /etc/snmp/snmpd.conf/
2)get the alarm and alert log in a more consistent basis via Rsyslog or Rysnc function as a log file and generate the alarm table there.(Usually you can find theses on /var/log/saf/ or /var/log/snmp/*.log.) .
Difference between these two methods are 1st one is real time and 2 is near real time.
Generating a notification from Alarm management tools are not that dificult.Most of them have inbuild workflows or you can link it to exsisting mail server or ITSM.