This commit introduces several major performance improvements and adds robust error handling for malformed HTTP requests: Performance Optimizations: - Add database migration with BRIN indexes for time-series data and partial indexes for recent queries, significantly improving query performance - Create global StreamingPacketsPubSub system for real-time packet distribution with geographic bounds filtering using ETS for fast lookups - Refactor PacketConsumer to use Stream module for memory-efficient processing, preventing memory accumulation during batch operations - Implement dedicated BroadcastTaskSupervisor pool for async broadcast operations, preventing GenServer blocking on I/O - Increase database connection pool from 25 to 45 (production) and 15 to 30 (dev) for better concurrency support Error Handling: - Add SentryFilter to prevent Bandit.HTTPError from missing Host headers from cluttering Sentry (common with bots/scanners) - Configure custom 400 Bad Request error handling - Filter out common bot/scanner paths from error reporting All changes include comprehensive test coverage following TDD practices. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
39 lines
1.4 KiB
Elixir
39 lines
1.4 KiB
Elixir
import Config
|
|
|
|
# For production, don't forget to configure the url host
|
|
# to something meaningful, Phoenix uses this information
|
|
# when generating URLs.
|
|
|
|
# Note we also include the path to a cache manifest
|
|
# containing the digested version of static files. This
|
|
# manifest is generated by the `mix phx.digest` task,
|
|
# which you should run after static files are built and
|
|
# before starting your production server.
|
|
config :aprsme, AprsmeWeb.Endpoint,
|
|
cache_static_manifest: "priv/static/cache_manifest.json",
|
|
adapter: Bandit.PhoenixAdapter,
|
|
http: [ip: {0, 0, 0, 0}, port: 4000]
|
|
|
|
# Runtime production configuration, including reading
|
|
|
|
config :esbuild,
|
|
version: "0.17.11",
|
|
default: [
|
|
args: ~w(js/app.js --bundle --target=es2020 --outdir=../priv/static/assets --loader:.ts=ts),
|
|
cd: Path.expand("../assets", __DIR__),
|
|
env: %{"NODE_PATH" => Path.expand("../deps", __DIR__)}
|
|
]
|
|
|
|
# Do not print debug messages in production
|
|
# of environment variables, is done on config/runtime.exs.
|
|
config :logger, level: :info
|
|
|
|
config :sentry,
|
|
dsn: "https://337ece4c07ff53c6719d900adfddd6e4@o4509627566063616.ingest.us.sentry.io/4509691336785920",
|
|
environment_name: Mix.env(),
|
|
enable_source_code_context: true,
|
|
root_source_code_paths: [File.cwd!()],
|
|
before_send: {Aprsme.SentryFilter, :before_send}
|
|
|
|
# Configures Swoosh API Client
|
|
config :swoosh, :api_client, Swoosh.ApiClient.Req
|