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

####################################################
####    This is used for falcon packaging only. ####
####################################################

*.domain=${falcon.app.type}

######### Implementation classes #########
## DONT MODIFY UNLESS SURE ABOUT CHANGE ##

## If you wish to use Falcon native scheduler uncomment and enable the properties below.##
#*.dag.engine.impl=org.apache.falcon.workflow.engine.OozieDAGEngine
## If you wish to use Falcon native scheduler set the workflow engine to FalconWorkflowEngine instead of OozieWorkflowEngine. ##
#*.workflow.engine.impl=org.apache.falcon.workflow.engine.FalconWorkflowEngine
*.workflow.engine.impl=org.apache.falcon.workflow.engine.OozieWorkflowEngine
*.lifecycle.engine.impl=org.apache.falcon.lifecycle.engine.oozie.OoziePolicyBuilderFactory
*.oozie.process.workflow.builder=org.apache.falcon.workflow.OozieProcessWorkflowBuilder
*.oozie.feed.workflow.builder=org.apache.falcon.workflow.OozieFeedWorkflowBuilder
*.SchedulableEntityManager.impl=org.apache.falcon.resource.SchedulableEntityManager
*.ConfigSyncService.impl=org.apache.falcon.resource.ConfigSyncService
*.ProcessInstanceManager.impl=org.apache.falcon.resource.InstanceManager
*.catalog.service.impl=org.apache.falcon.catalog.HiveCatalogService

##### Falcon Services #####
*.application.services=org.apache.falcon.security.AuthenticationInitializationService,\
                        org.apache.falcon.workflow.WorkflowJobEndNotificationService, \
                        org.apache.falcon.service.ProcessSubscriberService,\
                        org.apache.falcon.service.FalconJPAService,\
                        org.apache.falcon.service.LifecyclePolicyMap,\
                        org.apache.falcon.entity.store.ConfigurationStore,\
                        org.apache.falcon.rerun.service.RetryService,\
                        org.apache.falcon.rerun.service.LateRunService,\
                        org.apache.falcon.service.LogCleanupService,\
                        org.apache.falcon.service.GroupsService,\
                        org.apache.falcon.service.ProxyUserService

##Add if you want to use Metadata Service
## Also enable all the properties which starts with falcon.graph prefix
#org.apache.falcon.metadata.MetadataMappingService,\

##Add if you want to use Trusted or User Extensions
## In case of distributed Mode enable ExtensionService only on Prism via prism.application.services
## It should come after FalconJPAService in application services
#org.apache.falcon.extensions.ExtensionService,\

##For feed SLA monitoring enable these two
#                        org.apache.falcon.service.FalconJPAService,\
#                        org.apache.falcon.service.EntitySLAMonitoringService,\

##Add if you want to send data to graphite
#                        org.apache.falcon.metrics.MetricNotificationService\

##Add if you want to enable BacklogMetricService
#                        org.apache.falcon.service.FalconJPAService,\
#                        org.apache.falcon.metrics.MetricNotificationService,\
#                        org.apache.falcon.service.EntitySLAMonitoringService,\
#                        org.apache.falcon.service.EntitySLAAlertService,\
#                        org.apache.falcon.service.BacklogMetricEmitterService


## Add if you want to use Falcon Azure integration ##
#                        org.apache.falcon.adfservice.ADFProviderService
## If you wish to use Falcon native scheduler uncomment out below  application services and comment out above application services ##
#*.application.services=org.apache.falcon.security.AuthenticationInitializationService,\
#                        org.apache.falcon.workflow.WorkflowJobEndNotificationService, \
#                        org.apache.falcon.service.ProcessSubscriberService,\
#                        org.apache.falcon.service.EntitySLAMonitoringService,\
#                        org.apache.falcon.service.LifecyclePolicyMap,\
#                        org.apache.falcon.service.FalconJPAService,\
#                        org.apache.falcon.entity.store.ConfigurationStore,\
#                        org.apache.falcon.rerun.service.RetryService,\
#                        org.apache.falcon.rerun.service.LateRunService,\
#                        org.apache.falcon.metadata.MetadataMappingService,\
#                        org.apache.falcon.service.LogCleanupService,\
#                        org.apache.falcon.service.GroupsService,\
#                        org.apache.falcon.service.ProxyUserService,\
#                        org.apache.falcon.notification.service.impl.JobCompletionService,\
#                        org.apache.falcon.notification.service.impl.SchedulerService,\
#                        org.apache.falcon.notification.service.impl.AlarmService,\
#                        org.apache.falcon.notification.service.impl.DataAvailabilityService,\
#                        org.apache.falcon.execution.FalconExecutionService

