active_job_dash 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,31 @@
1
+ require "rake"
2
+
3
+ namespace :active_job_dash do
4
+ desc "Install ActiveJobDash"
5
+ task :install do
6
+ Rails::Command.invoke :generate, [ "active_job_dash:install" ]
7
+ end
8
+
9
+ desc "Purge old job executions"
10
+ task purge: :environment do
11
+ days = ENV.fetch("DAYS", ActiveJobDash.retention_days).to_i
12
+ deleted = ActiveJobDash::JobExecution.where(created_at: ...days.days.ago).delete_all
13
+ ActiveJobDash.instrument(:purge, count: deleted)
14
+ puts "Purged #{deleted} records older than #{days} days"
15
+ end
16
+
17
+ desc "Show job execution stats"
18
+ task stats: :environment do
19
+ stats = ActiveJobDash.stats(period: 24.hours)
20
+ summary = stats.summary
21
+
22
+ puts "\nActiveJobDash Stats (last 24 hours)"
23
+ puts "-" * 40
24
+ puts "Total jobs: #{summary[:total]}"
25
+ puts "Successful: #{summary[:success]}"
26
+ puts "Failed: #{summary[:failed]}"
27
+ puts "Avg duration: #{summary[:avg_duration_ms]&.round(2)}ms"
28
+ puts "Failure rate: #{summary[:failure_rate]}%"
29
+ puts
30
+ end
31
+ end
@@ -0,0 +1,3 @@
1
+ module ActiveJobDash
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,46 @@
1
+ require "zeitwerk"
2
+ require "active_support"
3
+ require "active_support/core_ext/module/attribute_accessors"
4
+
5
+ loader = Zeitwerk::Loader.for_gem
6
+ loader.ignore("#{__dir__}/active_job_dash/tasks.rb")
7
+ loader.ignore("#{__dir__}/active_job_dash/generators")
8
+ loader.setup
9
+
10
+ module ActiveJobDash
11
+ extend self
12
+
13
+ mattr_accessor :logger, default: ActiveSupport::Logger.new($stdout)
14
+ mattr_accessor :enabled, default: true
15
+ mattr_accessor :store_arguments, default: true
16
+ mattr_accessor :track_enqueue, default: false
17
+ mattr_accessor :retention_days, default: 30
18
+ mattr_accessor :region, default: nil
19
+ mattr_accessor :async_recording, default: false
20
+ mattr_accessor :excluded_jobs, default: []
21
+ mattr_accessor :dashboard_auth, default: nil
22
+ mattr_accessor :on_thread_error, default: nil
23
+
24
+ def enabled? = enabled
25
+ def store_arguments? = store_arguments
26
+ def track_enqueue? = track_enqueue
27
+ def async_recording? = async_recording
28
+
29
+ def instrument(channel, **options, &block)
30
+ ActiveSupport::Notifications.instrument("#{channel}.active_job_dash", **options, &block)
31
+ end
32
+
33
+ def root
34
+ File.expand_path("..", __dir__)
35
+ end
36
+
37
+ def stats(period: 1.hour)
38
+ Stats.new(period: period)
39
+ end
40
+
41
+ class Error < StandardError; end
42
+ end
43
+
44
+ require_relative "active_job_dash/engine" if defined?(Rails::Engine)
45
+
46
+ loader.eager_load if defined?(Rails) && Rails.env.production?
metadata ADDED
@@ -0,0 +1,170 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: active_job_dash
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - BoringCache
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: activerecord
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '7.2'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '7.2'
26
+ - !ruby/object:Gem::Dependency
27
+ name: activejob
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '7.2'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '7.2'
40
+ - !ruby/object:Gem::Dependency
41
+ name: railties
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '7.2'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '7.2'
54
+ - !ruby/object:Gem::Dependency
55
+ name: zeitwerk
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '2.6'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '2.6'
68
+ - !ruby/object:Gem::Dependency
69
+ name: minitest
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '5.0'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '5.0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: rubocop-rails-omakase
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ - !ruby/object:Gem::Dependency
97
+ name: simplecov
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '0.22'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '0.22'
110
+ description: Monitor, track, and retry ActiveJob executions. Provides a dashboard
111
+ UI, job history, and failure management.
112
+ email:
113
+ - oss@boringcache.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - CHANGELOG.md
119
+ - MIT-LICENSE
120
+ - README.md
121
+ - app/controllers/active_job_dash/application_controller.rb
122
+ - app/controllers/active_job_dash/dashboard_controller.rb
123
+ - app/jobs/active_job_dash/record_execution_job.rb
124
+ - app/models/active_job_dash/job_execution.rb
125
+ - app/models/active_job_dash/record.rb
126
+ - app/views/active_job_dash/dashboard/index.html.erb
127
+ - app/views/active_job_dash/dashboard/jobs.html.erb
128
+ - app/views/active_job_dash/dashboard/show.html.erb
129
+ - app/views/layouts/active_job_dash/application.html.erb
130
+ - config/routes.rb
131
+ - lib/active_job_dash.rb
132
+ - lib/active_job_dash/engine.rb
133
+ - lib/active_job_dash/generators/active_job_dash/install_generator.rb
134
+ - lib/active_job_dash/generators/active_job_dash/templates/create_active_job_dash_executions.rb
135
+ - lib/active_job_dash/generators/active_job_dash/templates/initializer.rb.erb
136
+ - lib/active_job_dash/instrumentation.rb
137
+ - lib/active_job_dash/log_subscriber.rb
138
+ - lib/active_job_dash/stats.rb
139
+ - lib/active_job_dash/tasks.rb
140
+ - lib/active_job_dash/version.rb
141
+ homepage: https://github.com/boringcache/active_job_dash
142
+ licenses:
143
+ - MIT
144
+ metadata:
145
+ homepage_uri: https://github.com/boringcache/active_job_dash
146
+ source_code_uri: https://github.com/boringcache/active_job_dash
147
+ rubygems_mfa_required: 'true'
148
+ post_install_message: |
149
+ ActiveJobDash 0.2.0 introduces breaking changes to configuration.
150
+
151
+ See UPGRADING.md for migration instructions:
152
+ https://github.com/boringcache/active_job_dash/blob/main/UPGRADING.md
153
+ rdoc_options: []
154
+ require_paths:
155
+ - lib
156
+ required_ruby_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '3.2'
161
+ required_rubygems_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ requirements: []
167
+ rubygems_version: 3.6.9
168
+ specification_version: 4
169
+ summary: ActiveJob dashboard and observability for Rails.
170
+ test_files: []