# Example Configuration for RTRTR
#
# A configuration file is required for RTRTR to run. It describes which
# components should be loaded and how they will be connected.
#
# The file is in a format call TOML. It is somewhat similar to INI files.
# See https://toml.io/en/ for more information
#
# The file’s content starts out with a number of optional general parameters:

# The minimum log level to consider.
log_level = "debug"

# The target for logging. This can be "syslog", "stderr", "file", or
# "default".
log_target = "stderr"

# If syslog is used, the syslog facility can be given:
log_facility = "daemon"

# If file logging is used, the log file must be given.
log_file = "/var/log/rtrtr.log"

# Where should the HTTP server listen on?
#
# The HTTP server provides access to Prometheus-style metrics under the
# `/metrics` path and plain text status information under `/status` and
# can be used as a target for serving data (see below for more on targets).
http-listen = ["127.0.0.1:8080"]

# RTRTR uses two classes of components: units and targets. Units take data
# from somewhere and produce a single, constantly updated data set. Targets
# take the data set from exactly one other unit and serve it in some specific
# way.
#
# Both units and targets have a name -- so that we can refer to them -- and
# a type that defines which particular kind of unit or target this is. For
# each type, additional arguments need to be provided. Which these are and
# what they mean depends on the type.
#
# At this time, there are only two types of units and one type of target, so
# we can use them all in this example config.
#
# Each unit and target gets its own section in the config. The name of the
# section, given in square brackets, describes whether a unit or target is
# wanted and, after a dot, the name of the unit or target.


# Let's start with a unit for an RTR client. We call it "local-3323" because
# it connects to port 3323 on localhost. You can, of course, choose whatever
# name you like.
#
[units.local-3323]
# The type of this unit is "rtr" for an RTR client using plain TCP.
type = "rtr"

# The rtr unit needs one more argument: where to connect to. 
remote = "localhost:3323"


# Let’s add another RTR unit for another server.
#
[units.local-3324]
type = "rtr"
remote = "localhost:3324"


# We can also get data from a JSON file.

[units.local-json]
type = "json"
uri = "http://localhost:8323/json"
refresh = 60

[units.cloudflare-json]
type = "json"
uri = "https://rpki.cloudflare.com/rpki.json"
refresh = 60


# The second unit type is called "any". It is given any number of other units
# and picks the data set from one of them. Units can signal that they
# currently don’t have an up-to-date dataset available, so an any unit can
# skip those and make sure to always have an up-to-date data set.
#
[units.any-rtr]
type = "any"

# The names of the units the any unit should get its data from.
sources = [ "local-3323", "local-3324", "cloudflare-json" ]

# Whether the unit should pick a unit random every time it needs to switch
# or rather go through the list in order.
random = false


# We can also merge the data from multiple sources
[units.merged-rtr]
type = "merge"
sources = [ "local-3323", "local-3324", "cloudflare-json" ]


# Local exceptions can be applied, too.
[units.slurm]
type = "slurm"
source = "any-rtr"
files = [ "/var/lib/rtrtr/local-expections.json" ]


# Finally, we need to do something with the data: serve it via RTR. This is
# what the rtr target does:
#
[targets.local-9001]
type = "rtr"

# The rtr target can listen on multiple addresses, so the listen argument is
# a list.
listen = [ "127.0.0.1:9001" ]

# The name of the unit the target should receive its data from.
unit = "any-rtr"
client-metrics = true


# Let’s have a target for the merged data, too.
[targets.local-9002]
type = "rtr"
listen = [ "127.0.0.1:9002" ]
unit = "merged-rtr"
client-metrics = true


# We can also provide the data as JSON over HTTP.
[targets.http-json]
type = "http"
path = "/json"
format = "json"
unit = "any-rtr"

