Simple Bandwidth Scanner - SBWS.INI(5)
======================================

DESCRIPTION
-----------

Tor bandwidth scanner configuration file.

**sbws** (1) ``scanner`` command requires a configuration file with the
"[scanner]", "[destinations]" "[destination.<name>]" sections.

There must be at least one "[destination.<name>]".

See an **EXAMPLES** below for a minimal configuration.

SECTIONS
---------

general
  data_period = INT
    Days into the past that measurements are considered valid. (Default: 5)
  http_timeout = INT
    Timeout in seconds to give to the python Requests library. (Default: 10)
  circuit_timeout = INT
    Timeout in seconds to create circuits. (Default: 60)
  reset_bw_ipv4_changes = {on, off}
    Whether or not to reset the bandwidth measurements when the relay's IP
    address changes. If it changes, we only consider results for the relay that
    we obtained while the relay was located at its most recent IP address.
    (Default: off)
  reset_bw_ipv6_changes = off
    NOT implemented for IPv6.

paths

  When **sbws** is run as a system service, `~/.sbws` is changed to
  `/var/lib/sbws`.

  sbws_home = STR
    sbws home directory. (Default: ~/.sbws)
  datadir = STR
    Directory where sbws stores temporal bandwidth results files.
    (Default: ~/.sbws/datadir)
  v3bw_dname = STR
    Directory where sbws stores the bandwidth list files.
    These are the files to be read by the Tor Directory Authorities.
    (Default: ~/.sbws/v3bw)
  v3bw_fname = STR
    File names of the bandwidth list files.
    The latest bandwidth file is symlinked by ``latest.v3bw``
  state_fname = STR
    File path to store the timestamp when the scanner was last started.
    (Default: ~/.sbws/state.dat)
  log_dname = STR
    Directory where to store log files when logging to files is enabled.
    (Default: ~/.sbws/log)

destinations

  It is required to set at least one destination for the scanner to run.
  It is recommended to set several destinations so that the scanner can
  continue if one fails.

  STR = {on, off}
    Name of destination. It is a name for the Web server from where to
    download files in order to measure bandwidths.

  usability_test_interval = INT
    How often to check if a destination is usable (Default: 300)

destinations.STR
  url = STR
    The URL to the destination. It must include a file path.
    It can use both http or https.
  verify = BOOL
    Whether or not to verify the destination certificate.
    (Default: True)
  country = STR
    ISO 3166-1 alpha-2 country code.
    Use ZZ if the destination URL is a domain name and it is in a CDN.

tor

  When **sbws** is run as a system service `~/.sbws/tor` is replaced by
  `/run/sbws/tor`.

  datadir = STR
    sbws' owned tor directory. (Default: ~/.sbws/tor)
  control_socket = STR
    sbws's owned tor control socket file.
    (Default: ~/.sbws/tor/sbws/control)
  pid = STR
    sbws's owned tor pid file. (Default: ~/.sbws/tor/sbws/tor.pid)
  log = STR
    sbws's owned tor directory log files. (Default: ~/.sbws/tor/log)
  external_control_port = INT
    tor control port to connect to. Useful to run integration tests with
    chutney.
    (Default: not set. If set, it takes preference over the control socket)
  extra_lines =
    sbws's tor extra configuration. (Default: None)

scanner
  nickname = STR
    A human-readable string with chars in a-zA-Z0-9 to identify the scanner.
    (Default: IDidntEditTheSBWSConfig)
  country = STR
    ISO 3166-1 alpha-2 country code.
    (Default: AA, a non existing country to detect it was not edited)
  download_toofast = INT
    Limits on what download times are too fast/slow/etc. (Default: 1)
  download_min = INT
    Limits on what download times are too fast/slow/etc. (Default: 5)
  download_target = INT
    Limits on what download times are too fast/slow/etc. (Default: 6)
  download_max = INT
    Limits on what download times are too fast/slow/etc. (Default: 10)
  num_rtts = INT
    How many RTT measurements to make. (Default: 0)
  num_downloads = INT
    Number of downloads with acceptable times we must have for a relay before
    moving on. (Default: 5)
  initial_read_request = INT
    The number of bytes to initially request from the server. (Default: 16384)
  measurement_threads = INT
    How many measurements to make in parallel. (Default: 3)
  min_download_size = INT
    Minimum number of bytes we should ever try to download in a measurement.
    (Default: 1)
  max_download_size = INT
    Maximum number of bytes we should ever try to download in a measurement.
    (Default: 1073741824) 1073741824 == 1 GiB

