<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
	xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.1.0"
	xsi:schemaLocation="
		http://www.osgi.org/xmlns/blueprint/v1.0.0 
		http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd

		http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0
		http://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.1.0.xsd

		http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.1.0
		http://aries.apache.org/schemas/blueprint-ext/blueprint-ext-1.1.xsd
">

	<cm:property-placeholder id="syslogHandlerDefaultKafkaProperties" persistent-id="org.opennms.netmgt.syslog.handler.kafka.default" placeholder-prefix="$[" placeholder-suffix="]" update-strategy="none">
		<cm:default-properties>
			<cm:property name="kafkaAddress" value="127.0.0.1:9092" />
			<cm:property name="kafkatopic" value="syslog" />
			<cm:property name="zookeeperhost" value="127.0.0.1"/>
			<cm:property name="zookeeperport" value="2181"/>
			<cm:property name="groupId" value="syslogconsumer"/>
			<cm:property name="consumerstreams" value="1"/>
		</cm:default-properties>
	</cm:property-placeholder>

	<bean id="syslogConnectionHandlerDefault" class="org.opennms.netmgt.syslogd.SyslogConnectionHandlerDefaultImpl"/>

	<bean id="unmarshaller" class="org.opennms.core.camel.JaxbUtilsUnmarshalProcessor">
		<argument value="org.opennms.netmgt.syslogd.SyslogDTO" />
	</bean>

	<bean id="mapper" class="org.opennms.netmgt.syslogd.SyslogDTOToObjectProcessor"/>

	<reference id="syslogdConfig" interface="org.opennms.netmgt.config.SyslogdConfig" />

	<bean id="syslogdConfigProcessor" class="org.opennms.netmgt.syslogd.SyslogdConfigProcessor">
		<argument ref="syslogdConfig"/>
	</bean>

		<!-- Reduces the graceful shutdown time from 300 to 15 seconds. -->
	<bean id="shutdownStrategy" class="org.apache.camel.impl.DefaultShutdownStrategy">
		<property name="timeout" value="15"/>
    </bean>

	<!-- @see http://www.davsclaus.com/2012/06/locking-down-jmx-naming-now-easier-with.html -->
	<camelContext id="syslogdHandlerKafkaDefaultContext" managementNamePattern="#name#" xmlns="http://camel.apache.org/schema/blueprint">
		<propertyPlaceholder id="properties" location="blueprint:syslogHandlerDefaultKafkaProperties" />

		<route id="receiveSyslogConnectionViaKafka">
			<from uri="kafka:{{kafkaAddress}}?topic={{kafkatopic}}&amp;zookeeperHost={{zookeeperhost}}&amp;zookeeperPort={{zookeeperport}}&amp;groupId={{groupId}}&amp;consumerStreams={{consumerstreams}}"/>
			<!-- TODO: Change these to <process> tags once Syslogd is loaded from inside Karaf -->
			<bean ref="unmarshaller"/>
			<bean ref="mapper"/>
			<!-- Update the SyslogdConfig on the message to the local config value -->
			<bean ref="syslogdConfigProcessor"/>
			<to uri="seda:syslogkafkaHandler?size=25000"/>
		</route>

		<route id="syslogHandler">
			<from uri="seda:syslogkafkaHandler?concurrentConsumers=8&amp;size=25000&amp;blockWhenFull=true"/>
			<!-- 
				Pass the message to the default handler which will convert it into
				an event and broadcast the event.
			-->
			<bean ref="syslogConnectionHandlerDefault"/>
		</route>
	</camelContext>
</blueprint>
