6636397d4292caddf5b52d189dc0e4e29eecf1bf
[holmes/rule-management.git] / rules / ccvpn2-rule.drl
1 package org.onap.holmes.ccvpnBandwidth;
2  
3 dialect "java"
4
5     import org.onap.holmes.common.api.stat.VesAlarm;
6     import org.onap.holmes.common.api.stat.AlarmAdditionalField;
7     import org.onap.holmes.common.aai.AaiQuery4Ccvpn2;
8     import org.onap.holmes.common.exception.CorrelationException;
9     import org.onap.holmes.common.dmaap.entity.PolicyMsg;
10     import org.onap.holmes.common.dmaap.DmaapService;
11     import org.onap.holmes.common.utils.DroolsLog;
12     import org.onap.holmes.common.dropwizard.ioc.utils.ServiceLocatorHolder;
13
14     import com.alibaba.fastjson.JSONArray;
15     import com.alibaba.fastjson.JSONObject;
16
17     import java.util.List;
18     import java.util.Map;
19     import java.util.ArrayList;
20     import java.util.HashMap;
21     import java.util.UUID;
22
23     function String getAdditionalField(VesAlarm a, String field) {
24     List<AlarmAdditionalField> fields = a.getAlarmAdditionalInformation();
25     for (AlarmAdditionalField f : fields) {
26         if (f.getName().equals(field)) {
27            return f.getValue();
28         }
29     }
30         return null;
31     }
32
33     function Map<String, Object> getAdditionalResourceInfo(VesAlarm a, String bandwidth) {
34         AaiQuery4Ccvpn2 aai = AaiQuery4Ccvpn2.newInstance();
35         JSONObject instance = aai.getServiceInstance(getAdditionalField(a, "siteService")); 
36         Map<String, Object> ret = new HashMap<String, Object>();
37         ret.put("service-instance.service-instance-id", instance.getString("service-instance-id")); 
38          ret.put("vserver.vserver-name", "TBD");
39          ret.put("globalSubscriberId", instance.getString("globalSubscriberId"));
40          ret.put("serviceType", instance.getString("serviceType"));
41          ret.put("vserver.is-closed-loop-disabled", "false");
42          ret.put("vserver.prov-status", "ACTIVE");
43          ret.put("bandwidth", bandwidth);
44          ret.put("bandwidth-change-time", getAdditionalField(a, "timestamp"));
45          ret.put("vnfId", instance.getString("vnfId"));
46          return ret;
47     }
48
49     function PolicyMsg createPolicyMsg(VesAlarm alarm, String bandwidth) {
50         PolicyMsg m = new PolicyMsg();
51         m.setPolicyVersion("2.0.0");
52         m.setPolicyName("ccvpn");
53         m.setPolicyScope("service=SOTNService,type=SampleType,closedLoopControlName=CL-CCVPN-d925ed73-8231-4d02-9545-db4e101f88f8");
54         m.setClosedLoopControlName(DmaapService.loopControlNames.get("org.onap.holmes.ccvpnBandwidth"));
55         m.setRequestID(UUID.randomUUID().toString());
56         m.setClosedLoopAlarmStart(alarm.getStartEpochMicrosec());
57         m.setClosedLoopAlarmEnd(alarm.getLastEpochMicrosec());
58         m.setTarget("vserver.vserver-name");
59         m.setAai(getAdditionalResourceInfo(alarm, bandwidth));
60
61         DmaapService.alarmUniqueRequestID.put(alarm.getEventId(), m.getRequestID());
62
63          return m;
64     }
65
66     rule "Analyse traffic exception"
67         no-loop true
68          salience 200
69          when
70             $a: VesAlarm(eventName.indexOf("bandwidth") != -1, 
71                         rootFlag != 1)
72        then
73         String bandwidth = "5000";
74            if ("Abnormal".equalsIgnoreCase(getAdditionalField($a, "exceptionType"))) { 
75                bandwidth = "10000";
76            }
77         PolicyMsg msg = createPolicyMsg($a, bandwidth);
78         DmaapService dmaapService = ServiceLocatorHolder.getLocator().getService(DmaapService.class);
79         dmaapService.publishPolicyMsg(msg, "unauthenticated.DCAE_CL_OUTPUT");
80         $a.setRootFlag(1);
81     end