package com.telefonica.claudia.driver_mon; import java.text.ParseException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import javax.jms.JMSException; import javax.jms.MessageConsumer; import javax.jms.ObjectMessage; import javax.naming.NamingException; import org.apache.log4j.Logger; import com.telefonica.claudia.slm.deployment.NIC; import com.telefonica.claudia.slm.deployment.Network; import com.telefonica.claudia.slm.deployment.ServiceApplication; import com.telefonica.claudia.slm.deployment.VDC; import com.telefonica.claudia.slm.deployment.VEEReplica; import com.telefonica.claudia.slm.deployment.Zone; import com.telefonica.claudia.slm.eventsBus.events.SMIChannelEvent; import com.telefonica.claudia.slm.eventsBus.events.SMIChannelEvent.SMIAction; import com.telefonica.claudia.slm.monitoring.nodedirectory; import com.telefonica.claudia.smi.DataTypesUtils; import com.telefonica.claudia.smi.URICreation; import com.telefonica.claudia.driver_mon.DriverClothoDbManager; import com.telefonica.claudia.driver_mon.ClothoUtils; import com.telefonica.claudia.driver_mon.DBUtils; import com.telefonica.claudia.driver_mon.ClothoUtils.JMSData; import com.telefonica.claudia.smi.monitoring.MonitorException; import com.telefonica.claudia.smi.monitoring.MonitoringDriver; import com.telefonica.claudia.smi.monitoring.bean.MeasureDescriptor; import com.telefonica.claudia.smi.monitoring.bean.MeasureDescriptorList; import com.telefonica.claudia.smi.monitoring.bean.MeasuredValue; import com.telefonica.claudia.smi.monitoring.bean.MeasuredValueFilter; import com.telefonica.claudia.smi.monitoring.bean.MeasuredValueList; public class SMMonitoringNoJMSDriver implements MonitoringDriver { private static Logger log = Logger.getLogger("com.telefonica.claudia.smi.SMMonitoringDriver"); DriverClothoDbManager db; TCloudMonitoringClient restClient; JMSData jmsConnectionData; private String connFactoryName = null; private String serverProviderUrl = null; private String namingFactory = null; //yo //la url esta bien escrita? private final static String USER_PROPERTY = "monitoring.login"; private final static String PASSWORD_PROPERTY = "monitoring.password"; private final static String URL_PROPERTY = "monitoring.uri"; private static String url = "jdbc:mysql://62.217.120.136:3306/monitoring?noDatetimeStringSync=true"; private static String username = "claudia"; private static String password = "ClaudiaPass"; public SMMonitoringNoJMSDriver(Properties prop) throws NamingException, ClassNotFoundException, JMSException { // Creates the bus manager and attach it to the context as an attribte. /* try { this.connFactoryName = ClothoUtils.DEFAULT_CONN_FACTORY_NAME; namingFactory = prop.getProperty(ClothoUtils.JNDI_NAMING_FACTORY); serverProviderUrl = prop.getProperty(ClothoUtils.JNDI_SERVER_PROVIDER_URL); // Open the JMS Session to create the queue conections this.jmsConnectionData = ClothoUtils.openJMSSession(serverProviderUrl, namingFactory, connFactoryName); ClothoUtils.cleanQueues(jmsConnectionData); jmsConnectionData.smiChannelProducer = jmsConnectionData.session.createProducer(jmsConnectionData.smiChannelRequest); } catch (JMSException e) { log.error("The connection to the bus could not be created. " + e.getMessage()); throw e; } catch (ClassNotFoundException e) { log.error("The Factory class could not be found"); throw e; }*/ if (prop!= null && prop.getProperty(USER_PROPERTY)!=null) { username = prop.getProperty(USER_PROPERTY); } if (prop!= null &&prop.getProperty(PASSWORD_PROPERTY)!=null) { password = prop.getProperty(PASSWORD_PROPERTY); } if (prop!= null &&prop.getProperty(URL_PROPERTY)!=null) { url = prop.getProperty(URL_PROPERTY); } System.out.println("Connection data: URL " + url + " user " + username + " password " + password); restClient = new TCloudMonitoringClient(); //meter url, usuario y contrasenya a mano db = new DriverClothoDbManager(url, false, username, password); //db = new DriverClothoDbManager(DBUtils.getURL(prop), false, DBUtils.getUser(prop), DBUtils.getPassword(prop)); } public DriverClothoDbManager getDB () { return db; } public String[] getElementAndHref(String orgName, String vdcName, List<String> vappNames, String hwItem, String networkName) { String element; String href=""; if (vappNames!= null) { if (networkName!=null) element = URICreation.getNetworkFQN(orgName, vdcName, networkName); else { if (hwItem!= null) { if (hwItem.contains("networks_")) { element= URICreation.getFQN(orgName, vdcName, vappNames) + "." + URICreation.FQN_SEPARATOR_NET + "." + hwItem.substring(hwItem.indexOf('_')+1); } else { element= URICreation.getFQN(orgName, vdcName, vappNames, hwItem); } href = URICreation.getURIVEEReplica(element) + "/hw/" + hwItem; } else { element= URICreation.getFQN(orgName, vdcName, vappNames); if (vappNames.size() == 1) { href = URICreation.getURIService(element); } else if (vappNames.size() == 2) { href = URICreation.getURIVapp(element); } else if (vappNames.size() == 3) { href = URICreation.getURIVEEReplica(element); } } } } else { element= URICreation.getFQN(orgName, vdcName); href = URICreation.getURIVDC(element); } return new String[] {element, href}; } public MeasureDescriptor getGenericMeasureDescriptor(String orgName, String vdcName, List<String> vappNames, String measureId, String hwItem, String networkName) throws MonitorException { String[] elementHref = getElementAndHref(orgName, vdcName, vappNames, hwItem, networkName); System.out.println (elementHref[0]); nodedirectory nd = db.get(nodedirectory.class, elementHref[0]); if ((measureId.contains("netInput_")||measureId.contains("netOutput_"))&& nd.getTipo()!=nodedirectory.TYPE_NIC) { return new MeasureDescriptor(measureId, nd.getFqnString() + "." + URICreation.FQN_SEPARATOR_MEASURE + "." + measureId, "", DataTypesUtils.STANDARD_BANDWIDTH_UNIT_DEFAULT, "0", "0", ""); } else if (measureId.equals("diskUsage")) { return db.getDiskMeasureDescriptor(nd); } else { MeasureDescriptor result = db.getMeasureDescriptors(nd, measureId); if (result==null) throw new MonitorException("Measure " + measureId + " not available."); result.setHref(elementHref[1]); return result; } } public MeasureDescriptorList getGenericMeasureDescriptorList(String orgName, String vdcName, List<String> vappNames, String item, String networkName) throws MonitorException { String[] elementHref = getElementAndHref(orgName, vdcName, vappNames, item, networkName); MeasureDescriptorList result = new MeasureDescriptorList(elementHref[1], ""); System.out.println (result.getHref()); nodedirectory nd = db.get(nodedirectory.class, elementHref[0]); if (nd == null) return result; List<MeasureDescriptor> descriptorList = db.getMeasureDescriptorsList(nd); for (MeasureDescriptor md: descriptorList) { md.setHref(elementHref[1] + md.getName()); result.add(md); } if (nd.getTipo()== nodedirectory.TYPE_VDC) { VDC vdc = db.get(VDC.class, nd.getFqnString()); for (Zone z: vdc.getZones()) for (Network network: z.getNetworks()) { result.add(new MeasureDescriptor("netInput_"+ network.getName(), nd.getFqnString() + "." + URICreation.FQN_SEPARATOR_MEASURE + "." + "netInput_" + network.getName(), "", DataTypesUtils.STANDARD_BANDWIDTH_UNIT_DEFAULT, "0", "0", "")); result.add(new MeasureDescriptor("netOutput_"+ network.getName(), nd.getFqnString() + "." + URICreation.FQN_SEPARATOR_MEASURE + "." + "netOutput_" + network.getName(), "", DataTypesUtils.STANDARD_BANDWIDTH_UNIT_DEFAULT, "0", "0", "")); } } else if (nd.getTipo()== nodedirectory.TYPE_SERVICE) { ServiceApplication sap = db.getServiceApplication(nd.getFqnString()); for (Network network: sap.getNetworks()) { result.add(new MeasureDescriptor("netInput_" + network.getName(), nd.getFqnString() + "." + URICreation.FQN_SEPARATOR_MEASURE + "." + "netInput_" + network.getName(), "", DataTypesUtils.STANDARD_BANDWIDTH_UNIT_DEFAULT, "0", "0", "")); result.add(new MeasureDescriptor("netOutput_"+ network.getName(), nd.getFqnString() + "." + URICreation.FQN_SEPARATOR_MEASURE + "." + "netOutput_" + network.getName(), "", DataTypesUtils.STANDARD_BANDWIDTH_UNIT_DEFAULT, "0", "0", "")); } } return result; } public MeasuredValueList getMeasuredValueListBD(MeasureDescriptor md, MeasuredValueFilter filter) throws MonitorException { String id = md.getMeasurementTypeId(); String element = id.substring(0, id.indexOf(URICreation.FQN_SEPARATOR_MEASURE) - 1); nodedirectory nd = db.get(nodedirectory.class, element); List<MeasuredValue> valueList; if ((md.getName().contains("netInput_")||md.getName().contains("netOutput_"))&&nd.getTipo()!=nodedirectory.TYPE_NIC) { valueList = db.getNetworkValues(nd, filter.getFrom(), filter.getTo(), filter.getSamples(), filter.getInterval(), md.getName(), md.getValueType()); } else { valueList = db.getMeasureValues(nd, filter.getFrom(), filter.getTo(), filter.getSamples(), filter.getInterval(), md.getName(), md.getValueType()); } MeasuredValueList mvl = new MeasuredValueList(md); for (MeasuredValue mv: valueList) { mvl.add(mv); } return mvl; } public MeasuredValueList getMeasuredValueListRest(MeasureDescriptor md, MeasuredValueFilter filter) throws MonitorException { // Find the data to create the URL String url; nodedirectory nd = db.get(nodedirectory.class, md.getMeasurementTypeId().substring(0, md.getMeasurementTypeId().indexOf(".measure"))); VEEReplica rep; if (nd==null||(nd.getTipo()!=nodedirectory.TYPE_REPLICA&&nd.getTipo()!=nodedirectory.TYPE_NIC)) return new MeasuredValueList(md); String path; if (nd.getTipo()==nodedirectory.TYPE_REPLICA) { path=URICreation.getURIVEEReplica(md.getMeasurementTypeId()); rep = db.get(VEEReplica.class, nd.getInternalNodeId()); } else if (nd.getTipo()==nodedirectory.TYPE_NIC) { path=URICreation.getURIHwItem(md.getMeasurementTypeId()); path=translateNetInfrastructureId(path, nd.getFqnString()); rep = db.get(VEEReplica.class, nd.getFqnString().substring(0, md.getMeasurementTypeId().indexOf(".network"))); } else { return new MeasuredValueList(md); } if (rep.getDeployedOn()==null) return new MeasuredValueList(md); else { url = "http://" + rep.getDeployedOn().getHost() + ":" + rep.getDeployedOn().getPort() + path + URICreation.MONITOR + "/" + md.getName() + URICreation.VALUES; // Get the measures return restClient.getReplicaMeasure(url, filter, md); } } private String translateNetInfrastructureId(String path, String fqn) { NIC nic = db.get(NIC.class, fqn); return path.replaceAll("networks_.*", nic.getInstanceId()); } public MeasuredValueList getMeasuredValueListJMS(MeasureDescriptor md, MeasuredValueFilter filter) throws MonitorException { try { SMIChannelEvent smi = new SMIChannelEvent(0, 0, SMIAction.GET_MEASURE_VALUE); Long seqNumber= ClothoUtils.getSecuenceNumber(); smi.put(SMIChannelEvent.SEQUENCE_NUMBER, seqNumber.toString()); String id = md.getMeasurementTypeId(); smi.put(SMIChannelEvent.FQN_ID, id.substring(0, id.indexOf(URICreation.FQN_SEPARATOR_MEASURE) - 1)); smi.put(SMIChannelEvent.MEASURE_NAME, md.getName()); smi.put(SMIChannelEvent.MEASURE_TYPE_ID, md.getMeasurementTypeId()); smi.put(SMIChannelEvent.MEASURE_FILTER_FROM, (filter.getFrom()==null)?null:DataTypesUtils.date2String(filter.getFrom().getTime())); smi.put(SMIChannelEvent.MEASURE_FILTER_TO, (filter.getTo()==null)?null:DataTypesUtils.date2String(filter.getTo().getTime())); smi.put(SMIChannelEvent.MEASURE_FILTER_NUMBER, String.valueOf(filter.getSamples())); smi.put(SMIChannelEvent.MEASURE_FILTER_INTERVAL, String.valueOf(filter.getInterval())); jmsConnectionData.smiChannelProducer.send(jmsConnectionData.session.createObjectMessage(smi)); MessageConsumer messageConsumer = jmsConnectionData.session.createConsumer(jmsConnectionData.smiChannelReply, "element = '" + md.getMeasurementTypeId() + "' AND " + SMIChannelEvent.SEQUENCE_NUMBER + "='" + seqNumber + "'"); ObjectMessage m = (ObjectMessage) messageConsumer.receive(ClothoUtils.EVENT_BUS_TIMEOUT); if (m==null) { log.error("Timeout waiting for a server response. Try later."); throw new MonitorException("Timeout waiting for a server response. Try later."); } smi = (SMIChannelEvent) m.getObject(); Map<String, String> values = (HashMap<String, String>) smi.getSerializable(SMIChannelEvent.MEASURE_VALUES); String units = smi.get(SMIChannelEvent.MEASURE_UNITS); MeasuredValueList mvl = new MeasuredValueList(); mvl.setHref(md.getHref() + URICreation.VALUES); for (String measureDate: values.keySet()) { MeasuredValue mv = new MeasuredValue(); mv.setUnit(units); mv.setValue(values.get(measureDate)); try { mv.setRegisterDate(DataTypesUtils.string2Date(measureDate)); } catch (ParseException e) { log.error("SMDeploymentDriver: Wrong date format received: " + measureDate); continue; } mvl.add(mv); } return mvl; } catch (JMSException e) { log.error("SMDeploymentDriver: Communication error accessing the SLM. Impossible to retrieve service data.",e); throw new MonitorException("SMDeploymentDriver: Communication error accessing the SLM. Impossible to retrieve service data." + e.getMessage()); } } public MeasureDescriptor getNetMeasureDescriptor(String orgName, String vdcName, String netName, String measureId) throws MonitorException { return getGenericMeasureDescriptor(orgName,vdcName, null, null, null, netName); } public MeasureDescriptorList getNetMeasureDescriptorList(String orgName, String vdcName, String netName) throws MonitorException { return getGenericMeasureDescriptorList(orgName, vdcName, null, null, netName); } public MeasureDescriptor getVdcMeasureDescriptor(String orgName, String vdcName, String measureId) throws MonitorException { return getGenericMeasureDescriptor(orgName,vdcName, null, measureId, null, null); } public MeasureDescriptorList getVdcMeasureDescriptorList(String orgName, String vdcName) throws MonitorException { return getGenericMeasureDescriptorList(orgName, vdcName, null, null, null); } public List<MeasuredValueList> getMeasuredValueList( List<MeasureDescriptor> md, MeasuredValueFilter filter) throws MonitorException { List<MeasuredValueList> result = new ArrayList<MeasuredValueList>(); for (MeasureDescriptor descriptor: md) result.add(getMeasuredValueList(descriptor, filter)); return result; } public MeasuredValueList getMeasuredValueList(MeasureDescriptor md, MeasuredValueFilter filter) throws MonitorException { if (filter.getInterval() != 300 && filter.getInterval() != 3600 && filter.getInterval() != 86400) return getMeasuredValueListRest(md, filter); else return getMeasuredValueListBD(md, filter); } public MeasureDescriptor getHwItemMeasureDescriptor(String orgName, String vdcName, ArrayList<String> vappNames, String hwItemName, String measureId) throws MonitorException { // TODO Auto-generated method stub return getGenericMeasureDescriptor(orgName,vdcName, vappNames, measureId, hwItemName, null); } public MeasureDescriptorList getHwItemMeasureDescriptorList(String orgName, String vdcName, ArrayList<String> vappNames, String hwItemName) throws MonitorException { // TODO Auto-generated method stub return getGenericMeasureDescriptorList(orgName, vdcName, vappNames, hwItemName, null); } public MeasureDescriptor getVappMeasureDescriptor(String orgName, String vdcName, ArrayList<String> vappNames, String measureId) throws MonitorException { return getGenericMeasureDescriptor(orgName,vdcName, vappNames, measureId, null, null); } public MeasureDescriptorList getVappMeasureDescriptorList(String orgName, String vdcName, ArrayList<String> vappNames) throws MonitorException { // TODO Auto-generated method stub return getGenericMeasureDescriptorList(orgName, vdcName, vappNames, null, null); } public MeasureDescriptor getHwItemMeasureDescriptor(String orgName, String vdcName, List<String> vappNames, String hwItemName, String measureId) throws MonitorException { // TODO Auto-generated method stub return null; } public MeasureDescriptorList getHwItemMeasureDescriptorList(String orgName, String vdcName, List<String> vappNames, String hwItemName) throws MonitorException { // TODO Auto-generated method stub return null; } public MeasureDescriptor getVappMeasureDescriptor(String orgName, String vdcName, List<String> vappNames, String measureId) throws MonitorException { // TODO Auto-generated method stub return null; } public MeasureDescriptorList getVappMeasureDescriptorList(String orgName, String vdcName, List<String> vappNames) throws MonitorException { // TODO Auto-generated method stub return null; } public MeasuredValueList getMeasuredValueList(MeasureDescriptor md, int samples) throws MonitorException { // TODO Auto-generated method stub MeasuredValueFilter filter = new MeasuredValueFilter (); filter.setFrom(new java.util.Date(0)); filter.setTo(new java.util.Date()); filter.setSamples(samples); filter.setInterval(new Long(0)); return getMeasuredValueListBD(md, filter); } /* public MeasureDescriptor getVappMeasureDescriptor(String orgName, String vdcName, ArrayList<String> vappNames, String measureId) throws MonitorException { // TODO Auto-generated method stub return null; } public MeasureDescriptorList getVappMeasureDescriptorList(String orgName, String vdcName, ArrayList<String> vappNames) throws MonitorException { // TODO Auto-generated method stub return null; }*/ }