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

# Core Properties #
nifi.version=0.7.0
nifi.flow.configuration.file=./conf/config.yml
nifi.administrative.yield.duration=30 sec
# If a component has no work to do (is "bored"), how long should we wait before checking again for work?
nifi.bored.yield.duration=10 millis

# Provenance Repository #
nifi.provenance.repository.directory.default=${MINIFI_HOME}/provenance_repository
nifi.provenance.repository.max.storage.time=1 MIN
nifi.provenance.repository.max.storage.size=1 MB
nifi.flowfile.repository.directory.default=${MINIFI_HOME}/flowfile_repository
nifi.database.content.repository.directory.default=${MINIFI_HOME}/content_repository

#nifi.remote.input.secure=true
#nifi.security.need.ClientAuth=
#nifi.security.client.certificate=
#nifi.security.client.private.key=
#nifi.security.client.pass.phrase=
#nifi.security.client.ca.certificate=

# Optional username/password used to authenticate against NiFi in RemoteProcessorGroups (i.e. Site-to-site configurations)
#nifi.rest.api.user.name=admin
#nifi.rest.api.password=password

# State storage configuration #
## The default state storage can be overridden by specifying a controller service instance
## that implements CoreComponentStateManagementProvider
## (e.g. an instance of RocksDbPersistableKeyValueStoreService or UnorderedMapPersistableKeyValueStoreService)
#nifi.state.management.provider.local=
## To make the default state storage persist every state change, set this to true
## this comes at a performance penalty, but makes sure no state is lost even on unclean shutdowns
#nifi.state.management.provider.local.always.persist=true
## To change the frequency at which the default state storage is persisted, modify the following
#nifi.state.management.provider.local.auto.persistence.interval=1 min

# Disk space watchdog #
## Stops MiNiFi FlowController activity (excluding C2), when the available disk space on either of the repository
## volumes go below stop.threshold, checked every interval, then restarts when the available space on all
## repository volumes reach at least restart.threshold.
#minifi.disk.space.watchdog.enable=true
#minifi.disk.space.watchdog.interval=15 sec
#minifi.disk.space.watchdog.stop.threshold=100 MB
#minifi.disk.space.watchdog.restart.threshold=150 MB

## Enabling C2 Uncomment each of the following options
## define those with missing options
#nifi.c2.enable=true
## define protocol parameters
## The default is CoAP, if that extension is built. 
## Alternatively, you may use RESTSender if http-curl is built
#nifi.c2.agent.protocol.class=CoapProtocol
#nifi.c2.agent.coap.host=
#nifi.c2.agent.coap.port=
## base URL of the c2 server,
## very likely the same base url of rest urls
#nifi.c2.flow.base.url=
#nifi.c2.rest.url=
#nifi.c2.rest.url.ack=
nifi.c2.root.classes=DeviceInfoNode,AgentInformation,FlowInformation
## Minimize heartbeat payload size by excluding agent manifest from the heartbeat
#nifi.c2.full.heartbeat=false
## heartbeat 4 times a second
#nifi.c2.agent.heartbeat.period=250
## define parameters about your agent 
#nifi.c2.agent.class=
#nifi.c2.agent.identifier=
## define metrics reported
nifi.c2.root.class.definitions=metrics
nifi.c2.root.class.definitions.metrics.name=metrics
nifi.c2.root.class.definitions.metrics.metrics=typedmetrics
nifi.c2.root.class.definitions.metrics.metrics.typedmetrics.name=RuntimeMetrics
nifi.c2.root.class.definitions.metrics.metrics.queuemetrics.name=QueueMetrics
nifi.c2.root.class.definitions.metrics.metrics.queuemetrics.classes=QueueMetrics
nifi.c2.root.class.definitions.metrics.metrics.typedmetrics.classes=ProcessMetrics,SystemInformation
nifi.c2.root.class.definitions.metrics.metrics.processorMetrics.name=ProcessorMetric
nifi.c2.root.class.definitions.metrics.metrics.processorMetrics.classes=GetFileMetrics

## enable the controller socket provider on port 9998
## off by default. C2 must be enabled to support these
#controller.socket.host=localhost
#controller.socket.port=9998


#JNI properties
nifi.framework.dir=${MINIFI_HOME}/minifi-jni/lib
nifi.nar.directory=${MINIFI_HOME}/minifi-jni/nars
nifi.nar.deploy.directory=${MINIFI_HOME}/minifi-jni/nardeploy
nifi.nar.docs.directory=${MINIFI_HOME}/minifi-jni/nardocs
# must be comma separated 
nifi.jvm.options=-Xmx1G
nifi.python.processor.dir=${MINIFI_HOME}/minifi-python/
