Skip to content

Move Elixir observability dashboard to Phoenix#29

Merged
frantic-openai merged 2 commits intomainfrom
codex/move-web-server-to-phoenix-main
Mar 5, 2026
Merged

Move Elixir observability dashboard to Phoenix#29
frantic-openai merged 2 commits intomainfrom
codex/move-web-server-to-phoenix-main

Conversation

@frantic-openai
Copy link
Collaborator

@frantic-openai frantic-openai commented Mar 5, 2026

Context

Replace the custom Elixir observability TCP server with Phoenix while keeping the shipped escript and existing operational API calls working the same way they did before.

TL;DR

Move the Elixir observability dashboard and API onto Phoenix without breaking the escript or curl workflows.

Summary

  • replace the custom HTTP server with a Phoenix endpoint, router, controller, and shared presenter
  • add a LiveView operations dashboard with PubSub-driven updates and embed its CSS and JS assets in code
  • preserve runtime compatibility by accepting form-style POSTs and extending the endpoint coverage around those paths

Alternatives

  • keep extending the hand-rolled TCP server, but that keeps custom parsing and routing complexity in the app
  • serve dashboard assets from priv directories, but the shipped escript cannot rely on those files existing on disk

Test Plan

  • make -C elixir all
  • mix -C elixir test test/symphony_elixir/extensions_test.exs
  • ./bin/symphony --i-understand-that-this-will-be-running-without-the-usual-guardrails --port 40123
  • curl -si http://127.0.0.1:40123/dashboard.css
  • curl -si http://127.0.0.1:40123/vendor/phoenix/phoenix.js
  • curl -si -X POST -d '' http://127.0.0.1:40123/api/v1/refresh
  • curl -si -X POST -d '' http://127.0.0.1:40123/api/v1/state

frantic-openai and others added 2 commits March 4, 2026 17:04
Summary:
- replace the custom TCP observability server with a Phoenix and
  Bandit endpoint while preserving the existing JSON API routes
- add a LiveView operations dashboard backed by a shared presenter
  and Phoenix PubSub updates
- serve dashboard styling as a static CSS asset and document the
  new web stack and build flow

Rationale:
- keep the optional observability surface maintainable without
  carrying custom HTTP parsing and routing code
- preserve the repo's no-node workflow while giving the dashboard a
  real Phoenix runtime and cleaner asset boundaries

Tests:
- make -C elixir all

Co-authored-by: Codex <codex@openai.com>
Summary:
- serve the dashboard CSS and Phoenix JavaScript bundles from
  compiled modules instead of filesystem-backed Plug.Static paths
- allow form-style POST requests to pass through Plug.Parsers so the
  observability API keeps its existing 202 and 405 behavior
- extend the endpoint tests and verify the built escript serves the
  asset URLs and refresh routes correctly

Rationale:
- the shipped escript cannot rely on dependency priv directories or
  app static files being present on disk at runtime
- operational curl scripts previously posted empty form bodies, so the
  Phoenix parser needs to preserve that compatibility

Tests:
- make -C elixir all
- ./bin/symphony --i-understand-that-this-will-be-running-without-the-usual-guardrails --port 40123
- curl -si http://127.0.0.1:40123/dashboard.css
- curl -si http://127.0.0.1:40123/vendor/phoenix/phoenix.js
- curl -si -X POST -d '' http://127.0.0.1:40123/api/v1/refresh
- curl -si -X POST -d '' http://127.0.0.1:40123/api/v1/state

Co-authored-by: Codex <codex@openai.com>
@frantic-openai frantic-openai merged commit b0e0ff0 into main Mar 5, 2026
3 checks passed
@frantic-openai frantic-openai deleted the codex/move-web-server-to-phoenix-main branch March 5, 2026 01:24
@@ -0,0 +1,32 @@
defmodule SymphonyElixirWeb.Endpoint do

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

elixir/.gitignore

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

elixir/lib/symphony_elixir_web/error_json.ex

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants