Files
beacon-server/config.yaml.example
T
Enot (ded) Skelly 044aecbd3c feat: background task scheduler
move refresh views and delete tasks to scheduler
add new config for refresh and cleanup intervals

new deployments can set these in minutes to see data faster
2026-06-12 10:28:32 -07:00

126 lines
3.8 KiB
Plaintext

# Beacon configuration file
# Copy to config.yaml and adjust as needed.
iatas:
YVR:
name: Vancouver International
lat: 49.1967
lng: -123.1815
YYJ:
name: Victoria International
lat: 48.6469
lng: -123.4260
YYC:
name: Calgary International
lat: 51.1139
lng: -114.0200
YEG:
name: Edmonton International
lat: 53.3097
lng: -113.5797
YOW:
name: Ottawa International
lat: 45.3225
lng: -75.6692
YYZ:
name: Toronto Pearson
lat: 43.6777
lng: -79.6248
regions:
- slug: western-canada
name: Western Canada
display_order: 1
center_lat: 51.0
center_lng: -114.0
zoom_level: 5
iatas: [YVR, YYJ, YYC, YEG]
- slug: eastern-canada
name: Eastern Canada
display_order: 2
center_lat: 45.0
center_lng: -75.0
zoom_level: 5
iatas: [YOW, YYZ]
channel_keys:
# Hashtag channels: Beacon derives the PSK automatically from the tag name.
# secret = SHA256("#tag")[:16], channel_hash = SHA256(secret)[0]
# Hashtag names should be provided without the # prefix.
# Beacon prepends # automatically before deriving the key.
hashtags:
- meshcore
# Explicit keys: provide the channel hash (hex) and key (hex) directly.
# An optional name can be set for display purposes.
keys:
"11":
key: "8b3387e9c5cdea6ac9e5edbaa115cd72"
name: "Public"
# Regional transport scopes for matching TRANSPORT_FLOOD packets.
# Plain names have # prepended automatically (e.g. "bc" → "#bc").
scopes:
- name: bc
- name: "#west"
telemetry:
retention: 672h # 4 weeks
resolution: 1h # store one snapshot per observer per hour
packets:
retention: 720h # 30 days
websocket:
max_connections_per_ip: 5 # default: 5
# CORS configuration.
# Controls which origins, methods and headers are allowed for cross-origin requests.
# Defaults to allowing all origins with GET/HEAD/OPTIONS if omitted — appropriate
# for a public read-only API. Restrict allowed_origins if you expose write endpoints.
#cors:
# allowed_origins:
# - "https://app.example.com"
# allowed_methods: [GET, HEAD, OPTIONS, POST]
# allowed_headers: [Accept, Authorization, Content-Type]
# allow_credentials: false
# max_age: 300
# Redis caching layer.
# If REDIS_ADDR is not set, caching is disabled and all reads go directly to PostgreSQL.
# TTLs are specified as duration strings e.g. "30m", "1h", "2h".
# Per-category TTLs override the global ttl. Any category left unset inherits ttl.
cache:
# Global default TTL for all cached responses. Defaults to 1h if not set.
ttl: "1h"
ttls:
# Aggregated stats endpoints (overview, observations, breakdowns, top nodes/observers,
# radio presets, scope stats). Backed by materialized views refreshed hourly.
stats: "1h"
# Mostly-static reference data (IATAs, regions, scopes).
# Only changes when new observers arrive or config is reseeded.
reference: "1h"
# Individual node detail. Also explicitly invalidated on upsert.
nodes: "1h"
# Individual observer detail. Also explicitly invalidated on upsert.
observers: "1h"
# Geographic ingest filter (optional).
# Drop packets from observers outside the specified area at ingest time.
# Country codes are ISO 3166-1 alpha-2 (e.g. CA, US, GB).
# Continent codes: AF (Africa), AN (Antarctica), AS (Asia),
# EU (Europe), NA (North America), OC (Oceania), SA (South America).
# If both are set an IATA passes if it matches either (OR semantics).
# Omit this section entirely to accept packets from all IATAs (default).
#ingest:
# allow_countries: [CA, US]
# allow_continents: [NA]
# Background task intervals.
# Shorter intervals are useful during initial deployment to confirm data is
# flowing. Back off to 1h or more once stable.
#background:
# view_refresh: 1h # default: 1h
# cleanup: 1h # default: 1h