relayprioritizer
  measure_authorities = {on, off}
    Whether or not to measure authorities. (Default: off)
  fraction_relays = FLOAT
    The target fraction of best priority relays we would like to return.
    0.05 is 5%. In a 7000 relay network, 5% is 350 relays. (Default: 0.05)
  min_relays = INT
    The minimum number of best priority relays we are willing to return.
    (Default: 50)

cleanup
  data_files_compress_after_days = INT
    After this many days, compress data files. (Default: 29)
  data_files_delete_after_days = INT
    After this many days, delete data files. (Default: 57)
  v3bw_files_compress_after_days = INT
    After this many days, compress v3bw files. (Default: 1)
  v3bw_files_delete_after_days = INT
    After this many days, delete v3bw files. (Default: 7)

logging
  to_file = {yes, no}
    Whether or not to log to a rotating file the directory paths.log_dname.
    (Default: yes)
  to_stdout = {yes, no}
    Whether or not to log to stdout. (Default: yes)
  to_syslog = {yes, no}
    Whether or not to log to syslog. (Default: no)
    NOTE that when sbws is launched by systemd, stdout goes to journal and
    syslog.
  to_file_max_bytes = INT
    If logging to file, how large (in bytes) should the file be allowed to get
    before rotating to a new one. 10485760 is 10 MiB. If zero or number of
    backups is zero, never rotate the log file. (Default: 10485760)
  to_file_num_backups = INT
    If logging to file, how many backups to keep. If zero or max bytes is zero,
    never rotate the log file. (Default: 50)
  level = {debug, info, warning, error, critical}
    Level to log at. (Default: debug)
  to_file_level = {debug, info, warning, error, critical}
    Level to log at when using files. (Default: debug)
  to_stdout_level = {debug, info, warning, error, critical}
    Level to log at when using stdout. (Default: info)
  to_syslog_level = {debug, info, warning, error, critical}
    Level to log at when using syslog. (Default: info)
  format = STR
    Format string to use when logging.
    (Default: %(asctime)s %(module)s[%(process)s]: <%(levelname)s> %(message)s)
  to_stdout_format = STR
    Format string to use when logging to stdout. (Default: ${format})
  to_syslog_format = STR
    Format string to use when logging to syslog.
    (Default: %(module)s[%(process)s]: <%(levelname)s> %(message)s)
  to_file_format = STR
    Format string to use when logging to files.
    (Default: %(asctime)s %(levelname)s %(threadName)s %(filename)s:%(lineno)s - %(funcName)s - %(message)s)

EXAMPLES
--------

Example ``destinations`` section::

    [scanner]
    nickname = Manual
    country = US

    [destinations]
    foo = on
    bar = on
    baz = off

    [destinations.foo]
    # using HTTP
    url = http://example.org/sbws.bin
    country = ZZ
    verify = False

    [destinations.bar]
    # using HTTPS
    url = https://example.com/data
    country = SN

    [destinations.baz]
    # this will be ignored
    url = https://example.net/ask/stan/where/the/file/is.exe
    country = TH

FILES
-----

$HOME/.sbws.ini
   Default ``sbws`` user configuration path.

Any other path to the configuration file can be specified using the
``sbws`` argument ``-c``

SEE ALSO
---------

**sbws** (1), https://tpo.pages.torproject.net/network-health/sbws.

BUGS
----

Please report bugs at https://gitlab.torproject.org/tpo/network-health/sbws/-/issues/.
