1 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AlarmTaskThread.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">vfc-nfvo-driver-ems-ems-boco</a> > <a href="index.source.html" class="el_package">org.onap.vfc.nfvo.emsdriver.collector.alarm</a> > <span class="el_source">AlarmTaskThread.java</span></div><h1>AlarmTaskThread.java</h1><pre class="source lang-java linenums">/**
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.collector.alarm;
18 import java.io.BufferedInputStream;
19 import java.io.BufferedOutputStream;
20 import java.io.IOException;
21 import java.net.Socket;
22 import java.net.SocketException;
23 import java.net.UnknownHostException;
25 import org.apache.commons.logging.Log;
26 import org.apache.commons.logging.LogFactory;
27 import org.onap.vfc.nfvo.emsdriver.commons.constant.Constant;
28 import org.onap.vfc.nfvo.emsdriver.commons.model.CollectVo;
29 import org.onap.vfc.nfvo.emsdriver.commons.utils.StringUtil;
30 import org.onap.vfc.nfvo.emsdriver.messagemgr.MessageChannel;
31 import org.onap.vfc.nfvo.emsdriver.messagemgr.MessageChannelFactory;
34 public class AlarmTaskThread extends Thread{
35 <span class="pc" id="L35"> public Log log = LogFactory.getLog(AlarmTaskThread.class);</span>
37 <span class="pc" id="L37"> private HeartBeat heartBeat = null;</span>
39 <span class="pc" id="L39"> private boolean isStop = false;</span>
40 <span class="pc" id="L40"> private CollectVo collectVo = null;</span>
41 <span class="pc" id="L41"> private int read_timeout = Constant.READ_TIMEOUT_MILLISECOND;</span>
44 <span class="pc" id="L44"> private Socket socket = null;</span>
45 <span class="pc" id="L45"> private BufferedInputStream is = null;</span>
46 <span class="pc" id="L46"> private BufferedOutputStream dos = null;</span>
48 private MessageChannel alarmChannel;
51 public AlarmTaskThread() {
52 <span class="nc" id="L52"> super();</span>
53 <span class="nc" id="L53"> }</span>
55 <span class="fc" id="L55"> public AlarmTaskThread(CollectVo collectVo) {</span>
57 <span class="fc" id="L57"> this.collectVo = collectVo;</span>
58 <span class="fc" id="L58"> }</span>
61 <span class="nc" id="L61"> alarmChannel = MessageChannelFactory.getMessageChannel(Constant.RESULT_CHANNEL_KEY);</span>
63 <span class="nc" id="L63"> this.init();</span>
64 <span class="nc bnc" id="L64" title="All 2 branches missed."> while(!this.isStop){</span>
67 <span class="nc" id="L67"> body = this.receive();</span>
69 <span class="nc" id="L69"> alarmChannel.put(body);</span>
70 <span class="nc" id="L70"> } catch (InterruptedException e) {</span>
71 <span class="nc" id="L71"> log.error(StringUtil.getStackTrace(e));</span>
72 <span class="nc" id="L72"> }</span>
73 <span class="nc" id="L73"> } catch (Exception e) {</span>
74 <span class="nc" id="L74"> e.printStackTrace();</span>
75 <span class="nc" id="L75"> reinit();</span>
76 <span class="nc" id="L76"> }</span>
78 <span class="nc" id="L78"> } catch (Exception e) {</span>
79 <span class="nc" id="L79"> log.error(StringUtil.getStackTrace(e));</span>
80 <span class="nc" id="L80"> }</span>
81 <span class="nc" id="L81"> }</span>
85 public String receive() throws Exception {
87 <span class="fc" id="L87"> Msg msg =null;</span>
88 <span class="fc" id="L88"> String retString = null;</span>
90 <span class="pc bpc" id="L90" title="1 of 4 branches missed."> while (retString == null && !this.isStop) {</span>
92 <span class="fc" id="L92"> msg = MessageUtil.readOneMsg(is);</span>
93 <span class="fc" id="L93"> log.debug("msg = "+msg.toString(true));</span>
94 <span class="fc" id="L94"> log.info("msg.getMsgType().name = "+msg.getMsgType().name);</span>
95 <span class="fc bfc" id="L95" title="All 2 branches covered."> if("ackLoginAlarm".equalsIgnoreCase(msg.getMsgType().name)){</span>
96 <span class="fc" id="L96"> log.debug("receive login ack");</span>
97 <span class="fc" id="L97"> boolean suc = this.ackLoginAlarm(msg);</span>
98 <span class="pc bpc" id="L98" title="1 of 2 branches missed."> if(suc){</span>
100 <span class="pc bpc" id="L100" title="1 of 2 branches missed."> if(reqId == Integer.MAX_VALUE){</span>
101 <span class="nc" id="L101"> reqId = 0;</span>
103 <span class="fc" id="L103"> reqId ++;</span>
104 <span class="fc" id="L104"> Msg msgheart = MessageUtil.putHeartBeatMsg(reqId);</span>
105 <span class="fc" id="L105"> heartBeat = new HeartBeat(socket,msgheart); </span>
106 <span class="fc" id="L106"> heartBeat.setName("CMCC_JT_HeartBeat");</span>
108 <span class="fc" id="L108"> heartBeat.start();</span>
110 <span class="fc" id="L110"> retString = null;</span>
113 <span class="pc bpc" id="L113" title="1 of 2 branches missed."> if("ackHeartBeat".equalsIgnoreCase(msg.getMsgType().name)){</span>
114 <span class="nc" id="L114"> log.debug("received heartBeat message:"+msg.getBody());</span>
115 <span class="nc" id="L115"> retString = null;</span>
120 <span class="fc bfc" id="L120" title="All 2 branches covered."> if("realTimeAlarm".equalsIgnoreCase(msg.getMsgType().name)){</span>
121 <span class="fc" id="L121"> log.debug("received alarm message");</span>
122 <span class="fc" id="L122"> retString = msg.getBody();</span>
125 <span class="fc bfc" id="L125" title="All 2 branches covered."> if(retString == null){</span>
126 <span class="fc" id="L126"> Thread.sleep(100);</span>
129 <span class="fc" id="L129"> return retString;</span>
132 public void init() throws Exception {
133 <span class="fc" id="L133"> isStop = false;</span>
135 <span class="fc" id="L135"> String host = collectVo.getIP();</span>
137 <span class="fc" id="L137"> String port = collectVo.getPort();</span>
139 <span class="fc" id="L139"> String user = collectVo.getUser();</span>
141 <span class="fc" id="L141"> String password = collectVo.getPassword();</span>
143 <span class="fc" id="L143"> String read_timeout = collectVo.getRead_timeout();</span>
144 <span class="pc bpc" id="L144" title="3 of 4 branches missed."> if ((read_timeout != null) && (read_timeout.trim().length() > 0)) {</span>
146 <span class="nc" id="L146"> this.read_timeout = Integer.parseInt(read_timeout);</span>
147 <span class="nc" id="L147"> } catch (NumberFormatException e) {</span>
148 <span class="nc" id="L148"> log.error(StringUtil.getStackTrace(e));</span>
149 <span class="nc" id="L149"> }</span>
151 <span class="fc" id="L151"> log.info("socket connect host=" + host + ", port=" + port);</span>
153 <span class="fc" id="L153"> int portInt = Integer.parseInt(port);</span>
154 <span class="fc" id="L154"> socket = new Socket(host, portInt);</span>
156 <span class="nc" id="L156"> } catch (UnknownHostException e) {</span>
157 <span class="nc" id="L157"> throw new Exception("remote host [" + host + "]connect fail" + StringUtil.getStackTrace(e));</span>
158 <span class="nc" id="L158"> } catch (IOException e) {</span>
159 <span class="nc" id="L159"> throw new Exception("create socket IOException " + StringUtil.getStackTrace(e));</span>
160 <span class="fc" id="L160"> }</span>
162 <span class="fc" id="L162"> socket.setSoTimeout(this.read_timeout);</span>
163 <span class="fc" id="L163"> socket.setTcpNoDelay(true);</span>
164 <span class="fc" id="L164"> socket.setKeepAlive(true);</span>
165 <span class="nc" id="L165"> } catch (SocketException e) {</span>
166 <span class="nc" id="L166"> throw new Exception(" SocketException " + StringUtil.getStackTrace(e));</span>
167 <span class="fc" id="L167"> }</span>
169 <span class="fc" id="L169"> dos = new BufferedOutputStream(socket.getOutputStream());</span>
171 <span class="fc" id="L171"> Msg msg = MessageUtil.putLoginMsg(user,password);</span>
174 <span class="fc" id="L174"> log.debug("send login message "+msg.toString(false));</span>
175 <span class="fc" id="L175"> MessageUtil.writeMsg(msg,dos);</span>
177 <span class="nc" id="L177"> } catch (Exception e) {</span>
178 <span class="nc" id="L178"> log.error("send login message is fail "+StringUtil.getStackTrace(e));</span>
179 <span class="fc" id="L179"> }</span>
181 <span class="fc" id="L181"> is = new BufferedInputStream(socket.getInputStream());</span>
183 <span class="nc" id="L183"> } catch (SocketException e) {</span>
184 <span class="nc" id="L184"> throw new Exception(StringUtil.getStackTrace(e));</span>
185 <span class="fc" id="L185"> }</span>
186 <span class="fc" id="L186"> }</span>
188 private boolean ackLoginAlarm(Msg msg) throws Exception {
190 <span class="fc" id="L190"> boolean is_success = false;</span>
192 <span class="fc" id="L192"> String loginres = msg.getBody();</span>
193 //ackLoginAlarm; result=fail(succ); resDesc=username-error
194 <span class="fc" id="L194"> String [] loginbody = loginres.split(";");</span>
195 <span class="pc bpc" id="L195" title="1 of 2 branches missed."> if(loginbody.length > 1){</span>
196 <span class="fc bfc" id="L196" title="All 2 branches covered."> for(String str :loginbody){</span>
197 <span class="fc bfc" id="L197" title="All 2 branches covered."> if(str.contains("=")){</span>
198 <span class="fc" id="L198"> String [] paras1 = str.split("=",-1);</span>
199 <span class="fc bfc" id="L199" title="All 2 branches covered."> if("result".equalsIgnoreCase(paras1[0].trim())){</span>
200 <span class="pc bpc" id="L200" title="1 of 2 branches missed."> if("succ".equalsIgnoreCase(paras1[1].trim())){</span>
201 <span class="fc" id="L201"> is_success = true;</span>
203 <span class="nc" id="L203"> is_success = false;</span>
209 <span class="nc" id="L209"> log.error("login ack body Incorrect formatbody=" + loginres);</span>
213 <span class="nc" id="L213"> } catch (Exception e) {</span>
214 <span class="nc" id="L214"> log.error("pocess login ack fail"+StringUtil.getStackTrace(e));</span>
215 <span class="fc" id="L215"> }</span>
216 <span class="pc bpc" id="L216" title="1 of 2 branches missed."> if (is_success) {</span>
217 <span class="fc" id="L217"> log.info("login sucess receive login ack " + msg.getBody());</span>
219 <span class="nc" id="L219"> log.error("login fail receive login ack " + msg.getBody());</span>
220 <span class="nc" id="L220"> this.close();</span>
221 <span class="nc" id="L221"> this.isStop = true;</span>
222 <span class="nc" id="L222"> throw new Exception("login fail quit");</span>
224 <span class="fc" id="L224"> return is_success;</span>
227 public void close() {
229 <span class="nc bnc" id="L229" title="All 2 branches missed."> if(heartBeat != null){</span>
230 <span class="nc" id="L230"> heartBeat.setStop(true);</span>
233 <span class="nc bnc" id="L233" title="All 2 branches missed."> if (is != null) {</span>
235 <span class="nc" id="L235"> is.close();</span>
236 <span class="nc" id="L236"> } catch (IOException e) {</span>
238 <span class="nc" id="L238"> is = null;</span>
239 <span class="nc" id="L239"> }</span>
242 <span class="nc bnc" id="L242" title="All 2 branches missed."> if (dos != null) {</span>
244 <span class="nc" id="L244"> dos.close();</span>
245 <span class="nc" id="L245"> } catch (IOException e) {</span>
247 <span class="nc" id="L247"> dos = null;</span>
248 <span class="nc" id="L248"> }</span>
251 <span class="nc bnc" id="L251" title="All 2 branches missed."> if (socket != null) {</span>
253 <span class="nc" id="L253"> socket.close();</span>
254 <span class="nc" id="L254"> } catch (IOException e) {</span>
256 <span class="nc" id="L256"> socket = null;</span>
257 <span class="nc" id="L257"> }</span>
260 <span class="nc" id="L260"> }</span>
262 public void reinit() {
263 <span class="nc" id="L263"> int time = 0;</span>
264 <span class="nc" id="L264"> close();</span>
265 <span class="nc bnc" id="L265" title="All 2 branches missed."> while(!this.isStop) {</span>
266 <span class="nc" id="L266"> close();</span>
267 <span class="nc" id="L267"> time++;</span>
269 <span class="nc" id="L269"> Thread.sleep(1000 * 30);</span>
270 <span class="nc" id="L270"> init();</span>
271 <span class="nc" id="L271"> return;</span>
272 <span class="nc" id="L272"> } catch (Exception e) {</span>
273 <span class="nc" id="L273"> log.error("Number ["+time+"]reconnect ["+collectVo.getIP()+"]fail" );</span>
274 <span class="nc" id="L274"> }</span>
276 <span class="nc" id="L276"> }</span>
279 * @param isStop the isStop to set
281 public void setStop(boolean isStop) {
282 <span class="nc" id="L282"> this.isStop = isStop;</span>
283 <span class="nc" id="L283"> }</span>
286 * @return the heartBeat
288 public HeartBeat getHeartBeat() {
289 <span class="nc" id="L289"> return heartBeat;</span>
295 </pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.7.201606060606</span></div></body></html>