feat: Switch Sitemaps to Oban

This commit is contained in:
Robert Prehn 2020-10-09 14:32:53 -05:00
parent a1bd353692
commit 64822925ed
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 your own worker by calling: Content.Worker.start_link(arg1, arg2, arg3)
# worker(Content.Worker, [arg1, arg2, arg3]),
worker(Content.Scheduler, []),
Content.Telemetry,
Content.Endpoint,
{Oban, oban_config()},
]
# See https://hexdocs.pm/elixir/Supervisor.html
@ -33,4 +33,9 @@ defmodule Content.Application do
Content.Endpoint.config_change(changed, removed)
:ok
end
# Conditionally disable crontab, queues, or plugins here.
defp oban_config do
Application.get_env(:content, Oban)
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}
import Ecto.Query
require Logger
use Oban.Worker
use Sitemap,
host: "https://#{Application.get_env(:content, Endpoint)[:url][:host]}",
files_path: "tmp/sitemap/",
public_path: "",
adapter: Content.SitemapStorage
@impl Oban.Worker
def perform(_job) do
generate()
end
def generate do
create do
add "", priority: 0.5, changefreq: "hourly", expires: nil
@ -21,7 +30,7 @@ defmodule Content.Sitemaps do
|> where([p], p.type not in ["nav_menu_item", "attachment"])
|> Repo.all()
for post <- posts do
for post <- posts do
add Helpers.posts_path(Endpoint, :show, post), priority: 0.5, changefreq: "hourly", expires: nil
page_count = Post.content_page_count(post)
if page_count > 1 do
@ -41,5 +50,9 @@ defmodule Content.Sitemaps do
# notify search engines (currently Google and Bing) of the updated sitemap
if Mix.env() == :prod, do: ping()
Logger.info "Sitemap generated."
:ok
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
serve it up.
"""
alias Content.{Endpoint, Post, Repo, Router.Helpers, User}
alias Content.{Endpoint, Post, Repo, Router.Helpers}
alias Ecto.Changeset
alias Sitemap.{Location}
import Ecto.Query

View file

@ -50,6 +50,7 @@ defmodule Content.MixProject do
{:mock, "~> 0.3.0", only: :test},
{:meck, "~> 0.8.13", only: :test},
{:neotomex, "~> 0.1.7"},
{:oban, "~> 2.1"},
{:phoenix, "~> 1.5.3"},
{:phoenix_ecto, "~> 4.0"},
{:phoenix_html, "~> 2.11"},
@ -58,7 +59,6 @@ defmodule Content.MixProject do
{:phoenix_live_dashboard, "~> 0.2.0"},
{:php_serializer, "~> 0.9.0"},
{:plug_cowboy, "~> 2.0"},
{:quantum, "~> 2.3"},
{:sitemap, "~> 1.1"},
{:slugger, "~> 0.3"},
{: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
config :logger, :console,
level: :debug,
format: "$time $metadata[$level] $message\n",
metadata: [:request_id]
@ -61,9 +62,12 @@ config :phoenix, :json_library, Jason
config :linguist, pluralization_key: :count
config :content, Content.Scheduler,
jobs: [
{"@hourly", {Content.Sitemaps, :generate, []}}
config :content,
Oban,
repo: Content.Repo,
queues: [default: 10],
crontab: [
{"0 * * * *", Content.Sitemaps},
]
import_config "email_styles.exs"

View file

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

View file

@ -42,6 +42,7 @@
"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"},
"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"},
"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"},