Modified Some AAI Operations
[holmes/rule-management.git] / rules / ccvnp-rule.drl
index a4d2c06..1471aa9 100644 (file)
@@ -54,8 +54,7 @@ function boolean isCorrelated(VesAlarm a, VesAlarm b) {
        return logicLinkA.equals(logicLinkB);
 }
 
-function void updateAaiStatus(String networkId, String pnfName, String ifName,
-               String linkName, String status) {
+function void updateAaiLinkStatus(String linkName, String status) {
        AaiQuery4Ccvpn aai = AaiQuery4Ccvpn.newInstance();
        Map<String, Object> body = new HashMap<String, Object>(){
                {
@@ -63,6 +62,15 @@ function void updateAaiStatus(String networkId, String pnfName, String ifName,
                }
        };
        aai.updateLogicLinkStatus(linkName, body);
+}
+
+function void updateAaiTpStatus(String networkId, String pnfName, String ifName, String status) {
+       AaiQuery4Ccvpn aai = AaiQuery4Ccvpn.newInstance();
+       Map<String, Object> body = new HashMap<String, Object>(){
+               {
+                       put("operational-status", status);
+               }
+       };
        aai.updateTerminalPointStatus(networkId, pnfName, ifName, body);
 }
 
@@ -72,15 +80,21 @@ function Map<String, Object> getAdditionalResourceInfo(String networkId, String
 
        Map<String, Object> ret = new HashMap<String, Object>();
 
-       StringBuilder sb = new StringBuilder();
+       StringBuilder sbn = new StringBuilder();
+       StringBuilder sbi = new StringBuilder();
        for(int i = 0; i < instances.size(); ++i) {
                JSONObject o = instances.getJSONObject(i);
-               String name = instances.getJSONObject(i).getString("service-instance-name");
-               ret.put(name + ".input-parameters", "TBD");
-               sb.append(name).append(",");
+               String name = o.getString("service-instance-name");
+               String id = o.getString("service-instance-id");
+               ret.put(id + ".input-parameters", o.getString("input-parameters"));
+               sbn.append(name).append(",");
+               sbi.append(id).append(",");
        }
-       ret.put("service-instance.service-instance-name", sb.substring(0, sb.length() -1).toString());
+       ret.put("service-instance.service-instance-name", sbn.substring(0, sbn.length() -1).toString());
+       ret.put("service-instance.service-instance-id", sbi.substring(0, sbi.length() -1).toString());
        ret.put("vserver.vserver-name", "TBD");
+       ret.put("globalSubscriberId", instances.getJSONObject(0).getString("globalSubscriberId"));
+       ret.put("serviceType", instances.getJSONObject(0).getString("serviceType"));
 
        return ret;
 }
@@ -113,33 +127,41 @@ rule "Update AAI Information"
        when
                $a: VesAlarm(eventName.indexOf("Fault_Route_Status") != -1)
        then
-       updateAaiStatus (
-               getAdditionalField($a, "networkId"),
-               getAdditionalField($a, "node"),
-               getAdditionalField($a, "tp-id"),
-               getLogicLink($a),
-               getAdditionalField($a, "oper-status")
-       );
+               updateAaiTpStatus (
+                       getAdditionalField($a, "networkId"),
+                       getAdditionalField($a, "node"),
+                       getAdditionalField($a, "tp-id"),
+                       getAdditionalField($a, "oper-status")
+               );
 end
 
 rule "Set Up Correlation"
        no-loop true
        salience 200
        when
-               $a: VesAlarm($id: eventId, $start: startEpochMicrosec, eventName.indexOf("Fault_Route_Status") != -1)
-               $b: VesAlarm(eventId != $id, eventName.indexOf("Fault_Route_Status") != -1, Math.abs(startEpochMicrosec - $start) < 60000)
+               $a: VesAlarm($id: eventId, 
+                                               $start: startEpochMicrosec, 
+                                               eventName.indexOf("Fault_Route_Status") != -1)
+               $b: VesAlarm(eventId != $id, 
+                                               eventName.indexOf("Fault_Route_Status") != -1, 
+                                               Math.abs(startEpochMicrosec - $start) < 60000)
        then
-           if (isCorrelated($a, $b)){
-               // If any of the alarms have been marked as root, a policy message has ever been created and sent. Do NOT send it again.
-               if ($a.getRootFlag() != 1 && $b.getRootFlag() != 1) {
-                       PolicyMsg msg = createPolicyMsg($a);     
-                       DmaapService dmaapService = ServiceLocatorHolder.getLocator().getService(DmaapService.class);
-                       dmaapService.publishPolicyMsg(msg, "unauthenticated.DCAE_CL_OUTPUT");
-               }
-               $a.setRootFlag(1);
-               $b.setRootFlag(1);
-               update($a);
-               update($b);
+               String status = "down";
+               if (status.equalsIgnoreCase(getAdditionalField($a, "oper-status")) 
+                               && status.equalsIgnoreCase(getAdditionalField($b, "oper-status"))) {
+                   if (isCorrelated($a, $b)){
+                       // If any of the alarms have been marked as root, a policy message has ever been created and sent. Do NOT send it again.
+                       if ($a.getRootFlag() != 1 && $b.getRootFlag() != 1) {
+                               PolicyMsg msg = createPolicyMsg($a);
+                               DmaapService dmaapService = ServiceLocatorHolder.getLocator().getService(DmaapService.class);
+                               dmaapService.publishPolicyMsg(msg, "unauthenticated.DCAE_CL_OUTPUT");
+                               updateAaiLinkStatus(getLogicLink($a), status);
+                       }
+                       $a.setRootFlag(1);
+                       $b.setRootFlag(1);
+                       update($a);
+                       update($b);
+                   }
            }
 end
 
@@ -147,14 +169,16 @@ rule "Clear Alarms"
        no-loop true
        salience 100
        when
-               $a: VesAlarm(alarmIsCleared == 1, eventName.indexOf("Fault_Route_Status") != -1)
+               $a: VesAlarm(eventName.indexOf("Fault_Route_Status") != -1)
        then
-               if (DmaapService.alarmUniqueRequestID.containsKey($a.getEventId())) {
-                       DmaapService.alarmUniqueRequestID.remove($a.getEventId());
+               if ("up".equalsIgnoreCase(getAdditionalField($a, "oper-status"))) {
+                       if (DmaapService.alarmUniqueRequestID.containsKey($a.getEventId())) {
+                               DmaapService.alarmUniqueRequestID.remove($a.getEventId());
+                       }
+       
+                       //TODO: send alarm clearing message to Policy - for now it's not needed.
+               //...
+       
+                       retract($a);
                }
-
-               //TODO: send alarm clearing message to Policy - for now it's not needed.
-        //...
-
-               retract($a);
 end
\ No newline at end of file