yanic/docs/configuration.html

1612 lines
94 KiB
HTML

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Yet another node info collector - for respondd to be used with meshviewer to Grafana (with influxdb or graphite)">
<meta name="author" content="FreifunkBremen">
<link rel="canonical" href="https://freifunkbremen.github.io/yanic/docs/configuration.html">
<link rel="prev" href="quick_conf.html">
<link rel="next" href="../dev/database.html">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.29">
<title>Configuration - Yanic</title>
<link rel="stylesheet" href="../assets/stylesheets/main.76a95c52.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css">
<script src="https://unpkg.com/iframe-worker/shim"></script>
<link rel="stylesheet" href="../stylesheets/extra.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="custom" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#configuration" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow md-header--lifted" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../index.html" title="Yanic" class="md-header__button md-logo" aria-label="Yanic" data-md-component="logo">
<img src="https://avatars.githubusercontent.com/u/6204341" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Yanic
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Configuration
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme)" data-md-color-scheme="default" data-md-color-primary="custom" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m14.3 16-.7-2h-3.2l-.7 2H7.8L11 7h2l3.2 9h-1.9M20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69m-9.15 3.96h2.3L12 9l-1.15 3.65Z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="custom" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="custom" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg>
</label>
</form>
<script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg>
</a>
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/FreifunkBremen/yanic" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item">
<a href="../index.html" class="md-tabs__link">
Home
</a>
</li>
<li class="md-tabs__item">
<a href="../about.html" class="md-tabs__link">
About
</a>
</li>
<li class="md-tabs__item">
<a href="../running.html" class="md-tabs__link">
Running
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a href="install.html" class="md-tabs__link">
Documentation
</a>
</li>
<li class="md-tabs__item">
<a href="../dev/database.html" class="md-tabs__link">
Developing
</a>
</li>
</ul>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../index.html" title="Yanic" class="md-nav__button md-logo" aria-label="Yanic" data-md-component="logo">
<img src="https://avatars.githubusercontent.com/u/6204341" alt="logo">
</a>
Yanic
</label>
<div class="md-nav__source">
<a href="https://github.com/FreifunkBremen/yanic" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../index.html" class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../about.html" class="md-nav__link">
<span class="md-ellipsis">
About
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../running.html" class="md-nav__link">
<span class="md-ellipsis">
Running
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" checked>
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="">
<span class="md-ellipsis">
Documentation
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Documentation
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="install.html" class="md-nav__link">
<span class="md-ellipsis">
Build and Install
</span>
</a>
</li>
<li class="md-nav__item">
<a href="usage.html" class="md-nav__link">
<span class="md-ellipsis">
Usage
</span>
</a>
</li>
<li class="md-nav__item">
<a href="quick_conf.html" class="md-nav__link">
<span class="md-ellipsis">
Quick Configuration
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Configuration
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="configuration.html" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Configuration
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#respondd" class="md-nav__link">
<span class="md-ellipsis">
[respondd]
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#webserver" class="md-nav__link">
<span class="md-ellipsis">
[webserver]
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#nodes" class="md-nav__link">
<span class="md-ellipsis">
[nodes]
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#nodesoutputexample" class="md-nav__link">
<span class="md-ellipsis">
[[nodes.output.example]]
</span>
</a>
<nav class="md-nav" aria-label="[[nodes.output.example]]">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#nodesoutputgeojson" class="md-nav__link">
<span class="md-ellipsis">
[[nodes.output.geojson]]
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#nodesoutputmeshviewer-ffrgb" class="md-nav__link">
<span class="md-ellipsis">
[[nodes.output.meshviewer-ffrgb]]
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#nodesoutputmeshviewer" class="md-nav__link">
<span class="md-ellipsis">
[[nodes.output.meshviewer]]
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#nodesoutputnodelist" class="md-nav__link">
<span class="md-ellipsis">
[[nodes.output.nodelist]]
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#nodesoutputprometheus-sd" class="md-nav__link">
<span class="md-ellipsis">
[[nodes.output.prometheus-sd]]
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#nodesoutputraw" class="md-nav__link">
<span class="md-ellipsis">
[[nodes.output.raw]]
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#nodesoutputraw-jsonl" class="md-nav__link">
<span class="md-ellipsis">
[[nodes.output.raw-jsonl]]
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#database" class="md-nav__link">
<span class="md-ellipsis">
[database]
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#databaseconnectionexample" class="md-nav__link">
<span class="md-ellipsis">
[[database.connection.example]]
</span>
</a>
<nav class="md-nav" aria-label="[[database.connection.example]]">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#databaseconnectioninfluxdb" class="md-nav__link">
<span class="md-ellipsis">
[[database.connection.influxdb]]
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#databaseconnectioninfluxdb2" class="md-nav__link">
<span class="md-ellipsis">
[[database.connection.influxdb2]]
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#databaseconnectiongraphite" class="md-nav__link">
<span class="md-ellipsis">
[[database.connection.graphite]]
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#databaseconnectionrespondd" class="md-nav__link">
<span class="md-ellipsis">
[[database.connection.respondd]]
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#databaseconnectionlogging" class="md-nav__link">
<span class="md-ellipsis">
[[database.connection.logging]]
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
<span class="md-ellipsis">
Developing
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Developing
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../dev/database.html" class="md-nav__link">
<span class="md-ellipsis">
Database
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dev/output.html" class="md-nav__link">
<span class="md-ellipsis">
Output
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/FreifunkBremen/yanic/edit/master/docs/docs/configuration.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg>
</a>
<h1 id="configuration">Configuration</h1>
<p>Here you would find a long description, maybe the description in <a href="https://github.com/FreifunkBremen/yanic/blob/main/config_example.toml">example file</a> are enough for you.</p>
<p>The config file for Yanic written in "Tom's Obvious, Minimal Language." <a href="https://github.com/toml-lang/toml">syntax</a>.
(if you need somethink multiple times, checkout out the [[array of table]] section)</p>
<h2 id="respondd">[respondd]</h2>
<p>Group for configuration of respondd request.</p>
<div class="language-toml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-0-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-0-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-0-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-0-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-0-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-0-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-0-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-0-10">10</a></span>
<span class="normal"><a href="#__codelineno-0-11">11</a></span>
<span class="normal"><a href="#__codelineno-0-12">12</a></span>
<span class="normal"><a href="#__codelineno-0-13">13</a></span>
<span class="normal"><a href="#__codelineno-0-14">14</a></span>
<span class="normal"><a href="#__codelineno-0-15">15</a></span>
<span class="normal"><a href="#__codelineno-0-16">16</a></span>
<span class="normal"><a href="#__codelineno-0-17">17</a></span>
<span class="normal"><a href="#__codelineno-0-18">18</a></span>
<span class="normal"><a href="#__codelineno-0-19">19</a></span>
<span class="normal"><a href="#__codelineno-0-20">20</a></span>
<span class="normal"><a href="#__codelineno-0-21">21</a></span>
<span class="normal"><a href="#__codelineno-0-22">22</a></span>
<span class="normal"><a href="#__codelineno-0-23">23</a></span>
<span class="normal"><a href="#__codelineno-0-24">24</a></span>
<span class="normal"><a href="#__codelineno-0-25">25</a></span>
<span class="normal"><a href="#__codelineno-0-26">26</a></span>
<span class="normal"><a href="#__codelineno-0-27">27</a></span>
<span class="normal"><a href="#__codelineno-0-28">28</a></span>
<span class="normal"><a href="#__codelineno-0-29">29</a></span>
<span class="normal"><a href="#__codelineno-0-30">30</a></span>
<span class="normal"><a href="#__codelineno-0-31">31</a></span>
<span class="normal"><a href="#__codelineno-0-32">32</a></span>
<span class="normal"><a href="#__codelineno-0-33">33</a></span>
<span class="normal"><a href="#__codelineno-0-34">34</a></span>
<span class="normal"><a href="#__codelineno-0-35">35</a></span>
<span class="normal"><a href="#__codelineno-0-36">36</a></span>
<span class="normal"><a href="#__codelineno-0-37">37</a></span>
<span class="normal"><a href="#__codelineno-0-38">38</a></span>
<span class="normal"><a href="#__codelineno-0-39">39</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="c1"># Send respondd request to update information</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2"></a><span class="k">[respondd]</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3"></a><span class="n">enable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="c1"># (1)</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4"></a><span class="c1"># Delay startup until a multiple of the period since zero time</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5"></a><span class="n">synchronize</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;1m&quot;</span><span class="w"> </span><span class="c1"># (2)</span>
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6"></a><span class="c1"># how often request per multicast</span>
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7"></a><span class="n">collect_interval</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;1m&quot;</span><span class="w"> </span><span class="c1"># (3)</span>
</span><span id="__span-0-8"><a id="__codelineno-0-8" name="__codelineno-0-8"></a>
</span><span id="__span-0-9"><a id="__codelineno-0-9" name="__codelineno-0-9"></a><span class="c1"># If you have custom respondd fields, you can ask Yanic to also collect these.</span>
</span><span id="__span-0-10"><a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="c1">#[[respondd.custom_field]] (4)</span>
</span><span id="__span-0-11"><a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="c1">#name = zip</span>
</span><span id="__span-0-12"><a id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="c1"># You can use arbitrary GJSON expressions here, see https://github.com/tidwall/gjson</span>
</span><span id="__span-0-13"><a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="c1"># We expect this expression to return a string.</span>
</span><span id="__span-0-14"><a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="c1">#path = nodeinfo.location.zip</span>
</span><span id="__span-0-15"><a id="__codelineno-0-15" name="__codelineno-0-15"></a>
</span><span id="__span-0-16"><a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="c1"># table of a site to save stats for (not exists for global only)</span>
</span><span id="__span-0-17"><a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="c1">#[respondd.sites.example] (5)</span>
</span><span id="__span-0-18"><a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="c1">## list of domains on this site to save stats for (empty for global only)</span>
</span><span id="__span-0-19"><a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="c1">#domains = [&quot;city&quot;] (6)</span>
</span><span id="__span-0-20"><a id="__codelineno-0-20" name="__codelineno-0-20"></a>
</span><span id="__span-0-21"><a id="__codelineno-0-21" name="__codelineno-0-21"></a>
</span><span id="__span-0-22"><a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="c1"># interface that has an IP in your mesh network</span>
</span><span id="__span-0-23"><a id="__codelineno-0-23" name="__codelineno-0-23"></a><span class="k">[[respondd.interfaces]]</span><span class="w"> </span><span class="c1"># (7)</span>
</span><span id="__span-0-24"><a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="c1"># name of interface on which this collector is running</span>
</span><span id="__span-0-25"><a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="n">ifname</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;br-ffhb&quot;</span><span class="w"> </span><span class="c1"># (8) </span>
</span><span id="__span-0-26"><a id="__codelineno-0-26" name="__codelineno-0-26"></a><span class="c1"># ip address which is used for sending</span>
</span><span id="__span-0-27"><a id="__codelineno-0-27" name="__codelineno-0-27"></a><span class="c1"># (optional - without definition used a address of ifname - preferred link local)</span>
</span><span id="__span-0-28"><a id="__codelineno-0-28" name="__codelineno-0-28"></a><span class="n">ip_address</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;fd2f:5119:f2d::5&quot;</span><span class="w"> </span><span class="c1"># (9)</span>
</span><span id="__span-0-29"><a id="__codelineno-0-29" name="__codelineno-0-29"></a><span class="c1"># disable sending multicast respondd request</span>
</span><span id="__span-0-30"><a id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="c1"># (for receiving only respondd packages e.g. database respondd)</span>
</span><span id="__span-0-31"><a id="__codelineno-0-31" name="__codelineno-0-31"></a><span class="c1">#send_no_request = false (10)</span>
</span><span id="__span-0-32"><a id="__codelineno-0-32" name="__codelineno-0-32"></a><span class="c1"># multicast address to destination of respondd</span>
</span><span id="__span-0-33"><a id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="c1"># (optional - without definition used default ff05::2:1001)</span>
</span><span id="__span-0-34"><a id="__codelineno-0-34" name="__codelineno-0-34"></a><span class="c1"># Very old gluon uses &quot;ff02::2:1001&quot; as multicast, newer use ff05::2:1001. If you have old and new</span>
</span><span id="__span-0-35"><a id="__codelineno-0-35" name="__codelineno-0-35"></a><span class="c1"># gluon nodes on the same network, create a separate &quot;respondd.interfaces&quot; section for each mutlicast address.</span>
</span><span id="__span-0-36"><a id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="c1">#multicast_address = &quot;ff02::2:1001&quot; (11)</span>
</span><span id="__span-0-37"><a id="__codelineno-0-37" name="__codelineno-0-37"></a><span class="c1"># define a port to listen</span>
</span><span id="__span-0-38"><a id="__codelineno-0-38" name="__codelineno-0-38"></a><span class="c1"># if not set or set to 0 the kernel will use a random free port at its own</span>
</span><span id="__span-0-39"><a id="__codelineno-0-39" name="__codelineno-0-39"></a><span class="c1">#port = 10001 (12)</span>
</span></code></pre></div></td></tr></table></div>
<ol>
<li>
<p>Enable request and collection of data per respondd requests</p>
</li>
<li>
<p>Delay startup until a multiple of the period since zero time</p>
</li>
<li>
<p>How often send request per respondd.</p>
<p>It will send UDP packets with multicast address <code>ff05::2:1001</code> and port <code>1001</code>.
If a node does not answer after the half time, it will request with the last know address under the port <code>1001</code>.</p>
</li>
<li>
<p>If you have custom respondd fields, you can ask Yanic to also collect these.</p>
<p>It is possible to have multiple custom fields, just add this group again with new parameters (see toml [[array of table]]).</p>
<div class="admonition info">
<p class="admonition-title">Info</p>
<p>This does not automatically include these fields in the output.
The meshviewer-ffrgb output module will include them under "custom_fields",
but other modules may simply ignore them.</p>
</div>
</li>
<li>
<p>Tables of sites to save stats for (not exists for global only).
Here is the site <em>ffhb</em>.</p>
<div class="admonition example">
<p class="admonition-title">Example</p>
<div class="language-toml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-1-1">1</a></span>
<span class="normal"><a href="#__codelineno-1-2">2</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1"></a><span class="k">[respondd.sites.ffhb]</span>
</span><span id="__span-1-2"><a id="__codelineno-1-2" name="__codelineno-1-2"></a><span class="n">domains</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;city&quot;</span><span class="p">]</span>
</span></code></pre></div></td></tr></table></div>
</div>
</li>
<li>
<p>list of domains on this site to save stats for (empty for global only)</p>
</li>
<li>
<p>Interface that has an ip address in your mesh network.</p>
<p>It is possible to have multiple interfaces, just add this group again with new parameters (see toml [[array of table]]).</p>
</li>
<li>
<p>name of interface on which this collector is running.</p>
</li>
<li>
<p>ip address is the own address which is used for sending.
If not set or set with empty string it will take an address of ifname.
(It prefers the link local address, so at babel mesh-network it should be configurated)</p>
</li>
<li>
<p>Disable sending multicast respondd request.
For receiving only respondd packages e.g. database respondd.</p>
</li>
<li>
<p>Multicast address to destination of respondd.
If not set or set with empty string it will take the batman default multicast address <code>ff05::2:1001</code>
(Needed to set for legacy <code>ff02::2:1001</code>)</p>
</li>
<li>
<p>Define a port to listen and send the respondd packages.
If not set or set to 0 the kernel will use a random free port at its own.</p>
</li>
</ol>
<h2 id="webserver">[webserver]</h2>
<p>Yanic has a little build-in webserver, which statically serves a directory.
This is useful for testing purposes or for a little standalone installation.</p>
<div class="language-toml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-2-1">1</a></span>
<span class="normal"><a href="#__codelineno-2-2">2</a></span>
<span class="normal"><a href="#__codelineno-2-3">3</a></span>
<span class="normal"><a href="#__codelineno-2-4">4</a></span>
<span class="normal"><a href="#__codelineno-2-5">5</a></span>
<span class="normal"><a href="#__codelineno-2-6">6</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1"></a><span class="c1"># A little build-in webserver, which statically serves a directory.</span>
</span><span id="__span-2-2"><a id="__codelineno-2-2" name="__codelineno-2-2"></a><span class="c1"># This is useful for testing purposes or for a little standalone installation.</span>
</span><span id="__span-2-3"><a id="__codelineno-2-3" name="__codelineno-2-3"></a><span class="k">[webserver]</span>
</span><span id="__span-2-4"><a id="__codelineno-2-4" name="__codelineno-2-4"></a><span class="n">enable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span><span class="c1"># (1)</span>
</span><span id="__span-2-5"><a id="__codelineno-2-5" name="__codelineno-2-5"></a><span class="n">bind</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;127.0.0.1:8080&quot;</span><span class="w"> </span><span class="c1"># (2)</span>
</span><span id="__span-2-6"><a id="__codelineno-2-6" name="__codelineno-2-6"></a><span class="n">webroot</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;/var/www/html/meshviewer&quot;</span><span class="w"> </span><span class="c1"># (3)</span>
</span></code></pre></div></td></tr></table></div>
<ol>
<li>Enable to start the built-in webserver of Yanic</li>
<li>On which ip address and port listen the webserver</li>
<li>The path to a folder, which files are published on this webserver.</li>
</ol>
<h2 id="nodes">[nodes]</h2>
<div class="language-toml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-3-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-3-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-3-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-3-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-3-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-3-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-3-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-3-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-3-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-3-10">10</a></span>
<span class="normal"><a href="#__codelineno-3-11">11</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-3-1"><a id="__codelineno-3-1" name="__codelineno-3-1"></a><span class="k">[nodes]</span>
</span><span id="__span-3-2"><a id="__codelineno-3-2" name="__codelineno-3-2"></a><span class="c1"># Cache file</span>
</span><span id="__span-3-3"><a id="__codelineno-3-3" name="__codelineno-3-3"></a><span class="c1"># a json file to cache all data collected directly from respondd</span>
</span><span id="__span-3-4"><a id="__codelineno-3-4" name="__codelineno-3-4"></a><span class="n">state_path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;/var/lib/yanic/state.json&quot;</span><span class="w"> </span><span class="c1"># (1)</span>
</span><span id="__span-3-5"><a id="__codelineno-3-5" name="__codelineno-3-5"></a><span class="c1"># prune data in RAM, cache-file and output json files (i.e. nodes.json)</span>
</span><span id="__span-3-6"><a id="__codelineno-3-6" name="__codelineno-3-6"></a><span class="c1"># that were inactive for longer than</span>
</span><span id="__span-3-7"><a id="__codelineno-3-7" name="__codelineno-3-7"></a><span class="n">prune_after</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;7d&quot;</span><span class="w"> </span><span class="c1"># (2)</span>
</span><span id="__span-3-8"><a id="__codelineno-3-8" name="__codelineno-3-8"></a><span class="c1"># Export nodes and graph periodically</span>
</span><span id="__span-3-9"><a id="__codelineno-3-9" name="__codelineno-3-9"></a><span class="n">save_interval</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;5s&quot;</span><span class="w"> </span><span class="c1"># (3)</span>
</span><span id="__span-3-10"><a id="__codelineno-3-10" name="__codelineno-3-10"></a><span class="c1"># Set node to offline if not seen within this period</span>
</span><span id="__span-3-11"><a id="__codelineno-3-11" name="__codelineno-3-11"></a><span class="n">offline_after</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;10m&quot;</span><span class="w"> </span><span class="c1"># (4)</span>
</span></code></pre></div></td></tr></table></div>
<ol>
<li>A json file to cache all data collected directly from respondd.</li>
<li>Prune data in RAM, cache-file and output json files (i.e. nodes.json) that were inactive for longer than.</li>
<li>Export nodes and graph periodically.</li>
<li>Set node to offline if not seen within this period.</li>
</ol>
<h2 id="nodesoutputexample">[[nodes.output.example]]</h2>
<p>This example block shows all option which is useable for every following output type.
Every output type has his own configuration under <code>nodes.output</code>.
It is possible to have multiple output for one type of output, just add this group again with new parameters (see toml [[array of table]]).</p>
<div class="language-toml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-4-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-4-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-4-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-4-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-4-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-4-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-4-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-4-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-4-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-4-10">10</a></span>
<span class="normal"><a href="#__codelineno-4-11">11</a></span>
<span class="normal"><a href="#__codelineno-4-12">12</a></span>
<span class="normal"><a href="#__codelineno-4-13">13</a></span>
<span class="normal"><a href="#__codelineno-4-14">14</a></span>
<span class="normal"><a href="#__codelineno-4-15">15</a></span>
<span class="normal"><a href="#__codelineno-4-16">16</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-4-1"><a id="__codelineno-4-1" name="__codelineno-4-1"></a><span class="k">[[nodes.output.example]]</span>
</span><span id="__span-4-2"><a id="__codelineno-4-2" name="__codelineno-4-2"></a><span class="n">enable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="c1"># (1)</span>
</span><span id="__span-4-3"><a id="__codelineno-4-3" name="__codelineno-4-3"></a>
</span><span id="__span-4-4"><a id="__codelineno-4-4" name="__codelineno-4-4"></a><span class="k">[nodes.output.example.filter]</span><span class="w"> </span><span class="c1"># (2)</span>
</span><span id="__span-4-5"><a id="__codelineno-4-5" name="__codelineno-4-5"></a><span class="n">no_owner</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="c1"># if it is not set, it will publish contact information of other persons (3)</span>
</span><span id="__span-4-6"><a id="__codelineno-4-6" name="__codelineno-4-6"></a><span class="n">blocklist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;00112233445566&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;1337f0badead&quot;</span><span class="p">]</span><span class="w"> </span><span class="c1"># (4)</span>
</span><span id="__span-4-7"><a id="__codelineno-4-7" name="__codelineno-4-7"></a><span class="n">sites</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;ffhb&quot;</span><span class="p">]</span><span class="w"> </span><span class="c1"># (5)</span>
</span><span id="__span-4-8"><a id="__codelineno-4-8" name="__codelineno-4-8"></a><span class="n">domain_as_site</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="c1"># (6)</span>
</span><span id="__span-4-9"><a id="__codelineno-4-9" name="__codelineno-4-9"></a><span class="n">domain_append_site</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="c1"># (7)</span>
</span><span id="__span-4-10"><a id="__codelineno-4-10" name="__codelineno-4-10"></a><span class="n">has_location</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="c1"># (8)</span>
</span><span id="__span-4-11"><a id="__codelineno-4-11" name="__codelineno-4-11"></a>
</span><span id="__span-4-12"><a id="__codelineno-4-12" name="__codelineno-4-12"></a><span class="k">[nodes.output.example.filter.in_area]</span><span class="w"> </span><span class="c1"># (9)</span>
</span><span id="__span-4-13"><a id="__codelineno-4-13" name="__codelineno-4-13"></a><span class="n">latitude_min</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">34.30</span>
</span><span id="__span-4-14"><a id="__codelineno-4-14" name="__codelineno-4-14"></a><span class="n">latitude_max</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">71.85</span>
</span><span id="__span-4-15"><a id="__codelineno-4-15" name="__codelineno-4-15"></a><span class="n">longitude_min</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">-24.96</span>
</span><span id="__span-4-16"><a id="__codelineno-4-16" name="__codelineno-4-16"></a><span class="n">longitude_max</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">39.72</span>
</span></code></pre></div></td></tr></table></div>
<ol>
<li>Each output format has its own config block and needs to be enabled by adding:</li>
<li>For each output format there can be set different filters</li>
<li>
<p>Set to false, if you want the json files to contain the owner information</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>if it is not set, it will publish contact information of other persons.</p>
</div>
</li>
<li>
<p>List of nodeids of nodes that should be filtered out, so they won't appear in output</p>
</li>
<li>
<p>List of site_codes of nodes that should be included in output</p>
</li>
<li>
<p>Replace the <code>site_code</code> with the <code>domain_code</code> in this output.</p>
<p>e.g. <code>site_code='ffhb',domain_code='city'</code> becomes <code>site_code='city', domain_code=''</code></p>
</li>
<li>
<p>Append on the <code>site_code</code> the <code>domain_code</code> with a <code>.</code> in this output.</p>
<p>e.g. <code>site_code='ffhb',domain_code='city'</code> becomes <code>site_code='ffhb.city', domain_code=''</code></p>
</li>
<li>
<p>set has_location to true if you want to include only nodes that have geo-coordinates set</p>
<p>(setting this to false has no sensible effect, unless you'd want to hide nodes that have coordinates)</p>
</li>
<li>
<p>nodes outside this area are not shown on the map but are still listed as a node without coordinates</p>
</li>
</ol>
<h3 id="nodesoutputgeojson">[[nodes.output.geojson]]</h3>
<p>The geojson output produces a geojson file which contains the location data of all monitored nodes to be used to visualize the location of the nodes.
It is optimized to be used with <a href="https://github.com/umap-project/umap">UMap</a> but should work with other tools as well.</p>
<p>Here is a public demo provided by Freifunk Muenchen: http://u.osmfr.org/m/328494/</p>
<div class="language-toml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-5-1">1</a></span>
<span class="normal"><a href="#__codelineno-5-2">2</a></span>
<span class="normal"><a href="#__codelineno-5-3">3</a></span>
<span class="normal"><a href="#__codelineno-5-4">4</a></span>
<span class="normal"><a href="#__codelineno-5-5">5</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-5-1"><a id="__codelineno-5-1" name="__codelineno-5-1"></a><span class="hll"><span class="k">[[nodes.output.geojson]]</span>
</span></span><span id="__span-5-2"><a id="__codelineno-5-2" name="__codelineno-5-2"></a><span class="hll"><span class="n">enable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span>
</span></span><span id="__span-5-3"><a id="__codelineno-5-3" name="__codelineno-5-3"></a><span class="hll"><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;/var/www/html/meshviewer/data/nodes.geojson&quot;</span><span class="w"> </span><span class="c1"># (1)</span>
</span></span><span id="__span-5-4"><a id="__codelineno-5-4" name="__codelineno-5-4"></a><span class="k">[nodes.output.geojson.filter]</span>
</span><span id="__span-5-5"><a id="__codelineno-5-5" name="__codelineno-5-5"></a><span class="n">no_owner</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span>
</span></code></pre></div></td></tr></table></div>
<ol>
<li>The path, where to store nodes.geojson</li>
</ol>
<h3 id="nodesoutputmeshviewer-ffrgb">[[nodes.output.meshviewer-ffrgb]]</h3>
<p>The new json file format for the <a href="https://github.com/ffrgb/meshviewer">meshviewer</a> developed in Regensburg.</p>
<div class="language-toml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-6-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-6-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-6-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-6-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-6-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-6-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-6-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-6-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-6-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-6-10">10</a></span>
<span class="normal"><a href="#__codelineno-6-11">11</a></span>
<span class="normal"><a href="#__codelineno-6-12">12</a></span>
<span class="normal"><a href="#__codelineno-6-13">13</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-6-1"><a id="__codelineno-6-1" name="__codelineno-6-1"></a><span class="hll"><span class="k">[[nodes.output.meshviewer-ffrgb]]</span>
</span></span><span id="__span-6-2"><a id="__codelineno-6-2" name="__codelineno-6-2"></a><span class="hll"><span class="n">enable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span>
</span></span><span id="__span-6-3"><a id="__codelineno-6-3" name="__codelineno-6-3"></a><span class="hll"><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;/var/www/html/meshviewer/data/meshviewer.json&quot;</span><span class="w"> </span><span class="c1"># (1)</span>
</span></span><span id="__span-6-4"><a id="__codelineno-6-4" name="__codelineno-6-4"></a><span class="c1"># like on every output, here some filters, for example using this block:</span>
</span><span id="__span-6-5"><a id="__codelineno-6-5" name="__codelineno-6-5"></a><span class="k">[nodes.output.meshviewer-ffrgb.filter]</span>
</span><span id="__span-6-6"><a id="__codelineno-6-6" name="__codelineno-6-6"></a><span class="n">no_owner</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span>
</span><span id="__span-6-7"><a id="__codelineno-6-7" name="__codelineno-6-7"></a><span class="n">blocklist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;00112233445566&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;1337f0badead&quot;</span><span class="p">]</span>
</span><span id="__span-6-8"><a id="__codelineno-6-8" name="__codelineno-6-8"></a>
</span><span id="__span-6-9"><a id="__codelineno-6-9" name="__codelineno-6-9"></a><span class="k">[nodes.output.meshviewer-ffrgb.filter.in_area]</span>
</span><span id="__span-6-10"><a id="__codelineno-6-10" name="__codelineno-6-10"></a><span class="n">latitude_min</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">34.30</span>
</span><span id="__span-6-11"><a id="__codelineno-6-11" name="__codelineno-6-11"></a><span class="n">latitude_max</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">71.85</span>
</span><span id="__span-6-12"><a id="__codelineno-6-12" name="__codelineno-6-12"></a><span class="n">longitude_min</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">-24.96</span>
</span><span id="__span-6-13"><a id="__codelineno-6-13" name="__codelineno-6-13"></a><span class="n">longitude_max</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">39.72</span>
</span></code></pre></div></td></tr></table></div>
<ol>
<li>The path, where to store meshviewer.json</li>
</ol>
<h3 id="nodesoutputmeshviewer">[[nodes.output.meshviewer]]</h3>
<div class="language-toml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-7-1">1</a></span>
<span class="normal"><a href="#__codelineno-7-2">2</a></span>
<span class="normal"><a href="#__codelineno-7-3">3</a></span>
<span class="normal"><a href="#__codelineno-7-4">4</a></span>
<span class="normal"><a href="#__codelineno-7-5">5</a></span>
<span class="normal"><a href="#__codelineno-7-6">6</a></span>
<span class="normal"><a href="#__codelineno-7-7">7</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-7-1"><a id="__codelineno-7-1" name="__codelineno-7-1"></a><span class="hll"><span class="k">[[nodes.output.meshviewer]]</span>
</span></span><span id="__span-7-2"><a id="__codelineno-7-2" name="__codelineno-7-2"></a><span class="hll"><span class="n">enable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span>
</span></span><span id="__span-7-3"><a id="__codelineno-7-3" name="__codelineno-7-3"></a><span class="hll"><span class="n">version</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="c1"># (1)</span>
</span></span><span id="__span-7-4"><a id="__codelineno-7-4" name="__codelineno-7-4"></a><span class="hll"><span class="n">nodes_path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;/var/www/html/meshviewer/data/nodes.json&quot;</span><span class="w"> </span><span class="c1"># (3)</span>
</span></span><span id="__span-7-5"><a id="__codelineno-7-5" name="__codelineno-7-5"></a><span class="hll"><span class="n">graph_path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;/var/www/html/meshviewer/data/graph.json&quot;</span><span class="w"> </span><span class="c1"># (4)</span>
</span></span><span id="__span-7-6"><a id="__codelineno-7-6" name="__codelineno-7-6"></a><span class="k">[nodes.output.meshviewer.filter]</span>
</span><span id="__span-7-7"><a id="__codelineno-7-7" name="__codelineno-7-7"></a><span class="n">no_owner</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span>
</span></code></pre></div></td></tr></table></div>
<ol>
<li>
<p>The structure version of the output which should be generated (i.e. nodes.json)</p>
<ul>
<li>version <code>1</code> is accepted by the legacy meshviewer (which is the master branch)<ul>
<li>https://github.com/ffnord/meshviewer/tree/master
<!-- bug: count as 2 ... --></li>
</ul>
</li>
<li>version <code>2</code> is accepted by the new version of meshviewer (which are in legacy develop branch or newer)<ul>
<li>https://github.com/ffnord/meshviewer/tree/dev</li>
<li>https://github.com/ffrgb/meshviewer/tree/develop</li>
</ul>
</li>
<li>The path, where to store nodes.json (supports version 1 and two, see <code>nodes_version</code>)</li>
<li>The path, where to store graph.json (only version 1)</li>
</ul>
</li>
</ol>
<h3 id="nodesoutputnodelist">[[nodes.output.nodelist]]</h3>
<p>The nodelist output is a minimal output with current state of collected data.
Should be preferred to use it on the <a href="https://freifunk.net/api-generator/">ffapi</a> for the <a href="https://freifunk-karte.de">freifunk-karte.de</a></p>
<div class="language-toml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-8-1">1</a></span>
<span class="normal"><a href="#__codelineno-8-2">2</a></span>
<span class="normal"><a href="#__codelineno-8-3">3</a></span>
<span class="normal"><a href="#__codelineno-8-4">4</a></span>
<span class="normal"><a href="#__codelineno-8-5">5</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-8-1"><a id="__codelineno-8-1" name="__codelineno-8-1"></a><span class="hll"><span class="k">[[nodes.output.nodelist]]</span>
</span></span><span id="__span-8-2"><a id="__codelineno-8-2" name="__codelineno-8-2"></a><span class="hll"><span class="n">enable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span>
</span></span><span id="__span-8-3"><a id="__codelineno-8-3" name="__codelineno-8-3"></a><span class="hll"><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;/var/www/html/meshviewer/data/nodelist.json&quot;</span><span class="w"> </span><span class="c1"># (1)</span>
</span></span><span id="__span-8-4"><a id="__codelineno-8-4" name="__codelineno-8-4"></a><span class="k">[nodes.output.nodelist.filter]</span>
</span><span id="__span-8-5"><a id="__codelineno-8-5" name="__codelineno-8-5"></a><span class="n">no_owner</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span>
</span></code></pre></div></td></tr></table></div>
<ol>
<li>The path, where to store nodelist.json</li>
</ol>
<h3 id="nodesoutputprometheus-sd">[[nodes.output.prometheus-sd]]</h3>
<p>The Prometheus Service Discovery (SD) output is a output with the list of addresses of the nodes to use them in later exporter by prometheus.
For usage in Prometheus read there Documentation <a href="https://prometheus.io/docs/guides/file-sd/">Use file-based service discovery to discover scrape targets</a>.</p>
<div class="language-toml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-9-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-9-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-9-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-9-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-9-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-9-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-9-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-9-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-9-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-9-10">10</a></span>
<span class="normal"><a href="#__codelineno-9-11">11</a></span>
<span class="normal"><a href="#__codelineno-9-12">12</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-9-1"><a id="__codelineno-9-1" name="__codelineno-9-1"></a><span class="k">[[nodes.output.prometheus-sd]]</span>
</span><span id="__span-9-2"><a id="__codelineno-9-2" name="__codelineno-9-2"></a><span class="n">enable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span>
</span><span id="__span-9-3"><a id="__codelineno-9-3" name="__codelineno-9-3"></a><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;/var/www/html/meshviewer/data/prometheus-sd.json&quot;</span><span class="w"> </span><span class="c1"># (1)</span>
</span><span id="__span-9-4"><a id="__codelineno-9-4" name="__codelineno-9-4"></a><span class="c1"># ip = lates recieved ip, node_id = node id from host</span>
</span><span id="__span-9-5"><a id="__codelineno-9-5" name="__codelineno-9-5"></a><span class="n">target_address</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;ip&quot;</span><span class="w"> </span><span class="c1"># (2)</span>
</span><span id="__span-9-6"><a id="__codelineno-9-6" name="__codelineno-9-6"></a>
</span><span id="__span-9-7"><a id="__codelineno-9-7" name="__codelineno-9-7"></a><span class="c1"># Labels of the data (optional)</span>
</span><span id="__span-9-8"><a id="__codelineno-9-8" name="__codelineno-9-8"></a><span class="k">[nodes.output.prometheus-sd.labels]</span><span class="w"> </span><span class="c1"># (3)</span>
</span><span id="__span-9-9"><a id="__codelineno-9-9" name="__codelineno-9-9"></a><span class="n">labelname1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;labelvalue 1&quot;</span>
</span><span id="__span-9-10"><a id="__codelineno-9-10" name="__codelineno-9-10"></a><span class="c1"># some useful e.g.:</span>
</span><span id="__span-9-11"><a id="__codelineno-9-11" name="__codelineno-9-11"></a><span class="n">hosts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;ffhb&quot;</span>
</span><span id="__span-9-12"><a id="__codelineno-9-12" name="__codelineno-9-12"></a><span class="n">service</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;yanic&quot;</span>
</span></code></pre></div></td></tr></table></div>
<ol>
<li>The path, where to store prometheus-sd.json</li>
<li>
<p>In the prometheus-sd.json the usage of which information of the node as targets (address).</p>
<p>Use the <code>node_id</code> as value, to put the Node ID into the target list as address.</p>
<p>Use the <code>ip</code> as value to put the last IP address into the target list from where the respondd message is recieved (maybe a link-local address).</p>
<p>Default value is <code>ip</code>.</p>
</li>
<li>
<p>You could optional set manuelle labels with inserting into a prometheus-sd.json.
Useful if you want to identify the yanic instance when you use multiple own on the same prometheus database (e.g. multisites).</p>
</li>
</ol>
<h3 id="nodesoutputraw">[[nodes.output.raw]]</h3>
<p>This output takes the respondd response as sent by the node and includes it in a JSON document.
<div class="language-toml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-10-1">1</a></span>
<span class="normal"><a href="#__codelineno-10-2">2</a></span>
<span class="normal"><a href="#__codelineno-10-3">3</a></span>
<span class="normal"><a href="#__codelineno-10-4">4</a></span>
<span class="normal"><a href="#__codelineno-10-5">5</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-10-1"><a id="__codelineno-10-1" name="__codelineno-10-1"></a><span class="hll"><span class="k">[[nodes.output.raw]]</span>
</span></span><span id="__span-10-2"><a id="__codelineno-10-2" name="__codelineno-10-2"></a><span class="hll"><span class="n">enable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span>
</span></span><span id="__span-10-3"><a id="__codelineno-10-3" name="__codelineno-10-3"></a><span class="hll"><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;/var/www/html/meshviewer/data/raw.json&quot;</span><span class="w"> </span><span class="c1"># (1)</span>
</span></span><span id="__span-10-4"><a id="__codelineno-10-4" name="__codelineno-10-4"></a><span class="k">[nodes.output.raw.filter]</span>
</span><span id="__span-10-5"><a id="__codelineno-10-5" name="__codelineno-10-5"></a><span class="n">no_owner</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span>
</span></code></pre></div></td></tr></table></div></p>
<ol>
<li>The path, where to store raw.json</li>
</ol>
<h3 id="nodesoutputraw-jsonl">[[nodes.output.raw-jsonl]]</h3>
<p>This output takes the respondd response as sent by the node and inserts it into a line-separated JSON document (JSONL). In this format, each line can be interpreted as a separate JSON element, which is useful for json streaming. The first line is a json object containing the timestamp and version of the file. This is followed by a line for each node, each containing a json object.
<div class="language-toml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-11-1">1</a></span>
<span class="normal"><a href="#__codelineno-11-2">2</a></span>
<span class="normal"><a href="#__codelineno-11-3">3</a></span>
<span class="normal"><a href="#__codelineno-11-4">4</a></span>
<span class="normal"><a href="#__codelineno-11-5">5</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-11-1"><a id="__codelineno-11-1" name="__codelineno-11-1"></a><span class="hll"><span class="k">[[nodes.output.raw-jsonl]]</span>
</span></span><span id="__span-11-2"><a id="__codelineno-11-2" name="__codelineno-11-2"></a><span class="hll"><span class="n">enable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span>
</span></span><span id="__span-11-3"><a id="__codelineno-11-3" name="__codelineno-11-3"></a><span class="hll"><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;/var/www/html/meshviewer/data/raw.jsonl&quot;</span><span class="w"> </span><span class="c1"># (1)</span>
</span></span><span id="__span-11-4"><a id="__codelineno-11-4" name="__codelineno-11-4"></a><span class="k">[nodes.output.raw-jsonl.filter]</span>
</span><span id="__span-11-5"><a id="__codelineno-11-5" name="__codelineno-11-5"></a><span class="n">no_owner</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span>
</span></code></pre></div></td></tr></table></div></p>
<ol>
<li>The path, where to store raw.jsonl</li>
</ol>
<h2 id="database">[database]</h2>
<p>The database organize all database types.
For all database types the is a internal job, which reset data for nodes (global statistics are still stored).
<em>(We have for privacy policy to store node data for maximum seven days.)</em></p>
<div class="language-toml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-12-1">1</a></span>
<span class="normal"><a href="#__codelineno-12-2">2</a></span>
<span class="normal"><a href="#__codelineno-12-3">3</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-12-1"><a id="__codelineno-12-1" name="__codelineno-12-1"></a><span class="k">[database]</span>
</span><span id="__span-12-2"><a id="__codelineno-12-2" name="__codelineno-12-2"></a><span class="n">delete_after</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;7d&quot;</span><span class="w"> </span><span class="c1"># (1)</span>
</span><span id="__span-12-3"><a id="__codelineno-12-3" name="__codelineno-12-3"></a><span class="n">delete_interval</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;1h&quot;</span><span class="w"> </span><span class="c1"># (2)</span>
</span></code></pre></div></td></tr></table></div>
<ol>
<li>This will send delete commands to the database to prune data which is older than:</li>
<li>How often run the delete commands.</li>
</ol>
<h2 id="databaseconnectionexample">[[database.connection.example]]</h2>
<p>This example block shows all option which is useable for every following database type.
Every database type has his own configuration under <code>database.connection</code>.
It is possible to have multiple connections for one type of database, just add this group again with new parameters (see toml [[array of table]]).</p>
<div class="language-toml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-13-1">1</a></span>
<span class="normal"><a href="#__codelineno-13-2">2</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-13-1"><a id="__codelineno-13-1" name="__codelineno-13-1"></a><span class="k">[[database.connection.example]]</span>
</span><span id="__span-13-2"><a id="__codelineno-13-2" name="__codelineno-13-2"></a><span class="n">enable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="c1"># (1)</span>
</span></code></pre></div></td></tr></table></div>
<ol>
<li>Each database-connection has its own config block and needs to be enabled by adding:</li>
</ol>
<h3 id="databaseconnectioninfluxdb">[[database.connection.influxdb]]</h3>
<p>Save collected data to InfluxDB.
There are would be the following measurements:
- node: store node specific data i.e. clients memory, airtime
- link: store link tq between two interfaces of two different nodes
- global: store global data, i.e. count of clients and nodes
- firmware: store the count of nodes tagged with firmware
- model: store the count of nodes tagged with hardware model
- autoupdater: store the count of autoupdate branch</p>
<div class="language-toml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-14-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-14-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-14-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-14-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-14-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-14-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-14-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-14-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-14-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-14-10">10</a></span>
<span class="normal"><a href="#__codelineno-14-11">11</a></span>
<span class="normal"><a href="#__codelineno-14-12">12</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-14-1"><a id="__codelineno-14-1" name="__codelineno-14-1"></a><span class="k">[[database.connection.influxdb]]</span>
</span><span id="__span-14-2"><a id="__codelineno-14-2" name="__codelineno-14-2"></a><span class="n">enable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span>
</span><span id="__span-14-3"><a id="__codelineno-14-3" name="__codelineno-14-3"></a><span class="n">address</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;http://localhost:8086&quot;</span><span class="w"> </span><span class="c1"># (1)</span>
</span><span id="__span-14-4"><a id="__codelineno-14-4" name="__codelineno-14-4"></a><span class="n">database</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;ffhb&quot;</span><span class="w"> </span><span class="c1"># (2)</span>
</span><span id="__span-14-5"><a id="__codelineno-14-5" name="__codelineno-14-5"></a><span class="n">username</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="w"> </span><span class="c1"># (3)</span>
</span><span id="__span-14-6"><a id="__codelineno-14-6" name="__codelineno-14-6"></a><span class="n">password</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="w"> </span><span class="c1"># (4)</span>
</span><span id="__span-14-7"><a id="__codelineno-14-7" name="__codelineno-14-7"></a><span class="c1"># insecure_skip_verify = true (5)</span>
</span><span id="__span-14-8"><a id="__codelineno-14-8" name="__codelineno-14-8"></a>
</span><span id="__span-14-9"><a id="__codelineno-14-9" name="__codelineno-14-9"></a><span class="k">[database.connection.influxdb.tags]</span><span class="w"> </span><span class="c1"># (6)</span>
</span><span id="__span-14-10"><a id="__codelineno-14-10" name="__codelineno-14-10"></a><span class="n">tagname1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;tagvalue 1&quot;</span>
</span><span id="__span-14-11"><a id="__codelineno-14-11" name="__codelineno-14-11"></a><span class="n">system</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;productive&quot;</span>
</span><span id="__span-14-12"><a id="__codelineno-14-12" name="__codelineno-14-12"></a><span class="n">site</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;ffhb&quot;</span>
</span></code></pre></div></td></tr></table></div>
<ol>
<li>Address to connect on InfluxDB server.</li>
<li>Database on which the measurement should be stored.</li>
<li>Username to authenticate on InfluxDB</li>
<li>Password to authenticate on InfluxDB.</li>
<li>Skip insecure verify for self-signed certificates.</li>
<li>
<p>You could set manuelle tags with inserting into a influxdb.</p>
<p>Useful if you want to identify the yanic instance when you use multiple own on the same influxdb (e.g. multisites).</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Tags used by Yanic would override the tags from this config (e.g. <code>nodeid</code>, <code>hostname</code>, <code>owner</code>, <code>model</code>, <code>firmware_base</code>, <code>firmware_release</code>, <code>frequency11g</code>, <code>frequency11a</code>).</p>
</div>
</li>
</ol>
<h3 id="databaseconnectioninfluxdb2">[[database.connection.influxdb2]]</h3>
<p>Save collected data to InfluxDB2.</p>
<p>There are the following measurements:</p>
<ul>
<li><strong>node</strong>: store node specific data i.e. clients memory, airtime</li>
<li><strong>link</strong>: store link tq between two interfaces of two different nodes with i.e. nodeid, address, hostname</li>
<li><strong>global</strong>: store global data, i.e. count of clients and nodes</li>
<li><strong>firmware</strong>: store the count of nodes tagged with firmware</li>
<li><strong>model</strong>: store the count of nodes tagged with hardware model</li>
<li><strong>autoupdater</strong>: store the count of autoupdate branch</li>
</ul>
<div class="admonition info">
<p class="admonition-title">Info</p>
<p>A bucket has to be set in buckets and buchet_default otherwise yanic would panic.</p>
</div>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>yanic does NOT prune node's data (so please set up data retention in InfluxDB2 setup).</p>
<p>We highly recommend to setup e.g. <a href="https://docs.influxdata.com/influxdb/v2/reference/internals/data-retention/">Data retention</a> in your InfluxDB2 server per measurements.</p>
</div>
<div class="language-toml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-15-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-15-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-15-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-15-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-15-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-15-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-15-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-15-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-15-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-15-10">10</a></span>
<span class="normal"><a href="#__codelineno-15-11">11</a></span>
<span class="normal"><a href="#__codelineno-15-12">12</a></span>
<span class="normal"><a href="#__codelineno-15-13">13</a></span>
<span class="normal"><a href="#__codelineno-15-14">14</a></span>
<span class="normal"><a href="#__codelineno-15-15">15</a></span>
<span class="normal"><a href="#__codelineno-15-16">16</a></span>
<span class="normal"><a href="#__codelineno-15-17">17</a></span>
<span class="normal"><a href="#__codelineno-15-18">18</a></span>
<span class="normal"><a href="#__codelineno-15-19">19</a></span>
<span class="normal"><a href="#__codelineno-15-20">20</a></span>
<span class="normal"><a href="#__codelineno-15-21">21</a></span>
<span class="normal"><a href="#__codelineno-15-22">22</a></span>
<span class="normal"><a href="#__codelineno-15-23">23</a></span>
<span class="normal"><a href="#__codelineno-15-24">24</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-15-1"><a id="__codelineno-15-1" name="__codelineno-15-1"></a><span class="k">[[database.connection.influxdb2]]</span>
</span><span id="__span-15-2"><a id="__codelineno-15-2" name="__codelineno-15-2"></a><span class="n">enable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span>
</span><span id="__span-15-3"><a id="__codelineno-15-3" name="__codelineno-15-3"></a><span class="n">address</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;http://localhost:8086&quot;</span><span class="w"> </span><span class="c1"># (1)</span>
</span><span id="__span-15-4"><a id="__codelineno-15-4" name="__codelineno-15-4"></a><span class="n">token</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="w"> </span><span class="c1"># (2)</span>
</span><span id="__span-15-5"><a id="__codelineno-15-5" name="__codelineno-15-5"></a><span class="n">organization_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="w"> </span><span class="c1"># (3)</span>
</span><span id="__span-15-6"><a id="__codelineno-15-6" name="__codelineno-15-6"></a><span class="n">bucket_default</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;yanic&quot;</span><span class="w"> </span><span class="c1"># (4)</span>
</span><span id="__span-15-7"><a id="__codelineno-15-7" name="__codelineno-15-7"></a>
</span><span id="__span-15-8"><a id="__codelineno-15-8" name="__codelineno-15-8"></a><span class="k">[database.connection.influxdb2.buckets]</span><span class="w"> </span><span class="c1"># (5)</span>
</span><span id="__span-15-9"><a id="__codelineno-15-9" name="__codelineno-15-9"></a><span class="c1">#link = &quot;yanic-temp&quot;</span>
</span><span id="__span-15-10"><a id="__codelineno-15-10" name="__codelineno-15-10"></a><span class="c1">#node = &quot;yanic-temp&quot;</span>
</span><span id="__span-15-11"><a id="__codelineno-15-11" name="__codelineno-15-11"></a><span class="c1">#dhcp = &quot;yanic-temp&quot;</span>
</span><span id="__span-15-12"><a id="__codelineno-15-12" name="__codelineno-15-12"></a><span class="n">global</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;yanic-persistent&quot;</span>
</span><span id="__span-15-13"><a id="__codelineno-15-13" name="__codelineno-15-13"></a><span class="c1">#firmware = &quot;yanic-temp&quot;</span>
</span><span id="__span-15-14"><a id="__codelineno-15-14" name="__codelineno-15-14"></a><span class="c1">#model = &quot;yanic-temp&quot;</span>
</span><span id="__span-15-15"><a id="__codelineno-15-15" name="__codelineno-15-15"></a><span class="c1">#autoupdater = &quot;yanic-temp&quot;</span>
</span><span id="__span-15-16"><a id="__codelineno-15-16" name="__codelineno-15-16"></a>
</span><span id="__span-15-17"><a id="__codelineno-15-17" name="__codelineno-15-17"></a><span class="c1"># Tagging of the data (optional)</span>
</span><span id="__span-15-18"><a id="__codelineno-15-18" name="__codelineno-15-18"></a><span class="k">[database.connection.influxdb2.tags]</span><span class="w"> </span><span class="c1"># (6)</span>
</span><span id="__span-15-19"><a id="__codelineno-15-19" name="__codelineno-15-19"></a><span class="c1"># Tags used by Yanic would override the tags from this config</span>
</span><span id="__span-15-20"><a id="__codelineno-15-20" name="__codelineno-15-20"></a><span class="c1"># nodeid, hostname, owner, model, firmware_base, firmware_release,frequency11g and frequency11a are tags which are already used</span>
</span><span id="__span-15-21"><a id="__codelineno-15-21" name="__codelineno-15-21"></a><span class="c1">#tagname1 = &quot;tagvalue 1&quot;</span>
</span><span id="__span-15-22"><a id="__codelineno-15-22" name="__codelineno-15-22"></a><span class="c1"># some useful e.g.:</span>
</span><span id="__span-15-23"><a id="__codelineno-15-23" name="__codelineno-15-23"></a><span class="c1">#system = &quot;productive&quot;</span>
</span><span id="__span-15-24"><a id="__codelineno-15-24" name="__codelineno-15-24"></a><span class="c1">#site = &quot;ffhb&quot;</span>
</span></code></pre></div></td></tr></table></div>
<ol>
<li>Address to connect to the InfluxDB2 server.</li>
<li>Token to get access to InfluxDB2 server.</li>
<li>
<p>Set organization using the InfluxDB2 server.</p>
</li>
<li>
<p>Bucket in which are the data stored.</p>
<p>Fallback of bucket per measurement, see <code>[database.connection.influxdb2.buckets]</code></p>
</li>
<li>
<p>Buckets per measurement.</p>
<p>If no buckets are set, the default bucket <code>bucket_default</code> is used.</p>
</li>
<li>
<p>You can set additional tags which are added to all data written into the influxdb.</p>
<p>Useful if you want to identify the yanic instance when you use multiple own on the same influxdb (e.g. multisites).</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Tags used by Yanic would override the tags from this config (e.g. <code>nodeid</code>, <code>hostname</code>, <code>owner</code>, <code>model</code>, <code>firmware_base</code>, <code>firmware_release</code>, <code>frequency11g</code>, <code>frequency11a</code>).</p>
</div>
</li>
</ol>
<h3 id="databaseconnectiongraphite">[[database.connection.graphite]]</h3>
<p>Save collected data to a graphite database.</p>
<div class="language-toml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-16-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-16-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-16-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-16-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-16-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-16-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-16-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-16-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-16-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-16-10">10</a></span>
<span class="normal"><a href="#__codelineno-16-11">11</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-16-1"><a id="__codelineno-16-1" name="__codelineno-16-1"></a><span class="c1"># Graphite settings</span>
</span><span id="__span-16-2"><a id="__codelineno-16-2" name="__codelineno-16-2"></a><span class="k">[database.connection.graphite]]</span>
</span><span id="__span-16-3"><a id="__codelineno-16-3" name="__codelineno-16-3"></a><span class="n">enable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span>
</span><span id="__span-16-4"><a id="__codelineno-16-4" name="__codelineno-16-4"></a><span class="n">address</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;localhost:2003&quot;</span><span class="w"> </span><span class="c1"># (1)</span>
</span><span id="__span-16-5"><a id="__codelineno-16-5" name="__codelineno-16-5"></a><span class="c1"># Graphite is replacing every &quot;.&quot; in the metric name with a slash &quot;/&quot; and uses</span>
</span><span id="__span-16-6"><a id="__codelineno-16-6" name="__codelineno-16-6"></a><span class="c1"># that for the file system hierarchy it generates. it is recommended to at least</span>
</span><span id="__span-16-7"><a id="__codelineno-16-7" name="__codelineno-16-7"></a><span class="c1"># move the metrics out of the root namespace (that would be the empty prefix).</span>
</span><span id="__span-16-8"><a id="__codelineno-16-8" name="__codelineno-16-8"></a><span class="c1"># If you only intend to run one community and only freifunk on your graphite node</span>
</span><span id="__span-16-9"><a id="__codelineno-16-9" name="__codelineno-16-9"></a><span class="c1"># then the prefix can be set to anything (including the empty string) since you</span>
</span><span id="__span-16-10"><a id="__codelineno-16-10" name="__codelineno-16-10"></a><span class="c1"># probably wont care much about &quot;polluting&quot; the namespace.</span>
</span><span id="__span-16-11"><a id="__codelineno-16-11" name="__codelineno-16-11"></a><span class="n">prefix</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;freifunk&quot;</span><span class="w"> </span><span class="c1"># (2)</span>
</span></code></pre></div></td></tr></table></div>
<ol>
<li>Address to connect on graphite server.</li>
<li>Graphite is replacing every "." in the metric name with a slash "/" and uses that for the file system hierarchy it generates.
It is recommended to at least move the metrics out of the root namespace (that would be the empty prefix).
If you only intend to run one community and only freifunk on your graphite node then the prefix can be set to anything (including the empty string) since you probably wont care much about "polluting" the namespace.</li>
</ol>
<h3 id="databaseconnectionrespondd">[[database.connection.respondd]]</h3>
<p>Forward collected respondd package to a address
(e.g. to another respondd collector like a central yanic instance or hopglass)</p>
<div class="language-toml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-17-1">1</a></span>
<span class="normal"><a href="#__codelineno-17-2">2</a></span>
<span class="normal"><a href="#__codelineno-17-3">3</a></span>
<span class="normal"><a href="#__codelineno-17-4">4</a></span>
<span class="normal"><a href="#__codelineno-17-5">5</a></span>
<span class="normal"><a href="#__codelineno-17-6">6</a></span>
<span class="normal"><a href="#__codelineno-17-7">7</a></span>
<span class="normal"><a href="#__codelineno-17-8">8</a></span>
<span class="normal"><a href="#__codelineno-17-9">9</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-17-1"><a id="__codelineno-17-1" name="__codelineno-17-1"></a><span class="c1"># respondd (yanic)</span>
</span><span id="__span-17-2"><a id="__codelineno-17-2" name="__codelineno-17-2"></a><span class="c1"># forward collected respondd package to a address</span>
</span><span id="__span-17-3"><a id="__codelineno-17-3" name="__codelineno-17-3"></a><span class="c1"># (e.g. to another respondd collector like a central yanic instance or hopglass)</span>
</span><span id="__span-17-4"><a id="__codelineno-17-4" name="__codelineno-17-4"></a><span class="k">[[database.connection.respondd]]</span>
</span><span id="__span-17-5"><a id="__codelineno-17-5" name="__codelineno-17-5"></a><span class="n">enable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span>
</span><span id="__span-17-6"><a id="__codelineno-17-6" name="__codelineno-17-6"></a><span class="c1"># type of network to create a connection</span>
</span><span id="__span-17-7"><a id="__codelineno-17-7" name="__codelineno-17-7"></a><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;udp6&quot;</span><span class="w"> </span><span class="c1"># (1)</span>
</span><span id="__span-17-8"><a id="__codelineno-17-8" name="__codelineno-17-8"></a><span class="c1"># destination address to connect/send respondd package</span>
</span><span id="__span-17-9"><a id="__codelineno-17-9" name="__codelineno-17-9"></a><span class="n">address</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;stats.bremen.freifunk.net:11001&quot;</span><span class="w"> </span><span class="c1"># (2)</span>
</span></code></pre></div></td></tr></table></div>
<ol>
<li>
<p>Type of network to create a connection.</p>
<p>Known networks are "tcp", "tcp4" (IPv4-only), "tcp6" (IPv6-only), "udp", "udp4" (IPv4-only), "udp6" (IPv6-only), "ip", "ip4" (IPv4-only), "ip6" (IPv6-only), "unix", "unixgram" and "unixpacket".</p>
</li>
<li>
<p>Destination address to connect/send respondd package.</p>
</li>
</ol>
<h3 id="databaseconnectionlogging">[[database.connection.logging]]</h3>
<p>This database type is just for, debugging without a real database connection.
A example for other developers for new database types.</p>
<div class="language-toml highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-18-1">1</a></span>
<span class="normal"><a href="#__codelineno-18-2">2</a></span>
<span class="normal"><a href="#__codelineno-18-3">3</a></span>
<span class="normal"><a href="#__codelineno-18-4">4</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="__span-18-1"><a id="__codelineno-18-1" name="__codelineno-18-1"></a><span class="c1"># Logging</span>
</span><span id="__span-18-2"><a id="__codelineno-18-2" name="__codelineno-18-2"></a><span class="k">[[database.connection.logging]]</span>
</span><span id="__span-18-3"><a id="__codelineno-18-3" name="__codelineno-18-3"></a><span class="n">enable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span>
</span><span id="__span-18-4"><a id="__codelineno-18-4" name="__codelineno-18-4"></a><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;/var/log/yanic.log&quot;</span><span class="w"> </span><span class="c1"># (1)</span>
</span></code></pre></div></td></tr></table></div>
<ol>
<li>Path to file where to store some examples with every line.</li>
</ol>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.instant", "navigation.tracking", "navigation.tabs", "navigation.tabs.sticky", "navigation.sections", "toc.integrate", "toc.follow", "content.action.edit", "search.suggest", "search.highlight", "search.share", "content.code.copy", "content.code.annotate"], "search": "../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../assets/javascripts/bundle.fe8b6f2b.min.js"></script>
</body>
</html>