Merge branch 'oban-jobs' into 'master'

feat: Switch Sitemaps to Oban

See merge request mythic-insight/legendary!22
This commit is contained in:
Robert Prehn 2020-10-09 19:35:56 +00:00
commit 2277d5c45c
9 changed files with 45 additions and 16 deletions

View file

@ -16,9 +16,9 @@ defmodule Content.Application do
# Start the endpoint when the application starts # Start the endpoint when the application starts
# Start your own worker by calling: Content.Worker.start_link(arg1, arg2, arg3) # Start your own worker by calling: Content.Worker.start_link(arg1, arg2, arg3)
# worker(Content.Worker, [arg1, arg2, arg3]), # worker(Content.Worker, [arg1, arg2, arg3]),
worker(Content.Scheduler, []),
Content.Telemetry, Content.Telemetry,
Content.Endpoint, Content.Endpoint,
{Oban, oban_config()},
] ]
# See https://hexdocs.pm/elixir/Supervisor.html # See https://hexdocs.pm/elixir/Supervisor.html
@ -33,4 +33,9 @@ defmodule Content.Application do
Content.Endpoint.config_change(changed, removed) Content.Endpoint.config_change(changed, removed)
:ok :ok
end end
# Conditionally disable crontab, queues, or plugins here.
defp oban_config do
Application.get_env(:content, Oban)
end
end end

View file

@ -1,9 +0,0 @@
defmodule Content.Scheduler do
@moduledoc """
The Quantum cron-like scheduler for this application. See config.exs for
configured jobs.
"""
use Quantum.Scheduler,
otp_app: :content
end

View file

@ -6,12 +6,21 @@ defmodule Content.Sitemaps do
alias Content.{Endpoint, Post, Posts, Repo, Router.Helpers, Terms} alias Content.{Endpoint, Post, Posts, Repo, Router.Helpers, Terms}
import Ecto.Query import Ecto.Query
require Logger
use Oban.Worker
use Sitemap, use Sitemap,
host: "https://#{Application.get_env(:content, Endpoint)[:url][:host]}", host: "https://#{Application.get_env(:content, Endpoint)[:url][:host]}",
files_path: "tmp/sitemap/", files_path: "tmp/sitemap/",
public_path: "", public_path: "",
adapter: Content.SitemapStorage adapter: Content.SitemapStorage
@impl Oban.Worker
def perform(_job) do
generate()
end
def generate do def generate do
create do create do
add "", priority: 0.5, changefreq: "hourly", expires: nil add "", priority: 0.5, changefreq: "hourly", expires: nil
@ -41,5 +50,9 @@ defmodule Content.Sitemaps do
# notify search engines (currently Google and Bing) of the updated sitemap # notify search engines (currently Google and Bing) of the updated sitemap
if Mix.env() == :prod, do: ping() if Mix.env() == :prod, do: ping()
Logger.info "Sitemap generated."
:ok
end end
end end

View file

@ -4,7 +4,7 @@ defmodule Content.SitemapStorage do
the sitemap as an attachment post into the system, so that the CMS will the sitemap as an attachment post into the system, so that the CMS will
serve it up. serve it up.
""" """
alias Content.{Endpoint, Post, Repo, Router.Helpers, User} alias Content.{Endpoint, Post, Repo, Router.Helpers}
alias Ecto.Changeset alias Ecto.Changeset
alias Sitemap.{Location} alias Sitemap.{Location}
import Ecto.Query import Ecto.Query

View file

@ -50,6 +50,7 @@ defmodule Content.MixProject do
{:mock, "~> 0.3.0", only: :test}, {:mock, "~> 0.3.0", only: :test},
{:meck, "~> 0.8.13", only: :test}, {:meck, "~> 0.8.13", only: :test},
{:neotomex, "~> 0.1.7"}, {:neotomex, "~> 0.1.7"},
{:oban, "~> 2.1"},
{:phoenix, "~> 1.5.3"}, {:phoenix, "~> 1.5.3"},
{:phoenix_ecto, "~> 4.0"}, {:phoenix_ecto, "~> 4.0"},
{:phoenix_html, "~> 2.11"}, {:phoenix_html, "~> 2.11"},
@ -58,7 +59,6 @@ defmodule Content.MixProject do
{:phoenix_live_dashboard, "~> 0.2.0"}, {:phoenix_live_dashboard, "~> 0.2.0"},
{:php_serializer, "~> 0.9.0"}, {:php_serializer, "~> 0.9.0"},
{:plug_cowboy, "~> 2.0"}, {:plug_cowboy, "~> 2.0"},
{:quantum, "~> 2.3"},
{:sitemap, "~> 1.1"}, {:sitemap, "~> 1.1"},
{:slugger, "~> 0.3"}, {:slugger, "~> 0.3"},
{:telemetry_metrics, "~> 0.4"}, {:telemetry_metrics, "~> 0.4"},

View file

