Replaced ServiceLocator with SpringContextUtil
[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.utils.SpringContextUtil;
13
14     import com.google.gson.JsonObject;
15
16     import java.util.List;
17     import java.util.Map;
18     import java.util.ArrayList;
19     import java.util.HashMap;
20     import java.util.UUID;
21
22     function String getAdditionalField(VesAlarm a, String field) {
23     List<AlarmAdditionalField> fields = a.getAlarmAdditionalInformation();
24     for (AlarmAdditionalField f : fields) {
25         if (f.getName().equals(field)) {
26            return f.getValue();
27         }
28     }
29         return null;
30     }
31
32     function Map<String, Object> getAdditionalResourceInfo(VesAlarm a, String bandwidth) {
33         AaiQuery4Ccvpn2 aai = AaiQuery4Ccvpn2.newInstance();
34         JsonObject instance = aai.getServiceInstance(getAdditionalField(a, "siteService")); 
35         Map<String, Object> ret = new HashMap<String, Object>();
36         ret.put("service-instance.service-instance-id", instance.get("service-instance-id").getAsString()); 
37          ret.put("vserver.vserver-name", "TBD");
38          ret.put("globalSubscriberId", instance.get("globalSubscriberId").getAsString());
39          ret.put("serviceType", instance.get("serviceType").getAsString());
40          ret.put("vserver.is-closed-loop-disabled", "false");
41          ret.put("vserver.prov-status", "ACTIVE");
42          ret.put("bandwidth", bandwidth);
43          ret.put("bandwidth-change-time", getAdditionalField(a, "timestamp"));
44          ret.put("vnfId", instance.get("vnfId").getAsString());
45          return ret;
46     }
47
48     function PolicyMsg createPolicyMsg(VesAlarm alarm, String bandwidth) {
49         PolicyMsg m = new PolicyMsg();
50         m.setPolicyVersion("2.0.0");
51         m.setPolicyName("ccvpn");
52         m.setPolicyScope("service=SOTNService,type=SampleType,closedLoopControlName=CL-CCVPN-d925ed73-8231-4d02-9545-db4e101f88f8");
53         m.setClosedLoopControlName(DmaapService.loopControlNames.get("org.onap.holmes.ccvpnBandwidth"));
54         m.setRequestID(UUID.randomUUID().toString());
55         m.setClosedLoopAlarmStart(alarm.getStartEpochMicrosec());
56         m.setClosedLoopAlarmEnd(alarm.getLastEpochMicrosec());
57         m.setTarget("vserver.vserver-name");
58         m.setAai(getAdditionalResourceInfo(alarm, bandwidth));
59
60         DmaapService.alarmUniqueRequestID.put(alarm.getEventId(), m.getRequestID());
61
62          return m;
63     }
64
65     rule "Analyse traffic exception"
66         no-loop true
67          salience 200
68          when
69             $a: VesAlarm(eventName.indexOf("bandwidth") != -1, 
70                         rootFlag != 1)
71        then
72         String bandwidth = "5000";
73            if ("Abnormal".equalsIgnoreCase(getAdditionalField($a, "exceptionType"))) { 
74                bandwidth = "10000";
75            }
76         PolicyMsg msg = createPolicyMsg($a, bandwidth);
77         DmaapService dmaapService = SpringContextUtil.getBean(DmaapService.class);
78         dmaapService.publishPolicyMsg(msg, "dcae_cl_out");
79         $a.setRootFlag(1);
80     end