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

# to configure camel main
# here you can configure options on camel main (see MainConfigurationProperties class)
camel.main.name = MyHealthyCamel

# extended runtime statistics about bean introspection usage (java reflection)
### camel.main.bean-introspection-extended-statistics=true
### camel.main.bean-introspection-logging-level=INFO

# enable JMX which allows to also control health check
camel.main.jmx-enabled = true

# enable supervised route controller which will startup routes in safe manner
camel.main.route-controller-supervise-enabled = true
# attempt up till 10 times to start a route (and exhaust if still failing)
# when a route is exhausted then its taken out as being supervised and
# will not take part of health-check either (UNKNOWN state)
camel.main.route-controller-back-off-max-attempts = 10
# when starting a route (and restarts) fails all attempts
# then we can control whether the route should be influence the health-check
# and report the route as either UNKNOWN or DOWN. Setting this option to true
# will report it as DOWN otherwise its UNKNOWN
###camel.main.route-controller-unhealthy-on-exhausted = true

# enable health check (is automatic enabled if discovered on classpath)
# global flag to enable/disable
camel.health.enabled = true
# context check is default included but we can turn it on|off
camel.health.context-enabled = true
# routes check is default included but we can turn it on|off
camel.health.routes-enabled = true
# registry check is default included but we can turn it on|off
camel.health.registry-enabled = true

# you can turn on or off individual routes as shown below
### camel.heath.config[timer].parent = routes
### camel.heath.config[timer].enabled = true
### camel.heath.config[netty].check = routes
### camel.heath.config[netty].enabled = false

# and configure each individually
camel.health.config[timer].parent = routes
camel.health.config[timer].interval = 5s
camel.health.config[netty].parent = routes
camel.health.config[netty].interval = 20s
camel.health.config[netty].failure-threshold = 10

# find grained routes configuration per route (support wildcards)
# (enabled is default true for discovered health-checks)
### camel.health.config[*].enabled = true

# allow 5 failures with 10s apart as slack to handle routes being flaky
# however if after 5 failures then the state will be regarded as DOWN onwards
# (the route can recover and the state will then be UP)
###camel.health.config[*].parent = routes
###camel.health.config[*].interval = 10s
###camel.health.config[*].failure-threshold = 5

# properties used in the route
myPeriod = 10s
