1 /*******************************************************************************
2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 * ============LICENSE_END=========================================================
19 * ECOMP is a trademark and service mark of AT&T Intellectual Property.
21 *******************************************************************************/
22 package org.onap.dmaap.mr.dmaapMMAgent.utils;
24 import java.io.BufferedReader;
25 import java.io.InputStream;
26 import java.io.InputStreamReader;
27 import org.apache.logging.log4j.LogManager;
28 import org.apache.logging.log4j.Logger;
30 public class MirrorMakerProcessHandler {
31 private static final Logger logger = LogManager.getLogger(MirrorMakerProcessHandler.class);
32 static String mmagenthome = "/opt";
34 public static boolean checkMirrorMakerProcess(String agentname, boolean enablelogCheck, String grepLog) throws Exception {
37 Runtime rt = Runtime.getRuntime();
38 Process mmprocess = null;
40 if (System.getProperty("os.name").contains("Windows")) {
42 args = "wmic.exe process where \"commandline like '%agentname=" + agentname
43 + "~%' and caption='java.exe'\"";
44 mmprocess = rt.exec(args);
46 //String args[] = { "/bin/sh", "-c", "ps -ef |grep java |grep agentname=" + agentname + "~" };
48 String args[] = { "/bin/sh", "-c", "ps -ef |grep agentname=" + agentname + "| grep -v grep | awk '{print $1}'"};
49 logger.info("CheckMM process->"+args[2]);
50 mmprocess = rt.exec(args);
53 InputStream is = mmprocess.getInputStream();
54 InputStreamReader isr = new InputStreamReader(is);
55 BufferedReader br = new BufferedReader(isr);
57 while ((line = br.readLine()) != null) {
59 // if (line.contains("agentname=" + agentname) && line.contains("/bin/sh -c") == false) {
61 //If enablelogCheck Check MirrorMaker log for errors and restart mirrormaker
63 logger.info("Check if MM log contains any errors");
65 args2 = new String[] { "/bin/sh", "-c", "grep -i ERROR "+ mmagenthome + "/logs/" + agentname + "_MMaker.log"};
66 if(null!=grepLog && !grepLog.isEmpty())
68 args2 = new String[]{ "/bin/sh", "-c", grepLog +" " + mmagenthome + "/logs/" + agentname + "_MMaker.log"};
70 logger.info("Grep log args-- "+args2[2]);
71 mmprocess = rt.exec(args2);
72 InputStream islog = mmprocess.getInputStream();
73 InputStreamReader isrlog = new InputStreamReader(islog);
74 BufferedReader brlog = new BufferedReader(isrlog);
76 while ((linelog = brlog.readLine()) != null)
78 logger.info("Error from MM log--"+linelog);
80 if (linelog.toLowerCase().contains("ERROR".toLowerCase()) ||
81 linelog.toLowerCase().contains("Issue".toLowerCase()) )
83 logger.info("MM log contains error Stop MM and restart");
84 stopMirrorMaker(agentname);
99 } catch (Exception e) {
100 logger.error("Error occured in MirrorMakerProcessHandler.checkMirrorMakerProcess"+e);
105 public static void stopMirrorMaker(String agentname) {
107 Runtime rt = Runtime.getRuntime();
108 Process killprocess = null;
110 if (System.getProperty("os.name").contains("Windows")) {
111 String args = "wmic.exe process where \"commandline like '%agentname=" + agentname
112 + "~%' and caption='java.exe'\" call terminate";
113 killprocess = rt.exec(args);
115 //String args[] = { "/bin/sh", "-c",
116 // "kill -9 $(ps -ef |grep java |grep agentname=" + agentname + "~| awk '{print $2}')" };
118 //String args[] = { "/bin/sh", "-c",
119 // "kill -9 `ps -ef |grep agentname=" + agentname + "~| egrep -v 'grep|java' | awk '{print $2}'` | egrep -v '/bin/sh|grep'"};
120 String args[] = { "/bin/sh", "-c",
121 "kill -9 $(ps -ef | grep agentname=" + agentname + "| grep -v grep | awk '{print $1}')"};
122 logger.info ("Stop MM ->"+args[2]);
123 // args = "kill $(ps -ef |grep java |grep agentname=" +
124 // agentname + "~| awk '{print $2}')";
125 killprocess = rt.exec(args);
128 InputStream is = killprocess.getInputStream();
129 InputStreamReader isr = new InputStreamReader(is);
130 BufferedReader br = new BufferedReader(isr);
132 while ((line = br.readLine()) != null) {
133 // System.out.println(line);
136 logger.info("Mirror Maker " + agentname + " Stopped");
137 } catch (Exception e) {
138 logger.error("exception occured in stopMirrorMaker ", e);
143 public static void startMirrorMaker(String mmagenthome, String kafkaHome, String agentName, String consumerConfig,
144 String producerConfig, int numStreams, String whitelist) {
146 Runtime rt = Runtime.getRuntime();
148 if (System.getProperty("os.name").contains("Windows")) {
149 String args = kafkaHome + "/bin/windows/kafka-run-class.bat -Dagentname=" + agentName
150 + "~ kafka.tools.MirrorMaker --consumer.config " + consumerConfig + " --producer.config "
151 + producerConfig +" --num.streams " + numStreams + " --abort.on.send.failure true" +" --whitelist '" + whitelist + "' > " + mmagenthome + "/logs/" + agentName
153 final Process process = rt.exec(args);
158 InputStream is = process.getInputStream();
159 InputStreamReader isr = new InputStreamReader(is);
160 BufferedReader br = new BufferedReader(isr);
162 while ((line = br.readLine()) != null) {
163 // System.out.println(line);
165 } catch (Exception anExc) {
166 logger.error("exception occured in startMirrorMaker ", anExc);
171 String args[] = { "/bin/sh", "-c",
172 kafkaHome + "/bin/kafka-run-class.sh -Dagentname=" + agentName
173 + " kafka.tools.MirrorMaker --consumer.config " + consumerConfig
174 + " --producer.config " + producerConfig + " --num.streams " + numStreams + " --abort.on.send.failure true" + " --whitelist '" + whitelist + "' >"
175 + mmagenthome + "/logs/" + agentName + "_MMaker.log 2>&1" };
176 final Process process = rt.exec(args);
180 InputStream is = process.getInputStream();
181 InputStreamReader isr = new InputStreamReader(is);
182 BufferedReader br = new BufferedReader(isr);
184 while ((line = br.readLine()) != null) {
185 // System.out.println(line);
187 } catch (Exception anExc) {
188 logger.error("exception occured in startMirrorMaker ", anExc);
194 logger.info("Mirror Maker " + agentName + " Started" + " WhiteListing:" + whitelist);
196 } catch (Exception e) {
197 logger.error("exception occured in startMirrorMaker ", e);