// Copyright 2014-2015 Boundary, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package com.boundary.sdk.event.service.db; import java.util.List; import java.util.Map; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.Processor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.boundary.camel.component.ping.PingConfiguration; import com.boundary.camel.component.port.PortConfiguration; import com.boundary.camel.component.ssh.SshxConfiguration; import com.boundary.sdk.event.service.ServiceCheckRequest; import com.boundary.sdk.event.service.ServiceTest; import com.boundary.sdk.event.service.ping.PingServiceModel; import com.boundary.sdk.event.service.port.PortServiceModel; import com.boundary.sdk.event.service.ssh.SshxServiceModel; import com.boundary.sdk.event.service.url.UrlServiceDatabase; public class ServiceChecksDatabase implements Processor { //TODO: Separate class for handling constants private static final String PING = "ping"; private static final String PORT = "port"; private static final String SSH = "ssh"; private static final String URL = "url"; private static Logger LOG = LoggerFactory.getLogger(ServiceChecksDatabase.class); public ServiceChecksDatabase() { // TODO Auto-generated constructor stub } private void sendTestData(Exchange exchange) { Message message = exchange.getIn(); String sdnDirectorHost = "192.168.137.11"; String sdnDirectorName = "SDN Director"; ServiceCheckRequest request = new ServiceCheckRequest(); PingConfiguration sdnDirectorPingTest = new PingConfiguration(); sdnDirectorPingTest.setHost(sdnDirectorHost); PingServiceModel sdnDirectorPingModel = new PingServiceModel(); PortConfiguration sdnDirectorPortTest8080 = new PortConfiguration(); sdnDirectorPortTest8080.setHost(sdnDirectorHost); sdnDirectorPortTest8080.setPort(8080); PortServiceModel sdnDirectorPortModel8080 = new PortServiceModel(); SshxConfiguration plumgridProcessTest = new SshxConfiguration(); plumgridProcessTest.setHost(sdnDirectorHost); plumgridProcessTest.setCommand("status plumgrid"); plumgridProcessTest.setTimeout(10000); plumgridProcessTest.setUsername("plumgrid"); plumgridProcessTest.setPassword("plumgrid"); SshxServiceModel plumgridProcessModel = new SshxServiceModel(); plumgridProcessModel.setExpectedOutput("^plumgrid start/running, process\\s+\\d+"); SshxConfiguration plumgridSalProcessTest = new SshxConfiguration(); plumgridSalProcessTest.setHost(sdnDirectorHost); plumgridSalProcessTest.setCommand("status plumgrid-sal"); plumgridSalProcessTest.setTimeout(10000); plumgridSalProcessTest.setUsername("plumgrid"); plumgridSalProcessTest.setPassword("plumgrid"); SshxServiceModel plumgridSalProcessTestModel = new SshxServiceModel(); plumgridSalProcessTestModel.setExpectedOutput("^plumgrid-sal start/running, process\\s\\d+"); SshxConfiguration nginxProcessTest = new SshxConfiguration(); nginxProcessTest.setHost(sdnDirectorHost); nginxProcessTest.setCommand("status nginx"); nginxProcessTest.setTimeout(10000); nginxProcessTest.setUsername("plumgrid"); nginxProcessTest.setPassword("plumgrid"); SshxServiceModel nginxProcessModel = new SshxServiceModel(); nginxProcessModel.setExpectedOutput("^nginx start/running, process\\s\\d+"); ServiceTest<PingConfiguration,PingServiceModel> pingSDNDirector= new ServiceTest<PingConfiguration,PingServiceModel>( "host status","ping",sdnDirectorName,request.getRequestId(),sdnDirectorPingTest,sdnDirectorPingModel); request.addServiceTest(pingSDNDirector); ServiceTest<PortConfiguration,PortServiceModel> portSDNDirector8080 = new ServiceTest<PortConfiguration,PortServiceModel>( "8080 port status","port",sdnDirectorName,request.getRequestId(),sdnDirectorPortTest8080,sdnDirectorPortModel8080); request.addServiceTest(portSDNDirector8080); ServiceTest<SshxConfiguration,SshxServiceModel> sshPlumgridProcess = new ServiceTest<SshxConfiguration,SshxServiceModel>( "plumgrid process status","ssh",sdnDirectorName,request.getRequestId(),plumgridProcessTest,plumgridProcessModel); request.addServiceTest(sshPlumgridProcess); ServiceTest<SshxConfiguration,SshxServiceModel> sshPlumgridSalProcess = new ServiceTest<SshxConfiguration,SshxServiceModel>( "plumgrid-sal process status","ssh",sdnDirectorName,request.getRequestId(),plumgridProcessTest,plumgridProcessModel); request.addServiceTest(sshPlumgridSalProcess); ServiceTest<SshxConfiguration,SshxServiceModel> sshNginxProcess = new ServiceTest<SshxConfiguration,SshxServiceModel>( "nginx process status","ssh",sdnDirectorName,request.getRequestId(),plumgridProcessTest,plumgridProcessModel); request.addServiceTest(sshNginxProcess); message.setBody(request); } private void createPingServiceTest(ServiceCheckRequest request, Map<String,Object> row) { String pingHost = row.get("pingHost").toString(); int pingTimeout = Integer.parseInt(row.get("pingTimeout").toString()); PingConfiguration pingConfiguration = new PingConfiguration(); pingConfiguration.setHost(pingHost); pingConfiguration.setTimeout(pingTimeout); String serviceName = row.get("serviceName").toString(); String serviceTestName = row.get("serviceTestName").toString(); String serviceTypeName = row.get("serviceTypeName").toString(); PingServiceModel pingServiceModel = new PingServiceModel(); ServiceTest<PingConfiguration,PingServiceModel> pingServiceTest = new ServiceTest<PingConfiguration,PingServiceModel>(serviceTestName,serviceTypeName,serviceName, request.getRequestId(),pingConfiguration,pingServiceModel); request.addServiceTest(pingServiceTest); } private void createPortServiceTest(ServiceCheckRequest request, Map<String,Object> row) { String portHost = row.get("portHost").toString(); int port = Integer.parseInt(row.get("portPort").toString()); int portTimeout = Integer.parseInt(row.get("portTimeout").toString()); PortConfiguration portConfiguration = new PortConfiguration(); portConfiguration.setHost(portHost); portConfiguration.setPort(port); portConfiguration.setTimeout(portTimeout); String serviceName = row.get("serviceName").toString(); String serviceTestName = row.get("serviceTestName").toString(); String serviceTypeName = row.get("serviceTypeName").toString(); PortServiceModel portServiceModel = new PortServiceModel(); ServiceTest<PortConfiguration,PortServiceModel> portServicetest = new ServiceTest<PortConfiguration,PortServiceModel>(serviceTestName,serviceTypeName,serviceName, request.getRequestId(),portConfiguration,portServiceModel); request.addServiceTest(portServicetest); } private void createSshServiceTest(ServiceCheckRequest request, Map<String,Object> row) { String sshHost = row.get("sshHost").toString(); int sshPort = Integer.parseInt(row.get("sshPort").toString()); int sshTimeout = Integer.parseInt(row.get("sshTimeout").toString()); String sshUserName = row.get("sshUserName").toString(); String sshPassword = row.get("sshPassword").toString(); String sshCommand = row.get("sshCommand").toString(); SshxConfiguration sshConfiguration = new SshxConfiguration(); sshConfiguration.setHost(sshHost); sshConfiguration.setPort(sshPort); sshConfiguration.setTimeout(sshTimeout); sshConfiguration.setUsername(sshUserName); sshConfiguration.setPassword(sshPassword); sshConfiguration.setCommand(sshCommand); String serviceName = row.get("serviceName").toString(); String serviceTestName = row.get("serviceTestName").toString(); String serviceTypeName = row.get("serviceTypeName").toString(); SshxServiceModel sshServiceModel = new SshxServiceModel(); String expectedOutput = row.get("sshExpectedOutput").toString(); sshServiceModel.setExpectedOutput(expectedOutput); ServiceTest<SshxConfiguration,SshxServiceModel> sshServicetest = new ServiceTest<SshxConfiguration,SshxServiceModel>(serviceTestName,serviceTypeName,serviceName, request.getRequestId(),sshConfiguration,sshServiceModel); request.addServiceTest(sshServicetest); } private void createUrlServiceTest(ServiceCheckRequest request, Map<String,Object> row) { UrlServiceDatabase serviceUrl = new UrlServiceDatabase(); serviceUrl.populate(request,row); } @Override public void process(Exchange exchange) throws Exception { Message message = exchange.getIn(); ServiceCheckRequest request = new ServiceCheckRequest(); List<Map<String, Object>> list = message.getBody(List.class); for (Map<String,Object> row : list) { LOG.debug("Service Test Data: " + row.toString()); String serviceTestType = row.get("serviceTypeName").toString(); switch (serviceTestType) { case PING: createPingServiceTest(request,row); break; case PORT: createPortServiceTest(request,row); break; case SSH: createSshServiceTest(request,row); break; case URL: createUrlServiceTest(request,row); break; } } //TODO: How to handle if there are no service tests message.setBody(request); } }