From fb9ab83a69e438622b16751742bbb575b30234f6 Mon Sep 17 00:00:00 2001 From: Shantanu Mane Date: Tue, 28 Jul 2026 21:58:31 +0530 Subject: [PATCH 01/14] feat(ota): repartition flash for dual ota_0/ota_1 slots --- .gitignore | 1 + partitions.csv | 20 ++++++++++++-------- sdkconfig.defaults | 18 ++++++++++++++++++ 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 9d4e3c2..62a3c68 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ main/wifi_credentials.h main/admin_credentials.h +secure_boot_signing_key.pem build/ managed_components/ diff --git a/partitions.csv b/partitions.csv index 6dd35b4..4c90b11 100644 --- a/partitions.csv +++ b/partitions.csv @@ -1,10 +1,14 @@ -# Name, Type, SubType, Offset, Size, Flags +# Name, Type, SubType, Offset, Size, Flags # Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap # -# Custom table (16MB flash): default IDF single-app table (24K nvs, 1M app) -# was sized for small flash chips and left the app partition at 98% full -# after Phase 2 (ad-block). Sized generously here so Phases 3/4 don't repeat -# this — see docs/superpowers/specs/2026-07-21-edge-dns-phase2-adblock-design.md. -nvs, data, nvs, 0x9000, 0x10000, -phy_init, data, phy, , 0x1000, -factory, app, factory, , 0x400000, +# Dual OTA slots (Phase 7a) replace the single "factory" partition — see +# ARCHITECTURE.md's OTA section. otadata tracks which slot is active/ +# pending-verify; coredump is reserved for Phase 7c's crash-dump capture. +# Repartitioning wipes NVS: `idf.py erase-flash` is required after this +# change, which also wipes the record store and blocklist (see README). +nvs, data, nvs, 0x9000, 0x10000, +otadata, data, ota, , 0x2000, +phy_init, data, phy, , 0x1000, +coredump, data, coredump, , 0x10000, +ota_0, app, ota_0, , 0x400000, +ota_1, app, ota_1, , 0x400000, diff --git a/sdkconfig.defaults b/sdkconfig.defaults index dbaa85a..fd997b8 100644 --- a/sdkconfig.defaults +++ b/sdkconfig.defaults @@ -23,3 +23,21 @@ CONFIG_SPIRAM_IGNORE_NOTFOUND=y # httpd_start() abort/reboot loop the first time this shipped. Set with # real headroom, not just "old total + 2", since the cost is negligible. CONFIG_LWIP_MAX_SOCKETS=16 + +# Phase 7a: dual ota_0/ota_1 slots (see partitions.csv) + bootloader +# rollback support — a slot that fails its post-update health check +# reverts to the previous slot on next reset instead of bricking. +CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE=y + +# App-image signature check without full Secure Boot v2 — deliberately +# NOT enabling secure boot itself (burns eFuses irreversibly, ends +# iteration on this dev board; see ARCHITECTURE.md non-goals). This is a +# software-only signature check the bootloader runs on OTA update, using +# a key that isn't burned into hardware. +CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT=y +CONFIG_SECURE_SIGNED_ON_UPDATE_NO_SECURE_BOOT=y +CONFIG_SECURE_BOOT_SIGNING_KEY="secure_boot_signing_key.pem" + +# GitHub's API and release-asset CDN are both signed by public CAs already +# in ESP-IDF's bundled root store — no custom CA needed for OTA fetches. +CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y From ce6ba1989eddcaf3e47399f18e09760f9b86c896 Mon Sep 17 00:00:00 2001 From: Shantanu Mane Date: Tue, 28 Jul 2026 22:03:10 +0530 Subject: [PATCH 02/14] feat(ota): add pure semver comparator with host tests --- host_test/main/CMakeLists.txt | 3 +- host_test/main/test_dns_wire.cpp | 34 +++++++++++ host_test/main/test_ota_version.cpp | 88 +++++++++++++++++++++++++++++ main/CMakeLists.txt | 2 +- main/ota_version.cpp | 73 ++++++++++++++++++++++++ main/ota_version.h | 27 +++++++++ 6 files changed, 225 insertions(+), 2 deletions(-) create mode 100644 host_test/main/test_ota_version.cpp create mode 100644 main/ota_version.cpp create mode 100644 main/ota_version.h diff --git a/host_test/main/CMakeLists.txt b/host_test/main/CMakeLists.txt index f655291..e12f852 100644 --- a/host_test/main/CMakeLists.txt +++ b/host_test/main/CMakeLists.txt @@ -1,6 +1,7 @@ # dns_wire.cpp is pulled in directly from the firmware's main/ component # (not linked as a library) so this test always exercises the exact same # source that ships — see the header comment on ../CMakeLists.txt. -idf_component_register(SRCS "test_dns_wire.cpp" "../../main/dns_wire.cpp" +idf_component_register(SRCS "test_dns_wire.cpp" "test_ota_version.cpp" + "../../main/dns_wire.cpp" "../../main/ota_version.cpp" INCLUDE_DIRS "." "../../main" REQUIRES unity) diff --git a/host_test/main/test_dns_wire.cpp b/host_test/main/test_dns_wire.cpp index a63cd59..e8a6e23 100644 --- a/host_test/main/test_dns_wire.cpp +++ b/host_test/main/test_dns_wire.cpp @@ -11,8 +11,26 @@ #include #include "dns_wire.h" +#include "ota_version.h" #include "unity.h" +// test_ota_version.cpp's tests (Phase 7a) — plain (non-anonymous-namespace) +// functions there so they're callable here; this file owns the single +// merged app_main (see below), so its RUN_TEST calls need these declared. +void test_parse_valid_with_v_prefix(); +void test_parse_valid_without_v_prefix(); +void test_parse_tolerates_git_describe_suffix(); +void test_parse_rejects_empty(); +void test_parse_rejects_garbage(); +void test_parse_rejects_missing_minor(); +void test_is_newer_minor_bump(); +void test_is_newer_false_when_older(); +void test_is_newer_false_when_equal(); +void test_is_newer_patch_bump(); +void test_is_newer_major_beats_minor_and_patch(); +void test_is_newer_false_on_unparseable_remote(); +void test_is_newer_false_on_unparseable_current(); + namespace { // Encodes a dotted name ("test.loc") as length-prefixed labels terminated @@ -380,6 +398,22 @@ extern "C" void app_main(void) { UNITY_BEGIN(); unity_run_all_tests(); + // ota_version tests use plain RUN_TEST rather than TEST_CASE + // auto-registration (see test_ota_version.cpp), so they run here + // explicitly rather than via unity_run_all_tests() above. + RUN_TEST(test_parse_valid_with_v_prefix); + RUN_TEST(test_parse_valid_without_v_prefix); + RUN_TEST(test_parse_tolerates_git_describe_suffix); + RUN_TEST(test_parse_rejects_empty); + RUN_TEST(test_parse_rejects_garbage); + RUN_TEST(test_parse_rejects_missing_minor); + RUN_TEST(test_is_newer_minor_bump); + RUN_TEST(test_is_newer_false_when_older); + RUN_TEST(test_is_newer_false_when_equal); + RUN_TEST(test_is_newer_patch_bump); + RUN_TEST(test_is_newer_major_beats_minor_and_patch); + RUN_TEST(test_is_newer_false_on_unparseable_remote); + RUN_TEST(test_is_newer_false_on_unparseable_current); // ESP-IDF's linux-target port starts the FreeRTOS scheduler before // calling app_main and never tears it down when app_main returns — // the process would otherwise hang forever after printing results. diff --git a/host_test/main/test_ota_version.cpp b/host_test/main/test_ota_version.cpp new file mode 100644 index 0000000..a60ee13 --- /dev/null +++ b/host_test/main/test_ota_version.cpp @@ -0,0 +1,88 @@ +// Host-side unit tests for main/ota_version.h/.cpp (Phase 7a) — same +// no-FreeRTOS-dependency, linux-target pattern as test_dns_wire.cpp: +// +// idf.py --preview set-target linux -C host_test build +// ./host_test/build/host_test.elf + +#include "ota_version.h" +#include "unity.h" + +// Not in an anonymous namespace, unlike test_dns_wire.cpp's helpers: these +// need external linkage so test_dns_wire.cpp's app_main (the single merged +// Unity entry point — see its file comment) can RUN_TEST() them via the +// forward declarations there. + +void test_parse_valid_with_v_prefix() +{ + auto v = ota_version_parse("v1.2.3"); + TEST_ASSERT_TRUE(v.has_value()); + TEST_ASSERT_EQUAL_UINT(1, v->major); + TEST_ASSERT_EQUAL_UINT(2, v->minor); + TEST_ASSERT_EQUAL_UINT(3, v->patch); +} + +void test_parse_valid_without_v_prefix() +{ + auto v = ota_version_parse("0.6.0"); + TEST_ASSERT_TRUE(v.has_value()); + TEST_ASSERT_EQUAL_UINT(0, v->major); + TEST_ASSERT_EQUAL_UINT(6, v->minor); + TEST_ASSERT_EQUAL_UINT(0, v->patch); +} + +void test_parse_tolerates_git_describe_suffix() +{ + auto v = ota_version_parse("v0.6.0-3-gabc1234-dirty"); + TEST_ASSERT_TRUE(v.has_value()); + TEST_ASSERT_EQUAL_UINT(0, v->patch); +} + +void test_parse_rejects_empty() +{ + TEST_ASSERT_FALSE(ota_version_parse("").has_value()); +} + +void test_parse_rejects_garbage() +{ + TEST_ASSERT_FALSE(ota_version_parse("notaversion").has_value()); +} + +void test_parse_rejects_missing_minor() +{ + TEST_ASSERT_FALSE(ota_version_parse("v1").has_value()); +} + +void test_is_newer_minor_bump() +{ + TEST_ASSERT_TRUE(ota_version_is_newer("v0.6.0", "v0.7.0")); +} + +void test_is_newer_false_when_older() +{ + TEST_ASSERT_FALSE(ota_version_is_newer("v0.7.0", "v0.6.0")); +} + +void test_is_newer_false_when_equal() +{ + TEST_ASSERT_FALSE(ota_version_is_newer("v0.6.0", "v0.6.0")); +} + +void test_is_newer_patch_bump() +{ + TEST_ASSERT_TRUE(ota_version_is_newer("v0.6.0", "v0.6.1")); +} + +void test_is_newer_major_beats_minor_and_patch() +{ + TEST_ASSERT_TRUE(ota_version_is_newer("v0.9.9", "v1.0.0")); +} + +void test_is_newer_false_on_unparseable_remote() +{ + TEST_ASSERT_FALSE(ota_version_is_newer("v0.6.0", "garbage")); +} + +void test_is_newer_false_on_unparseable_current() +{ + TEST_ASSERT_FALSE(ota_version_is_newer("garbage", "v1.0.0")); +} diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 9c58acc..7b5fbd6 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -4,7 +4,7 @@ idf_component_register(SRCS "main.cpp" "wifi_connect.cpp" "dns_server.cpp" "dns_wire.cpp" "dns_cache.cpp" "dns_forwarder.cpp" "dns_blocklist.cpp" "dns_metrics.cpp" "dns_record_store.cpp" "http_server.cpp" - "mdns_responder.cpp" + "mdns_responder.cpp" "ota_version.cpp" INCLUDE_DIRS "." REQUIRES esp_wifi esp_netif esp_event nvs_flash lwip esp_http_server json esp_psram esp_timer mdns mbedtls) diff --git a/main/ota_version.cpp b/main/ota_version.cpp new file mode 100644 index 0000000..c8c63da --- /dev/null +++ b/main/ota_version.cpp @@ -0,0 +1,73 @@ +#include "ota_version.h" + +#include + +namespace { + +// Parses a run of ASCII digits starting at `pos`, advancing `pos` past +// them. Returns nullopt if there isn't at least one digit at `pos`. +std::optional parse_uint_component(const std::string &s, size_t &pos) +{ + if (pos >= s.size() || !std::isdigit(static_cast(s[pos]))) { + return std::nullopt; + } + unsigned value = 0; + while (pos < s.size() && std::isdigit(static_cast(s[pos]))) { + value = value * 10 + static_cast(s[pos] - '0'); + ++pos; + } + return value; +} + +} // namespace + +std::optional ota_version_parse(const std::string &text) +{ + size_t pos = 0; + if (pos < text.size() && (text[pos] == 'v' || text[pos] == 'V')) { + ++pos; + } + + auto major = parse_uint_component(text, pos); + if (!major || pos >= text.size() || text[pos] != '.') { + return std::nullopt; + } + ++pos; + + auto minor = parse_uint_component(text, pos); + if (!minor) { + return std::nullopt; + } + + // Patch is optional-but-expected: "1.2" with no patch component at all + // is treated as patch=0 rather than rejected, since a missing patch + // number is still an unambiguous version. A "." with no digits after + // it (e.g. "1.2.") is rejected as malformed. + unsigned patch = 0; + if (pos < text.size() && text[pos] == '.') { + ++pos; + auto parsed_patch = parse_uint_component(text, pos); + if (!parsed_patch) { + return std::nullopt; + } + patch = *parsed_patch; + } + + return OtaVersion{*major, *minor, patch}; +} + +bool ota_version_is_newer(const std::string ¤t, const std::string &remote) +{ + auto cur = ota_version_parse(current); + auto rem = ota_version_parse(remote); + if (!cur || !rem) { + return false; + } + if (rem->major != cur->major) { + return rem->major > cur->major; + } + if (rem->minor != cur->minor) { + return rem->minor > cur->minor; + } + return rem->patch > cur->patch; +} diff --git a/main/ota_version.h b/main/ota_version.h new file mode 100644 index 0000000..2130472 --- /dev/null +++ b/main/ota_version.h @@ -0,0 +1,27 @@ +#pragma once + +#include +#include + +// Parsed "MAJOR.MINOR.PATCH" — a leading 'v'/'V' is stripped by +// ota_version_parse(), matching this repo's `git tag v0.6.0` convention +// (see .github/workflows/ci.yml's release job and esp_app_get_description() +// via PROJECT_VER, which git-describe derives from the same tags). +struct OtaVersion { + unsigned major = 0; + unsigned minor = 0; + unsigned patch = 0; +}; + +// Strict on major/minor, tolerant on patch: a trailing non-digit suffix +// (e.g. the "-3-gabc1234-dirty" git-describe appends between exact tags) +// is ignored once the leading digits of patch are consumed. Returns +// nullopt for anything that isn't at least "N.N" with digit prefixes, +// e.g. "" or "notaversion". +std::optional ota_version_parse(const std::string &text); + +// True only if `remote` parses AND is strictly greater than `current` +// under lexicographic (major, minor, patch) comparison. Fails closed: +// if either side doesn't parse, returns false — never OTA onto something +// this comparator couldn't understand. +bool ota_version_is_newer(const std::string ¤t, const std::string &remote); From 1947f56b8e623dff3be8b2a515848ebfb7c703a3 Mon Sep 17 00:00:00 2001 From: Shantanu Mane Date: Tue, 28 Jul 2026 22:14:08 +0530 Subject: [PATCH 03/14] feat(ota): add health-gated rollback and GitHub-release check/download --- main/CMakeLists.txt | 5 +- main/main.cpp | 2 + main/ota_updater.cpp | 252 +++++++++++++++++++++++++++++++++++++++++++ main/ota_updater.h | 35 ++++++ 4 files changed, 292 insertions(+), 2 deletions(-) create mode 100644 main/ota_updater.cpp create mode 100644 main/ota_updater.h diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 7b5fbd6..b5356fe 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -4,7 +4,8 @@ idf_component_register(SRCS "main.cpp" "wifi_connect.cpp" "dns_server.cpp" "dns_wire.cpp" "dns_cache.cpp" "dns_forwarder.cpp" "dns_blocklist.cpp" "dns_metrics.cpp" "dns_record_store.cpp" "http_server.cpp" - "mdns_responder.cpp" "ota_version.cpp" + "mdns_responder.cpp" "ota_version.cpp" "ota_updater.cpp" INCLUDE_DIRS "." REQUIRES esp_wifi esp_netif esp_event nvs_flash lwip esp_http_server json - esp_psram esp_timer mdns mbedtls) + esp_psram esp_timer mdns mbedtls app_update esp_https_ota + esp_http_client) diff --git a/main/main.cpp b/main/main.cpp index ea5e4e3..dbd1e4b 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -3,6 +3,7 @@ #include "esp_psram.h" #include "http_server.h" #include "mdns_responder.h" +#include "ota_updater.h" #include "wifi_connect.h" namespace { @@ -29,4 +30,5 @@ extern "C" void app_main(void) dns_server_start(); http_server_start(); mdns_responder_start(); + ota_updater_start(); } diff --git a/main/ota_updater.cpp b/main/ota_updater.cpp new file mode 100644 index 0000000..69ee503 --- /dev/null +++ b/main/ota_updater.cpp @@ -0,0 +1,252 @@ +#include "ota_updater.h" + +#include +#include + +#include "cJSON.h" +#include "dns_metrics.h" +#include "esp_app_desc.h" +#include "esp_crt_bundle.h" +#include "esp_http_client.h" +#include "esp_https_ota.h" +#include "esp_log.h" +#include "esp_ota_ops.h" +#include "esp_timer.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "ota_version.h" + +namespace { + +constexpr const char *TAG = "ota_updater"; + +// GitHub requires a User-Agent on every API request or it 403s — the repo +// name doubles as a plausible one. No auth token: this hits the +// unauthenticated rate limit (60 req/hr per IP), which a device checking +// every few hours never approaches. +constexpr const char *GITHUB_RELEASES_URL = + "https://api.github.com/repos/RndmCodeGuy20/mini_dns/releases/latest"; +constexpr const char *USER_AGENT = "mini_dns-ota-updater"; + +// A slot must survive this long, with Wi-Fi already up (guaranteed by +// boot order — see ota_updater.h) and at least one DNS query actually +// answered, before it's trusted enough to cancel rollback. Long enough to +// rule out a crash-loop that only manifests once traffic arrives; short +// enough that a healthy device doesn't sit "pending verify" for long. +constexpr int64_t HEALTH_GATE_MIN_UPTIME_US = 30LL * 1000 * 1000; + +// Response bodies from the GitHub API are capped here — generous headroom +// for a release with a handful of asset entries (tag_name appears near +// the top of the JSON regardless), not a real capacity need. +// ponytail: fixed cap, not a streaming JSON parser — raise this or switch +// to a streaming parse if a release ever grows enough assets to truncate +// the mini_dns.bin asset entry out of the buffer. +constexpr size_t MAX_RESPONSE_BYTES = 16384; + +std::atomic s_valid_marked{false}; +std::atomic s_check_requested{false}; +std::atomic s_check_in_progress{false}; + +// Written only by the background task; read via ota_updater_last_check(). +// A single mutex-free struct copy is acceptable here for the same reason +// DnsMetricsSnapshot's per-field reads are (see dns_metrics.h) — this is a +// low-frequency status readout, not a hot path, and a torn read at worst +// shows a status one field out of date for one HTTP request. +OtaCheckStatus s_last_check; + +struct HttpResponseBuffer { + std::string data; +}; + +esp_err_t http_event_handler(esp_http_client_event_t *evt) +{ + if (evt->event_id == HTTP_EVENT_ON_DATA) { + auto *buf = static_cast(evt->user_data); + if (buf->data.size() + evt->data_len <= MAX_RESPONSE_BYTES) { + buf->data.append(static_cast(evt->data), + static_cast(evt->data_len)); + } + } + return ESP_OK; +} + +// Fetches and parses GitHub's "latest release" JSON, extracting tag_name +// and the mini_dns.bin asset's download URL. Returns false with +// out_error set on any failure (network, HTTP status, JSON shape). +bool fetch_latest_release(std::string &out_tag, std::string &out_asset_url, + std::string &out_error) +{ + HttpResponseBuffer response; + esp_http_client_config_t config = {}; + config.url = GITHUB_RELEASES_URL; + config.event_handler = http_event_handler; + config.user_data = &response; + config.crt_bundle_attach = esp_crt_bundle_attach; + config.timeout_ms = 10000; + + esp_http_client_handle_t client = esp_http_client_init(&config); + esp_http_client_set_header(client, "User-Agent", USER_AGENT); + esp_http_client_set_header(client, "Accept", "application/vnd.github+json"); + + esp_err_t err = esp_http_client_perform(client); + int status = esp_http_client_get_status_code(client); + esp_http_client_cleanup(client); + + if (err != ESP_OK) { + out_error = std::string("http request failed: ") + esp_err_to_name(err); + return false; + } + if (status != 200) { + out_error = "GitHub API returned HTTP " + std::to_string(status); + return false; + } + + cJSON *root = cJSON_ParseWithLength(response.data.c_str(), response.data.size()); + if (root == nullptr) { + out_error = "failed to parse release JSON"; + return false; + } + + cJSON *tag_item = cJSON_GetObjectItemCaseSensitive(root, "tag_name"); + if (!cJSON_IsString(tag_item)) { + cJSON_Delete(root); + out_error = "release JSON missing tag_name"; + return false; + } + out_tag = tag_item->valuestring; + + cJSON *assets = cJSON_GetObjectItemCaseSensitive(root, "assets"); + cJSON *asset = nullptr; + cJSON_ArrayForEach(asset, assets) + { + cJSON *name_item = cJSON_GetObjectItemCaseSensitive(asset, "name"); + if (cJSON_IsString(name_item) && std::strcmp(name_item->valuestring, "mini_dns.bin") == 0) { + cJSON *url_item = cJSON_GetObjectItemCaseSensitive(asset, "browser_download_url"); + if (cJSON_IsString(url_item)) { + out_asset_url = url_item->valuestring; + } + break; + } + } + cJSON_Delete(root); + + if (out_asset_url.empty()) { + out_error = "release has no mini_dns.bin asset"; + return false; + } + return true; +} + +// Runs one full check-and-maybe-update cycle, updating s_last_check. +void run_check_cycle() +{ + s_check_in_progress = true; + OtaCheckStatus status; + status.checked = true; + + std::string tag, asset_url, error; + if (!fetch_latest_release(tag, asset_url, error)) { + status.last_error = error; + s_last_check = status; + s_check_in_progress = false; + ESP_LOGW(TAG, "release check failed: %s", error.c_str()); + return; + } + + status.latest_version = tag; + const std::string current_version = esp_app_get_description()->version; + status.update_available = ota_version_is_newer(current_version, tag); + + if (!status.update_available) { + ESP_LOGI(TAG, "running %s, latest is %s — no update", current_version.c_str(), + tag.c_str()); + s_last_check = status; + s_check_in_progress = false; + return; + } + + ESP_LOGI(TAG, "update available: %s -> %s, downloading from %s", current_version.c_str(), + tag.c_str(), asset_url.c_str()); + + esp_http_client_config_t http_config = {}; + http_config.url = asset_url.c_str(); + http_config.crt_bundle_attach = esp_crt_bundle_attach; + http_config.timeout_ms = 30000; + http_config.keep_alive_enable = true; + + esp_https_ota_config_t ota_config = {}; + ota_config.http_config = &http_config; + + esp_err_t err = esp_https_ota(&ota_config); + if (err == ESP_OK) { + ESP_LOGI(TAG, "OTA succeeded, rebooting into %s", tag.c_str()); + s_last_check = status; + s_check_in_progress = false; + esp_restart(); + } + + status.last_error = std::string("esp_https_ota failed: ") + esp_err_to_name(err); + ESP_LOGE(TAG, "%s", status.last_error.c_str()); + s_last_check = status; + s_check_in_progress = false; +} + +void ota_task(void *) +{ + const int64_t boot_time_us = esp_timer_get_time(); + bool health_gate_passed = false; + + while (true) { + if (!health_gate_passed) { + int64_t uptime_us = esp_timer_get_time() - boot_time_us; + if (uptime_us >= HEALTH_GATE_MIN_UPTIME_US && metrics().snapshot().queries >= 1) { + esp_err_t err = esp_ota_mark_app_valid_cancel_rollback(); + if (err == ESP_OK) { + s_valid_marked = true; + health_gate_passed = true; + ESP_LOGI(TAG, "health gate passed, cancelled rollback"); + } else { + ESP_LOGE(TAG, "esp_ota_mark_app_valid_cancel_rollback failed: %s", + esp_err_to_name(err)); + } + } + } + + if (s_check_requested.exchange(false)) { + run_check_cycle(); + } + + vTaskDelay(pdMS_TO_TICKS(5000)); + } +} + +} // namespace + +void ota_updater_start() +{ + xTaskCreate(ota_task, "ota_updater", 8192, nullptr, tskIDLE_PRIORITY + 1, nullptr); +} + +OtaHealthState ota_updater_health_state() +{ + return s_valid_marked ? OtaHealthState::kValid : OtaHealthState::kPendingVerify; +} + +OtaCheckStatus ota_updater_last_check() +{ + // in_progress lives in its own atomic (s_check_in_progress), not inside + // s_last_check, since it changes independently of a completed check's + // result — stitched in here rather than stored redundantly in two places. + OtaCheckStatus status = s_last_check; + status.in_progress = s_check_in_progress; + return status; +} + +bool ota_updater_request_check() +{ + if (s_check_in_progress) { + return false; + } + s_check_requested = true; + return true; +} diff --git a/main/ota_updater.h b/main/ota_updater.h new file mode 100644 index 0000000..bf8896d --- /dev/null +++ b/main/ota_updater.h @@ -0,0 +1,35 @@ +#pragma once + +#include + +// Background OTA task (Phase 7a): gates marking the running app image +// valid behind a real health check instead of doing it unconditionally at +// boot, and checks GitHub Releases for a newer tagged version — see +// ARCHITECTURE.md's OTA section for the rollback rationale. +// +// Call once from app_main(), after dns_server_start() (the health gate +// reads metrics().snapshot().queries, which is only meaningful once the +// DNS task is running) and http_server_start() (so /api/ota can report +// status immediately). +void ota_updater_start(); + +enum class OtaHealthState { + kPendingVerify, // running image not yet marked valid; a reset now rolls back + kValid, // marked valid via esp_ota_mark_app_valid_cancel_rollback() +}; +OtaHealthState ota_updater_health_state(); + +struct OtaCheckStatus { + bool checked = false; // false until the first check cycle has run + bool in_progress = false; // a check-and-update cycle is currently running + bool update_available = false; + std::string latest_version; // empty until checked = true + std::string last_error; // empty on success +}; +OtaCheckStatus ota_updater_last_check(); + +// Auth-gated HTTP trigger (POST /api/ota/check in http_server.cpp): asks +// the background task to run a check-and-update cycle now rather than +// waiting for its periodic interval. Returns false (no-op) if a cycle is +// already in progress — the caller should report 409 Conflict. +bool ota_updater_request_check(); From 8c4d1aa947c60d4435bdd039ff44b6cbd40c5fb1 Mon Sep 17 00:00:00 2001 From: Shantanu Mane Date: Tue, 28 Jul 2026 22:17:36 +0530 Subject: [PATCH 04/14] feat(ota): add GET /api/ota and POST /api/ota/check routes --- main/http_server.cpp | 75 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) diff --git a/main/http_server.cpp b/main/http_server.cpp index 1c31625..4eb002c 100644 --- a/main/http_server.cpp +++ b/main/http_server.cpp @@ -14,11 +14,13 @@ #include "dns_forwarder.h" #include "dns_metrics.h" #include "dns_record_store.h" +#include "esp_app_desc.h" #include "esp_http_server.h" #include "esp_log.h" #include "lwip/inet.h" #include "lwip/sockets.h" #include "mbedtls/base64.h" +#include "ota_updater.h" namespace { @@ -642,6 +644,75 @@ constexpr httpd_uri_t METRICS_URI = { .user_ctx = nullptr, }; +esp_err_t ota_get_handler(httpd_req_t *req) +{ + cJSON *root = cJSON_CreateObject(); + if (root == nullptr) { + ESP_LOGE(TAG, "Failed to allocate JSON object"); + return httpd_resp_send_500(req); + } + + cJSON_AddStringToObject(root, "running_version", esp_app_get_description()->version); + cJSON_AddStringToObject(root, "health_state", + ota_updater_health_state() == OtaHealthState::kValid + ? "valid" + : "pending_verify"); + + OtaCheckStatus status = ota_updater_last_check(); + cJSON_AddBoolToObject(root, "checked", status.checked); + cJSON_AddBoolToObject(root, "check_in_progress", status.in_progress); + cJSON_AddBoolToObject(root, "update_available", status.update_available); + cJSON_AddStringToObject(root, "latest_version", status.latest_version.c_str()); + cJSON_AddStringToObject(root, "last_error", status.last_error.c_str()); + + char *json_str = cJSON_PrintUnformatted(root); + if (json_str == nullptr) { + ESP_LOGE(TAG, "Failed to serialize JSON"); + cJSON_Delete(root); + return httpd_resp_send_500(req); + } + + httpd_resp_set_type(req, "application/json"); + esp_err_t ret = httpd_resp_send(req, json_str, HTTPD_RESP_USE_STRLEN); + + cJSON_free(json_str); + cJSON_Delete(root); + return ret; +} + +constexpr httpd_uri_t OTA_GET_URI = { + .uri = "/api/ota", + .method = HTTP_GET, + .handler = ota_get_handler, + .user_ctx = nullptr, +}; + +// Auth-gated like the /api/records mutating routes (check_auth, +// http_server.cpp:192) — an unauthenticated caller shouldn't be able to +// trigger a multi-MB download and reboot cycle. +esp_err_t ota_check_post_handler(httpd_req_t *req) +{ + if (!check_auth(req)) { + return ESP_OK; + } + if (!ota_updater_request_check()) { + // No HTTPD_409_CONFLICT in this esp_http_server version's status enum + // (only through 431) — set the status line directly, same pattern as + // check_auth()'s 401 above. + httpd_resp_set_status(req, "409 Conflict"); + return httpd_resp_send(req, "check already in progress", HTTPD_RESP_USE_STRLEN); + } + httpd_resp_set_status(req, "202 Accepted"); + return httpd_resp_send(req, nullptr, 0); +} + +constexpr httpd_uri_t OTA_CHECK_POST_URI = { + .uri = "/api/ota/check", + .method = HTTP_POST, + .handler = ota_check_post_handler, + .user_ctx = nullptr, +}; + } // namespace void http_server_start() @@ -653,7 +724,7 @@ void http_server_start() // bump with real headroom rather than the exact new count — the same // "leave headroom, don't just +1" lesson as the Phase 1 socket-budget // trap (see ARCHITECTURE.md). - config.max_uri_handlers = 12; + config.max_uri_handlers = 14; // was 12; +2 for /api/ota, /api/ota/check ESP_ERROR_CHECK(httpd_start(&server, &config)); ESP_ERROR_CHECK(httpd_register_uri_handler(server, &ROOT_URI)); @@ -664,6 +735,8 @@ void http_server_start() ESP_ERROR_CHECK(httpd_register_uri_handler(server, &RECORDS_OPTIONS_URI)); ESP_ERROR_CHECK(httpd_register_uri_handler(server, &BLOCKLIST_URI)); ESP_ERROR_CHECK(httpd_register_uri_handler(server, &METRICS_URI)); + ESP_ERROR_CHECK(httpd_register_uri_handler(server, &OTA_GET_URI)); + ESP_ERROR_CHECK(httpd_register_uri_handler(server, &OTA_CHECK_POST_URI)); ESP_LOGI(TAG, "HTTP server listening on port %d", config.server_port); } From 28ae61c8e3256197fa166b8ecfe0a6c2aa89d683 Mon Sep 17 00:00:00 2001 From: Shantanu Mane Date: Tue, 28 Jul 2026 22:29:36 +0530 Subject: [PATCH 05/14] fix(ota): preserve latest_version on partial failure, add retry cooldown fetch_latest_release() can parse tag_name successfully but still fail (e.g. no mini_dns.bin asset), and run_check_cycle() was discarding that tag instead of surfacing it alongside last_error, making a partial failure look identical to "never checked" over /api/ota. Also add a 30s cooldown after a failed check cycle so a client hammering POST /api/ota/check can't trigger unbounded rapid retries once the in-progress guard clears. --- main/ota_updater.cpp | 21 +++++++++++++++++++++ main/ota_updater.h | 6 +++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/main/ota_updater.cpp b/main/ota_updater.cpp index 69ee503..4233e17 100644 --- a/main/ota_updater.cpp +++ b/main/ota_updater.cpp @@ -35,6 +35,13 @@ constexpr const char *USER_AGENT = "mini_dns-ota-updater"; // enough that a healthy device doesn't sit "pending verify" for long. constexpr int64_t HEALTH_GATE_MIN_UPTIME_US = 30LL * 1000 * 1000; +// A failed check (rate-limited, DNS broken, no asset, etc.) is usually not +// transient on a device-restart timescale — without a cooldown, a naive +// dashboard retry loop can trigger a fresh check every ~5s forever. One +// fixed window, no backoff: this only needs to stop hammering, not be +// clever about it. +constexpr int64_t OTA_FAILURE_COOLDOWN_US = 30LL * 1000 * 1000; + // Response bodies from the GitHub API are capped here — generous headroom // for a release with a handful of asset entries (tag_name appears near // the top of the JSON regardless), not a real capacity need. @@ -46,6 +53,9 @@ constexpr size_t MAX_RESPONSE_BYTES = 16384; std::atomic s_valid_marked{false}; std::atomic s_check_requested{false}; std::atomic s_check_in_progress{false}; +// esp_timer_get_time() of the last failed check cycle, 0 if none yet — +// gates ota_updater_request_check() during the cooldown window. +std::atomic s_last_failure_us{0}; // Written only by the background task; read via ota_updater_last_check(). // A single mutex-free struct copy is acceptable here for the same reason @@ -146,9 +156,16 @@ void run_check_cycle() std::string tag, asset_url, error; if (!fetch_latest_release(tag, asset_url, error)) { + // tag may already be valid even though this call failed overall — + // e.g. tag_name parsed fine but no mini_dns.bin asset was found. + // Surface it anyway so /api/ota shows the real latest tag alongside + // the error instead of an empty string indistinguishable from + // "never checked". + status.latest_version = tag; status.last_error = error; s_last_check = status; s_check_in_progress = false; + s_last_failure_us = esp_timer_get_time(); ESP_LOGW(TAG, "release check failed: %s", error.c_str()); return; } @@ -189,6 +206,7 @@ void run_check_cycle() ESP_LOGE(TAG, "%s", status.last_error.c_str()); s_last_check = status; s_check_in_progress = false; + s_last_failure_us = esp_timer_get_time(); } void ota_task(void *) @@ -247,6 +265,9 @@ bool ota_updater_request_check() if (s_check_in_progress) { return false; } + if (esp_timer_get_time() - s_last_failure_us < OTA_FAILURE_COOLDOWN_US) { + return false; + } s_check_requested = true; return true; } diff --git a/main/ota_updater.h b/main/ota_updater.h index bf8896d..fa957d2 100644 --- a/main/ota_updater.h +++ b/main/ota_updater.h @@ -23,7 +23,11 @@ struct OtaCheckStatus { bool checked = false; // false until the first check cycle has run bool in_progress = false; // a check-and-update cycle is currently running bool update_available = false; - std::string latest_version; // empty until checked = true + // Most recent tag this device successfully parsed from GitHub, if any. + // May be populated even when last_error is non-empty — e.g. the release + // parsed fine but had no mini_dns.bin asset. Stays empty only if no + // release's tag_name has ever been read successfully. + std::string latest_version; std::string last_error; // empty on success }; OtaCheckStatus ota_updater_last_check(); From 038879d920e5ea20b5b86f6a463220859414f65d Mon Sep 17 00:00:00 2001 From: Shantanu Mane Date: Tue, 4 Aug 2026 19:21:15 +0530 Subject: [PATCH 06/14] fix(ota): guard cooldown check against zero-sentinel false positive s_last_failure_us defaults to 0, indistinguishable from esp_timer_get_time()'s own near-zero values during the first ~30s after boot, so the very first legitimate check request after a fresh flash was spuriously rejected as "within cooldown". Gate the comparison on s_last_failure_us != 0. Also tightens the latest_version doc comment to reflect its per-cycle reset behavior. --- main/ota_updater.cpp | 8 +++++++- main/ota_updater.h | 9 ++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/main/ota_updater.cpp b/main/ota_updater.cpp index 4233e17..b931742 100644 --- a/main/ota_updater.cpp +++ b/main/ota_updater.cpp @@ -265,7 +265,13 @@ bool ota_updater_request_check() if (s_check_in_progress) { return false; } - if (esp_timer_get_time() - s_last_failure_us < OTA_FAILURE_COOLDOWN_US) { + // s_last_failure_us == 0 means "never failed" — esp_timer_get_time() + // itself returns values near 0 for roughly the first 30s after boot, so + // without this guard the very first legitimate check request after + // flashing/booting would be spuriously rejected as "within cooldown" + // even though nothing has ever failed. + if (s_last_failure_us != 0 && + esp_timer_get_time() - s_last_failure_us < OTA_FAILURE_COOLDOWN_US) { return false; } s_check_requested = true; diff --git a/main/ota_updater.h b/main/ota_updater.h index fa957d2..1fa9c27 100644 --- a/main/ota_updater.h +++ b/main/ota_updater.h @@ -23,10 +23,13 @@ struct OtaCheckStatus { bool checked = false; // false until the first check cycle has run bool in_progress = false; // a check-and-update cycle is currently running bool update_available = false; - // Most recent tag this device successfully parsed from GitHub, if any. + // The tag parsed during the most recent check cycle, if that cycle got + // that far — run_check_cycle() starts from a fresh, empty OtaCheckStatus + // every cycle, so this is NOT "the most recent tag ever parsed": a + // network/HTTP/JSON-shape failure that happens before the tag_name parse + // step clears it back to empty, even if a prior cycle had populated it. // May be populated even when last_error is non-empty — e.g. the release - // parsed fine but had no mini_dns.bin asset. Stays empty only if no - // release's tag_name has ever been read successfully. + // parsed fine but had no mini_dns.bin asset. std::string latest_version; std::string last_error; // empty on success }; From 5f85961421e23ab6f49176a67e6008d26351ae66 Mon Sep 17 00:00:00 2001 From: Shantanu Mane Date: Tue, 4 Aug 2026 19:23:38 +0530 Subject: [PATCH 07/14] ci: sign OTA firmware images in CI builds --- .github/workflows/ci.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2a45ab7..a18c513 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,6 +30,9 @@ jobs: constexpr const char* ADMIN_PASS = "ci-placeholder-password"; EOF + - name: Write OTA signing key + run: echo "${{ secrets.OTA_SIGNING_KEY_PEM }}" > secure_boot_signing_key.pem + - name: Build firmware run: | . "$IDF_PATH/export.sh" @@ -83,6 +86,9 @@ jobs: constexpr const char* ADMIN_PASS = "ci-placeholder-password"; EOF + - name: Write OTA signing key + run: echo "${{ secrets.OTA_SIGNING_KEY_PEM }}" > secure_boot_signing_key.pem + - name: Build firmware run: | . "$IDF_PATH/export.sh" @@ -108,6 +114,11 @@ jobs: 3. `idf.py set-target esp32s3 && idf.py build` 4. `idf.py -p flash monitor` + These binaries are signed with this project's CI signing key (Phase + 7a) — a device already running a signed image will accept an OTA + update to this release; a fresh flash via esptool below works + regardless of signing. + Flash command for these prebuilt binaries (placeholder credentials — device will boot but will not join your Wi-Fi): ``` From 7f6f4b7c13aca6b8bc4a628705a6725f0455613c Mon Sep 17 00:00:00 2001 From: Shantanu Mane Date: Tue, 4 Aug 2026 19:23:40 +0530 Subject: [PATCH 08/14] docs: document Phase 7a OTA updates --- ARCHITECTURE.md | 7 ++++--- README.md | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 86bdac4..c2f62bf 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -4,7 +4,7 @@ `mini_dns` is ESP32-S3 firmware moving from proof-of-concept toward a marketable "edge DNS" appliance: a single device that connects to Wi-Fi, serves a runtime-managed set of hostnames authoritatively (A and/or AAAA), forwards everything else to an upstream recursive resolver with TTL caching and secondary-upstream failover, sinkholes ad/tracker domains, exposes Prometheus metrics, advertises itself via mDNS, and serves an HTTP page + a JSON CRUD API for managing that record table. It was built incrementally — Wi-Fi → raw UDP → DNS parsing → single-record response → multi-record + NXDOMAIN → HTTP server → JSON API → page wired to the API → **forwarding resolver + cache (Phase 1)** → **NVS-backed ad-block (Phase 2)** → **Prometheus `/metrics` (Phase 3)** → **mDNS responder (Phase 4)** → **record management: persistence + CRUD API + auth (Phase 5)** → **hardening: dual-stack records + secondary upstream + host tests (Phase 6)** — each step flashed and confirmed on real hardware before moving on. -**As of Phase 5, records are runtime-managed** — persisted in NVS, editable via `POST`/`PUT`/`DELETE /api/records` (Basic-auth-gated), no longer a reflash-only compile-time table. **As of Phase 6, a record can hold an A, an AAAA, or both**, and a forwarded query that times out against the primary upstream gets one retry against a secondary before SERVFAIL. There is still no provisioning UI, no OTA, no TLS. If you're extending this, read the Non-Goals section before adding anything that smells like a "real" feature. +**As of Phase 5, records are runtime-managed** — persisted in NVS, editable via `POST`/`PUT`/`DELETE /api/records` (Basic-auth-gated), no longer a reflash-only compile-time table. **As of Phase 6, a record can hold an A, an AAAA, or both**, and a forwarded query that times out against the primary upstream gets one retry against a secondary before SERVFAIL. There is still no provisioning UI, no TLS. If you're extending this, read the Non-Goals section before adding anything that smells like a "real" feature. ## Target hardware / toolchain @@ -140,7 +140,6 @@ These are the things most likely to confuse future-you or bite an extension: These were ruled out deliberately, not overlooked — don't reintroduce them without reopening the scoping conversation: - Wi-Fi provisioning UI / captive portal -- OTA updates - TLS/HTTPS — Basic auth (Phase 5) runs over plaintext HTTP; see the gotcha above - NVS-stored/rotatable admin credentials, rate limiting on auth failures — see the Phase 5 design doc's Open threads - True iterative/recursive DNS resolution (root-server walking) — forwarding + caching was built instead (Phase 1); see the design doc for the rationale @@ -159,7 +158,9 @@ Roughly ordered by how naturally each extends the current design, not by priorit 4. ~~**mDNS responder.**~~ **Done (Phase 4).** Device self-advertisement as `edge-dns.local` (A + AAAA) plus an `_http._tcp` service via ESP-IDF's `mdns` managed component — a genuinely different mechanism from the unicast resolver, running alongside it rather than replacing it. Does not delegate `DNS_RECORDS` as `.local` hosts (see the `.local` gotcha above and the design doc's Open threads). See `docs/superpowers/specs/2026-07-21-edge-dns-phase4-mdns-design.md`. 5. ~~**Record management: NVS-backed persistence + a real add/edit/delete API + basic auth.**~~ **Done (Phase 5).** Scoped as one phase, not three, because the pieces are load-bearing for each other: `POST`/`PUT`/`DELETE` on `/api/records` is worthless without persistence behind it, and shipping either without auth would leave a mutating, unauthenticated endpoint exposed on the LAN — so none of the three shipped without the other two. Also the single biggest architectural jump so far: `DnsRecordStore` is the first cross-task state that's genuinely shared *and* mutable, guarded by a `std::mutex` — every prior phase (blocklist, metrics) avoided this by keeping cross-task state either immutable-after-boot or a single atomic word. Ships a JSON CRUD API only, no bundled frontend — the record-management UI is a separate project. See the concurrency-model section above and `docs/superpowers/specs/2026-07-21-edge-dns-phase5-record-management-design.md`. 6. ~~**Hardening & reliability (Phase 6): AAAA record support for local-table names + host-side unit tests for the wire-format functions + a secondary/failover upstream resolver.**~~ **Done (Phase 6).** Bundled because none of the three touch the concurrency model or add new attack surface — unlike Phase 5, this phase rounds out correctness and resilience of what Phases 1–4 already shipped, rather than adding a new capability surface. `DnsRecordEntry` now holds an optional IPv4 *and* optional IPv6 address (never neither); `find()` returns the whole entry so the DNS task can tell "name exists, wrong family" (NODATA) apart from "name doesn't exist" (NXDOMAIN) — forwarded/cached AAAA for *non*-local names already worked as of Phase 1 (the forwarder and cache are qtype-agnostic). The pure functions in `dns_wire.cpp` are covered by a Unity suite building against ESP-IDF's `linux` target (`host_test/`, no board/QEMU needed). A slot whose primary-upstream attempt times out is retried once against a secondary before SERVFAIL, reusing the same transaction ID/socket. See `docs/superpowers/specs/2026-07-21-edge-dns-phase6-hardening-design.md`. -7. **Leaving the dev bench (Phase 7): Wi-Fi provisioning (BLE/captive portal) + OTA updates.** Both explicit non-goals today. Sized as its own phase rather than folded into Phase 5 or 6 — this is the step that turns the device from "flash it from a laptop on the desk" into something that could plausibly leave the bench, and it doesn't share a dependency with either of the other two phases. +7. ~~**Leaving the bench, part 1 (Phase 7a): dual OTA partitions + signed, self-updating firmware.**~~ **Done (Phase 7a).** `otadata`/`ota_0`/`ota_1` replace the single `factory` partition (see partitions.csv); a background task in `ota_updater.cpp` polls GitHub Releases, downloads via `esp_https_ota()`, and only cancels the bootloader's rollback after a real health check (30s uptime + at least one DNS query answered) — not unconditionally at boot. Signed with `CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT` (software-checked signature) rather than full Secure Boot v2, which would burn eFuses irreversibly. `GET /api/ota` / `POST /api/ota/check` expose status and a manual trigger. +8. **Leaving the bench, part 2 (Phase 7b): Wi-Fi provisioning via SoftAP captive portal.** Still an explicit non-goal today (see above). Split from Phase 7a because the two share no dependency beyond the one-time partition-table rewrite Phase 7a already did. +9. **Reliability & forensics (Phase 7c): coredump-to-flash, task watchdog, heap/uptime/reset-reason metrics.** Also split from 7a/7b for the same reason — independent of both beyond the partition table. Lower-value, opportunistic — worth doing if a specific need arises, not currently phase-scoped: - **Multiple questions per query (`qdcount > 1`)** — currently only the first question is parsed; real resolvers essentially never send more than one. diff --git a/README.md b/README.md index c0b81c4..a949ab7 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,23 @@ dig @ AAAA dual.loc # answered locally, not forwarded dig @ AAAA foo.loc # v4-only record: NOERROR, no answer (NODATA) — not NXDOMAIN ``` +## Monitoring + +A Prometheus + Grafana stack for the `/metrics` endpoint lives in +[`monitoring/`](monitoring/) (docker-compose, scrape config, provisioned +Grafana dashboard) — see `monitoring/README.md` for setup. + +## OTA updates + +The device checks GitHub Releases for a newer tagged version and can update itself over HTTPS (Phase 7a): + +``` +curl http:///api/ota # current status +curl -u admin: -X POST http:///api/ota/check # trigger a check now +``` + +A newly-flashed or newly-updated image stays in "pending_verify" until it's been up ~30s and answered at least one DNS query — only then does it cancel the bootloader's rollback. If it crashes before that, the bootloader reverts to the previous image on next reset. + ## Running host tests The pure DNS wire-format functions (`main/dns_wire.h/.cpp`) have no FreeRTOS/lwIP @@ -126,3 +143,5 @@ exist as a CI-verified reference build, not a flash-and-go artifact. - **Metrics run for the life of the device.** `/metrics` counters reset only on reboot — there's no zero/reset endpoint. - **Basic auth runs over plaintext HTTP.** There's no TLS on this device, so credentials for the mutating `/api/records` routes are base64-encoded, not encrypted. Fine on a trusted LAN, not a real security boundary. - **CORS is effectively open.** The mutating routes reflect back whatever `Origin` a request sends (browsers disallow a wildcard alongside credentialed requests) — protection comes entirely from the Basic-auth check, not from origin filtering. +- **OTA updates require a signing key you generate once.** `secure_boot_signing_key.pem` is gitignored like `wifi_credentials.h`; generate it with `espsecure.py generate_signing_key --version 2 secure_boot_signing_key.pem` before your first build after Phase 7a. CI has its own copy in a repository secret — see `.github/workflows/ci.yml`. +- **Repartitioning (Phase 7a) requires `idf.py erase-flash`.** This wipes the NVS record store and blocklist — reflash and re-seed from `dns_records.h`/`dns_blocklist_defaults.h`, or re-add records via the CRUD API, after upgrading from a pre-Phase-7a build. From 099aafdba6e64779cacbb5c0334fb33e65e9121a Mon Sep 17 00:00:00 2001 From: Shantanu Mane Date: Tue, 4 Aug 2026 19:37:55 +0530 Subject: [PATCH 09/14] fix(ci): correct release flash offset and OTA-signing claim --- .github/workflows/ci.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a18c513..7054dda 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -102,6 +102,7 @@ jobs: build/bootloader/bootloader.bin build/partition_table/partition-table.bin build/mini_dns.bin + build/ota_data_initial.bin body: | Prebuilt binaries for `${{ github.ref_name }}`. @@ -114,13 +115,16 @@ jobs: 3. `idf.py set-target esp32s3 && idf.py build` 4. `idf.py -p flash monitor` - These binaries are signed with this project's CI signing key (Phase - 7a) — a device already running a signed image will accept an OTA - update to this release; a fresh flash via esptool below works - regardless of signing. + These binaries are signed with this repository's CI signing key. A + device will only accept a signed OTA image whose signature matches + the public key embedded in its *currently running* firmware — + since the Setup instructions above have you generate your own + signing key, a locally-built device will reject these CI-signed + release assets over OTA. Fresh-flash via the esptool command below + works regardless of signing. Flash command for these prebuilt binaries (placeholder credentials — device will boot but will not join your Wi-Fi): ``` - python -m esptool --chip esp32s3 -b 460800 --before default_reset --after hard_reset write_flash --flash_mode dio --flash_size 16MB --flash_freq 80m 0x0 bootloader.bin 0x8000 partition-table.bin 0x20000 mini_dns.bin + python -m esptool --chip esp32s3 -b 460800 --before default_reset --after hard_reset write_flash --flash_mode dio --flash_size 16MB --flash_freq 80m 0x0 bootloader.bin 0x8000 partition-table.bin 0x19000 ota_data_initial.bin 0x30000 mini_dns.bin ``` From f10665d01d2bdb6d99232b6a4ffb795bbd82af67 Mon Sep 17 00:00:00 2001 From: Shantanu Mane Date: Tue, 4 Aug 2026 19:41:00 +0530 Subject: [PATCH 10/14] fix(ota): add periodic check, guard pending-verify OTA attempts, add health-gate timeout, synchronize status reads --- main/ota_updater.cpp | 70 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 58 insertions(+), 12 deletions(-) diff --git a/main/ota_updater.cpp b/main/ota_updater.cpp index b931742..ed140a7 100644 --- a/main/ota_updater.cpp +++ b/main/ota_updater.cpp @@ -2,6 +2,7 @@ #include #include +#include #include "cJSON.h" #include "dns_metrics.h" @@ -23,7 +24,7 @@ constexpr const char *TAG = "ota_updater"; // GitHub requires a User-Agent on every API request or it 403s — the repo // name doubles as a plausible one. No auth token: this hits the // unauthenticated rate limit (60 req/hr per IP), which a device checking -// every few hours never approaches. +// every OTA_CHECK_INTERVAL_US (6h) never approaches. constexpr const char *GITHUB_RELEASES_URL = "https://api.github.com/repos/RndmCodeGuy20/mini_dns/releases/latest"; constexpr const char *USER_AGENT = "mini_dns-ota-updater"; @@ -35,6 +36,17 @@ constexpr const char *USER_AGENT = "mini_dns-ota-updater"; // enough that a healthy device doesn't sit "pending verify" for long. constexpr int64_t HEALTH_GATE_MIN_UPTIME_US = 30LL * 1000 * 1000; +// Absolute-time escape from the query-count requirement above: an idle +// device (no DNS traffic yet) that has nonetheless run this long without +// crashing is trusted even with zero queries — the alternative is an +// unrecoverable rollback of a genuinely healthy image just because nothing +// happened to query it yet. +constexpr int64_t HEALTH_GATE_MAX_UPTIME_US = 10LL * 60 * 1000 * 1000; + +// How often the background task polls GitHub Releases on its own, absent +// a manual POST /api/ota/check — matches the rate-limit comment above. +constexpr int64_t OTA_CHECK_INTERVAL_US = 6LL * 3600 * 1000 * 1000; + // A failed check (rate-limited, DNS broken, no asset, etc.) is usually not // transient on a device-restart timescale — without a cooldown, a naive // dashboard retry loop can trigger a fresh check every ~5s forever. One @@ -57,12 +69,14 @@ std::atomic s_check_in_progress{false}; // gates ota_updater_request_check() during the cooldown window. std::atomic s_last_failure_us{0}; -// Written only by the background task; read via ota_updater_last_check(). -// A single mutex-free struct copy is acceptable here for the same reason -// DnsMetricsSnapshot's per-field reads are (see dns_metrics.h) — this is a -// low-frequency status readout, not a hot path, and a torn read at worst -// shows a status one field out of date for one HTTP request. +// Written only by the background task, read via ota_updater_last_check() +// from the HTTP task. Guarded by s_last_check_mutex — unlike +// DnsMetricsSnapshot's plain fields, OtaCheckStatus holds std::string +// members, and a copy-assignment racing a concurrent read can free the +// source string's heap buffer mid-copy (use-after-free), not just return a +// stale value. OtaCheckStatus s_last_check; +std::mutex s_last_check_mutex; struct HttpResponseBuffer { std::string data; @@ -163,7 +177,10 @@ void run_check_cycle() // "never checked". status.latest_version = tag; status.last_error = error; - s_last_check = status; + { + std::lock_guard lock(s_last_check_mutex); + s_last_check = status; + } s_check_in_progress = false; s_last_failure_us = esp_timer_get_time(); ESP_LOGW(TAG, "release check failed: %s", error.c_str()); @@ -177,7 +194,10 @@ void run_check_cycle() if (!status.update_available) { ESP_LOGI(TAG, "running %s, latest is %s — no update", current_version.c_str(), tag.c_str()); - s_last_check = status; + { + std::lock_guard lock(s_last_check_mutex); + s_last_check = status; + } s_check_in_progress = false; return; } @@ -197,14 +217,20 @@ void run_check_cycle() esp_err_t err = esp_https_ota(&ota_config); if (err == ESP_OK) { ESP_LOGI(TAG, "OTA succeeded, rebooting into %s", tag.c_str()); - s_last_check = status; + { + std::lock_guard lock(s_last_check_mutex); + s_last_check = status; + } s_check_in_progress = false; esp_restart(); } status.last_error = std::string("esp_https_ota failed: ") + esp_err_to_name(err); ESP_LOGE(TAG, "%s", status.last_error.c_str()); - s_last_check = status; + { + std::lock_guard lock(s_last_check_mutex); + s_last_check = status; + } s_check_in_progress = false; s_last_failure_us = esp_timer_get_time(); } @@ -212,12 +238,18 @@ void run_check_cycle() void ota_task(void *) { const int64_t boot_time_us = esp_timer_get_time(); + int64_t last_periodic_check_us = boot_time_us; bool health_gate_passed = false; while (true) { if (!health_gate_passed) { int64_t uptime_us = esp_timer_get_time() - boot_time_us; - if (uptime_us >= HEALTH_GATE_MIN_UPTIME_US && metrics().snapshot().queries >= 1) { + // Queries >= 1 is the normal path; the absolute-time fallback + // (uptime past HEALTH_GATE_MAX_UPTIME_US) covers a healthy but + // idle device that would otherwise never leave pending_verify + // and get rolled back on its next reset despite being fine. + if (uptime_us >= HEALTH_GATE_MIN_UPTIME_US && + (metrics().snapshot().queries >= 1 || uptime_us >= HEALTH_GATE_MAX_UPTIME_US)) { esp_err_t err = esp_ota_mark_app_valid_cancel_rollback(); if (err == ESP_OK) { s_valid_marked = true; @@ -232,6 +264,10 @@ void ota_task(void *) if (s_check_requested.exchange(false)) { run_check_cycle(); + } else if (health_gate_passed && + esp_timer_get_time() - last_periodic_check_us >= OTA_CHECK_INTERVAL_US) { + last_periodic_check_us = esp_timer_get_time(); + run_check_cycle(); } vTaskDelay(pdMS_TO_TICKS(5000)); @@ -255,7 +291,11 @@ OtaCheckStatus ota_updater_last_check() // in_progress lives in its own atomic (s_check_in_progress), not inside // s_last_check, since it changes independently of a completed check's // result — stitched in here rather than stored redundantly in two places. - OtaCheckStatus status = s_last_check; + OtaCheckStatus status; + { + std::lock_guard lock(s_last_check_mutex); + status = s_last_check; + } status.in_progress = s_check_in_progress; return status; } @@ -265,6 +305,12 @@ bool ota_updater_request_check() if (s_check_in_progress) { return false; } + if (!s_valid_marked) { + // esp_ota_begin() rejects a new OTA attempt while the running image + // is still pending_verify (ESP_ERR_OTA_ROLLBACK_INVALID_STATE) — fail + // fast instead of letting a doomed attempt trip the failure cooldown. + return false; + } // s_last_failure_us == 0 means "never failed" — esp_timer_get_time() // itself returns values near 0 for roughly the first 30s after boot, so // without this guard the very first legitimate check request after From 3904602d77ee5bb62c6fc88ca1b1133bd31db721 Mon Sep 17 00:00:00 2001 From: Shantanu Mane Date: Tue, 4 Aug 2026 19:48:07 +0530 Subject: [PATCH 11/14] fix(ota): close cooldown-bypass window, fix stale docs and 409 wording MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit run_check_cycle()'s two failure paths cleared s_check_in_progress before stamping s_last_failure_us, leaving a two-instruction window where a request landing between them saw in_progress=false and a stale (pre- failure) cooldown timestamp — reorder so the cooldown is armed first. Also brings README/ARCHITECTURE.md and the ota_updater_request_check() doc comment in line with the actual health-gate behavior (10-minute uptime fallback, periodic 6h interval, pending-verify rejection), and gives the 409 response accurate wording instead of always claiming "check already in progress" regardless of the real rejection reason. --- ARCHITECTURE.md | 2 +- README.md | 4 ++-- main/http_server.cpp | 4 +++- main/ota_updater.cpp | 4 ++-- main/ota_updater.h | 7 +++++-- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index c2f62bf..3a56def 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -158,7 +158,7 @@ Roughly ordered by how naturally each extends the current design, not by priorit 4. ~~**mDNS responder.**~~ **Done (Phase 4).** Device self-advertisement as `edge-dns.local` (A + AAAA) plus an `_http._tcp` service via ESP-IDF's `mdns` managed component — a genuinely different mechanism from the unicast resolver, running alongside it rather than replacing it. Does not delegate `DNS_RECORDS` as `.local` hosts (see the `.local` gotcha above and the design doc's Open threads). See `docs/superpowers/specs/2026-07-21-edge-dns-phase4-mdns-design.md`. 5. ~~**Record management: NVS-backed persistence + a real add/edit/delete API + basic auth.**~~ **Done (Phase 5).** Scoped as one phase, not three, because the pieces are load-bearing for each other: `POST`/`PUT`/`DELETE` on `/api/records` is worthless without persistence behind it, and shipping either without auth would leave a mutating, unauthenticated endpoint exposed on the LAN — so none of the three shipped without the other two. Also the single biggest architectural jump so far: `DnsRecordStore` is the first cross-task state that's genuinely shared *and* mutable, guarded by a `std::mutex` — every prior phase (blocklist, metrics) avoided this by keeping cross-task state either immutable-after-boot or a single atomic word. Ships a JSON CRUD API only, no bundled frontend — the record-management UI is a separate project. See the concurrency-model section above and `docs/superpowers/specs/2026-07-21-edge-dns-phase5-record-management-design.md`. 6. ~~**Hardening & reliability (Phase 6): AAAA record support for local-table names + host-side unit tests for the wire-format functions + a secondary/failover upstream resolver.**~~ **Done (Phase 6).** Bundled because none of the three touch the concurrency model or add new attack surface — unlike Phase 5, this phase rounds out correctness and resilience of what Phases 1–4 already shipped, rather than adding a new capability surface. `DnsRecordEntry` now holds an optional IPv4 *and* optional IPv6 address (never neither); `find()` returns the whole entry so the DNS task can tell "name exists, wrong family" (NODATA) apart from "name doesn't exist" (NXDOMAIN) — forwarded/cached AAAA for *non*-local names already worked as of Phase 1 (the forwarder and cache are qtype-agnostic). The pure functions in `dns_wire.cpp` are covered by a Unity suite building against ESP-IDF's `linux` target (`host_test/`, no board/QEMU needed). A slot whose primary-upstream attempt times out is retried once against a secondary before SERVFAIL, reusing the same transaction ID/socket. See `docs/superpowers/specs/2026-07-21-edge-dns-phase6-hardening-design.md`. -7. ~~**Leaving the bench, part 1 (Phase 7a): dual OTA partitions + signed, self-updating firmware.**~~ **Done (Phase 7a).** `otadata`/`ota_0`/`ota_1` replace the single `factory` partition (see partitions.csv); a background task in `ota_updater.cpp` polls GitHub Releases, downloads via `esp_https_ota()`, and only cancels the bootloader's rollback after a real health check (30s uptime + at least one DNS query answered) — not unconditionally at boot. Signed with `CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT` (software-checked signature) rather than full Secure Boot v2, which would burn eFuses irreversibly. `GET /api/ota` / `POST /api/ota/check` expose status and a manual trigger. +7. ~~**Leaving the bench, part 1 (Phase 7a): dual OTA partitions + signed, self-updating firmware.**~~ **Done (Phase 7a).** `otadata`/`ota_0`/`ota_1` replace the single `factory` partition (see partitions.csv); a background task in `ota_updater.cpp` polls GitHub Releases every 6 hours (or on demand via `POST /api/ota/check`), downloads via `esp_https_ota()`, and only cancels the bootloader's rollback after a real health check (30s uptime + at least one DNS query answered, or 10 minutes uptime regardless of traffic) — not unconditionally at boot. Until that gate passes, `esp_ota_begin()` itself refuses new OTA attempts, so the update endpoint rejects with 409 rather than failing mid-download. Signed with `CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT` (software-checked signature) rather than full Secure Boot v2, which would burn eFuses irreversibly. `GET /api/ota` / `POST /api/ota/check` expose status and a manual trigger. 8. **Leaving the bench, part 2 (Phase 7b): Wi-Fi provisioning via SoftAP captive portal.** Still an explicit non-goal today (see above). Split from Phase 7a because the two share no dependency beyond the one-time partition-table rewrite Phase 7a already did. 9. **Reliability & forensics (Phase 7c): coredump-to-flash, task watchdog, heap/uptime/reset-reason metrics.** Also split from 7a/7b for the same reason — independent of both beyond the partition table. diff --git a/README.md b/README.md index a949ab7..3c30ea7 100644 --- a/README.md +++ b/README.md @@ -94,14 +94,14 @@ Grafana dashboard) — see `monitoring/README.md` for setup. ## OTA updates -The device checks GitHub Releases for a newer tagged version and can update itself over HTTPS (Phase 7a): +The device checks GitHub Releases for a newer tagged version every 6 hours, and can also be triggered on demand, then updates itself over HTTPS (Phase 7a): ``` curl http:///api/ota # current status curl -u admin: -X POST http:///api/ota/check # trigger a check now ``` -A newly-flashed or newly-updated image stays in "pending_verify" until it's been up ~30s and answered at least one DNS query — only then does it cancel the bootloader's rollback. If it crashes before that, the bootloader reverts to the previous image on next reset. +A newly-flashed or newly-updated image stays in "pending_verify" until it's been up ~30s and answered at least one DNS query, or until 10 minutes have passed regardless of traffic (so an idle-but-healthy device isn't stuck forever) — only then does it cancel the bootloader's rollback, and only then will it accept another OTA check (an attempt while still pending_verify is rejected with 409, matching how `esp_ota_begin()` itself refuses to start an update on an unverified image). If it crashes before the gate passes, the bootloader reverts to the previous image on next reset. ## Running host tests diff --git a/main/http_server.cpp b/main/http_server.cpp index 4eb002c..7188b76 100644 --- a/main/http_server.cpp +++ b/main/http_server.cpp @@ -700,7 +700,9 @@ esp_err_t ota_check_post_handler(httpd_req_t *req) // (only through 431) — set the status line directly, same pattern as // check_auth()'s 401 above. httpd_resp_set_status(req, "409 Conflict"); - return httpd_resp_send(req, "check already in progress", HTTPD_RESP_USE_STRLEN); + return httpd_resp_send( + req, "check not allowed right now (already in progress, image still pending_verify, or in failure cooldown)", + HTTPD_RESP_USE_STRLEN); } httpd_resp_set_status(req, "202 Accepted"); return httpd_resp_send(req, nullptr, 0); diff --git a/main/ota_updater.cpp b/main/ota_updater.cpp index ed140a7..31f2b32 100644 --- a/main/ota_updater.cpp +++ b/main/ota_updater.cpp @@ -181,8 +181,8 @@ void run_check_cycle() std::lock_guard lock(s_last_check_mutex); s_last_check = status; } - s_check_in_progress = false; s_last_failure_us = esp_timer_get_time(); + s_check_in_progress = false; ESP_LOGW(TAG, "release check failed: %s", error.c_str()); return; } @@ -231,8 +231,8 @@ void run_check_cycle() std::lock_guard lock(s_last_check_mutex); s_last_check = status; } - s_check_in_progress = false; s_last_failure_us = esp_timer_get_time(); + s_check_in_progress = false; } void ota_task(void *) diff --git a/main/ota_updater.h b/main/ota_updater.h index 1fa9c27..315efe4 100644 --- a/main/ota_updater.h +++ b/main/ota_updater.h @@ -37,6 +37,9 @@ OtaCheckStatus ota_updater_last_check(); // Auth-gated HTTP trigger (POST /api/ota/check in http_server.cpp): asks // the background task to run a check-and-update cycle now rather than -// waiting for its periodic interval. Returns false (no-op) if a cycle is -// already in progress — the caller should report 409 Conflict. +// waiting for its periodic interval. Returns false (no-op, caller should +// report 409 Conflict) if a cycle is already in progress, if the running +// image hasn't passed its health gate yet (esp_ota_begin() rejects OTA +// while pending_verify), or if a prior cycle failed within the cooldown +// window. bool ota_updater_request_check(); From f4be373a6bbf3efdd44ccd040d190b024dfe2217 Mon Sep 17 00:00:00 2001 From: Shantanu Mane Date: Tue, 4 Aug 2026 19:56:16 +0530 Subject: [PATCH 12/14] fix(ci): fail fast on a missing/malformed OTA signing-key secret MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CI's release build failed at the signing step with a cryptic espsecure traceback ("Could not deserialize key data") — the secret was almost certainly populated using README's own generate_signing_key command, which is missing --scheme ecdsa256 and defaults to an RSA key the project's ECDSA sdkconfig can't sign with. Add an explicit empty-secret check and an ECDSA-header sanity check with an actionable error message in both jobs that write the key, and fix the README command. --- .github/workflows/ci.yml | 34 ++++++++++++++++++++++++++++++++-- README.md | 2 +- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7054dda..2937059 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,7 +31,22 @@ jobs: EOF - name: Write OTA signing key - run: echo "${{ secrets.OTA_SIGNING_KEY_PEM }}" > secure_boot_signing_key.pem + env: + OTA_SIGNING_KEY_PEM: ${{ secrets.OTA_SIGNING_KEY_PEM }} + run: | + if [ -z "$OTA_SIGNING_KEY_PEM" ]; then + echo "::error::OTA_SIGNING_KEY_PEM secret is empty or unset. Generate a key with" \ + "'espsecure.py generate_signing_key --version 2 --scheme ecdsa256 secure_boot_signing_key.pem'" \ + "and paste its full contents into the repo's OTA_SIGNING_KEY_PEM secret (Settings > Secrets and variables > Actions)." + exit 1 + fi + echo "$OTA_SIGNING_KEY_PEM" > secure_boot_signing_key.pem + if ! grep -q "BEGIN EC PRIVATE KEY" secure_boot_signing_key.pem; then + echo "::error::secure_boot_signing_key.pem does not look like an ECDSA key (missing 'BEGIN EC PRIVATE KEY')." \ + "Regenerate with --scheme ecdsa256 — this project's sdkconfig expects ECDSA, not the RSA key" \ + "espsecure.py generates by default without that flag." + exit 1 + fi - name: Build firmware run: | @@ -87,7 +102,22 @@ jobs: EOF - name: Write OTA signing key - run: echo "${{ secrets.OTA_SIGNING_KEY_PEM }}" > secure_boot_signing_key.pem + env: + OTA_SIGNING_KEY_PEM: ${{ secrets.OTA_SIGNING_KEY_PEM }} + run: | + if [ -z "$OTA_SIGNING_KEY_PEM" ]; then + echo "::error::OTA_SIGNING_KEY_PEM secret is empty or unset. Generate a key with" \ + "'espsecure.py generate_signing_key --version 2 --scheme ecdsa256 secure_boot_signing_key.pem'" \ + "and paste its full contents into the repo's OTA_SIGNING_KEY_PEM secret (Settings > Secrets and variables > Actions)." + exit 1 + fi + echo "$OTA_SIGNING_KEY_PEM" > secure_boot_signing_key.pem + if ! grep -q "BEGIN EC PRIVATE KEY" secure_boot_signing_key.pem; then + echo "::error::secure_boot_signing_key.pem does not look like an ECDSA key (missing 'BEGIN EC PRIVATE KEY')." \ + "Regenerate with --scheme ecdsa256 — this project's sdkconfig expects ECDSA, not the RSA key" \ + "espsecure.py generates by default without that flag." + exit 1 + fi - name: Build firmware run: | diff --git a/README.md b/README.md index 3c30ea7..2d6d1dd 100644 --- a/README.md +++ b/README.md @@ -143,5 +143,5 @@ exist as a CI-verified reference build, not a flash-and-go artifact. - **Metrics run for the life of the device.** `/metrics` counters reset only on reboot — there's no zero/reset endpoint. - **Basic auth runs over plaintext HTTP.** There's no TLS on this device, so credentials for the mutating `/api/records` routes are base64-encoded, not encrypted. Fine on a trusted LAN, not a real security boundary. - **CORS is effectively open.** The mutating routes reflect back whatever `Origin` a request sends (browsers disallow a wildcard alongside credentialed requests) — protection comes entirely from the Basic-auth check, not from origin filtering. -- **OTA updates require a signing key you generate once.** `secure_boot_signing_key.pem` is gitignored like `wifi_credentials.h`; generate it with `espsecure.py generate_signing_key --version 2 secure_boot_signing_key.pem` before your first build after Phase 7a. CI has its own copy in a repository secret — see `.github/workflows/ci.yml`. +- **OTA updates require a signing key you generate once.** `secure_boot_signing_key.pem` is gitignored like `wifi_credentials.h`; generate it with `espsecure.py generate_signing_key --version 2 --scheme ecdsa256 secure_boot_signing_key.pem` before your first build after Phase 7a — the `--scheme ecdsa256` flag matters, since `espsecure.py` defaults to an RSA key otherwise, which this project's ECDSA-based sdkconfig can't sign with. CI has its own copy in a repository secret (`OTA_SIGNING_KEY_PEM`) — see `.github/workflows/ci.yml`. - **Repartitioning (Phase 7a) requires `idf.py erase-flash`.** This wipes the NVS record store and blocklist — reflash and re-seed from `dns_records.h`/`dns_blocklist_defaults.h`, or re-add records via the CRUD API, after upgrading from a pre-Phase-7a build. From 146a3d0e7652be3145357eebe97edda173520f32 Mon Sep 17 00:00:00 2001 From: Shantanu Mane Date: Tue, 4 Aug 2026 20:06:51 +0530 Subject: [PATCH 13/14] docs(monitoring): add Prometheus+Grafana stack and dashboard screenshot Provisioned monitoring/ (docker-compose, scrape config, Grafana datasource + dashboard) for the existing /metrics endpoint, plus a dashboard screenshot referenced from the README's Monitoring section. Sanitized the scrape target's hardcoded LAN IP to the placeholder the setup instructions already document, and moved the screenshot into docs/ with a space-free filename. --- README.md | 2 + docs/grafana-dashboard.png | Bin 0 -> 275286 bytes monitoring/README.md | 28 ++++++ monitoring/docker-compose.yml | 26 +++++ .../provisioning/dashboards/dashboards.yml | 9 ++ .../dashboards/dashboards/mini-dns.json | 95 ++++++++++++++++++ .../provisioning/datasources/prometheus.yml | 9 ++ monitoring/prometheus/prometheus.yml | 9 ++ 8 files changed, 178 insertions(+) create mode 100644 docs/grafana-dashboard.png create mode 100644 monitoring/README.md create mode 100644 monitoring/docker-compose.yml create mode 100644 monitoring/grafana/provisioning/dashboards/dashboards.yml create mode 100644 monitoring/grafana/provisioning/dashboards/dashboards/mini-dns.json create mode 100644 monitoring/grafana/provisioning/datasources/prometheus.yml create mode 100644 monitoring/prometheus/prometheus.yml diff --git a/README.md b/README.md index 2d6d1dd..6573c2a 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,8 @@ A Prometheus + Grafana stack for the `/metrics` endpoint lives in [`monitoring/`](monitoring/) (docker-compose, scrape config, provisioned Grafana dashboard) — see `monitoring/README.md` for setup. +![Grafana dashboard showing query breakdown, upstream health, latency percentiles, and saturation](docs/grafana-dashboard.png) + ## OTA updates The device checks GitHub Releases for a newer tagged version every 6 hours, and can also be triggered on demand, then updates itself over HTTPS (Phase 7a): diff --git a/docs/grafana-dashboard.png b/docs/grafana-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..dc92eff92b061367de953d82e58ad7c308bc5b77 GIT binary patch literal 275286 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%0DB8pZ_fP1qIdvm? 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