@ -0,0 +1,13 @@
defmodule Content.Repo.Migrations.AddObanJobsTable do
use Ecto.Migration
def up do
Oban.Migrations.up()
end
# We specify `version: 1` in `down`, ensuring that we'll roll all the way back down if
# necessary, regardless of which version we've migrated `up` to.
def down do
Oban.Migrations.down(version: 1)
end
end

View file

@ -53,6 +53,7 @@ config :core, email_from: "example@example.org"
# Configures Elixir's Logger # Configures Elixir's Logger
config :logger, :console, config :logger, :console,
level: :debug,
format: "$time $metadata[$level] $message\n", format: "$time $metadata[$level] $message\n",
metadata: [:request_id] metadata: [:request_id]
@ -61,9 +62,12 @@ config :phoenix, :json_library, Jason
config :linguist, pluralization_key: :count config :linguist, pluralization_key: :count
config :content, Content.Scheduler, config :content,
jobs: [ Oban,
{"@hourly", {Content.Sitemaps, :generate, []}} repo: Content.Repo,
queues: [default: 10],
crontab: [
{"0 * * * *", Content.Sitemaps},
] ]
import_config "email_styles.exs" import_config "email_styles.exs"

View file

@ -39,4 +39,6 @@ end)
config :core, CoreMailer, adapter: Bamboo.TestAdapter config :core, CoreMailer, adapter: Bamboo.TestAdapter
config :content, Oban, crontab: false, queues: false, plugins: false
config :logger, level: :warn config :logger, level: :warn

View file

@ -42,6 +42,7 @@
"mochiweb": {:hex, :mochiweb, "2.12.2", "80804ad342afa3d7f3524040d4eed66ce74b17a555de454ac85b07c479928e46", [:make, :rebar], [], "hexpm", "d3e681d4054b74a96cf2efcd09e94157ab83a5f55ddc4ce69f90b8144673bd7a"}, "mochiweb": {:hex, :mochiweb, "2.12.2", "80804ad342afa3d7f3524040d4eed66ce74b17a555de454ac85b07c479928e46", [:make, :rebar], [], "hexpm", "d3e681d4054b74a96cf2efcd09e94157ab83a5f55ddc4ce69f90b8144673bd7a"},
"mock": {:hex, :mock, "0.3.5", "feb81f52b8dcf0a0d65001d2fec459f6b6a8c22562d94a965862f6cc066b5431", [:mix], [{:meck, "~> 0.8.13", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "6fae404799408300f863550392635d8f7e3da6b71abdd5c393faf41b131c8728"}, "mock": {:hex, :mock, "0.3.5", "feb81f52b8dcf0a0d65001d2fec459f6b6a8c22562d94a965862f6cc066b5431", [:mix], [{:meck, "~> 0.8.13", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "6fae404799408300f863550392635d8f7e3da6b71abdd5c393faf41b131c8728"},
"neotomex": {:hex, :neotomex, "0.1.7", "64f76513653aa87ea7abdde0fd600e56955d838020a13d88f2bf334c88ac3e7a", [:mix], [], "hexpm", "4b87b8f614d1cd89dc8ba80ba0e559bedb3ebf6f6d74cd774fcfdd215e861445"}, "neotomex": {:hex, :neotomex, "0.1.7", "64f76513653aa87ea7abdde0fd600e56955d838020a13d88f2bf334c88ac3e7a", [:mix], [], "hexpm", "4b87b8f614d1cd89dc8ba80ba0e559bedb3ebf6f6d74cd774fcfdd215e861445"},
"oban": {:hex, :oban, "2.1.0", "034144686f7e76a102b5d67731f098d98a9e4a52b07c25ad580a01f83a7f1cf5", [:mix], [{:ecto_sql, ">= 3.4.3", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c6f067fa3b308ed9e0e6beb2b34277c9c4e48bf95338edabd8f4a757a26e04c2"},
"parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"},
"phoenix": {:hex, :phoenix, "1.5.5", "9a5a197edc1828c5f138a8ef10524dfecc43e36ab435c14578b1e9b4bd98858c", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 2.13", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.1.2 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b10eaf86ad026eafad2ee3dd336f0fb1c95a3711789855d913244e270bde463b"}, "phoenix": {:hex, :phoenix, "1.5.5", "9a5a197edc1828c5f138a8ef10524dfecc43e36ab435c14578b1e9b4bd98858c", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 2.13", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.1.2 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b10eaf86ad026eafad2ee3dd336f0fb1c95a3711789855d913244e270bde463b"},
"phoenix_ecto": {:hex, :phoenix_ecto, "4.1.0", "a044d0756d0464c5a541b4a0bf4bcaf89bffcaf92468862408290682c73ae50d", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.9", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "c5e666a341ff104d0399d8f0e4ff094559b2fde13a5985d4cb5023b2c2ac558b"}, "phoenix_ecto": {:hex, :phoenix_ecto, "4.1.0", "a044d0756d0464c5a541b4a0bf4bcaf89bffcaf92468862408290682c73ae50d", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.9", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "c5e666a341ff104d0399d8f0e4ff094559b2fde13a5985d4cb5023b2c2ac558b"},