Packages

phoenix_kit

1.7.36
1.7.209 1.7.208 1.7.207 1.7.206 1.7.205 1.7.204 1.7.203 1.7.202 1.7.201 1.7.200 1.7.199 1.7.198 1.7.197 1.7.196 1.7.194 1.7.193 1.7.192 1.7.191 1.7.190 1.7.189 1.7.187 1.7.186 1.7.185 1.7.184 1.7.183 1.7.182 1.7.181 1.7.180 1.7.179 1.7.178 1.7.177 1.7.176 1.7.175 1.7.174 1.7.173 1.7.172 1.7.171 1.7.170 1.7.169 1.7.168 1.7.167 1.7.166 1.7.165 1.7.164 1.7.162 1.7.161 1.7.160 1.7.159 1.7.157 1.7.156 1.7.155 1.7.154 1.7.153 1.7.152 1.7.151 1.7.150 1.7.149 1.7.146 1.7.145 1.7.144 1.7.143 1.7.138 1.7.133 1.7.132 1.7.131 1.7.130 1.7.128 1.7.126 1.7.125 1.7.121 1.7.120 1.7.119 1.7.118 1.7.117 1.7.116 1.7.115 1.7.114 1.7.113 1.7.112 1.7.111 1.7.110 1.7.109 1.7.108 1.7.107 1.7.106 1.7.105 1.7.104 1.7.103 1.7.102 1.7.101 1.7.100 1.7.99 1.7.98 1.7.97 1.7.96 1.7.95 1.7.94 1.7.93 1.7.92 1.7.91 1.7.90 1.7.89 1.7.88 1.7.87 1.7.86 1.7.85 1.7.84 1.7.83 1.7.82 1.7.81 1.7.80 1.7.79 1.7.78 1.7.77 1.7.76 1.7.75 1.7.74 1.7.71 1.7.70 1.7.69 1.7.66 1.7.65 1.7.64 1.7.63 1.7.62 1.7.61 1.7.59 1.7.58 1.7.57 1.7.56 1.7.55 1.7.54 1.7.53 1.7.52 1.7.51 1.7.49 1.7.44 1.7.43 1.7.42 1.7.41 1.7.39 1.7.38 1.7.37 1.7.36 1.7.34 1.7.33 1.7.31 1.7.30 1.7.29 1.7.28 1.7.27 1.7.26 1.7.25 1.7.24 1.7.23 1.7.22 1.7.21 1.7.20 1.7.19 1.7.18 1.7.17 1.7.16 1.7.15 1.7.14 1.7.13 1.7.12 1.7.11 1.7.10 1.7.9 1.7.8 1.7.7 1.7.6 1.7.5 1.7.4 1.7.3 1.7.2 1.7.1 1.7.0 1.6.20 1.6.19 1.6.18 1.6.17 1.6.16 1.6.15 1.6.14 1.6.13 1.6.12 1.6.11 1.6.10 1.6.9 1.6.8 1.6.7 1.6.6 1.6.5 1.6.4 1.6.3 1.5.2 1.5.1 1.5.0 1.4.9 1.4.8 1.4.7 1.4.6 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.2 1.3.1 1.3.0 1.2.10 1.2.9 1.2.8 1.2.7 1.2.5 1.2.4 1.2.2 1.2.1 1.2.0 1.1.0 1.0.0

A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more

Current section

Files

Jump to
phoenix_kit lib phoenix_kit jobs.ex
Raw

lib/phoenix_kit/jobs.ex

defmodule PhoenixKit.Jobs do
@moduledoc """
Jobs module for PhoenixKit.
This module provides functions for managing the Jobs admin interface.
When enabled, it shows a view-only dashboard of job status and history.
## Core Functions
### System Control
- `enabled?/0` - Check if Jobs module is enabled
- `enable_system/0` - Enable Jobs module
- `disable_system/0` - Disable Jobs module
## Settings Keys
All configuration is stored in the Settings system:
- `jobs_enabled` - Enable/disable Jobs admin interface (boolean)
## Usage Examples
# Check if Jobs module is enabled
if PhoenixKit.Jobs.enabled?() do
# Show jobs dashboard
end
# Enable/disable the module
PhoenixKit.Jobs.enable_system()
PhoenixKit.Jobs.disable_system()
"""
@enabled_key "jobs_enabled"
## System Control Functions
@doc """
Returns true when the Jobs module is enabled.
## Examples
iex> PhoenixKit.Jobs.enabled?()
false
iex> PhoenixKit.Jobs.enable_system()
iex> PhoenixKit.Jobs.enabled?()
true
"""
@spec enabled?() :: boolean()
def enabled? do
settings_call(:get_boolean_setting, [@enabled_key, false])
end
@doc """
Enables the Jobs module.
## Examples
iex> PhoenixKit.Jobs.enable_system()
{:ok, %PhoenixKit.Settings.Setting{}}
"""
@spec enable_system() :: {:ok, any()} | {:error, any()}
def enable_system do
settings_call(:update_boolean_setting, [@enabled_key, true])
end
@doc """
Disables the Jobs module.
## Examples
iex> PhoenixKit.Jobs.disable_system()
{:ok, %PhoenixKit.Settings.Setting{}}
"""
@spec disable_system() :: {:ok, any()} | {:error, any()}
def disable_system do
settings_call(:update_boolean_setting, [@enabled_key, false])
end
## Configuration Functions
@doc """
Returns the current Jobs module configuration as a map.
## Examples
iex> PhoenixKit.Jobs.get_config()
%{
enabled: true,
stats: %{
available: 0,
scheduled: 0,
executing: 0,
completed: 0,
retryable: 0,
discarded: 0,
cancelled: 0
}
}
"""
@spec get_config() :: map()
def get_config do
%{
enabled: enabled?(),
stats: get_job_stats()
}
end
@doc """
Returns job statistics from the Oban jobs table.
## Examples
iex> PhoenixKit.Jobs.get_job_stats()
%{available: 5, scheduled: 2, executing: 1, completed: 100, ...}
"""
@spec get_job_stats() :: map()
def get_job_stats do
repo = PhoenixKit.Config.get_repo()
if repo do
try do
import Ecto.Query
query =
from(j in "oban_jobs",
group_by: j.state,
select: {j.state, count(j.id)}
)
stats =
repo.all(query)
|> Enum.into(%{})
%{
available: Map.get(stats, "available", 0),
scheduled: Map.get(stats, "scheduled", 0),
executing: Map.get(stats, "executing", 0),
completed: Map.get(stats, "completed", 0),
retryable: Map.get(stats, "retryable", 0),
discarded: Map.get(stats, "discarded", 0),
cancelled: Map.get(stats, "cancelled", 0)
}
rescue
_ ->
default_stats()
end
else
default_stats()
end
end
## Private Helper Functions
defp default_stats do
%{
available: 0,
scheduled: 0,
executing: 0,
completed: 0,
retryable: 0,
discarded: 0,
cancelled: 0
}
end
# Get the configured Settings module (allows testing with mock)
defp settings_module do
PhoenixKit.Config.get(:jobs_settings_module, PhoenixKit.Settings)
end
# Call a function on the Settings module with arguments
defp settings_call(fun, args) do
apply(settings_module(), fun, args)
end
end