[DMAAP MM] Update info.yaml
[dmaap/messagerouter/mirroragent.git] / src / main / java / org / onap / dmaap / mr / dmaapMMAgent / MirrorMakerAgent.java
1 /*******************************************************************************
2  *  ============LICENSE_START=======================================================
3  *  org.onap.dmaap
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
11  *  
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=========================================================
18  *
19  *  ECOMP is a trademark and service mark of AT&T Intellectual Property.
20  *  
21  *******************************************************************************/
22 package org.onap.dmaap.mr.dmaapMMAgent;
23
24 import com.google.gson.Gson;
25 import com.google.gson.internal.LinkedTreeMap;
26 import java.io.File;
27 import java.io.FileInputStream;
28 import java.io.FileOutputStream;
29 import java.io.IOException;
30 import java.io.InputStream;
31 import java.io.OutputStream;
32 import java.util.ArrayList;
33 import java.util.Properties;
34 import org.apache.logging.log4j.LogManager;
35 import org.apache.logging.log4j.Logger;
36 import org.jasypt.util.text.BasicTextEncryptor;
37 import org.json.JSONObject;
38 import org.onap.dmaap.mr.dmaapMMAgent.dao.CreateMirrorMaker;
39 import org.onap.dmaap.mr.dmaapMMAgent.dao.DeleteMirrorMaker;
40 import org.onap.dmaap.mr.dmaapMMAgent.dao.ListMirrorMaker;
41 import org.onap.dmaap.mr.dmaapMMAgent.dao.MirrorMaker;
42 import org.onap.dmaap.mr.dmaapMMAgent.dao.UpdateMirrorMaker;
43 import org.onap.dmaap.mr.dmaapMMAgent.dao.UpdateWhiteList;
44 import org.onap.dmaap.mr.dmaapMMAgent.utils.MirrorMakerProcessHandler;
45
46 public class MirrorMakerAgent {
47         private static final Logger logger = LogManager.getLogger(MirrorMakerAgent.class);
48         Properties mirrorMakerProperties = new Properties();
49         ListMirrorMaker mirrorMakers = null;
50         String mmagenthome = "/opt";
51         String kafkahome = "";
52         String topicURL = "";
53         String topicname = "";
54         String mechid = "";
55         String password = "";
56         String grepLog = "";
57         public boolean exitLoop = false;
58         TopicUtil topicUtil = new TopicUtil();
59         private static String secret = "utdfpWlgyDQ2ZB8SLVRtmN834I1JcT9J";
60
61         public static void main(String[] args) {
62                 if (args != null && args.length == 2) {
63                         if (args[0].equals("-encrypt")) {
64                                 BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
65                                 textEncryptor.setPassword(secret);
66                                 String plainText = textEncryptor.encrypt(args[1]);
67                                 System.out.println("Encrypted Password is :" + plainText);
68                                 return;
69                         }
70                 } else if (args != null && args.length > 0) {
71                         System.out.println(
72                                         "Usage: ./mmagent to run with the configuration \n -encrypt <password> to Encrypt Password for config ");
73                         return;
74                 }
75                 MirrorMakerAgent agent = new MirrorMakerAgent();
76                 if (agent.checkStartup()) {
77                         logger.info("mmagent started, loading properties");
78                         try {
79                                 agent.checkAgentProcess();
80                         } catch (Exception e) {
81                             logger.error("exception occured in checkAgentProcess ", e);
82                         }
83                         agent.readAgentTopic();
84                 } else {
85                         System.out.println(
86                                         "ERROR: mmagent startup unsuccessful, please make sure the mmagenthome /etc/mmagent.config is set and mechid have the rights to the topic");
87                 }
88         }
89
90         private boolean checkStartup() {
91                 FileInputStream input = null;
92                 try {
93                         input = new FileInputStream(mmagenthome + "/etc/mmagent.config");
94                         logger.info("mmagenthome is set :" + mmagenthome + " loading properties at /etc/mmagent.config");
95                 } catch (IOException ex) {
96                         logger.error(mmagenthome + "/etc/mmagent.config not found.", ex);
97                         return false;
98                 } finally {
99                         if (input != null) {
100                                 try {
101                                         input.close();
102                                 } catch (IOException e) {
103                                         logger.error("exception occured in checkStartup "+e);
104                                 }
105                         }
106                 }
107                 loadProperties();
108                 input = null;
109                 try {
110                         input = new FileInputStream(kafkahome + "/bin/kafka-run-class.sh");
111                         logger.info("kafkahome is set :" + kafkahome);
112                 } catch (IOException ex) {
113                         logger.error(kafkahome + "/bin/kafka-run-class.sh not found.  Make sure kafka home is set correctly", ex);
114                         return false;
115                 } finally {
116                         if (input != null) {
117                                 try {
118                                         input.close();
119                                 } catch (IOException e) {
120                                         logger.error("exception occured in checkStartup "+e);
121                                 }
122                         }
123                 }
124                 String response = topicUtil.publishTopic(topicURL, topicname, mechid, password, "{\"test\":\"test\"}");
125                 if (response.startsWith("ERROR:")) {
126                         logger.error("Problem publishing to topic, please verify the config " + this.topicname + " MR URL is:"
127                                         + this.topicURL + " Error is:  " + response);
128                         return false;
129                 }
130                 logger.info("Published to Topic :" + this.topicname + " Successfully");
131                 response = topicUtil.subscribeTopic(topicURL, topicname, "1", mechid, password);
132                 if (response != null && response.startsWith("ERROR:")) {
133                         logger.error("Problem subscribing to topic, please verify the config " + this.topicname + " MR URL is:"
134                                         + this.topicURL + " Error is:  " + response);
135                         return false;
136                 }
137                 logger.info("Subscribed to Topic :" + this.topicname + " Successfully");
138                 return true;
139         }
140
141         private void checkPropertiesFile(MirrorMaker mm, String propName, boolean refresh) {
142                 InputStream input = null;
143                 OutputStream out = null;
144                 try {
145                         if (refresh) {
146                                 throw new IOException();
147                         }
148                         input = new FileInputStream(mmagenthome + "/etc/" + mm.name + propName + ".properties");
149                 } catch (IOException ex) {
150                         try {
151                                 input = new FileInputStream(mmagenthome + "/etc/" + propName + ".properties");
152                                 Properties prop = new Properties();
153                                 prop.load(input);
154                                 if (propName.equals("consumer")) {
155                                         prop.setProperty("group.id", mm.name);
156
157                                         prop.setProperty("bootstrap.servers", mm.consumer);
158                                         prop.setProperty("client.id", mm.name + "MM_consumer");
159                                 } else {
160                                         prop.setProperty("bootstrap.servers", mm.producer);
161                                         prop.setProperty("client.id", mm.name + "MM_producer");
162
163                                 }
164                                 out = new FileOutputStream(mmagenthome + "/etc/" + mm.name + propName + ".properties");
165                                 prop.store(out, "");
166
167                         } catch (Exception e) {
168                                 logger.error("exception occured in checkPropertiesFile "+e);
169                         }
170                 } finally {
171                         if (input != null) {
172                                 try {
173                                         input.close();
174                                 } catch (IOException e) {
175                                     logger.error("exception occured in checkPropertiesFile ", e);
176                                 }
177                         }
178                         if (out != null) {
179                                 try {
180                                         out.close();
181                                 } catch (IOException e) {
182                                         logger.error("exception occured in checkPropertiesFile "+e);
183                                 }
184                         }
185                 }
186         }
187
188         private void checkAgentProcess() throws Exception {
189                 logger.info("Checking MirrorMaker Process");
190                 if (mirrorMakers != null) {
191                         int mirrorMakersCount = mirrorMakers.getListMirrorMaker().size();
192                         for (int i = 0; i < mirrorMakersCount; i++) {
193                                 MirrorMaker mm = mirrorMakers.getListMirrorMaker().get(i);
194                                 if (MirrorMakerProcessHandler.checkMirrorMakerProcess(mm.name, mm.enablelogCheck,
195                                                 this.grepLog) == false) {
196                                         checkPropertiesFile(mm, "consumer", false);
197                                         checkPropertiesFile(mm, "producer", false);
198
199                                         if (mm.whitelist != null && !mm.whitelist.equals("")) {
200                                                 logger.info(
201                                                                 "MirrorMaker " + mm.name + " is not running, restarting.  Check Logs for more Details");
202                                                 MirrorMakerProcessHandler.startMirrorMaker(this.mmagenthome, this.kafkahome, mm.name,
203                                                                 mmagenthome + "/etc/" + mm.name + "consumer.properties",
204                                                                 mmagenthome + "/etc/" + mm.name + "producer.properties", mm.numStreams, mm.whitelist);
205                                                 mm.setStatus("RESTARTING");
206
207                                         } else {
208                                                 logger.info("MirrorMaker " + mm.name + " is STOPPED");
209                                                 mm.setStatus("STOPPED");
210                                         }
211                                         try {
212                                                 Thread.sleep(1000);
213                                         } catch (InterruptedException e) {
214                                         }
215                                         mirrorMakers.getListMirrorMaker().set(i, mm);
216                                 } else {
217                                         logger.info("MirrorMaker " + mm.name + " is running");
218                                         mm.setStatus("RUNNING");
219                                         mirrorMakers.getListMirrorMaker().set(i, mm);
220                                 }
221                         }
222                 }
223                 // Gson g = new Gson();
224                 // System.out.println(g.toJson(mirrorMakers));
225         }
226
227         public void readAgentTopic() {
228                 try {
229                         int connectionattempt = 0;
230                         while (true) {
231                                 logger.info("--------------------------------");
232                                 logger.info("Waiting for Messages for 60 secs");
233                                 String topicMessage = topicUtil.subscribeTopic(topicURL, topicname, "60000", mechid, password);
234                                 Gson g = new Gson();
235                                 LinkedTreeMap<?, ?> object = null;
236                                 if (topicMessage != null) {
237                                         try {
238                                                 // Check and parse if String object returned by consumer
239                                                 // API
240                                                 // else use the jsonObject
241                                                 if (topicMessage.startsWith("\"")) {
242                                                         topicMessage = g.fromJson(topicMessage.toString(), String.class);
243                                                 }
244                                                 object = g.fromJson(topicMessage, LinkedTreeMap.class);
245
246                                                 // Cast the 1st item (since limit=1 and see the type of
247                                                 // object
248                                                 readAgent(object, topicMessage);
249                                         } catch (Exception ex) {
250                                                 connectionattempt++;
251                                                 if (connectionattempt > 5) {
252                                                         logger.info("Can't connect to the topic, mmagent shutting down , " + topicMessage);
253                                                         return;
254                                                 }
255                                                 logger.info("Can't connect to the topic, " + topicMessage + " Retrying " + connectionattempt
256                                                                 + " of 5 times in 1 minute" + " Error:" + ex.getLocalizedMessage());
257                                                 Thread.sleep(60000);
258                                         }
259                                 } else {
260                                         // Check all MirrorMaker every min
261                                         connectionattempt = 0;
262                                         checkAgentProcess();
263                                 }
264                                 if (exitLoop) {
265                                         break;
266                                 }
267
268                         }
269                 } catch (Exception e) {
270                     logger.error("exception occured in readAgentTopic ", e);
271                 }
272
273         }
274
275         public void createMirrorMaker(MirrorMaker newMirrorMaker) {
276                 boolean exists = false;
277                 if (mirrorMakers != null) {
278                         int mirrorMakersCount = mirrorMakers.getListMirrorMaker().size();
279                         for (int i = 0; i < mirrorMakersCount; i++) {
280                                 MirrorMaker mm = mirrorMakers.getListMirrorMaker().get(i);
281                                 if (mm.name.equals(newMirrorMaker.name)) {
282                                         exists = true;
283                                         logger.info("MirrorMaker already exist for:" + newMirrorMaker.name);
284                                         return;
285                                 }
286                         }
287                 }
288                 logger.info("Adding new MirrorMaker:" + newMirrorMaker.name);
289                 if (exists == false && mirrorMakers != null) {
290                         mirrorMakers.getListMirrorMaker().add(newMirrorMaker);
291                 } else if (exists == false && mirrorMakers == null) {
292                         mirrorMakers = new ListMirrorMaker();
293                         ArrayList<MirrorMaker> list = mirrorMakers.getListMirrorMaker();
294                         list = new ArrayList<MirrorMaker>();
295                         list.add(newMirrorMaker);
296                         mirrorMakers.setListMirrorMaker(list);
297                 }
298                 checkPropertiesFile(newMirrorMaker, "consumer", true);
299                 checkPropertiesFile(newMirrorMaker, "producer", true);
300
301                 Gson g = new Gson();
302                 mirrorMakerProperties.setProperty("mirrormakers", g.toJson(this.mirrorMakers));
303                 OutputStream out = null;
304                 try {
305                         out = new FileOutputStream(mmagenthome + "/etc/mmagent.config");
306                         mirrorMakerProperties.store(out, "");
307                 } catch (IOException ex) {
308                     logger.error("exception occured in createMirrorMaker ", ex);
309                 } finally {
310                         if (out != null) {
311                                 try {
312                                         out.close();
313                                 } catch (IOException e) {
314                                     logger.error("exception occured in createMirrorMaker ", e);
315                                 }
316                         }
317                 }
318         }
319
320         private void updateMirrorMaker(MirrorMaker newMirrorMaker) {
321                 boolean exists = false;
322                 if (mirrorMakers != null) {
323                         int mirrorMakersCount = mirrorMakers.getListMirrorMaker().size();
324                         for (int i = 0; i < mirrorMakersCount; i++) {
325                                 MirrorMaker mm = mirrorMakers.getListMirrorMaker().get(i);
326                                 if (mm.name.equals(newMirrorMaker.name)) {
327                                         exists = true;
328                                         if (null != newMirrorMaker.getConsumer()) {
329                                                 mm.setConsumer(newMirrorMaker.getConsumer());
330                                         }
331                                         if (null != newMirrorMaker.getProducer()) {
332                                                 mm.setProducer(newMirrorMaker.getProducer());
333                                         }
334                                         if (newMirrorMaker.getNumStreams() >= 1) {
335                                                 mm.setNumStreams(newMirrorMaker.getNumStreams());
336                                         }
337
338                                         mm.setEnablelogCheck(newMirrorMaker.enablelogCheck);
339
340                                         mirrorMakers.getListMirrorMaker().set(i, mm);
341                                         newMirrorMaker = mm;
342                                         logger.info("Updating MirrorMaker:" + newMirrorMaker.name);
343                                 }
344                         }
345                 }
346                 if (exists) {
347                         checkPropertiesFile(newMirrorMaker, "consumer", true);
348                         checkPropertiesFile(newMirrorMaker, "producer", true);
349
350                         Gson g = new Gson();
351                         mirrorMakerProperties.setProperty("mirrormakers", g.toJson(this.mirrorMakers));
352                         OutputStream out = null;
353                         try {
354                                 out = new FileOutputStream(mmagenthome + "/etc/mmagent.config");
355                                 mirrorMakerProperties.store(out, "");
356                                 MirrorMakerProcessHandler.stopMirrorMaker(newMirrorMaker.name);
357                                 try {
358                                         Thread.sleep(1000);
359                                 } catch (InterruptedException e) {
360                                 }
361                         } catch (IOException ex) {
362                             logger.error("exception occured in updateMirrorMaker ", ex);
363                         } finally {
364                                 if (out != null) {
365                                         try {
366                                                 out.close();
367                                         } catch (IOException e) {
368                                             logger.error("exception occured in updateMirrorMaker ", e);
369                                         }
370                                 }
371                         }
372                 } else {
373                         logger.info("MirrorMaker Not found for:" + newMirrorMaker.name);
374                 }
375         }
376
377         private void updateWhiteList(MirrorMaker newMirrorMaker) {
378                 boolean exists = false;
379                 if (mirrorMakers != null) {
380                         int mirrorMakersCount = mirrorMakers.getListMirrorMaker().size();
381                         for (int i = 0; i < mirrorMakersCount; i++) {
382                                 MirrorMaker mm = mirrorMakers.getListMirrorMaker().get(i);
383                                 if (mm.name.equals(newMirrorMaker.name)) {
384                                         exists = true;
385                                         mm.setWhitelist(newMirrorMaker.whitelist);
386                                         mirrorMakers.getListMirrorMaker().set(i, mm);
387                                         logger.info("Updating MirrorMaker WhiteList:" + newMirrorMaker.name + " WhiteList:"
388                                                         + newMirrorMaker.whitelist);
389                                 }
390                         }
391                 }
392                 if (exists) {
393                         Gson g = new Gson();
394                         mirrorMakerProperties.setProperty("mirrormakers", g.toJson(this.mirrorMakers));
395                         OutputStream out = null;
396                         try {
397                                 out = new FileOutputStream(mmagenthome + "/etc/mmagent.config");
398                                 mirrorMakerProperties.store(out, "");
399                                 MirrorMakerProcessHandler.stopMirrorMaker(newMirrorMaker.name);
400                                 try {
401                                         Thread.sleep(1000);
402                                 } catch (InterruptedException e) {
403                                 }
404                         } catch (IOException ex) {
405                             logger.error("exception occured in updateWhiteList ", ex);
406                         } finally {
407                                 if (out != null) {
408                                         try {
409                                                 out.close();
410                                         } catch (IOException e) {
411                                             logger.error("exception occured in updateWhiteList ", e);
412                                         }
413                                 }
414                         }
415                 } else {
416                         logger.info("MirrorMaker Not found for:" + newMirrorMaker.name);
417                 }
418         }
419
420         private void deleteMirrorMaker(MirrorMaker newMirrorMaker) {
421                 boolean exists = false;
422                 if (mirrorMakers != null) {
423                         int mirrorMakersCount = mirrorMakers.getListMirrorMaker().size();
424                         for (int i = 0; i < mirrorMakersCount; i++) {
425                                 MirrorMaker mm = mirrorMakers.getListMirrorMaker().get(i);
426                                 if (mm.name.equals(newMirrorMaker.name)) {
427                                         exists = true;
428                                         mirrorMakers.getListMirrorMaker().remove(i);
429                                         logger.info("Removing MirrorMaker:" + newMirrorMaker.name);
430                                         i = mirrorMakersCount;
431                                 }
432                         }
433                 }
434                 if (exists) {
435                         try {
436                                 String path = mmagenthome + "/etc/" + newMirrorMaker.name + "consumer" + ".properties";
437                                 File file = new File(path);
438                                 file.delete();
439                         } catch (Exception ex) {
440                             logger.error("exception occured in deleteMirrorMaker ", ex);
441                         }
442                         try {
443                                 String path = mmagenthome + "/etc/" + newMirrorMaker.name + "producer" + ".properties";
444                                 File file = new File(path);
445                                 file.delete();
446                         } catch (Exception ex) {
447                             logger.error("exception occured in deleteMirrorMaker ", ex);
448                         }
449                         Gson g = new Gson();
450                         mirrorMakerProperties.setProperty("mirrormakers", g.toJson(this.mirrorMakers));
451                         OutputStream out = null;
452                         try {
453                                 out = new FileOutputStream(mmagenthome + "/etc/mmagent.config");
454                                 mirrorMakerProperties.store(out, "");
455                                 MirrorMakerProcessHandler.stopMirrorMaker(newMirrorMaker.name);
456                         } catch (IOException ex) {
457                             logger.error("exception occured in deleteMirrorMaker ", ex);
458                         } finally {
459                                 if (out != null) {
460                                         try {
461                                                 out.close();
462                                         } catch (IOException e) {
463                                             logger.error("exception occured in deleteMirrorMaker ", e);
464                                         }
465                                 }
466                         }
467                 } else {
468                         logger.info("MirrorMaker Not found for:" + newMirrorMaker.name);
469                 }
470         }
471
472         private void loadProperties() {
473                 InputStream input = null;
474                 try {
475
476                         input = new FileInputStream(mmagenthome + "/etc/mmagent.config");
477                         mirrorMakerProperties.load(input);
478                         Gson g = new Gson();
479                         if (mirrorMakerProperties.getProperty("mirrormakers") == null) {
480                                 this.mirrorMakers = new ListMirrorMaker();
481                                 ArrayList<MirrorMaker> list = this.mirrorMakers.getListMirrorMaker();
482                                 list = new ArrayList<>();
483                                 this.mirrorMakers.setListMirrorMaker(list);
484                         } else {
485                                 this.mirrorMakers = g.fromJson(mirrorMakerProperties.getProperty("mirrormakers"),
486                                                 ListMirrorMaker.class);
487                         }
488
489                         this.kafkahome = mirrorMakerProperties.getProperty("kafkahome");
490                         this.topicURL = mirrorMakerProperties.getProperty("topicURL");
491                         this.topicname = mirrorMakerProperties.getProperty("topicname");
492                         this.mechid = mirrorMakerProperties.getProperty("mechid");
493                         this.grepLog = mirrorMakerProperties.getProperty("grepLog");
494
495                         BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
496                         textEncryptor.setPassword(secret);
497                         this.password = textEncryptor.decrypt(mirrorMakerProperties.getProperty("password"));
498                 } catch (Exception ex) {
499                     logger.error("exception occured in loadProperties ", ex);
500                 } finally {
501                         if (input != null) {
502                                 try {
503                                         input.close();
504                                 } catch (IOException e) {
505                                     logger.error("exception occured in loadProperties ", e);
506                                 }
507                         }
508                 }
509
510         }
511
512         public void readAgent(LinkedTreeMap<?, ?> object, String topicMessage) throws Exception{
513
514                 Gson g = new Gson();
515
516                 if (object.get("createMirrorMaker") != null) {
517                         logger.info("Received createMirrorMaker request from topic");
518                         CreateMirrorMaker m = g.fromJson(topicMessage, CreateMirrorMaker.class);
519                         createMirrorMaker(m.getCreateMirrorMaker());
520                         checkAgentProcess();
521                         mirrorMakers.setMessageID(m.getMessageID());
522                         topicUtil.publishTopic(topicURL, topicname, mechid, password, g.toJson(mirrorMakers));
523                         mirrorMakers.setMessageID("");
524                 } else if (object.get("updateMirrorMaker") != null) {
525                         logger.info("Received updateMirrorMaker request from topic");
526                         UpdateMirrorMaker m = g.fromJson(topicMessage, UpdateMirrorMaker.class);
527                         JSONObject json = new JSONObject(topicMessage);
528                         JSONObject json2 = (JSONObject) json.get("updateMirrorMaker");
529                         if (!json2.has("numStreams")) {
530                                 m.getUpdateMirrorMaker().setNumStreams(0);
531                         }
532                         updateMirrorMaker(m.getUpdateMirrorMaker());
533                         checkAgentProcess();
534                         mirrorMakers.setMessageID(m.getMessageID());
535                         topicUtil.publishTopic(topicURL, topicname, mechid, password, g.toJson(mirrorMakers));
536                         mirrorMakers.setMessageID("");
537                 } else if (object.get("deleteMirrorMaker") != null) {
538                         logger.info("Received deleteMirrorMaker request from topic");
539                         DeleteMirrorMaker m = g.fromJson(topicMessage, DeleteMirrorMaker.class);
540                         deleteMirrorMaker(m.getDeleteMirrorMaker());
541                         checkAgentProcess();
542                         mirrorMakers.setMessageID(m.getMessageID());
543                         topicUtil.publishTopic(topicURL, topicname, mechid, password, g.toJson(mirrorMakers));
544                         mirrorMakers.setMessageID("");
545                 } else if (object.get("listAllMirrorMaker") != null) {
546                         logger.info("Received listALLMirrorMaker request from topic");
547                         checkAgentProcess();
548                         mirrorMakers.setMessageID((String) object.get("messageID"));
549                         topicUtil.publishTopic(topicURL, topicname, mechid, password, g.toJson(mirrorMakers));
550                         mirrorMakers.setMessageID("");
551                 } else if (object.get("updateWhiteList") != null) {
552                         logger.info("Received updateWhiteList request from topic");
553                         UpdateWhiteList m = g.fromJson(topicMessage, UpdateWhiteList.class);
554                         updateWhiteList(m.getUpdateWhiteList());
555                         checkAgentProcess();
556                         mirrorMakers.setMessageID(m.getMessageID());
557                         topicUtil.publishTopic(topicURL, topicname, mechid, password, g.toJson(mirrorMakers));
558                         mirrorMakers.setMessageID("");
559                 } else if (object.get("listMirrorMaker") != null) {
560                         logger.info("Received listMirrorMaker from topic, skipping messages");
561                 } else {
562                         logger.info("Received unknown request from topic");
563                 }
564
565         }
566 }