package com.telefonica.claudia.slm.monitoring; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Properties; import org.apache.log4j.Logger; import edu.emory.mathcs.backport.java.util.concurrent.Executors; import edu.emory.mathcs.backport.java.util.concurrent.ScheduledExecutorService; import edu.emory.mathcs.backport.java.util.concurrent.TimeUnit; public class Monitor extends Thread { private static final Logger logger = Logger.getLogger(Monitor.class); public static List<String> totalvmlist; private String URL; public static final String PATH_TO_PROPERTIES_FILE = "./conf/reportClient.properties"; private static final Properties properties = new Properties(); private static long vmdiscoverdelay; private static long monitoringdelay; public Monitor(String url){ this.URL = url; } static Runnable periodicGetVm = new Runnable(){ public void run() { PersistenceClient pc = new PersistenceClient(); try { totalvmlist = pc.getVMs(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; static Runnable periodicGetMonValues= new Runnable(){ public void run() { PersistenceClient pc = new PersistenceClient(); try { periodicMonitoring(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; public static void periodicMonitoring() throws IOException { PersistenceClient pc = new PersistenceClient(); ArrayList<String> monitorlist = pc.findmonitors(totalvmlist); for (Iterator iterator = monitorlist.iterator(); iterator.hasNext();) { String monitor = (String) iterator.next(); ArrayList<String> measurelist = pc.findmeasures(monitor); for (Iterator iterator2 = measurelist.iterator(); iterator2.hasNext();) { String measure = (String) iterator2.next(); String valuexml=pc.getmeasure(monitor, measure); String measurefqn = monitor+"/"+measure; //logger.info(" monitor values: " + monitor+ " "+measure); pc.sendvalue(valuexml,measurefqn,measure); } } } public static void generateAllReport() throws IOException { try { properties.load(new FileInputStream(PATH_TO_PROPERTIES_FILE)); vmdiscoverdelay = Long.parseLong(properties.getProperty("vmDiscoverDelay")); monitoringdelay = Long.parseLong(properties.getProperty("monitoringDelay")); } catch (IOException e) { throw new RuntimeException("Unable to load properties from " + PATH_TO_PROPERTIES_FILE); } //long i1 = System.currentTimeMillis(); PersistenceClient pc = new PersistenceClient(); totalvmlist = pc.getVMs(); periodicMonitoring(); ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); executor.scheduleAtFixedRate(periodicGetVm,0,vmdiscoverdelay, TimeUnit.SECONDS); ScheduledExecutorService executor2 = Executors.newSingleThreadScheduledExecutor(); executor2.scheduleAtFixedRate(periodicGetMonValues,0,monitoringdelay, TimeUnit.SECONDS); //long t1 = System.currentTimeMillis() - i1; //logger.debug("generateAllReport Total Time:" + t1 + " miliseg"); } private static void showUsage() { System.out.println("Usage:\n\nmonitor <monitorType> \n\n"); System.out.println("\t allmonitoring"); System.out.println("\t\tStart monitoring allparameters (Except DiskUsage).\n"); System.out.println("\t diskusage"); System.out.println("\t\tStart monitoring DiskUsage.\n"); } public static void main(String[] args) throws IOException { if (args.length < 1) { System.out.println("Command not recognized. \n"); showUsage(); } else if (args.length==1){ if (args[0].toLowerCase().equals("allmonitoring") ){ generateAllReport(); } } else{ System.out.println("It is needed the type of monitoring: (allmonitoring)"); } } }