# 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.

{
	config {
		envContextConfig {
			"topologyName" : "sandbox-hadoopjmx-pipeline"
		}
		eagleProps {
			"site" : "sandbox"
			"application": "HADOOP"
		}
	}

	dataflow {
		KafkaSource.hadoopNNJmxStream {
			parallism = 1000
			topic = "nn_jmx_metric_sandbox"
			zkConnection = "sandbox.hortonworks.com:2181"
			zkConnectionTimeoutMS = 15000
			consumerGroupId = "Consumer"
			fetchSize = 1048586
			transactionZKServers = "sandbox.hortonworks.com"
			transactionZKPort = 2181
			transactionZKRoot = "/consumers"
			transactionStateUpdateMS = 2000
			deserializerClass = "org.apache.eagle.datastream.storm.JsonMessageDeserializer"
		}

		Alert.hadoopNNJmxStreamAlertExecutor {
			upStreamNames = [hadoopNNJmxStream]
			alertExecutorId = hadoopNNJmxStreamAlertExecutor
		}

		hadoopNNJmxStream -> hadoopNNJmxStreamAlertExecutor{}
	}
}