Add PromEx with Application/BEAM/Phoenix/LiveView/Ecto/Oban plugins plus a custom plugin that bridges existing Towerops Oban/Redis telemetry events. The metrics HTTP server runs isolated on port 9568 so scrape traffic never traverses the public Traefik IngressRoute. The pod template carries prometheus.io annotations (scrape, port, path, job) so the external Prometheus on 10.0.15.31 discovers each pod through the existing kubernetes-pods scrape job (apiserver-proxy).
177 lines
5.4 KiB
Elixir
177 lines
5.4 KiB
Elixir
defmodule Towerops.MixProject do
|
|
use Mix.Project
|
|
|
|
def project do
|
|
[
|
|
app: :towerops,
|
|
version: "0.1.0",
|
|
elixir: "~> 1.18",
|
|
elixirc_paths: elixirc_paths(Mix.env()),
|
|
start_permanent: Mix.env() == :prod,
|
|
aliases: aliases(),
|
|
deps: deps(),
|
|
compilers: [:phoenix_live_view] ++ Mix.compilers(),
|
|
prune_code_paths: false,
|
|
listeners: [Phoenix.CodeReloader],
|
|
dialyzer: dialyzer(),
|
|
test_coverage: [ignore_modules: ignore_modules_for_coverage()]
|
|
]
|
|
end
|
|
|
|
# Vendored SnmpKit library, generated protobuf modules, and purely
|
|
# declarative Phoenix/Absinthe type modules are excluded from coverage
|
|
# calculations since they are third-party, generated, or data-only code.
|
|
defp ignore_modules_for_coverage do
|
|
[
|
|
~r/^SnmpKit/,
|
|
~r/^Towerops\.Agent\./,
|
|
~r/^Inspect\./,
|
|
~r/^ToweropsWeb\.GraphQL\.Types\./,
|
|
~r/HTML$/
|
|
]
|
|
end
|
|
|
|
# Configuration for the OTP application.
|
|
#
|
|
# Type `mix help compile.app` for more information.
|
|
def application do
|
|
[
|
|
mod: {Towerops.Application, []},
|
|
extra_applications: [:logger, :runtime_tools, :os_mon]
|
|
]
|
|
end
|
|
|
|
def cli do
|
|
[
|
|
preferred_envs: [precommit: :test]
|
|
]
|
|
end
|
|
|
|
# Specifies which paths to compile per environment.
|
|
defp elixirc_paths(:test), do: ["lib", "test/support"]
|
|
defp elixirc_paths(_), do: ["lib"]
|
|
|
|
# Specifies your project dependencies.
|
|
#
|
|
# Type `mix help deps` for examples and options.
|
|
defp deps do
|
|
[
|
|
{:argon2_elixir, "~> 4.0"},
|
|
{:nimble_totp, "~> 1.0"},
|
|
{:eqrcode, "~> 0.2.1"},
|
|
{:phoenix, "~> 1.8.3"},
|
|
{:phoenix_ecto, "~> 4.5"},
|
|
{:ecto_sql, "~> 3.13"},
|
|
{:postgrex, ">= 0.0.0"},
|
|
{:phoenix_html, "~> 4.1"},
|
|
{:phoenix_live_reload, "~> 1.2", only: :dev},
|
|
{:phoenix_live_view, "~> 1.1.28"},
|
|
{:lazy_html, ">= 0.1.0", only: :test},
|
|
{:phoenix_live_dashboard, "~> 0.8.3"},
|
|
{:esbuild, "~> 0.10", runtime: Mix.env() == :dev},
|
|
{:tailwind, "~> 0.3", runtime: Mix.env() == :dev},
|
|
{:heroicons,
|
|
github: "tailwindlabs/heroicons", tag: "v2.2.0", sparse: "optimized", app: false, compile: false, depth: 1},
|
|
{:swoosh, "~> 1.24"},
|
|
{:gen_smtp, "~> 1.0"},
|
|
{:cbor, "~> 1.0"},
|
|
{:req, "~> 0.5"},
|
|
{:castore, "~> 1.0"},
|
|
{:sweet_xml, "~> 0.7"},
|
|
{:yaml_elixir, "~> 2.9"},
|
|
{:telemetry_metrics, "~> 1.0"},
|
|
{:telemetry_poller, "~> 1.0"},
|
|
{:prom_ex, "~> 1.11"},
|
|
# Required by PromEx's standalone metrics HTTP server (port 9568)
|
|
{:plug_cowboy, "~> 2.7"},
|
|
{:gettext, "~> 1.0"},
|
|
{:jason, "~> 1.2"},
|
|
{:dns_cluster, "~> 0.2.0"},
|
|
{:libcluster, "~> 3.4"},
|
|
{:oban_pro, "~> 1.7", path: "vendor/oban_pro"},
|
|
{:oban_met, "~> 1.0", path: "vendor/oban_met", override: true},
|
|
{:oban_web, "~> 2.11", path: "vendor/oban_web"},
|
|
{:bandit, "~> 1.5"},
|
|
{:phoenix_pubsub_redis, "~> 3.0"},
|
|
{:ecto_psql_extras, "~> 0.6"},
|
|
{:mox, "~> 1.0", only: :test},
|
|
{:absinthe, "~> 1.7"},
|
|
{:absinthe_plug, "~> 1.5"},
|
|
{:absinthe_phoenix, "~> 2.0"},
|
|
{:honeybadger, "~> 0.24"},
|
|
{:error_tracker, "~> 0.7"},
|
|
{:error_tracker_notifier, "~> 0.2"},
|
|
{:stream_data, "~> 1.1", only: :test},
|
|
{:tzdata, "~> 1.1"},
|
|
{:styler, "~> 1.10", only: [:dev, :test], runtime: false},
|
|
{:mix_test_watch, "~> 1.0", only: [:dev, :test], runtime: false},
|
|
{:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false},
|
|
{:credo, "~> 1.7", only: [:dev, :test], runtime: false},
|
|
{:mix_audit, "~> 2.1", only: [:dev, :test], runtime: false},
|
|
{:inet_cidr, "~> 1.0"},
|
|
{:cloak_ecto, "~> 1.3"},
|
|
{:geo_postgis, "~> 3.7"},
|
|
{:logger_file_backend, "~> 0.0.13", only: :dev},
|
|
{:logger_backends, "~> 1.0", only: :dev},
|
|
{:tidewave, "~> 0.5", only: :dev}
|
|
]
|
|
end
|
|
|
|
# Dialyzer configuration for static analysis
|
|
defp dialyzer do
|
|
[
|
|
plt_file: {:no_warn, "priv/plts/dialyzer.plt"},
|
|
plt_add_deps: :apps_direct,
|
|
plt_add_apps: [
|
|
:mix,
|
|
:ex_unit,
|
|
:ecto,
|
|
:plug,
|
|
:plug_crypto,
|
|
:phoenix,
|
|
:phoenix_pubsub,
|
|
:phoenix_live_view,
|
|
:phoenix_template,
|
|
:oban,
|
|
:decimal,
|
|
:redix,
|
|
:telemetry,
|
|
:ssl,
|
|
:public_key,
|
|
:geo,
|
|
:geo_postgis,
|
|
:db_connection
|
|
],
|
|
flags: [:unmatched_returns, :error_handling, :underspecs, :unknown],
|
|
ignore_warnings: ".dialyzer_ignore.exs"
|
|
]
|
|
end
|
|
|
|
# Aliases are shortcuts or tasks specific to the current project.
|
|
# For example, to install project dependencies and perform other setup tasks, run:
|
|
#
|
|
# $ mix setup
|
|
#
|
|
# See the documentation for `Mix` for more info on aliases.
|
|
defp aliases do
|
|
[
|
|
setup: ["deps.get", "ecto.setup", "assets.setup", "assets.build"],
|
|
"ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"],
|
|
"ecto.reset": ["ecto.drop", "ecto.setup"],
|
|
test: ["ecto.create --quiet", "ecto.load --quiet --skip-if-loaded", "test"],
|
|
"assets.setup": ["tailwind.install --if-missing", "esbuild.install --if-missing"],
|
|
"assets.build": ["compile", "tailwind towerops", "esbuild towerops"],
|
|
"assets.deploy": [
|
|
"tailwind towerops --minify",
|
|
"esbuild towerops --minify",
|
|
"phx.digest"
|
|
],
|
|
precommit: [
|
|
"compile --warnings-as-errors",
|
|
"deps.unlock --unused",
|
|
"format",
|
|
"test"
|
|
]
|
|
]
|
|
end
|
|
end
|