mirror of
https://github.com/MeshCore-Beacon/beacon-server.git
synced 2026-08-30 07:38:20 +00:00
* fix: cascade channel_messages on packet delete * rebuild known_routes keyed on (iata, path_key) * add route retention delete, batch reconfirm, path_key upsert * compute route path_key in store, add DeleteOldRoutes * add routes retention config * wire route retention into cleanup, batch reconfirm * prune routes in reconfirm task, not cleanup * expand routes retention docs in example config
155 lines
5.3 KiB
Plaintext
155 lines
5.3 KiB
Plaintext
# Beacon configuration file
|
|
# Copy to config.yaml and adjust as needed.
|
|
|
|
iatas:
|
|
YVR:
|
|
name: Vancouver International
|
|
lat: 49.1967
|
|
lng: -123.1815
|
|
# borderFile: borders/yvr.geojson # optional GeoJSON Feature (Polygon/MultiPolygon)
|
|
# # for the region border map; path is relative to
|
|
# # this file's directory; validated at boot.
|
|
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
|
|
|
|
# Known-route retention. Routes are distilled packet history (the path a packet
|
|
# took, hop by hop), so they may outlive packets.retention; there is no required
|
|
# relationship between the two.
|
|
routes:
|
|
# How long a route is kept after it was last observed. Every new observation
|
|
# of the same path resets this clock, so routes the mesh still uses never
|
|
# expire -- only paths nothing has traveled for this long age out.
|
|
retention: 336h # 14 days
|
|
# Shorter window for rarely-seen routes: one observed fewer than
|
|
# min_observations times in total is dropped once it goes unobserved for
|
|
# this long. Must be shorter than retention, or it never applies.
|
|
grace: 168h # 7 days
|
|
# Lifetime observation count a route must reach to earn the full retention
|
|
# window. Below it a route is treated as flood noise -- a path recorded once
|
|
# or twice and never confirmed -- and only kept for the grace window. The
|
|
# count never resets, so once a route crosses this bar it stays in the
|
|
# retention tier for good.
|
|
min_observations: 3
|
|
|
|
websocket:
|
|
max_connections_per_ip: 5 # default: 5
|
|
|
|
# Node staleness, deletion, and clock-drift thresholds.
|
|
#nodes:
|
|
# stale_threshold: 24h # default: 24h
|
|
# delete_after: 720h # default: 30 days, same default as packets.retention
|
|
# clock_drift_threshold: 5m # default: 5m
|
|
|
|
# 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
|
|
# reconfirm: 1h # default: 1h
|
|
# cleanup: 1h # default: 1h
|