Packages
phoenix_kit
1.7.151
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
Current section
Files
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()
"""
use PhoenixKit.Module
alias PhoenixKit.Dashboard.Tab
@enabled_key "jobs_enabled"
## System Control Functions
@impl PhoenixKit.Module
@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
@impl PhoenixKit.Module
@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
@impl PhoenixKit.Module
@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
@impl PhoenixKit.Module
@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.Job,
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
# ============================================================================
# Module Behaviour Callbacks
# ============================================================================
@impl PhoenixKit.Module
def module_key, do: "jobs"
@impl PhoenixKit.Module
def module_name, do: "Jobs"
@impl PhoenixKit.Module
def permission_metadata do
%{
key: "jobs",
label: "Jobs",
icon: "hero-clock",
description: "Background job queues and task scheduling"
}
end
@impl PhoenixKit.Module
def admin_tabs do
[
Tab.new!(
id: :admin_jobs,
label: "Jobs",
icon: "hero-queue-list",
path: "jobs",
priority: 610,
level: :admin,
permission: "jobs",
match: :prefix,
group: :admin_modules,
gettext_backend: PhoenixKitWeb.Gettext
)
]
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