update oban_web

This commit is contained in:
Graham McIntire 2026-02-08 10:11:53 -06:00
parent d431931cfe
commit 24236dbe30
No known key found for this signature in database
10 changed files with 60 additions and 11 deletions

View file

@ -49,7 +49,7 @@
"nimble_totp": {:hex, :nimble_totp, "1.0.0", "79753bae6ce59fd7cacdb21501a1dbac249e53a51c4cd22b34fa8438ee067283", [:mix], [], "hexpm", "6ce5e4c068feecdb782e85b18237f86f66541523e6bad123e02ee1adbe48eda9"}, "nimble_totp": {:hex, :nimble_totp, "1.0.0", "79753bae6ce59fd7cacdb21501a1dbac249e53a51c4cd22b34fa8438ee067283", [:mix], [], "hexpm", "6ce5e4c068feecdb782e85b18237f86f66541523e6bad123e02ee1adbe48eda9"},
"oban": {:hex, :oban, "2.20.3", "e4d27336941955886cc7113420c32c63b70b64f10b27e08e3cf2b001153953cd", [:mix], [{:ecto_sql, "~> 3.10", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:ecto_sqlite3, "~> 0.9", [hex: :ecto_sqlite3, repo: "hexpm", optional: true]}, {:igniter, "~> 0.5", [hex: :igniter, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:myxql, "~> 0.7", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.20", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 1.3", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "075ffbf1279a96bec495bc63d647b08929837d70bcc0427249ffe4d1dddaec33"}, "oban": {:hex, :oban, "2.20.3", "e4d27336941955886cc7113420c32c63b70b64f10b27e08e3cf2b001153953cd", [:mix], [{:ecto_sql, "~> 3.10", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:ecto_sqlite3, "~> 0.9", [hex: :ecto_sqlite3, repo: "hexpm", optional: true]}, {:igniter, "~> 0.5", [hex: :igniter, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:myxql, "~> 0.7", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.20", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 1.3", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "075ffbf1279a96bec495bc63d647b08929837d70bcc0427249ffe4d1dddaec33"},
"oban_met": {:hex, :oban_met, "1.0.5", "bb633ab06448dab2ef9194f6688d33b3d07fc3f2ad793a1a08f4dfbb2cc9fe50", [:mix], [{:oban, "~> 2.19", [hex: :oban, repo: "hexpm", optional: false]}], "hexpm", "64664d50805bbfd3903aeada1f3c39634652a87844797ee400b0bcc95a28f5ea"}, "oban_met": {:hex, :oban_met, "1.0.5", "bb633ab06448dab2ef9194f6688d33b3d07fc3f2ad793a1a08f4dfbb2cc9fe50", [:mix], [{:oban, "~> 2.19", [hex: :oban, repo: "hexpm", optional: false]}], "hexpm", "64664d50805bbfd3903aeada1f3c39634652a87844797ee400b0bcc95a28f5ea"},
"oban_web": {:hex, :oban_web, "2.11.7", "a998868bb32b3d3c44f328a8baec820af5c3b46a3a743d89c169e75b0bf7efcc", [:mix], [{:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: false]}, {:oban, "~> 2.19", [hex: :oban, repo: "hexpm", optional: false]}, {:oban_met, "~> 1.0", [hex: :oban_met, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.7", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}], "hexpm", "f0ef9ec8f97381a0287c60a732736ff77bc351cbbe82eceffb5a635f84788656"}, "oban_web": {:hex, :oban_web, "2.11.8", "be6521b5b1eb6d4182f40f5acc948ea65d243451b94c26f06a7329575748f695", [:mix], [{:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: false]}, {:oban, "~> 2.19", [hex: :oban, repo: "hexpm", optional: false]}, {:oban_met, "~> 1.0", [hex: :oban_met, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.7", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}], "hexpm", "d0c04a836d929ef037e96be142285238275aabbafe62543bbdcc3f541d29ec30"},
"parse_trans": {:hex, :parse_trans, "3.4.1", "6e6aa8167cb44cc8f39441d05193be6e6f4e7c2946cb2759f015f8c56b76e5ff", [:rebar3], [], "hexpm", "620a406ce75dada827b82e453c19cf06776be266f5a67cff34e1ef2cbb60e49a"}, "parse_trans": {:hex, :parse_trans, "3.4.1", "6e6aa8167cb44cc8f39441d05193be6e6f4e7c2946cb2759f015f8c56b76e5ff", [:rebar3], [], "hexpm", "620a406ce75dada827b82e453c19cf06776be266f5a67cff34e1ef2cbb60e49a"},
"phoenix": {:hex, :phoenix, "1.8.3", "49ac5e485083cb1495a905e47eb554277bdd9c65ccb4fc5100306b350151aa95", [:mix], [{:bandit, "~> 1.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.7", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "36169f95cc2e155b78be93d9590acc3f462f1e5438db06e6248613f27c80caec"}, "phoenix": {:hex, :phoenix, "1.8.3", "49ac5e485083cb1495a905e47eb554277bdd9c65ccb4fc5100306b350151aa95", [:mix], [{:bandit, "~> 1.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.7", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "36169f95cc2e155b78be93d9590acc3f462f1e5438db06e6248613f27c80caec"},
"phoenix_ecto": {:hex, :phoenix_ecto, "4.7.0", "75c4b9dfb3efdc42aec2bd5f8bccd978aca0651dbcbc7a3f362ea5d9d43153c6", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.1", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "1d75011e4254cb4ddf823e81823a9629559a1be93b4321a6a5f11a5306fbf4cc"}, "phoenix_ecto": {:hex, :phoenix_ecto, "4.7.0", "75c4b9dfb3efdc42aec2bd5f8bccd978aca0651dbcbc7a3f362ea5d9d43153c6", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.1", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "1d75011e4254cb4ddf823e81823a9629559a1be93b4321a6a5f11a5306fbf4cc"},

2
vendor/README.md vendored
View file

@ -37,7 +37,7 @@ Advanced Oban features including batching, workflows, dynamic partitioning, and
### Oban Web ### Oban Web
**Version**: 2.11.7 **Version**: 2.11.8
**Source**: https://hex.pm/packages/oban_web **Source**: https://hex.pm/packages/oban_web
**License**: Apache-2.0 **License**: Apache-2.0

BIN
vendor/oban_web/.hex vendored

Binary file not shown.

View file

@ -76,6 +76,20 @@ callback][rsc].
[rsc]: Oban.Web.Resolver.html#c:bulk_action_limit/1 [rsc]: Oban.Web.Resolver.html#c:bulk_action_limit/1
## v2.11.8 - 2026-02-06
### Enhancements
- [Dashboard] Add standalone docker image for simplified Web hosting
A standalone Docker image is now available for situations where you want an Oban dashboard
without mounting Oban.Web within your application.
- [Job] Safely handle missing timestamps in jobs table
Manual table updates may forget to include a timestamp for a particular state, which crashes the
table. This provides an empty fallback for missing timestamps.
## v2.11.7 - 2026-01-22 ## v2.11.7 - 2026-01-22
### Enhancements ### Enhancements

View file

@ -74,6 +74,21 @@ fully realtime.
See the [installation guide](https://hexdocs.pm/oban_web/installation.html) for details on See the [installation guide](https://hexdocs.pm/oban_web/installation.html) for details on
installing and configuring Oban Web for your application. installing and configuring Oban Web for your application.
### Standalone Docker Image
A standalone Docker image is available for monitoring Oban without embedding the dashboard in your
application:
```bash
docker run -d \
-e DATABASE_URL="postgres://user:pass@host:5432/myapp" \
-p 4000:4000 \
ghcr.io/oban-bg/oban-dash
```
See the [standalone guide](https://hexdocs.pm/oban_web/standalone.html) for configuration options
and details.
<!-- MDOC --> <!-- MDOC -->
## Contributing ## Contributing

View file

@ -4,7 +4,7 @@
<<"https://github.com/oban-bg/oban_web/blob/main/CHANGELOG.md">>}, <<"https://github.com/oban-bg/oban_web/blob/main/CHANGELOG.md">>},
{<<"GitHub">>,<<"https://github.com/oban-bg/oban_web">>}]}. {<<"GitHub">>,<<"https://github.com/oban-bg/oban_web">>}]}.
{<<"name">>,<<"oban_web">>}. {<<"name">>,<<"oban_web">>}.
{<<"version">>,<<"2.11.7">>}. {<<"version">>,<<"2.11.8">>}.
{<<"description">>,<<"Dashboard for the Oban job processing framework">>}. {<<"description">>,<<"Dashboard for the Oban job processing framework">>}.
{<<"elixir">>,<<"~> 1.15">>}. {<<"elixir">>,<<"~> 1.15">>}.
{<<"files">>, {<<"files">>,

View file

@ -3,6 +3,24 @@ defmodule Oban.Web.Components.Icons do
# Helpers # Helpers
attr :rest, :global,
default: %{
"aria-hidden": "true",
class: "w-4 h-4",
fill: "currentColor",
viewBox: "0 0 16 16"
}
slot :inner_block, required: true
defp svg_mini(assigns) do
~H"""
<svg {@rest}>
{render_slot(@inner_block)}
</svg>
"""
end
attr :rest, :global, attr :rest, :global,
default: %{ default: %{
"stroke-width": "1.5", "stroke-width": "1.5",

View file

@ -12,11 +12,7 @@ defmodule Oban.Web.SidebarComponents do
width: var(--sidebar-width, <%= @width %>px); width: var(--sidebar-width, <%= @width %>px);
} }
</style> </style>
<div <div id="sidebar" class="relative flex-none mr-2 pr-3" phx-hook="SidebarResizer">
id="sidebar"
class="relative flex-none mr-2 pr-3"
phx-hook="SidebarResizer"
>
{render_slot(@inner_block)} {render_slot(@inner_block)}
<div <div

View file

@ -207,7 +207,11 @@ defmodule Oban.Web.Jobs.TableComponent do
"scheduled" -> job.scheduled_at "scheduled" -> job.scheduled_at
end end
DateTime.to_unix(datetime, :millisecond) if is_struct(datetime) do
DateTime.to_unix(datetime, :millisecond)
else
"-"
end
end end
defp relative_mode(job) do defp relative_mode(job) do

View file

@ -2,7 +2,7 @@ defmodule Oban.Web.MixProject do
use Mix.Project use Mix.Project
@source_url "https://github.com/oban-bg/oban_web" @source_url "https://github.com/oban-bg/oban_web"
@version "2.11.7" @version "2.11.8"
def project do def project do
[ [
@ -68,6 +68,7 @@ defmodule Oban.Web.MixProject do
[ [
"guides/introduction/overview.md", "guides/introduction/overview.md",
"guides/introduction/installation.md", "guides/introduction/installation.md",
"guides/introduction/standalone.md",
"guides/advanced/filtering.md", "guides/advanced/filtering.md",
"guides/advanced/limiting_access.md", "guides/advanced/limiting_access.md",
"guides/advanced/metrics.md", "guides/advanced/metrics.md",
@ -155,7 +156,8 @@ defmodule Oban.Web.MixProject do
"deps.unlock --check-unused", "deps.unlock --check-unused",
"credo --strict", "credo --strict",
"test --raise" "test --raise"
] ],
"dash.build": "cmd docker build -t oban-dash standalone"
] ]
end end
end end