Author: davsclaus Date: Mon Jan 18 06:10:50 2010 New Revision: 900283 URL: http://svn.apache.org/viewvc?rev=900283&view=rev Log: CAMEL-2347: Added initial camel-nagios with an event notifier. Work in progress.
Added: camel/trunk/components/camel-nagios/ camel/trunk/components/camel-nagios/pom.xml (with props) camel/trunk/components/camel-nagios/src/ camel/trunk/components/camel-nagios/src/main/ camel/trunk/components/camel-nagios/src/main/java/ camel/trunk/components/camel-nagios/src/main/java/org/ camel/trunk/components/camel-nagios/src/main/java/org/apache/ camel/trunk/components/camel-nagios/src/main/java/org/apache/camel/ camel/trunk/components/camel-nagios/src/main/java/org/apache/camel/component/ camel/trunk/components/camel-nagios/src/main/java/org/apache/camel/component/nagios/ camel/trunk/components/camel-nagios/src/main/java/org/apache/camel/component/nagios/NagiosConfiguration.java (with props) camel/trunk/components/camel-nagios/src/main/java/org/apache/camel/component/nagios/NagiosEventNotifier.java (with props) camel/trunk/components/camel-nagios/src/test/ camel/trunk/components/camel-nagios/src/test/java/ camel/trunk/components/camel-nagios/src/test/java/org/ camel/trunk/components/camel-nagios/src/test/java/org/apache/ camel/trunk/components/camel-nagios/src/test/java/org/apache/camel/ camel/trunk/components/camel-nagios/src/test/java/org/apache/camel/component/ camel/trunk/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/ camel/trunk/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosEventNotifierTest.java (with props) camel/trunk/components/camel-nagios/src/test/resources/ camel/trunk/components/camel-nagios/src/test/resources/log4j.properties (with props) Added: camel/trunk/components/camel-nagios/pom.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-nagios/pom.xml?rev=900283&view=auto ============================================================================== --- camel/trunk/components/camel-nagios/pom.xml (added) +++ camel/trunk/components/camel-nagios/pom.xml Mon Jan 18 06:10:50 2010 @@ -0,0 +1,78 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You 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. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.apache.camel</groupId> + <artifactId>camel-parent</artifactId> + <version>2.2-SNAPSHOT</version> + </parent> + + <artifactId>camel-nagios</artifactId> + <packaging>bundle</packaging> + <name>Camel :: Nagios</name> + <description>Camel Nagios support</description> + + <properties> + <camel.osgi.export.pkg> + org.apache.camel.component.nagios.* + </camel.osgi.export.pkg> + </properties> + + <dependencies> + + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-core</artifactId> + </dependency> + + <dependency> + <groupId>com.googlecode</groupId> + <artifactId>jsendnsca-core</artifactId> + <version>1.3.1</version> + </dependency> + + <dependency> + <groupId>com.googlecode</groupId> + <artifactId>jsendnsca-test</artifactId> + <scope>test</scope> + <version>1.3.1</version> + </dependency> + + <!-- testing --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-test</artifactId> + <optional>true</optional> + <scope>test</scope> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <scope>test</scope> + </dependency> + </dependencies> + +</project> Propchange: camel/trunk/components/camel-nagios/pom.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-nagios/pom.xml ------------------------------------------------------------------------------ svn:keywords = Rev Date Propchange: camel/trunk/components/camel-nagios/pom.xml ------------------------------------------------------------------------------ svn:mime-type = text/xml Added: camel/trunk/components/camel-nagios/src/main/java/org/apache/camel/component/nagios/NagiosConfiguration.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-nagios/src/main/java/org/apache/camel/component/nagios/NagiosConfiguration.java?rev=900283&view=auto ============================================================================== --- camel/trunk/components/camel-nagios/src/main/java/org/apache/camel/component/nagios/NagiosConfiguration.java (added) +++ camel/trunk/components/camel-nagios/src/main/java/org/apache/camel/component/nagios/NagiosConfiguration.java Mon Jan 18 06:10:50 2010 @@ -0,0 +1,104 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.camel.component.nagios; + +import com.googlecode.jsendnsca.core.NagiosSettings; +import org.apache.camel.util.ObjectHelper; + +/** + * @version $Revision$ + */ +public class NagiosConfiguration { + + private NagiosSettings nagiosSettings; + private String host; + private int port; + private int connectionTimeout = 5000; + private int timeout = 5000; + private String password; + + public synchronized NagiosSettings getNagiosSettings() { + if (nagiosSettings == null) { + + // validate parameters + ObjectHelper.notEmpty(host, "host", this); + if (port <= 0) { + throw new IllegalArgumentException("Port must be a positive number on " + this); + } + + // create settings + nagiosSettings = new NagiosSettings(); + nagiosSettings.setConnectTimeout(getConnectionTimeout()); + nagiosSettings.setTimeout(getTimeout()); + nagiosSettings.setNagiosHost(getHost()); + nagiosSettings.setPort(getPort()); + nagiosSettings.setPassword(getPassword()); + } + + return nagiosSettings; + } + + public void setNagiosSettings(NagiosSettings nagiosSettings) { + this.nagiosSettings = nagiosSettings; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public int getPort() { + return port; + } + + public void setPort(int port) { + this.port = port; + } + + public int getConnectionTimeout() { + return connectionTimeout; + } + + public void setConnectionTimeout(int connectionTimeout) { + this.connectionTimeout = connectionTimeout; + } + + public int getTimeout() { + return timeout; + } + + public void setTimeout(int timeout) { + this.timeout = timeout; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @Override + public String toString() { + return "NagiosConfiguration[host=" + host + ":" + port + ", connectionTimeout=" + connectionTimeout + ", timeout=" + timeout; + } + +} Propchange: camel/trunk/components/camel-nagios/src/main/java/org/apache/camel/component/nagios/NagiosConfiguration.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-nagios/src/main/java/org/apache/camel/component/nagios/NagiosConfiguration.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Added: camel/trunk/components/camel-nagios/src/main/java/org/apache/camel/component/nagios/NagiosEventNotifier.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-nagios/src/main/java/org/apache/camel/component/nagios/NagiosEventNotifier.java?rev=900283&view=auto ============================================================================== --- camel/trunk/components/camel-nagios/src/main/java/org/apache/camel/component/nagios/NagiosEventNotifier.java (added) +++ camel/trunk/components/camel-nagios/src/main/java/org/apache/camel/component/nagios/NagiosEventNotifier.java Mon Jan 18 06:10:50 2010 @@ -0,0 +1,94 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.camel.component.nagios; + +import java.util.EventObject; + +import com.googlecode.jsendnsca.core.Level; +import com.googlecode.jsendnsca.core.MessagePayload; +import com.googlecode.jsendnsca.core.NagiosPassiveCheckSender; +import com.googlecode.jsendnsca.core.NagiosSettings; +import org.apache.camel.management.EventNotifierSupport; + +/** + * An {...@link org.apache.camel.spi.EventNotifier} which sends alters to Nagios. + * + * @version $Revision$ + */ +public class NagiosEventNotifier extends EventNotifierSupport { + + private NagiosSettings nagiosSettings; + private NagiosConfiguration configuration; + private NagiosPassiveCheckSender sender; + + public void notify(EventObject eventObject) throws Exception { + // create message payload to send + String message = eventObject.toString(); + MessagePayload payload = new MessagePayload("localhost", Level.CRITICAL.ordinal(), "Camel", message); + + if (log.isInfoEnabled()) { + log.info("Sending notification to Nagios: " + payload.getMessage()); + } + sender.send(payload); + if (log.isTraceEnabled()) { + log.trace("Sending notification done"); + } + } + + // TODO: level should be computed based on event message + // TODO: host and service name should be configurable + + + public boolean isEnabled(EventObject eventObject) { + return true; + } + + public NagiosConfiguration getConfiguration() { + if (configuration == null) { + configuration = new NagiosConfiguration(); + } + return configuration; + } + + public void setConfiguration(NagiosConfiguration configuration) { + this.configuration = configuration; + } + + public NagiosSettings getNagiosSettings() { + return nagiosSettings; + } + + public void setNagiosSettings(NagiosSettings nagiosSettings) { + this.nagiosSettings = nagiosSettings; + } + + @Override + protected void doStart() throws Exception { + if (nagiosSettings == null) { + nagiosSettings = configuration.getNagiosSettings(); + } + sender = new NagiosPassiveCheckSender(nagiosSettings); + + log.info("Using " + configuration); + } + + @Override + protected void doStop() throws Exception { + sender = null; + } + +} Propchange: camel/trunk/components/camel-nagios/src/main/java/org/apache/camel/component/nagios/NagiosEventNotifier.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-nagios/src/main/java/org/apache/camel/component/nagios/NagiosEventNotifier.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Added: camel/trunk/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosEventNotifierTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosEventNotifierTest.java?rev=900283&view=auto ============================================================================== --- camel/trunk/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosEventNotifierTest.java (added) +++ camel/trunk/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosEventNotifierTest.java Mon Jan 18 06:10:50 2010 @@ -0,0 +1,104 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.camel.component.nagios; + +import java.util.List; + +import com.googlecode.jsendnsca.core.MessagePayload; +import com.googlecode.jsendnsca.core.mocks.NagiosNscaStub; +import org.apache.camel.CamelContext; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/** + * @version $Revision$ + */ +public class NagiosEventNotifierTest extends CamelTestSupport { + + private NagiosNscaStub nagios; + + @Before + @Override + public void setUp() throws Exception { + nagios = new NagiosNscaStub(5667, "password"); + nagios.start(); + + super.setUp(); + } + + @After + @Override + public void tearDown() throws Exception { + super.tearDown(); + nagios.stop(); + } + + @Override + protected CamelContext createCamelContext() throws Exception { + NagiosEventNotifier notifier = new NagiosEventNotifier(); + notifier.getConfiguration().setHost("localhost"); + notifier.getConfiguration().setPort(5667); + notifier.getConfiguration().setPassword("password"); + + CamelContext context = super.createCamelContext(); + context.getManagementStrategy().addEventNotifier(notifier); + return context; + } + + @Test + public void testNagiosEventNotifierOk() throws Exception { + getMockEndpoint("mock:ok").expectedMessageCount(1); + + template.sendBody("direct:ok", "Hello World"); + + assertMockEndpointsSatisfied(); + + context.stop(); + + List<MessagePayload> events = nagios.getMessagePayloadList(); + assertEquals(10, events.size()); + } + + @Test + public void testNagiosEventNotifierError() throws Exception { + try { + template.sendBody("direct:fail", "Bye World"); + } catch (Exception e) { + // ignore + } + + context.stop(); + + List<MessagePayload> events = nagios.getMessagePayloadList(); + assertEquals(10, events.size()); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("direct:ok").to("mock:ok"); + + from("direct:fail").throwException(new IllegalArgumentException("Damn")); + } + }; + } +} Propchange: camel/trunk/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosEventNotifierTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosEventNotifierTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Added: camel/trunk/components/camel-nagios/src/test/resources/log4j.properties URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-nagios/src/test/resources/log4j.properties?rev=900283&view=auto ============================================================================== --- camel/trunk/components/camel-nagios/src/test/resources/log4j.properties (added) +++ camel/trunk/components/camel-nagios/src/test/resources/log4j.properties Mon Jan 18 06:10:50 2010 @@ -0,0 +1,37 @@ +## --------------------------------------------------------------------------- +## Licensed to the Apache Software Foundation (ASF) under one or more +## contributor license agreements. See the NOTICE file distributed with +## this work for additional information regarding copyright ownership. +## The ASF licenses this file to You 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. +## --------------------------------------------------------------------------- + +# +# The logging properties used during tests.. +# +log4j.rootLogger=INFO, file + +log4j.logger.org.apache.camel.component.snmp=DEBUG +log4j.logger.org.snmp4j=DEBUG +#log4j.logger.org.apache.camel=DEBUG + +# CONSOLE appender not used by default +log4j.appender.out=org.apache.log4j.ConsoleAppender +log4j.appender.out.layout=org.apache.log4j.PatternLayout +log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n + +# File appender +log4j.appender.file=org.apache.log4j.FileAppender +log4j.appender.file.layout=org.apache.log4j.PatternLayout +log4j.appender.file.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n +log4j.appender.file.file=target/camel-nagios-test.log +log4j.appender.file.append=true Propchange: camel/trunk/components/camel-nagios/src/test/resources/log4j.properties ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-nagios/src/test/resources/log4j.properties ------------------------------------------------------------------------------ svn:keywords = Rev Date Propchange: camel/trunk/components/camel-nagios/src/test/resources/log4j.properties ------------------------------------------------------------------------------ svn:mime-type = text/plain