2 * Copyright 2017 BOCO Corporation. CMCC Technologies Co., Ltd
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org.onap.vfc.nfvo.emsdriver.northbound.client;
18 import java.text.ParseException;
19 import java.text.SimpleDateFormat;
20 import java.util.Date;
22 import java.util.Properties;
24 import org.apache.log4j.Level;
25 import org.onap.vfc.nfvo.emsdriver.commons.constant.Constant;
26 import org.onap.vfc.nfvo.emsdriver.commons.utils.DriverThread;
27 import org.onap.vfc.nfvo.emsdriver.configmgr.ConfigurationInterface;
28 import org.onap.vfc.nfvo.emsdriver.messagemgr.MessageChannel;
29 import org.onap.vfc.nfvo.emsdriver.messagemgr.MessageChannelFactory;
31 import com.alibaba.fastjson.JSONObject;
33 import evel_javalibrary.att.com.AgentMain;
34 import evel_javalibrary.att.com.EvelFault;
35 import evel_javalibrary.att.com.EvelFault.EVEL_SEVERITIES;
36 import evel_javalibrary.att.com.EvelFault.EVEL_SOURCE_TYPES;
37 import evel_javalibrary.att.com.EvelFault.EVEL_VF_STATUSES;
38 import evel_javalibrary.att.com.EvelHeader;
39 import evel_javalibrary.att.com.EvelScalingMeasurement;
41 public class NorthMessageMgr extends DriverThread{
43 private MessageChannel alarmChannel = MessageChannelFactory.getMessageChannel(Constant.RESULT_CHANNEL_KEY);
44 private MessageChannel collectChannel = MessageChannelFactory.getMessageChannel(Constant.COLLECT_CHANNEL_KEY);
45 private MessageChannel collectResultChannel = MessageChannelFactory.getMessageChannel(Constant.COLLECT_RESULT_CHANNEL_KEY);
46 private ConfigurationInterface configurationInterface ;
48 private boolean threadStop = false;
49 private Level level = Level.DEBUG;
52 public void dispose() {
53 Properties properties = configurationInterface.getProperties();
54 String event_api_url = properties.getProperty("event_api_url");
55 String port = properties.getProperty("port");
56 String path = properties.getProperty("path");
57 String topic = properties.getProperty("topic");
58 String username = properties.getProperty("username");
59 String password = properties.getProperty("password");
60 String levelStr = properties.getProperty("level");
61 if("debug".equals(levelStr)){
68 event_api_url = "http://"+event_api_url;
70 AgentMain.evel_initialize(event_api_url, Integer.parseInt(port),
75 log.info("AgentMain.evel_initialize sucess ");
76 } catch( Exception e ){
77 log.error("AgentMain.evel_initialize fail ",e);
80 new HeatBeatTread().start();
82 new AlarmMessageRecv().start();
84 new ResultMessageRecv().start();
86 new CollectMessageRecv().start();
90 class HeatBeatTread extends Thread{
97 EvelHeader header = EvelHeader.evel_new_heartbeat("Hearbeat_EMS","EMS-driver");
98 header.evel_nfnamingcode_set("EMS-driver");
99 header.evel_nfcnamingcode_set("EMS-driver");
100 AgentMain.evel_post_event(header);
101 log.debug("HeatBeat send!");
103 Thread.sleep(60*1000);
104 } catch( Exception e ){
107 } catch (Exception e) {
108 log.error("HeatBeatTread exception",e);
114 class AlarmMessageRecv extends Thread{
115 long timeStamp = System.currentTimeMillis();
121 if(System.currentTimeMillis() - timeStamp > Constant.ONEMINUTE){
122 timeStamp = System.currentTimeMillis();
124 log.debug("ALARM_CHANNEL Msg size :"+alarmChannel.size());
127 Object obj = alarmChannel.poll();
131 if(obj instanceof String){
132 String result = (String)obj;
133 JSONObject reagobj = JSONObject.parseObject(result);
135 EvelFault evelFault = this.resultEvelFault(reagobj);
138 AgentMain.evel_post_event(evelFault);
140 log.error("AlarmMessageRecv receive Object = "+obj);
143 } catch (Exception e) {
144 log.error("AlarmMessageRecv exception",e);
149 private EvelFault resultEvelFault(JSONObject reagobj) {
151 String eventName = null;
152 EvelHeader.PRIORITIES pri = null;
153 EVEL_SEVERITIES severity = null;
154 EVEL_VF_STATUSES status = null;
155 String alarmStatus = reagobj.getString("alarmStatus");
156 String origSeverity = reagobj.getString("origSeverity");
157 if("0".equals(alarmStatus)){
158 status = EVEL_VF_STATUSES.EVEL_VF_STATUS_IDLE;
159 eventName = "Fault_"+reagobj.getString("neType")+"_"+reagobj.getString("alarmTitle")+"Cleared";
161 if("1".equals(origSeverity)){
162 severity = EVEL_SEVERITIES.EVEL_SEVERITY_CRITICAL;
163 pri = EvelHeader.PRIORITIES.EVEL_PRIORITY_HIGH;
164 }else if("2".equals(origSeverity)){
165 severity = EVEL_SEVERITIES.EVEL_SEVERITY_MAJOR;
166 pri = EvelHeader.PRIORITIES.EVEL_PRIORITY_MEDIUM;
167 }else if("3".equals(origSeverity)){
168 severity = EVEL_SEVERITIES.EVEL_SEVERITY_MINOR;
169 pri = EvelHeader.PRIORITIES.EVEL_PRIORITY_NORMAL;
170 }else if("4".equals(origSeverity)){
171 severity = EVEL_SEVERITIES.EVEL_SEVERITY_WARNING;
172 pri = EvelHeader.PRIORITIES.EVEL_PRIORITY_LOW;
176 status = EVEL_VF_STATUSES.EVEL_VF_STATUS_ACTIVE;
177 eventName = "Fault_"+reagobj.getString("neType")+"_"+reagobj.getString("alarmTitle");
178 pri = EvelHeader.PRIORITIES.EVEL_PRIORITY_NORMAL;
179 severity = EVEL_SEVERITIES.EVEL_SEVERITY_NORMAL;
182 String evnId = reagobj.getString("alarmId");
183 String alarmCondition = reagobj.getString("specificProblem");
185 String specificProblem = reagobj.getString("specificProblem");
187 EvelFault flt = new EvelFault(eventName, evnId,alarmCondition,
188 specificProblem,pri,severity,
189 EVEL_SOURCE_TYPES.EVEL_SOURCE_VIRTUAL_NETWORK_FUNCTION,
191 flt.evel_nfcnamingcode_set("");
192 flt.evel_nfnamingcode_set("");
193 flt.evel_header_type_set("applicationVnf");
194 String eventTime = reagobj.getString("eventTime");
195 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
196 Date eventTimeD = new Date();
198 eventTimeD = format.parse(eventTime);
199 } catch (ParseException e) {
200 // TODO Auto-generated catch block
203 flt.evel_start_epoch_set(eventTimeD.getTime());
204 flt.evel_last_epoch_set(eventTimeD.getTime());
206 flt.evel_fault_category_set(reagobj.getString("alarmType"));
207 flt.evel_fault_interface_set(reagobj.getString("objectName"));
208 String neUID = reagobj.getString("neUID");
209 flt.evel_reporting_entity_id_set(neUID.substring(0,9));//
210 flt.evel_reporting_entity_name_set(neUID.substring(0,9));
211 flt.evel_header_set_sourceid(true, reagobj.getString("neName"));
212 flt.evel_header_set_source_name(reagobj.getString("objectName"));
214 flt.evel_header_set_priority(pri);
215 for(String key : reagobj.keySet()){
216 flt.evel_fault_addl_info_add(key, reagobj.getString(key));
223 class ResultMessageRecv extends Thread{
224 long timeStamp = System.currentTimeMillis();
230 if(System.currentTimeMillis() - timeStamp > Constant.ONEMINUTE){
231 timeStamp = System.currentTimeMillis();
233 log.debug("COLLECT_RESULT_CHANNEL Msg size :"+collectResultChannel.size());
236 Object obj = collectResultChannel.poll();
240 if(obj instanceof String){
242 Properties properties = configurationInterface.getProperties();
243 String msbAddress = properties.getProperty("msbAddress");
244 String url = properties.getProperty("dataNotifyUrl");
245 String postUrl = "http://"+msbAddress+url;
246 HttpClientUtil.doPost(postUrl, (String)obj, Constant.ENCODING_UTF8);
249 } catch (Exception e) {
250 log.error("ResultMessageRecv exception",e);
256 class CollectMessageRecv extends Thread{
257 long timeStamp = System.currentTimeMillis();
263 if(System.currentTimeMillis() - timeStamp > Constant.ONEMINUTE){
264 timeStamp = System.currentTimeMillis();
266 log.debug("COLLECT_CHANNEL_KEY Msg size :"+collectChannel.size());
269 Object obj = collectChannel.poll();
273 if(obj instanceof Map){
274 @SuppressWarnings("unchecked")
275 Map<String,String> reMap = (Map<String,String>)obj;
276 EvelScalingMeasurement evelScalingMeasurement = this.resultEvelScalingMeasurement(reMap);
279 AgentMain.evel_post_event(evelScalingMeasurement);
282 log.error("CollectMessageRecv receive Object = "+obj);
285 } catch (Exception e) {
286 log.error("CollectMessageRecv exception",e);
291 private EvelScalingMeasurement resultEvelScalingMeasurement(Map<String,String> reMap) {
292 String evname = "Mfvs_"+reMap.get("ElementType")+reMap.get("ObjectType");
293 String evid = reMap.get("startTime")+reMap.get("ObjectType")+reMap.get("rmUID");
294 int Period = Integer.parseInt(reMap.get("Period")!=null?reMap.get("Period"):"15");
295 EvelScalingMeasurement sm = new EvelScalingMeasurement(Period,evname, evid);
297 for(String key : reMap.keySet()){
298 sm.evel_measurement_custom_measurement_add(reMap.get("ElementType"), key, reMap.get(key));
302 sm.evel_nfcnamingcode_set("");
303 sm.evel_nfnamingcode_set("");
304 sm.evel_header_type_set("applicationVnf");
305 String rmUID = reMap.get("rmUID");
306 sm.evel_reporting_entity_id_set(rmUID.substring(0,9));//
307 String Dn = reMap.get("Dn");
308 sm.evel_reporting_entity_name_set(Dn.substring(0, Dn != null && Dn.indexOf(";")>0?Dn.indexOf(";"):Dn.length()));
309 sm.evel_header_set_sourceid(true, reMap.get("rmUID"));
310 sm.evel_header_set_source_name(reMap.get("rmUID"));
312 sm.evel_header_set_priority(EvelHeader.PRIORITIES.EVEL_PRIORITY_NORMAL);
318 * @return the configurationInterface
320 public ConfigurationInterface getConfigurationInterface() {
321 return configurationInterface;
325 * @param configurationInterface the configurationInterface to set
327 public void setConfigurationInterface(
328 ConfigurationInterface configurationInterface) {
329 this.configurationInterface = configurationInterface;