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

#nifi.rest.api.user.name=admin
#nifi.rest.api.password=password

## 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=
#nifi.c2.rest.url=
#nifi.c2.rest.url.ack=
#nifi.c2.root.classes=DeviceInfoNode,AgentInformation,FlowInformation
## 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/
