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

#Configuration Type values {'nobroker', 'kafka'}
router.config.type=nobroker

#Uncomment and update Kafka settings to use Kafka as a broker

#Kafka
#kafka.host=localhost
#kafka.port=9092
#kafka.import.topic=import-deposit
#kafka.export.topic=export-deposit
#kafka.import.groupId=unomi-import-group
#kafka.export.groupId=unomi-import-group
#kafka.consumerCount=10
#kafka.autoCommit=true

#Import One Shot upload directory
import.oneshot.uploadDir=${karaf.data}/tmp/unomi_oneshot_import_configs/

#Import/Export executions history size
executionsHistory.size=5

#errors report size
executions.error.report.size=200

#Allowed source endpoints
config.allowedEndpoints=file,ftp,sftp,ftps