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

# eagle configuration
eagle{
	# eagle site id
	site = "sandbox"

	# eagle service configuration
	service {
		# eagle service host, default: "localhost"
		host = "localhost"
		# eagle service port, default: 8080
		port = 9099
    username = "admin"
    password = "secret"
	}

	# eagle userprofile configuration
	userprofile {
		# training audit log input path
		training-audit-path = "file:///usr/hdp/2.3.0.0-2130/eagle/lib/userprofile/data/*.txt"

		# detection audit log input path
		detection-audit-path = "file:///usr/hdp/2.3.0.0-2130/eagle/lib/userprofile/data/validate"

		# detection output kafka brokers
		# default: localhost:9200
		detection-kafka-brokers = "sandbox.hortonworks.com:6667"

		# detection output kafka topic
		detection-kafka-topic = "sandbox_hdfs_audit_log"
	}
}

akka {
	# Loggers to register at boot time (akka.event.Logging$DefaultLogger logs
	# to STDOUT)
	loggers = ["akka.event.slf4j.Slf4jLogger"]

	# Log level used by the configured loggers (see "loggers") as soon
	# as they have been started; before that, see "stdout-loglevel"
	# Options: OFF, ERROR, WARNING, INFO, DEBUG
	loglevel = "INFO"

	# Log level for the very basic logger activated during ActorSystem startup.
	# This logger prints the log messages to stdout (System.out).
	# Options: OFF, ERROR, WARNING, INFO, DEBUG
	stdout-loglevel = "INFO"

	# Filter of log events that is used by the LoggingAdapter before
	# publishing log events to the eventStream.
	logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"
}