##### Prism Services #####
prism.application.services=org.apache.falcon.service.LifecyclePolicyMap,\
                        org.apache.falcon.entity.store.ConfigurationStore



# List of Lifecycle policies configured.
*.falcon.feed.lifecycle.policies=org.apache.falcon.lifecycle.retention.AgeBasedDelete
# List of builders for the policies.
*.falcon.feed.lifecycle.policy.builders=org.apache.falcon.lifecycle.engine.oozie.retention.AgeBasedDeleteBuilder

##### Falcon Configuration Store Change listeners #####
*.configstore.listeners=org.apache.falcon.entity.v0.EntityGraph,\
                        org.apache.falcon.entity.ColoClusterRelation,\
                        org.apache.falcon.group.FeedGroupMap,\
                        org.apache.falcon.entity.store.FeedLocationStore,\
                        org.apache.falcon.service.EntitySLAMonitoringService,\
                        org.apache.falcon.service.SharedLibraryHostingService

## if you wish to use BacklogEmitterService please add  BackLogEmitter service as a configstore listners.##
#                       org.apache.falcon.service.BacklogMetricEmitterService

## If you wish to use Falcon native scheduler, add the State store as a configstore listener. ##
#                       org.apache.falcon.state.store.jdbc.JDBCStateStore

##### Prism Configuration Store Change listeners #####
prism.configstore.listeners=org.apache.falcon.entity.v0.EntityGraph,\
                        org.apache.falcon.entity.ColoClusterRelation,\
                        org.apache.falcon.group.FeedGroupMap

##### JMS MQ Broker Implementation class #####
*.broker.impl.class=org.apache.activemq.ActiveMQConnectionFactory

##### List of shared libraries for Falcon workflows #####
*.shared.libs=activemq-all,ant,geronimo-j2ee-management,jms,json-simple,oozie-client,spring-jms,commons-lang3,commons-el

##### Workflow Job Execution Completion listeners #####
*.workflow.execution.listeners=org.apache.falcon.handler.SLAMonitoringHandler
#org.apache.falcon.service.LogMoverService
#org.apache.falcon.service.BacklogMetricEmitterService

######### Implementation classes #########


######### System startup parameters #########

# Location to store user entity configurations
*.config.store.uri=file://${falcon.home}/data/${falcon.app.type}-store

# HDFS location of extension store for extension artifacts
*.extension.store.uri=file://${falcon.home}/extensions/

#Location to store state of Feed SLA monitoring service
*.entity.sla.service.store.uri = file://${falcon.home}/data/sla/pendingentityinstances

# Location of libraries that is shipped to Hadoop
*.system.lib.location=${falcon.home}/server/webapp/${falcon.app.type}/WEB-INF/lib

*.retry.recorder.path=${falcon.log.dir}/retry

*.falcon.cleanup.service.frequency=days(1)

# Default number of threads to be used to restore entities.
*.config.store.num.threads.load.entities=100

# Default timeout in minutes to load entities
*.config.store.start.timeout.minutes=30

######### Properties for Entity SLA Monitoring #########
# frequency of serialization for the state of FeedSLAMonitoringService - 1 hour
*.feed.sla.serialization.frequency.millis=3600000

# Maximum number of pending instances per feed that will be recorded. After this older instances will be removed in
# a FIFO fashion.
*.feed.sla.queue.size=288

# Do not change unless really sure
# Frequency in seconds of "status check" for pending feed instances, default is 10 mins = 10 * 60
*.entity.sla.statusCheck.frequency.seconds=600