0RHW2 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 gcQ4!6S`V~7dU zE##VuqRztt=f{Bq#2@l$^TPW0ECNNJ%7wuHv`txv=bj~vV3F&0QC%P%G;kjUD#bhk z=G&^vC%ecwv~-eM)@SvrW3qE-s0AgFRkLCMkOQ=h-W+X~p$QW*?sr+8bRSv%hx6i} zt7p+X641eQ?DigY=G_qhCmlKUbp&LD)odguufVcPZl*1UB~3Yw*Lf0$W%R;-34BMd zU$2uiv8WY9QeU#A1PsSo+BchRqe;R@O<2>T_wVoHMc|CxHBfTxP{TqjC0lA}#tlc*Xsx#9+GL!xxML{LUWPfg(KhA|9 zzr!={^9UNy{ca+@%^BvYdmIIUawddQN>A__XAu|P6rmB<7V zpPOFCGGEn5$M%c5Lxjh5v6xApc01ASX1_P5FLK?l@c~Y>7XD1N`yCyfc?xWM^Rp|` zrn?>XbC1(;U@+i;Yy>do6ouLND{&bqkEMJjJvgOLoaR2C*gI$K0T*zNPWvTx3y`O(! zAgtl$-dKv<5u9}~9U3UM37j+hu;2XN+g)sTRhMiTlq90~_!Kn&9*wH^Z72YCuKW1L ze84W`2qWzhAuE_Z;+5gj5#q7mj9jyomOCcQ{%Xttv>^t8n-L&=D+Jg7n;8z9JM$WV zLf64{_h2!6=)t2hRc7UePX|P#?C*R@m|mR@4Jh$}L=x2d@c%_6J7_pa&2Wx-3VP!s zmiDQtnT=|C;Ux6NMwY6(jlF`~Af45X%poDGApS^At9#<)X$#)G-@TZ(m7bw~>a@6@ zBrlyjZEh_{hgdDa6UN4Ei50QkdpE+fb&*T6?(X`QfPR!MP#C(iwa0)Hd28WIy(enk zw{4tysMt@`U!_$Fi1EW^QomQ%E!*}c1IJqVg|phU)U?M2>2Z)NTt?qnO1Q)8N5#q> z&^Wo{M>*C%RvPE``%RnuF+8m4it@Ll3?wEHODad`ReS8z`?ILsl5Vw35ea__?GMPr z#LH5{pUPI)-Y1lxH7;HHLU`Zq)1`<(&ukU#bSpw>|8BKK8FRv{^M3UG61%hRHBpL8 zJdH~{J8kt5)#dT-NWm3%9-gUvdm^tE0(s80*$@@;xPFruYwLsPn(SJ|ZC!Xb!g@r= zeR`+bZwWd#KL0MaQpl}^xYz2l^*gB6*Djl?O4qlSm%Yzn3{d{}i#vJEEOjh$F?oA; zZ_6Vo_}1rAvpKL45zhIiIZJr+$K%~sUa^xu8Sh*RvFc4~9}snJw{$>7og1SaP#a~z zgapzPYW%L~=QBuf{QFpe;kmuSorpn+5{-=((tmctP#n zq9Kf}2(OJpn4#2k`a)xtRQbV%k=4`eWXw%S$M%WfR~ZX3_YnL^5iszTi-wXw#u3{> zrr-v5b_(@}Z}l+7Tw2mS@&%l+s>0lr)Q3K@A%AP*KB{(U+Q4|BK$}5D0QKpcuH|4i z#rCFZHNLPyGGko9BPqsW|DZ;gUEf zeEE7~Ep1*4Y@3+UVbcKe_0#92r48kxwTL(yUz(y^Y77E@sVS4GAm(dlfB(}6U6>a& z_Y)gRVdV9gTl4h79#eSy>kZ@E`={IAqac%S_ckmyBkwGKO`T-caf^?$o6(?zHK;7N zAXM@n>3fbK^VT4G+~YdJw!2?b0aL`Lcrj^P-*a+`A59B0dMT`iUR2L|TBxtWA+)^< zAFyK%$hXLeGZHwM&=NKne%jY-l2qg;mCgG2_uQ3+z+a}|M>mA&C^tyGN zF=m&{Y7HYk>Y(4+^K}(I*Ls(OOS7y$v;pDPlabscORj~0WFHuRirMa{ry7{TVVrc!t39iQ2Ul)7iahdKi1rfMV}8Wj^gU*N&+$0# zAG-NJGITTvug(kL@s2rsqDprXGE8hUlQyT|{Z`qhJ^*LdC(?w%qqF146rnqRbO3&L zgn{4tXn+Bn*VicvkCt#xSv1!#miCPNe~i5cIMx0CKaP~*78xlLg{;spLO78`amY&I zG{`)ZnR%!rDauGP4%zc$p3KuAD|$r~;JY%S)Zau`~>K4s)oJ znmfI5Zu8g+G}?vXXMoUor!B}`<^HSmM>4ObWYz;q)shPUK9Oz zt1jo?bjy$X;*$RO4$1?Vy?x)|UsNF9ndq#C>igEdIhS2ttcogen?An>;#^QqNVncq zHFIbCML3)5|Gy8Z6daN-=8@C(k%IGEp^5$jZU1pS5T@;;_8kOz!dhx`A#hP>5cA1K z71w(-IE&_SJKyylw`|{bB3-d8>%TvVq*C}bZs>=1 z1}aONM^mqT;4bU6`PvsS7eSZ8AM8E!qYfo`cXW!Z8L_3{D5;)0# zr|-7UO<4>wwz<&X|Ftbwo68W=qGmxnT`X=Ap)A@rj=t%?pZn`eo}LGqabYjp8Z9(z@cIvfkw)KS z|L@cM;SQf(0IPUg#3uQRj>zjtv-JOCC_aHZ*FEFWaOkKnI5!h}AZaC=SH_!7#kDON zzpwN!?^T@uB+ad2RPQ58YUaUV&gGMQS_m-(x>qAABghZ}aju7S_OcfM{IX0P7#DO&F=Fwgo!_2q zM6fBFO8)=eOLZ35MiD+~nT2%@#$<4-FS!K7f{fIYKcw^L2~hpzTEKPi*3s~Ts#e&f zhHji)^OO!0p&PRN!n5?rImO|4<)KTeLvwjTt!Lv!daF3jeM|FUC{QOZ}@U1Z$)$gqJ= z&;NZ=n~S=r0%T3H=?wn{O*=6P*{chaM~%x}diYBxe*6^oerIjnX>z#ny_FXo|2`FI z+FTtvj9>NRqt3id{DYYNUlE#DTaS_cq%3XpxCtuf0LnHOxD$8wk~3Ev8p*L#wY9aj3F*&mKQ!#X6&lY-w4fF8vdT zuYw%Tv;Cj<$`0?Ax2<@2k7)uuG3xSFr^?veJiM%IPRz#A@`-WK^B?QdPN!Mo+7{T0 zTHvOJqlNqcjfG_MDMZod0c9u0Xbx?!dh=6SagHfkE<`ExRaMo+P{;C(+Xrbb_Pv%a&iW6#MYw z4b?w(@d5%CPJ6;u98U3vdnuY_7yC7_90aYE4%Z&n{w<|K`o26wONoe!2_(#1oyBx@ z!rq)H`?CJ*;`LMV8x{m?$t+2;q?grm$@zwzfVIQi+~?kFw{Ity-2HY?`d*8wG?7#? z{VeZGcOb^S0oTg<=*wZmQ{$jm&y^DS;*=d(#^{C_xqB{uQXsnl z+mn|0s>Hjo!%9XNGilt6{Lwn^Z{-JF*Hp0{C?a3owFA;lJYZgP;C}dW9<--qme?mo zsNvSNFO(?1I%DAfPj`E5oqUnG(pm@lO|bsaU~+A?zNq1PU)HEGaYee2?ESf~ki%OR zt9YNRfd2Z+QBcAJOEn)8ifAYU7s%4`E+K4Zy3MZQ85FQ8qnEc8+xN!qCXFo@q+vLi zhmd&gR9<>K_kdCAc$;kQ#zYG8{Hua@v*mQwqu=KRdG0NC)qtQq7u%MW7Tf32M_I1? z?D4ySBO@cymV?ab(y>@2m&I^VjDw?QKDjoavnXYU7ikTH%eKudv0P*|wfd zM}fZ&+<9qBP99zI>Hp2DYAe$;DiX{R(J8U+E@s^l(RVj$>~vrmc!D9RQH-G8IB9C9 z1I4f9dixm%#hfMASsaZjC*s7w*!oDJ zrUNt8f;Cp!O@{=d6ErE*p%+C|QolXg2cpgZd}&JrvcW?4gA#YOl9*7GvqggVzkCSq zSDHX;r9#y}MF*2Z(oV3F5f0bxmkB{R&1#1&D7LMz*Fh9*|Lqgz>g}Ox=xM>eVrSPt z{GJf+{KdSaOOlSwXnUAUaBQ?!zwmOqA>K~6Gn=azytARyLWVTkZs%4t%k+eQhr&kn zKLn@w6g!VX!L~mLMVm+WjpND8kpQJ;&f|Pd{J@R8x3V@cBos%T{xh(r5rO3G6O#39 zZ8+0xO2WWOyvdyiBKkR}TmJKnZk>*jl`nQ!6l^`o#C^@rPS!p5<1ViE?d+o8m2g!! z+c&ERX*4ajv4BVM&t+y>^E=kbBXx>sodl*F)-TTsDQP928n>ARvUMXY{^?WtsJrv* zGd>9KD>lLP?$u&{Ehv{4!Vc{2ci^|eRv95Hd7^`%ex3{3E;cFB+rbepD|OJ17dUUw zuu5P$9+QSs_Q=cGjw`yfjSuxqONfd(VmmV7M1EfMN$XsINTCgyi$2v4X)c+?DUl}F zTRRbJMAk3R!fcb0VnIgD*LPzFz8>1Ps@1+!`ai%GNE#)AvNnt+xd>_ZA>u@VFKn!j zqzFblTb%9>Yew<=k1h|sPJrf<51y#TTaVPDrjudU;r`q?n3$!-lgs0`nT&ur3Xh1u ze)E5x3zX$^_+qG(4QKByee>`r!8a5~g1c6@;V1*W^VX5Et7y%Y(N(jg?^UOmqrdQ; ziC8P9?&%Z+JXrB8R-9X@D9tOTSCJA4Kssns|A+#WC4dHvOPu6BA9tHt<989>Oh%l1 zANupm6u)!FTg%T>=qzIg%4{jHiK59yTD|A};uyroiBV+N>E(*n>qbgOKyA=n32I4E zRZ&h;{d~D@H6fKRN0#>&!@KGmWC<*W!(}TZJB;VOLgRk(>ccLh2gi)T^rGvzP_$hi zd~WcF%V#{gn3$$j>@szyOnRp8n7hG>b%B`a!NLOP&-|{(dP9ryM#?oCUwNETkeNaE z7Ttr6HoPK8D;UqzEcL!0a2Wfd5GijwgI$K>XJ_=tS+R`^BPRuKvs2TaVxEKUS%5Ou z#)<6xlk)E%4C&kbNF&Z3>D^J}xY&AsbmJSkaB>QTU79UJZ1gD-Yy+^SCVj2-#6<5( z4!ayfRDVa2?ncVY#;}@4(Wy7bO*hi+aDPb*=rmGQ^^=m6>@tslF$*JxQxp0eO!`hy za2b!u2_rkNs4R5eI4vLgWI#=NxG20Eqh!zOUaVb;v$e7DQ}@37UT|^fD>1tC^orSn zL9gLj&iB}_!KYUo7aDp)YmC|Fz1l|y_MEd5UEyCbi=TlJOXLF(u^gGZ1C(|qj8*(5 zU~GX@xGj^(+eOn}=B_FiCrCPPaBF}0>URcoQfB5?>8`jym7lQW6{Vv09ML_*R)hp++?reORFIt z>W5N%Ki$Hi-P!^_4D=(NxUaL9(^}7K2caXlX6vGb5Wv0#Aa8~=c)Z=Goxvj zH%^uZ=>;WG-p#8mN%LFELgnkTX9E}GS9qtMvvX2mWi=o?0_|lDZ8R;zVaOgfh8Lhc z&7D3);mI{BOweHd{zD3*w5^6tQt+S+3^v=N3oV1XH^t*Q$J7doEDon-Rq!SO7hPOt zUygrVc52Mkt{W=nZ0#)v7~6Fl$Bau{z?8p^f{ZP*=OF%J&-R`uy3Wf6tjweDr& zc7n{v7$h1~7;H^p>$r#J9>_!od&kiDzk1=$G2bT>SFWEH70s~yvZRKqQsT4@*Vivp zN0z&cA5rTvasB#EYl_v*G>RZ-*a0;_T{CCcUpiq>;?mbNQ|kB_M{Ff#A?o+LOrN}s z1F!yYCP)_9f03;3d0rE0pRc7kcCB4+Hat`?U)UIi`2+{CrmM4~mwse9%Vkjn5sQ5@ zqHyNlxdyE+Z+Hdr#_|gTzNR3EGuhY9-UPnb>J>(nc%B!2T}R&V^dBG$vyc?^dLV>% z=P|9~Y6{YAL%6_&&v$GnuehT)7uF{aPv&-=R_{o<1iIjfBNB`7$ryC8Lvv`2A*{o} zQ@DGzIFs&a#U$wdg&LKEh8K5ks|e)dPRk!*{YPesyXRV2Ou((6N^JoI+@9V% z)sb~t!F=qc8qd2u0Cau+ydIXpZgLSu#4qXwNqI>{kb6#GVE8^M_)~?sK?QH!UN`iN zg6-1Fs$wt4(T#?F_eDnZA^D<_4lZ0mu;SgQj0_JWH#b2bWY0~`ezQeC|Cy1#Ku|Yq z)*FChI0vvs!Bj)>3S5x)q*ivx1gn!`EHLT)Z`>YSqN?TJQ>~YEpxsAcoaMlk-o(FW~$<#g3-nFW_3mPTfrZZ5p*s{L zX>Bs>J{CYiUn3!&6auA#NcRw2c{u@kxf75O@174m0B|qE|3#Ks0lCC$f!6TWtqV+eZXsOpv z|Hz?yzjMU-{k0MbG`We{s2&5S^3sI)O{fPoSqes)dhc-W3qV{n@c?khPk-~V=*&*% zpXDZ1amb(J4>oP-Z4TUkR!S};APDjQV@-d5Zu8O>#KDLA zYh-Wc(zsvK$~6xaOG%ksMXjY9FS+OXC+XWYN2kraCzT+lM=xKaz50J%)6Wcpxw;Gz z&x&vuP-*aig!-^}1Hit|h11Kv^-U4#TTAD?qVPkSp2VVyH)?f4)Bf!5tq!Nc|J?ib z3I0HQ*eGc%O`KzG1x>ir!)v(A^n<ep6{d&&uM z5w#V5HYPCdrFQ=}KkzsCc)5RphMf^cqo#bOhF7aOe2H z1njTkAowdSS^%c)5e?rDz;JI$!NTS#%iV>@xgo7uelhC3|F35l1UV^4GE4DqW4TC8 zW;X)(Z*n`yKwSy(+S*TJeSWN6*MGGbl`k$p_d6E!U*H&}fC&kr)sUOF7=K5cM%cga zJB*m#>9HI+(DjuLnOkGndjo4*X5!!bdAX<2u6#nv<5ma5Ocx!`{gz{zr47>9(&W## zOIA|zFNw#RtqiQZuJ>LS@R$sMb>nnra&-8DXXd)zacDnywtf{R56#P0-Xr}|khpO( z-RtaFQ2u01$2r9SVPm|`PrYKcqjvvanbc1_?S+`{f~`JVzPlEuYjKS8dQoA$G}b6W z+$0l3Um~Iz(}V$@8#33GDwn$)uYMAL&gJnY#;vEQu-(8IyNgSbr$ndyg7l3sUl**H zE4B~|N6vL=t}hi3W@4>Wyx&KG<{@ltU0v4Ox1X%73-dwNG!)|hjGPI;5v};#J1?SA zPEBA4>!=lx2Z=ld#<0`LMfMS|P6u$SL1h%0g+k@dP$YNvGb+YEqhX3E+OE-2bdF*W zFB-@3vm(Nl96ylghN@ zEEdsYN*oehu9wN^lNMmoJb*|tz7rDbgRs_)M=ph$PGOZa_9#sv5pQ(}NuSXXhkuuy zP1*k60>m%D+y<~Oj{~~70Ng5^Rit~Lm0^g=WrfPsikEEAlz^(W^yv8K=>Py!5F}-n z$62Lp*y)&*zGlftOZV*Lh`q@wXkykni>YfkV-sDrnlaW}4mbf^9vi|S(RJv0^0M&b zE|cD5O!;DA%o&$_%@Tri$#Su}^vv+>qcuto=@@gexugZ@iauQq*`JzzaJqJXYo|>X z1>R45#Et&&C;kHAHKMNludSK!YR7)e@jbgV_gT#t(3niHRnRkyl!7!sRG!hz+=G&g z&~`C!a?I>ny`3V+b7yQm=AR;T3*!1#NZFMadr#u;5WWYF*m+gIFahCMsPS^>H@fF{ z18q7ob1r>B4!t6t$GsmZjOw*EGK%CrJxYs?{%SVIa=d9@!u5HQlyO&DO7v}+ z>oS$gSl9Q$-8DGNH%{1hQH)CCCrU^?#?urM2GG=={JgZQ!wCF0#IApGa|C0pLs9QP zHYkkUI_j8UzKsPKS|kF-dW+_(v>BzQg4A-C*eH&=3c;gm6^TwgNw*V_O9^tA!26NZx<}wZwvL!pBX}9Ji5h1iY(D4uC8@&Y+F)L`UVD8&HKeS0w)5_0if{I zSa^h{`njI`DRB?WS9*s$n{K)QjlibzUBFT>8*Fl~4Pm+r14s8QyDT&|zEeBw-9e#O zP{RIT#f8k6`=4r-V`e=YcQGBlWf9|Tr@Q9y{TSJ{$6nXt?w29y`2`zX+zzIKSp>p| zXxVr(yP=B5qu)Jq7JB9R<+m@OX7lQ&)DN+|KB~AcjXWcm(su{h7Ur_^5G8zkr0GNY zGj;&(=U>{8FG^uYD7fp%y;xg>xz?OeLFA%67V7imdEPNJV!i^F?yZrLc_WZ_J5)`k zDZ)BXck6OO#}I3m&05izGIKMxI+F4ER|w()Iq-OuxaZP5ot-Yo-uupm2b5p19d7*c zUWEb~FSQ-ba++wV%q|@aY5extPb z_>YRjrO=DFt^fmxOBc1Xl;x$nq)1&YNGss@lu`w~+V{4zuk`A%Zp&aqPq3@-t8(^B z@|J(ZK2FCeB@l|YF6=79b?Ul$N(xZS*(Zi3nr+$HjPEuvPBCVs&q>aaaajVks1Tzi z{=@94DA>)FzQuPj&Z9eLYGjD(@H-{A!W0vi3A3oR!O)H@52iq3qu|hZSC^MJ5x{R7 zZ}B*+Om6AgC_rS9p1DG~hf3aguAM@sIgZiGK+Ufh7~GK~g|!Bw`GVytE*vUHf>$s2 zXFr7(_BRMfYL+b;Q0N_Y9_?<7;MQuZ4`O9g4O4W ze&Y7qOewOFBs$3I4I&xT#DD;aiGfC3dGWtuEIDSOvW6N1rqOpsyE&W%v_ zC5Dwpek{{-m@t%RuHZodOYx}f4f@jTz6;>$i~Mnd8>^3a$g?5m&Ab0B%Cn)VvVQPK ze6RX0bTQsE9k9(Ky_^XT4>wX#c{q_Kb35qpO~D{;xPMR=R)8u^8&q9lylZ8zJv$Ff zrLk#Vp=?f7Rz>70sw@48yLB*>^UC~V`|{@FcBz`)YCyC%Ze4K{I3z||3N3O4t_?wFFF?S9MeK6VeL1O1TN@y-r?Nf4kgWM_}5Pr zN*}){HGgR&E(d9SLq64=##Cz+DwSi(VS%I*?Hi#FHx#!RVS8x1w&$*BK@j)B&MilN z1euX!nb2h``JWLbt%1+u-)j&);d!* z^?Y#&%rfnh{$|-%yz2iomiQ>^8omJA4KPDW>?2K>fMF@7=-zE;UTk|=Z~3k0)kpES zY_K4IGYO@jMsB&R z=DPg|W;Ar-5?K(Flaog~R|DCd?;)=)f@lK=CK)@9xGztekBo@H5CscU;dUh~H+z+% z)j?i=)Hvd}(IF$!a4SOfmCWc|Ssa@|l3oMDFDxvBvO(K**bMc^TAq|i$lMt+fagZli%n9)ktlyF<6 zN|lGF1k*GXW9XGS8cFJr4ljKF@Xaw8$?KJ4YI?fuwbR(Rw|U0UB=Oq9vX#<+nRA%0 zXLDGki}Jo5{u(2;0(U6veOM!VPidqfz~h8#VK2I-`!W7-8zyCmX*bcMW`JQG{itwa zV86HV?lD!utbhr_8tZSTx8*)wd8SQ0s;2_#oo{G{{a%T@@QS?F7|d5!@=v!I#T<_8Cyz*jJKxCX zMqi1mp+E}^5^{BWpKti77TH3G2Fjb0n552KRhBV6IsVc`P1_S*2m=>a4ai5O)&^m#x75=gPF{)`5Y$&(UiHi*s7<0K)?w-eIaMxd?-eId zj$VW-&hu3#?L7umqs9+EGqou4lJLx({jBiXOLwNV?Q#*F?&5b+ZMmV{?8j+zga@x@ z^35_jnQ3$=L8fxR+gW9JfR{`fgxVReUBI3%yayedjqSj=_3gaz2N}p{f1KQwYXKGi z(y-#Jl(o$3YvEH1$x(JQqw~kGc8lC-H;Pp=C(@%cYohGyJHLXk9gg(c>jWID*9yFw z1ZEaraFJMF_HeVr8na6~zM-7?M{B$pWVZR-S?C5C||SvHr)M z5$pOTWBs6(>38+L(}r0Te%#TevF|iC+I#f#idtc~>r?V@!bM-U{S;MiaSk+fbwqv` zVs-ERLK_N@1v_XCS=j^R^w}{)SEcTH`8RrBUZ;ABh>Jk~!jnFUYs2IvrcDwluTh2g z)3E&v6Sp!N2yZ5hK*Xve`I%LrJ6^<9!Jo0OGrM@<0v6OI3Wrwcx^|9fzRMAmCaWgW zpIvLa{YLfH4`Q!f8OT>~4e}OU{YrfU>z%eYs}7&;Xi!24+#4%TUVQ&RCzLQ#QrD4X zJXUx}cJe^P{iVNoy>u>l`TZxJp-v(X=PFJ> zG9}|*>b;5LKx%e}UH=XRMJD3+(J4OYO!vL27~J0pGr zK<*63F_>4R@JY2PE`5EhRZ8q_v}RG~g+p>JUOQhGDv>Jq3I`Xyc4idJm|R zbiOxB*hNpWJeG!$6XQ_j>FB^O$kxgC%9)pATx=@F=^nb~Sm|1HwL*zK1?>pU9)Q44 zub?(yT2W)jLEQpUfTFB|(P0ro8fdQ9g4goMV$<187VxHchs9BuT;PqSAq}uj#*nz* z%Kr3XTffexQrN1y1BxfOdr;uCq{B_oC80uBV;*34t+lgvP7 zArk43S+>@}1!@g%#!U(xMhsm#^M#i`JQRagSn0=EjmSulYmb@S%W3aKJ>jP^YDN4> z1}?R_L{CN`o@%S9Wm5RSPyQz#I8uHE>e9Q1PqU7+s@x!I^9FM)^9B6ka&L`ypP>iz zctw@vG0P)L&MR+L(J$@Nt3zQtxU5$1upNH+ z8Am~Y??(^Jf7x)8cK;ghV%a*+Dz4DjaK_QLwFqHt5$hF_wZ3ixJ3g@{z}ir-!=I@@ zg$XM-bCQnx>{lEZS6%~ORszLlG__pTY7< zJ^waKYw@E0u zPs>GtQTbG;jnE$?Mj=jWV!SUW>+AsQ`fXa=qIv%1^R$0;8T>?4lm)aG0AaQGjX+Oi zIv(bllrm212f?qnnbHZviO^L*T2ce;q9n=%%H88aQ z)@IQF;<7V!Yj`Fow5=j!XfwMdIetV*%tDz|7Qc~Kcy9pQnRfa?bMM^lxi;ht*rjW~ z(bOP0^s6YwWyHmOs2GwJM1Kky$BFs}yJ>2_p7<%RKTL027lp33L9e5-pSBp^SJOV) z?&`6P1$;-WO&f$n>t!Q2wLLIxTDj?^9G8~bki09xvrnS`pvxbnAx*@uqr*vEytxnk zY(>?x3ve!}RG?47ARzTa83TPXP_neX9u8v(ID!O#c%5aTVM zD&$Rp{K=f*o($m!_#VYv7_eDaEquj(twUN&V*RsTJ3k(4TkaW;jPdijAMByjsn!PBc#d`R~p z~jd_511nhQw`m}?;);j=lG9_ca;?4@V)DF*Ip+2#5yIw?o3T#@}q}u`U)p| z3+Jfsdwro*o3dix<(*wyWI4#*ol8=%bj9`H-TD1GZ9wnX(*Wu97d;9v4%h~N4p9V$ zMo+0G`3}m8(FD+jbtPWRN8kHi0O2mM3Gw|@yKr-1SiPT0kFJAI$gZorld+W%=t zJ-qjKnyl|2z1|AXI45kAb;6cJ_54rqq^y4v*`=pca6XR9-phxql*WSygqt2gbL--kp@(9bQkIgOmzOOa9x zmBn8@KM>w1V4lo$PkT7)u>QRLA7{u7Y}4cdtgrnWHJgw$b;cz_<(ZGA0ompal)y~dl@6sYZt7v{6K;5)!ugWA+&o~ z)b1TXo3cM^{LY5$&G|1XtYse3yXJ7@+B0s%v^wsvGO*Af3iH~pWVY00Y6T89@GaXYrnXT$9!JnJ|) zId28N`xErpDr-W%Pz31mFM`14>2BKmO=&;q8~P>2j&2(9PBi`e8<_$3&!+43fydb-nNCf34IQ>+b%_YpI#e&UmaL2Dffwm$OBS zRUgxeu_XX781BAYlrsH}Zy8PLF3aM%4{`M9)o2@@6t$Nu7^{<*!U1*|SAoCkPn+r6 z!X7uaWg8MH70}5$hhCcdf&?l13#H>BTHS#LB!k5d+NJ6dBU3**2f`jxmHpBiOTM__ zD6bXS4{#W0jElM7qT|v%!qJtbYnOjgjpq*Z?AjA-N==R$GSw*K%>C7yc4av^&EoIp z{-HFOMR}7=T)r3$O;^Gc#+HS3ET-pE-h*V(6;qPnk=s=4JT*-^*g73$Z-5PLJUjE$ zHeaV8N(~wo*9Itp$qSVJIH!hj;_)rOX^{5!)`l04AZ{$?LYvB^T|p!HYrJ=yTaWuT*TlTt4*k@L>gELo&3ncJwlt{lW-e?9*7CY?4gc5;z|a~zU)BSkcx zm-ZrHjV}NaFhJ7^0W2=oV;-SZXcVky;W2ZvEvpgX7#n5d(9q2h*^`D^=2ZH22!8a} z0+=se@wv4nx8&FzX&44j{!wG_%5E;BWd;kR z>r*ehewi_@$5}-NL4LS0{e@iCBR0EAq<(1@=g$*)6Ddw=ga0u9pb_BEqhF@@gFA?c zI#f4Iizc{<)O0H|Sj4RoeAsEAvAMf+@xn zySC+AC_lwH0iPutV*`c$a@Cu^S3Ww3ITb0G@_6{c9WPuQpF}w^Tx0hDhep;>RD6lcq{oeFw&)8c1*T0_6e9_Qn zi22EGkmAJOpazX;tFQ$EY@H58m;bB9kQYtUMltJQk3Uc_Yi@;=Qr&47vh6~laQs+X ztJb^6kIC=hSbNOFC_>E}sro8IeSB<^BWuY0Kuy-aNy_+q%O&qA{Oa(HROJ%hus$L&%0!pnO;! z`<5(^;ObFt<gv2-)w2E zB$zvx*YncpqQ{*#~OzmGC>Fa zEp|Az%}e|8M}-;%qsuD^J)gi2X@t1f4?IFVa<{F7|oW6^tT95+8UG zmRrBZB5oFnfzIgU0Yrq9v~)3i$F6@|e)V>3+n+??4>tuU!F_1}FVl7Qd0%o5 z7(mbqJ?wtpoqv9G{G{OP^0#%ft)6I;m3N?$o1jV)N4!4E0D#^eKfCbrpd?3^34mu`!Vq6>El_82T zcvSbNAcZ@bF^K*oJLItysTj4zkbR1j*Zo9|6*eeAvZ*`%+$+-tq) zkwDf4-rnBk2l)Pii`x1Zr)GByNO0my5-YJshys&ul_Ukpl)mZKPz2jXlJ$D$m* zCy;|&mu07?4^N4459*U1G3B~9esP8UM$h~zYjD>C%-7CapU!-rYkrxs!^Ep^qyu!{ zOPhoKmQFYUjAEGfC0KNuxHjCKTBpxNbcj3DU1qNKryBdsUr;>9?sACRTnU89;rNU8 zNhN?YtiiOVYLuR4#>PDo)ny5P`)JSjF8~E_`i^{Pb<_BMisNl){FxLM_b(*RXI|?Q zf?4Yczhkl)Ufv^=(6JFJ+tKei#b}&&=lQ_&=x?(bf{me)6CGv#&lMN0qCFa-2fB^z z%fG$4Er{-QPuPsL9i5#eL?vd;Y&x@Z0tKUSg(v?76{^wbaZwtal<(^VmR$n<;}#gq z9lF+51e^7&g}q|j!IzJHWb|0VZ#4!ENc)BOuvzKV9NALy{C!QW0&Ma@v3B%joo4b& z2^pyu-Bo^P1sjIvYQxD4Z^V$mx` zr>j9{2=gxA##iDwp<0Sx9`h`05q3)%p!V1L>)?d?OBh>ppaygC^a8_X^}p+$T6cvy zNB1{ArgtyZ_M*pN_mlf>7dVa>!ipWa&v>SqAcn$w!cI^qO5CpBg`!+ma4r)S4AX-u zD}^iMdDBk|)4yFIFM+0QlX%Qb0dhXwW#7?5r$AJT=Z|abe|@;gl&!qGUwaRPe&DD8 zweZHE@2-PvJupD9VB@^3o%(E9I3KzBWxLCLOvl*WV+_X&6s4DnQI;rlc2ILGJf(T1 zI2G8Rr^`X=uE>5gTX~Fi)X~26tt39#$CQcPT~mLxGyVMHeN+@lN(%)q7Y`3yDNcv? zq~vx_(>Wi})}VR*+y?#)#?e)RKnP~pQKmysaw4H*hQwMmYv5l zxs}xm7s4|r6kA`^ye{$*E=iDqcWPunrxDlQISu( zI%QxH60C$blXX+hCzcB`9f+-N8?Ekd8|zMOMGW06afkni&Zt1M9SDG)P3dK3C7P%n zkK^a{&$}Ir<=&s(*mF*n3{a#jD1X_*vb9FRffZ1Xz#X*qWx4m!{$onwOV~Ct(=L&dsgSlh;RKot`G; zmowvP3Av<#%Q&5iSM_El@YebH{!95WkQ-%Gr~lj;#g2fs^?y=;J@o#!Is!r!XT&!jn{2csh==Gg$O-t8RrQD z%Q>Tcgq|#4GrwI<>~NbCt&}ShFCD8&?)31hT`%_H?s+wW)&73pmLlq3SdYzDCpDD8>b*=)G;aXvJhcbj}NcAahehw-e?HAdxW z?_8ICn}3emZ3$@?B#b-j#dluuGqup&LlM3449l^6_1TuGGG*MHv+Mo4`#7{=Y?Dy6 zZv#VZ+>Gg>)I#Cfry@d%oz4QU;m6U`m}u(Q3J(bCwDAq# z(;!Gy!)H7ezbXE{bGw`VsI~wA^E+jl$^C5Au4~E&jq{L)?VN1QgS(+}LN5cgWWXDd zgsIDpi7d74_S>c79Jk9LPxfktT)_06@g7TvLVJ_5zNk~o5M#)csrI<3HuzuCPSMJE zT47I2n~NA-8ZKXIgJwPQ@<@4`SLSX01X@?Gj&=v(M+o8~%3?C_I2#GCp-7M8V}8PN zIY^>6vdlHO|HN>o-4 zsazg@a@-Y@n9=G}#B)6OF#pQKkzx)u@X!1^u&S!@!!1NMRCJ*gQh9`pbf6DGAFeK? zhg8N3>si>Q+WAc`n|o1~O(2S>guR8_BxDkPeDrEA# z5cLI+p-Fo&5B_u-L3hPbZ6(pWP`Z0<+@PvBoCR5}{SB5eoIZDa-K}%#oLYJLS;wE| z#P(RdR34A(6!!~pW%FikWiqoy zDihdxc(@g*mA%@g;#uUw#uJ)s5|s&0<`~AWO%)T)IVg2X`z?!pSGT-t5`TN+L-DS5 zXP$LJA73HI?=dq#ALD{e>p%5FRdtohQDX+%8+j<34ZA#XY;W_a*QcZZVKQSj~m+3 zu$Z1vL*y3Sm+;H+O}aQggjPQ|v| zD`p}RQ#|SiEJ&t{0q5l|#N#-_pi&fV5q6sC(k9Zk>Rw!(vEZN=Zu%AT6 zqNt8w;a&_T!HqJL=DBlB+pC~j8%#r5lN-AnTA6T5Wh6ff(DvV`Dl1)@jF3)!rtG}t zVu^gF==sf-{m2!zC(G@`u5quX)tQnJe$#3M*Sm$yI$jq6FUX{cDb-~HU;e!5EfdxmdqTp>lC|4 z%BD;xy^N>w7ZiviXs*O#$RTn<5WhAVKX37NTViSQx@p`BEBBO&I(J&fw_vf3qJGhK zi2`WAnNzI}x$%T*u8hO>$5Oh6BS2f^n9jJf_85Llm)m_-OX^l*lDj;8jNv}7neoL8 zCPlpq=It;sHUIS_M=OjnVT15sxl;au`5%?RYHgoCN=Lw-HU!90(XUU@r#g^H!~89)7ILC@xCUiYE`*B)S!M7hpY>Z zwfF9M+Rxy5OXE~lDxjRR>z?vg7EM<{QD58Zp2`ElmKu4D3iTA|sbxiXCWA7ED<(ZN zFusDr5>BSbGpzQAQ`jZS2+1m03~u z;AR^iQ-+Q5piw!ba+T1Mcf!g+a0;W=n4Wm=R3&#Y-36^wC52l>#m{F!d>Tq;rsWGs z+iiJ5V~05B#q{)p*G2l0k?Qo8gL*acBH8>Wl~z*-7qF7rDHkPQq@Gjos}<3UP~MS8 z&log$h#n`XVF+1yVCui*o=C`a5}+r{WHE1J0ocWl@_Mhof6VyGHrrromve8unqHT! zFe$q1HSLmO9MYsfxLa_yK{ix!E`ZJ**4$V=*$g5%Ry~-lo|Kn?jwMF9<^nx;g0@>( zqtKFKsMffGdVKK}#sYPmwo)5XFBqz4>O4Wz!;7eEj0V(>x_Y=<=n~l1H{!~Z3>nmZ zg-1WaCdhV$5+Y71fBK0yANBDOkiSZ&Z?)U9Nq0xeWY#V&DIpN@C_i+kXPg$+3;xs@ z|4}DKWuN_B1NfYIq`x7g(`e*PM8I ze^yEkDiXiK?}vc3*n}xNr;5=RsD7(kEwT??k6-Birwp0ie>KlG_F=JxE@TC6wH$5w zi~5@=@Zq(i4=Tevti?d``>WCSij%<5E(}zrDXHiK@uGs?x=l0Jp=ZGDmDXwykY3CweOEf=P zLi5rLxtGObRD9a%=}Ff0*SE0W6vU+MJQ9P2+mr?9CKUARXlc4xv>gKbIhKmft1Hrr ziRPQc^YZ}73Hv8On`=oip^0!=E`CM8Z}Q5xlt%oDd4Xztp-{e(T$^-(pgULHZng{` za-?v_a&$-d_lr+htb{tdw|d2Y)J2Cp445>qd?D#_*I-An zT+;EDGLCi*zf$%E0~7joO*R8a=ed>l*Wx`iQL5LDq}FdU<25+Po2nfHY+mH%I` zB|t8~P^z1+D3Z*=-yRn0!{QY-H{_9R&iHg4e}vC+lseQ6gN8J&@ybo8!F1j-S5NS9N%D0tSb~dAWP-O0mX4lZrhOaA zE%{_zg(BYkB2L`-Q1yMJX}JzT=qkMXjp#uYe1>9-F1*>{h{|5;z@9kT*q|9ToZ*9j zT9Ib8l^o?g=jmrBrt}cb&n5*O1mip|b*fmrC{pgcI90sAxO4L)XWiUcf~}YKD0N?4 z((%f9skZ=~K9}i#1%m2!uWxUZM`gvARyc_~qEV!76dd+@7wEKy66|emh!;r{y+r`q zjQ^}a=o6Cs7EE&o$F^I=omUINc+nY;Hjm5r!KP0CGNvy228`s{6Y`&L5u zE38CcuHmd(k;bZ(Y~4DFZm347ng2MNPuu8pYE0QQc!!B6J%vLP6NJ1}^JkKRbmHvoFOf>oIwfM-i%OX3{W_XYJ zvV%@LTMeiAJtx+tpFp$K1-s8xofo7M{-_!toa#k^U;1m;yE9)AUY_h52}Ag+4(SDm~~qfK-i%ViK8Wv>p6eyghRR zL-yszqD%?2F=i}Rdu&2k1j8i1P3b7!HaA6+?A5L}%^<^0QSY`ewn;dT%YkdNf2d@c{!Kld<3Svw>+81BC! z$#}uq!#4HVEI1#r(jHc*yr8~|zQ8cx1jtW7qmBTt zP_wEdqoOsk)En8!KFlD40kt zM0dZgV$9B(!Yqrf+sLp=`*Qz(q`e1JliAw#4@g&}Dhg6WIwFdQ14sx(>4YlM6+t>E zRZ1v=1yB$|Z=qKK=~AN%h=3Y;l_F9?Z=nT3{yR9%an3pK`+e*CuQki1v(}6cPuct4 z_kCTzD}xDx@#selEL2_B=g7NCO|B1>tFW(wFgut#W}xT8EFD;v|J7RtG`!z*a>jrM z)EgFjirkp|;BFoli_>uLp)Qu2uU&501bnuG7m(XpB7%Vg1e0Cf;?riJvIyxZcM0R#M>FA{j%#J9>>hYo!i?2K1s(kOk zyo|Sq?cNBUI{eCA{tRYnHHAl*$$18{WopdTY|q7tH?yrwIMZU{k7>vJ6Dad3jpW)t ztDzhqK|$kW?t*bCQFB!L&SBx@mI*WZcg4|v@b{*I2UbA>L(iq!$I)W}6Ze7jCw{3w zz~8zCR@-*#)eRpw%>$#;Dz$Z(56$kBGI;Ksw6_ehFOpmp6sL58!`TlT%HuOQ=gE}gAS?1GL${l1rJ+UV@X)tjVwMBI)d`I_+s9V zjQbjG_67*+_hFk(;W_hPNt)ZI4@N37zNp;E z07R1T>H(Xp6Q?0r-l1Jz=g<7tPyQoyOxv6IY5VvRv*j2By1b)9m=#R^90u=w8|q#9 z-21hvxO!xS$m{_QoZ(vr?8AYnR3lDcd^+k}18@FueZF^arQSD}ZtuJE02rZ)0D%Y? zmlhQa_Ympg>YU<-BJbYYWyRG=^2)r!(6(tvs1yhY+A_ojwVg@fF~yhS1MaagX!kse zHt$pV`A#~~@_B+n$~<4Ap@keQw4BI>$;kfq!IT%k7v@S^rAQ-Jh(^MkbauCQr4v}= zp;+#!5|>9+m);c@T-<2+pwPJhzhyC>)3qO=uquC_A6vE^?eA9~d*C)gXY$UVkxDp7 z#mz}&_Hk^dGAL2`NIh54^RU87^g6&SY`ZqrkT-;MdOgbNfpn z!ybijfjuGDcQQJhzjit~xAi1}3qJkGbCUG=J6A9}SO)CtrGh-0VP!7(WVOf2x8V}h z?CHhfq8gLPv>1SnmjRw#vwCNYq!`{Y6sT!>w->l9%3PX^maB!lZJT#R#>5c^phK%| z!I~*>ZgB-+$t1!pCjG~s0>|cy!eS2ez^DYA z7nic!L}He*KzF?vmb?6Y_kb2tH*akJT6NHHPzEJRJvTgEkTyT3?v{BIY?o>ebuz;h z+98)dCJSZcFktLfusnknv4nkd30nICT+ZBLb^x$P63OMhv-?p?SwLdov_DEScg zb<}fes2e~EN0&wx`G?;jB13rzCpaZq>YRsC&P~%^ZBGORrNo^=W=uOJq%y7e!&jk5 z{zDu~sz72Ff|Z5sn?e3q`#I&r2#T1P3{ukA&ohC6(Wf#I0Wl1joA%tz0yxY8+oXQJ ztkMd(t64>fHFj$N9=GWBtk!>ZPV>)igZlfqJLHX#wIRs$2bYFtmY>Bi`Ddb~X1a6l zvu?i}XTey{b@y?d-Q%5rdcF8q!_>8(FS*tvL_rob#gH!&UAo(EL)CZ-18!NoYFC?NpxzU-1&5;KTx-Op~^ zAD=Ke)p&p5%XTYk=UDZ5Mb9eWfCBQZXIv7^q6?<+FXh^R;%vhjIVxH+HhsIZqhl%I ziom-WEB@esx8bQ0EABGxErNy(MEKK!(A*H+pk^6uKe@it-*22 z_z0w<;`8Of+|-ijE$06;+8fT{#)6Qk;2^me9PQ_48%(KvZMR@XLlI^I?!A5_Q+Uk# ztQjlC;5wfTFiDE1?Pt!O=91&ivuF|+UGY zae+L6yp4wA7@tMs#g;nscEheyI31mukp453i`=Ld-#;sqSLtbY>H=aDnG7ryOYyW@ z#xtN^-?_;5&elXy!DC)lXY0XY<7M_`wVIP#%JA-WA3{vQ3G3q5S@f~z!(iMv5ti^$ zk4iwS3v1lquKLvr(1aq34{WFiI2}i)Y*`BC$=}ImKMN6n(T-larz&umaE3dHJd0TK#c}@p@ zDahveY#xbSW1}`ZKD~reG!{C&*gcs;d2v)G4ZeKbRvXF}ld?X{-dmNh35qZ#1(n@) zDG!|#=%6u;xf(WXkQ+R)7zV7xK7q$PDtaQfbe`eKiJ5|#%g@wrBsTPY^KAjaS?2pc zw)DUQFaWatJLbjC^ju&d8hfaam;Y{LU;f{UsF7$N+BXjWdm>I!SIw=dM~l1 z4^jfQMNkaIAKa{DxHm;U#}n5|(YNh`AwTxFZ5!{T-O8?J__vnW9@FFv@UNhD)G>}z z=m*JzM4uhnY=#Jd6gylns`)maZQ~(UWAb0wohI88Jmm+A@dOJiDbMd&k#Y}{fgF{{ znZsVQybvJykz->feyf^Dd3=+{V&?nh3sEFkyCrtJFLApbpyXu!e*~$mDJ1cR20oA8Vny7Pgg?h-m8Y169ot0lTi`s%Of_I zA?-I8L!{{G&e`9!cy{laPERBg49l6J9i68TnqQVN81VF>>F_yTeE!PiXXA1+;3RND z09#fIPRN%wn-)?21bC9c~o6n@nw0EpiHJU8lQPdwKfr~Td8(t zCDYES&;{&1b}tOQ8yYk8w;(#^Es5FR?L7ry?eb7L#3j^603`l~@ZvXr^hh^;P~b<9XPj(r%xXKCu2%i8o69jk6N_wq)^VfYL!g5teMC2+*K*xOB zXp}OC<%N?IXvpENqM<#oxL)Pk)c9W!2wt8=0shMdGT689rEElGnc}S_Cn8+UX~MO$ z*fDY}U^*^Xa$WVh|C*S^@*p!6sGm253Y1}vYfjzOn6=0M6W4_f(NqX%rEY8iQC^9^i$+dH`f>QWN#1?U?+W7K*g z$1kw>d@*dPKlH&H3I^S@{t|zf09beEe9YsaFAjsy}9v zu*>y{4=%-B-0LGg3(@^=PM3hdj+j^DDvSV97ze@|C#{S2w!4vRepxpnng8`q-)p$Lm3Mr3?j}E}56;*Gf z2|t}W(a4GMkT0e8Db^PO=*SYHZtXl{*PJ^jv5;O*nX*s$xMrqJXRVEa5k8Ehr@UHu zb+C>eKHgJqt|%eE@PhF!z<~a0`u+90W-*2l&ba5*HZ;-$S>+uc&v`VA7L_*Ctpc>A zt2hFf5)2)`jLf!h)-c&jp)8Ad77An`b}FsxO?$U0-gS3%ZS-q`B_Y&=zx&o-T!;E2 zu0!d8@w>I++xwLp^HXsfv9auSh;Vwy!E+#Z9^Msk0>Sha;kjEMKi=|n98lcu#^ur2 znY>mA6}NYB-*`2!c~)(upZdDnGqqa)7O68 zEE#ipo_Htyles?aEPiJE6hTsD1!TTY&;fiFV~~} zS>bc|7=U~=PCLwkcXt=rtbSUUBOG2VPx;(DQuS*2v`J%~Q*(En$2xsC;`Qxf+{p4$ zcUI5W8_TB2cxaVK(|mQ(euD=p^wQ+{hfa`U_=`*rYRxJ&ff4-<{%W1ge+om<2c zhu6e@y@{4*IgrYi*?ykf1A(-MVUl2{tM{ldXWwyV zR^tt;ksTeCTpCEhdQ4O#SJ^36qhrFLA6oa##&*$TavnoLUqY>=B@1or(JcSZLxdlhB}i-U7D8y$nP37t*4UZaC?j>*&I zkO2CH@ji6e%4ibDv#L6noA;r@U@_7_ZgOWhnf}h40oSwYRo1kwgSz6u1BH5J>Zhq!ONBbvzo^IJ7GP_#HXaZDT-y{{>SAD!W3J{D9QHLA zEgl>J?_$BJm0+}Wn-q}VEQb|7g>s|9sI@e%WQd}NyICLqH7%#5e8)>WixW!rR7WyP zps=j`XZ#O!G}QYwTe6)=TiQ@`zWCia`R(2N=$f$9Cb{>i3N)AeCnmX;rmF39QB%ji zy!i3hrYxTD&)VJLJqGV+CkK42oMtlA7 zp5JfU4Bt~;vbjFt+KAt)GW;S(kq@-=#AAWys7GXsagF_qn#uMmdb9;-(1~L0`1a~z zT*=!X^!8fs>sH1M64S&4+KSA4$hz{65Ac~0T;?PNLg|J)6AK~}&&+JxG4ma}c&f1) zR_6jxNphuWw3k;8uiW0>b}?-kNR9Npyq)r<1}-XSjllSJ5w79FPHlPPy@g^3NhJj9 zmhX$7Nw>?aE0C(pMRuY$8o-_L9tZhr#{S*f6v+xeT8hatk3-x z+#q%ump0A$`KxR`dekRt^zDRJ^$aQM@|RO1r#Wy9S&toNX>!+){che|e!X1>oTeD` zox=&iZqAFWRV1(eTV4}+-Se3sXL#7FRZ|^CsZ5~Z1ZdesK{1!_Yx_P1HGW$I0Hfj6 zR`d1_>!L%DAaXZY#p=(aZq zc)9w8h0diHQB)%cm@J#!0K~Tjd%e6&h1Gv;Z1&l_NM%xd^Ob%>1ZJ_Rk9|T}l+|Qc z`Eah@?2v|sLv~wkVtLAsx>8^g#a61{w9>hwN8^*TR^c;}pR=;DxX3m}hR9^>@-1Y` zD%}^}F748np#i;&5Ry5KThP_{pL30j(wVT6a3|!E(2iHnCD;1E<_(a&TrCd!@o(;j zzjA7V?$T6R)sYvC*;Q@t%^|C$-29U-FDx3q^BF8QVHMi^Ds%jsq$W|LJ?&5$!RhwI z1F+a6l@(y9z3tg+&iLSei_lx&(Nupx%+M>}Yo~Np?9B!gIJ1Wzax~Sy5GLGKIldgH zNHPa5pD#XGsrtEh4u)uM9ZJP zC3xpPQB?M~BrTEl;osaU?P)T;*xk*cH_w-F>;eKWBOyK$W+fhrY!|Fg_xmqZ+m-wD z3!A*1)D$)T?@DfS^{KCLfIkF4;$L76Ne%$!klB2>xrC}2|F}JbSN7bG@qL5lhmSS2 zh7+v2=RDXqZwx>Fp=rw1pG)(jw9+5&T$;u;oEn!0e0hq!=W|#ubhb7;#C@7=Nq8%} z+?KpZLjfkFG!*99-YdxM-iD7XLEmVtDm>->m}RysH}Wd$pJB#gl>#jtOfHQuZ|`K8 zCd|}-RS{nX$E%Wfo(ZQ(zoVbOmT|4UA8anJZe%}Ijs`4FL9Shj# zk56QB(;xh|RKCiMEsImze+j(}qi$yikc>&sd{o&$zs=Ym`Cq^s)AP6F&NPG*!Cq

