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