# Do not change unless really sure
# Time Duration (in milliseconds) in future for generating pending feed instances.
# In every cycle pending feed instances are added for monitoring, till this time in future.
# It must be more than statusCheck frequency, default is 15 mins = 15 * 60 * 1000
*.entity.sla.lookAheadWindow.millis=900000

##Add if you want to enable BacklogMetricService
#*.entityAlert.listeners=org.apache.falcon.service.BacklogMetricEmitterService

######### Properties for configuring JMS provider - activemq #########
# Default Active MQ url
*.broker.url=tcp://localhost:61616

# default time-to-live for a JMS message 3 days (time in minutes)
*.broker.ttlInMins=4320
*.entity.topic=FALCON.ENTITY.TOPIC
*.max.retry.failure.count=1

######### Properties for configuring iMon client and metric #########
*.internal.queue.size=1000

#*.current.colo=<<current.colo>>


######### Graph Database Properties #########
# Graph implementation
*.falcon.graph.blueprints.graph=com.thinkaurelius.titan.core.TitanFactory

# Graph Storage
# IMPORTANT:   Please enable one of the graph db backend: hbase or berkeleydb, per instructions below.

# Enable the following for Berkeley DB.  Make sure je-5.0.73.jar is downloaded and available
# under Falcon webapp directory or under falcon server classpath.
#*.falcon.graph.storage.backend=berkeleyje
#*.falcon.graph.storage.directory=/${falcon.home}/data/graphdb
#*.falcon.graph.serialize.path=${user.dir}/target/graphdb

# Enable the following for HBase
#*.falcon.graph.storage.backend=hbase
# For standalone mode , set hostname to localhost; for distributed mode, set to the zookeeper quorum
# @see http://s3.thinkaurelius.com/docs/titan/current/hbase.html#_remote_server_mode_2
#*.falcon.graph.storage.hostname=localhost
#*.falcon.graph.storage.hbase.table=falcon_titan

# Avoid acquiring read lock when iterating over large graphs
# See http://s3.thinkaurelius.com/docs/titan/0.5.4/bdb.html
*.falcon.graph.storage.transactions=false

# Uncomment and override the following properties for enabling metrics for titan db and pushing them to graphite. You
# can use other reporters like ganglia also.
# Refer (http://thinkaurelius.github.io/titan/wikidoc/0.4.2/Titan-Performance-and-Monitoring)for finding the
# relevant configurations for your use case. NOTE: you have to prefix all the properties with "*.falcon.graph."
# *.falcon.graph.storage.enable-basic-metrics = true
# Required; IP or hostname string
# *.falcon.graph.metrics.graphite.hostname = 192.168.0.1
# Required; specify logging interval in milliseconds
# *.falcon.graph.metrics.graphite.interval = 60000


######### Authentication Properties #########

# Authentication type must be specified: simple|kerberos
*.falcon.authentication.type=simple

##### Service Configuration

# Indicates the Kerberos principal to be used in Falcon Service.
*.falcon.service.authentication.kerberos.principal=

# Location of the keytab file with the credentials for the Service principal.
*.falcon.service.authentication.kerberos.keytab=

# name node principal to talk to config store
*.dfs.namenode.kerberos.principal=

##### SPNEGO Configuration

# Authentication type must be specified: simple|kerberos|<class>
# org.apache.falcon.security.RemoteUserInHeaderBasedAuthenticationHandler can be used for backwards compatibility
*.falcon.http.authentication.type=simple

# Indicates how long (in seconds) an authentication token is valid before it has to be renewed.
*.falcon.http.authentication.token.validity=36000

# The signature secret for signing the authentication tokens.
*.falcon.http.authentication.signature.secret=falcon

# The domain to use for the HTTP cookie that stores the authentication token.
*.falcon.http.authentication.cookie.domain=

# Indicates if anonymous requests are allowed when using 'simple' authentication.
*.falcon.http.authentication.simple.anonymous.allowed=true