M%TJr7r1_Ek(qWQ_0uGR#{CMGwGGs= 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 literal 0 HcmV?d00001 diff --git a/monitoring/README.md b/monitoring/README.md new file mode 100644 index 0000000..241d75c --- /dev/null +++ b/monitoring/README.md @@ -0,0 +1,28 @@ +# mini_dns monitoring stack + +Prometheus + Grafana for the device's `/metrics` endpoint. Runs on your dev +machine, not the ESP32 — the ESP32 is just a scrape target. + +## Setup + +1. Find the device's LAN IP from its boot log (or `edge-dns.local` if your + local resolver forwards mDNS, which most don't by default). +2. Edit `prometheus/prometheus.yml`, replace `` with that IP. +3. From this directory: + ``` + docker compose up -d + ``` +4. Prometheus: http://localhost:9090 — check Status > Targets, `mini_dns` + job should be `UP`. +5. Grafana: http://localhost:3000 — login `admin`/`admin`, you'll be + prompted to change it on first login. Dashboard "mini_dns" is + auto-provisioned under the `mini_dns` folder. + +## Notes + +- If the device's IP changes (DHCP lease renewal), re-edit + `prometheus/prometheus.yml` and `docker compose restart prometheus`. + A static DHCP reservation on your router avoids this. +- Grafana's datasource and dashboard are provisioned from files + (`grafana/provisioning/`) — don't hand-edit them in the UI, changes + won't persist across container recreation. diff --git a/monitoring/docker-compose.yml b/monitoring/docker-compose.yml new file mode 100644 index 0000000..27cec21 --- /dev/null +++ b/monitoring/docker-compose.yml @@ -0,0 +1,26 @@ +services: + prometheus: + image: prom/prometheus:latest + container_name: mini_dns_prometheus + volumes: + - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro + - prometheus-data:/prometheus + ports: + - "9090:9090" + restart: unless-stopped + + grafana: + image: grafana/grafana:latest + container_name: mini_dns_grafana + depends_on: + - prometheus + volumes: + - ./grafana/provisioning:/etc/grafana/provisioning:ro + - grafana-data:/var/lib/grafana + ports: + - "3000:3000" + restart: unless-stopped + +volumes: + grafana-data: + prometheus-data: diff --git a/monitoring/grafana/provisioning/dashboards/dashboards.yml b/monitoring/grafana/provisioning/dashboards/dashboards.yml new file mode 100644 index 0000000..0410f93 --- /dev/null +++ b/monitoring/grafana/provisioning/dashboards/dashboards.yml @@ -0,0 +1,9 @@ +apiVersion: 1 + +providers: + - name: mini_dns + folder: mini_dns + type: file + updateIntervalSeconds: 30 + options: + path: /etc/grafana/provisioning/dashboards/dashboards diff --git a/monitoring/grafana/provisioning/dashboards/dashboards/mini-dns.json b/monitoring/grafana/provisioning/dashboards/dashboards/mini-dns.json new file mode 100644 index 0000000..314c6e0 --- /dev/null +++ b/monitoring/grafana/provisioning/dashboards/dashboards/mini-dns.json @@ -0,0 +1,95 @@ +{ + "title": "mini_dns", + "uid": "mini-dns", + "timezone": "browser", + "refresh": "15s", + "time": { "from": "now-1h", "to": "now" }, + "panels": [ + { + "id": 1, + "title": "Query breakdown (rate/5m)", + "type": "timeseries", + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 0 }, + "targets": [ + { "expr": "rate(dns_queries_total[5m])", "legendFormat": "queries" }, + { "expr": "rate(dns_local_hits_total[5m])", "legendFormat": "local_hits" }, + { "expr": "rate(dns_cache_hits_total[5m])", "legendFormat": "cache_hits" }, + { "expr": "rate(dns_cache_misses_total[5m])", "legendFormat": "cache_misses" }, + { "expr": "rate(dns_forwarded_total[5m])", "legendFormat": "forwarded" }, + { "expr": "rate(dns_blocked_total[5m])", "legendFormat": "blocked" } + ] + }, + { + "id": 2, + "title": "Upstream health (rate/5m)", + "type": "timeseries", + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 0 }, + "targets": [ + { "expr": "rate(dns_upstream_replies_total[5m])", "legendFormat": "replies" }, + { "expr": "rate(dns_upstream_timeouts_total[5m])", "legendFormat": "timeouts" }, + { "expr": "rate(dns_upstream_retries_total[5m])", "legendFormat": "retries" }, + { "expr": "rate(dns_servfail_total[5m])", "legendFormat": "servfail" } + ] + }, + { + "id": 3, + "title": "Upstream latency (p50/p95/p99)", + "type": "timeseries", + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 8 }, + "fieldConfig": { "defaults": { "unit": "ms" }, "overrides": [] }, + "targets": [ + { + "expr": "histogram_quantile(0.50, rate(dns_upstream_latency_ms_bucket[5m]))", + "legendFormat": "p50" + }, + { + "expr": "histogram_quantile(0.95, rate(dns_upstream_latency_ms_bucket[5m]))", + "legendFormat": "p95" + }, + { + "expr": "histogram_quantile(0.99, rate(dns_upstream_latency_ms_bucket[5m]))", + "legendFormat": "p99" + } + ] + }, + { + "id": 4, + "title": "Saturation", + "type": "timeseries", + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 8 }, + "fieldConfig": { "defaults": { "unit": "percentunit", "max": 1, "min": 0 }, "overrides": [] }, + "targets": [ + { + "expr": "dns_cache_entries / dns_cache_capacity", + "legendFormat": "cache" + }, + { + "expr": "dns_inflight_queries / dns_inflight_capacity", + "legendFormat": "inflight" + } + ] + }, + { + "id": 5, + "title": "Blocklist domains", + "type": "stat", + "gridPos": { "h": 4, "w": 6, "x": 0, "y": 16 }, + "targets": [{ "expr": "dns_blocklist_domains", "legendFormat": "domains" }] + }, + { + "id": 6, + "title": "Upstream timeout rate", + "type": "timeseries", + "gridPos": { "h": 8, "w": 18, "x": 6, "y": 16 }, + "fieldConfig": { "defaults": { "unit": "percentunit", "min": 0 }, "overrides": [] }, + "targets": [ + { + "expr": "rate(dns_upstream_timeouts_total[5m]) / rate(dns_forwarded_total[5m])", + "legendFormat": "timeout rate" + } + ] + } + ], + "schemaVersion": 39, + "version": 2 +} diff --git a/monitoring/grafana/provisioning/datasources/prometheus.yml b/monitoring/grafana/provisioning/datasources/prometheus.yml new file mode 100644 index 0000000..bb009bb --- /dev/null +++ b/monitoring/grafana/provisioning/datasources/prometheus.yml @@ -0,0 +1,9 @@ +apiVersion: 1 + +datasources: + - name: Prometheus + type: prometheus + access: proxy + url: http://prometheus:9090 + isDefault: true + editable: false diff --git a/monitoring/prometheus/prometheus.yml b/monitoring/prometheus/prometheus.yml new file mode 100644 index 0000000..252158a --- /dev/null +++ b/monitoring/prometheus/prometheus.yml @@ -0,0 +1,9 @@ +global: + scrape_interval: 15s + +scrape_configs: + - job_name: mini_dns + metrics_path: /metrics + static_configs: + - targets: + - ":80" From 23a247ed030879f128dba1e56ebaad0e66865a56 Mon Sep 17 00:00:00 2001 From: Shantanu Mane Date: Tue, 4 Aug 2026 20:07:55 +0530 Subject: [PATCH 14/14] fix(ci): stop double-running CI on every PR-branch push MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit push had no branch/tag filter, so every push to phase7a-partition-ota triggered both the push and pull_request events for the same commit — two full firmware+host-test runs per push. Scope push to main and version tags (pull_request already covers feature-branch commits), and add a concurrency group so a new push cancels a still-running prior one instead of queuing behind it. --- .github/workflows/ci.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2937059..0b92cfe 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,8 +2,14 @@ name: CI on: push: + branches: [main] + tags: ['v*'] pull_request: +concurrency: + group: ci-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + jobs: firmware-build: name: Build firmware (ESP32-S3)