# Indicates the Kerberos principal to be used for HTTP endpoint.
# The principal MUST start with 'HTTP/' as per Kerberos HTTP SPNEGO specification.
*.falcon.http.authentication.kerberos.principal=

# Location of the keytab file with the credentials for the HTTP principal.
*.falcon.http.authentication.kerberos.keytab=

# The kerberos names rules is to resolve kerberos principal names, refer to Hadoop's KerberosName for more details.
*.falcon.http.authentication.kerberos.name.rules=DEFAULT

# Indicates the validity time (in seconds) for kerberos token.
*.falcon.service.authentication.token.validity=86400

# Comma separated list of black listed users
*.falcon.http.authentication.blacklisted.users=

######### Authentication Properties #########


######### Authorization Properties #########

# Authorization Enabled flag: false (default)|true
*.falcon.security.authorization.enabled=false

# The name of the group of super-users
*.falcon.security.authorization.superusergroup=falcon

# CSRF filter enabled flag: false (default) | true
*.falcon.security.csrf.enabled=false

# Custom header for CSRF filter
*.falcon.security.csrf.header=FALCON-CSRF-FILTER

# Browser user agents to be filtered
*.falcon.security.csrf.browser=^Mozilla.*,^Opera.*

# Admin Users, comma separated users
*.falcon.security.authorization.admin.users=falcon,ambari-qa

# Admin Group Membership, comma separated users
*.falcon.security.authorization.admin.groups=falcon,staff

# Authorization Provider Implementation Fully Qualified Class Name
*.falcon.security.authorization.provider=org.apache.falcon.security.DefaultAuthorizationProvider

######### Authorization Properties #########

######### ADF Configurations start #########

# A String object that represents the namespace
*.microsoft.windowsazure.services.servicebus.namespace=

# Request and status queues on the namespace
*.microsoft.windowsazure.services.servicebus.requestqueuename=
*.microsoft.windowsazure.services.servicebus.statusqueuename=

# A String object that contains the SAS key name
*.microsoft.windowsazure.services.servicebus.sasKeyName=

# A String object that contains the SAS key
*.microsoft.windowsazure.services.servicebus.sasKey=

# A String object containing the base URI that is added to your Service Bus namespace to form the URI to connect
# to the Service Bus service. To access the default public Azure service, pass ".servicebus.windows.net"
*.microsoft.windowsazure.services.servicebus.serviceBusRootUri=

# Service bus polling frequency
*.microsoft.windowsazure.services.servicebus.polling.frequency=

# Super user
*.microsoft.windowsazure.services.servicebus.superuser=

######### ADF Configurations end ###########

######### SMTP Properties ########

# Setting SMTP hostname
#*.falcon.email.smtp.host=localhost

# Setting SMTP port number
#*.falcon.email.smtp.port=25

# Setting email from address
#*.falcon.email.from.address=falcon@localhost

# Setting email Auth
#*.falcon.email.smtp.auth=false

#Setting user name, if Auth is true
#*.falcon.email.smtp.user=""

#Setting password, if Auth is true
#*.falcon.email.smtp.password=""

# Setting monitoring plugin, if SMTP parameters is defined
# DefaultMonitoringPlugin
#*.monitoring.plugins=org.apache.falcon.plugin.DefaultMonitoringPlugin,\
#                     org.apache.falcon.plugin.EmailNotificationPlugin,\
#                     org.apache.falcon.plugin.ProcessExecutionStatsPlugin

# Graphite properties
#*.falcon.graphite.hostname=localhost
#*.falcon.graphite.port=2003
#*.falcon.graphite.frequency=1
#*.falcon.graphite.prefix=falcon

# Backlog Metric Properties
#*.falcon.backlog.metricservice.emit.interval.millisecs=60000
#*.falcon.backlog.metricservice.recheck.interval.millisecs=600000

# Property to remove postProcessing
*.falcon.postprocessing.enable=true

### LogMoveService Properties
*.falcon.logMoveService.max.threadCount=200
*.falcon.logMoveService.blockingQueue.length=50
##Note min threadCount should always be smaller than max threadCount.
*.falcon.logMoveService.min.threadCount=20
