job_board 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.
Files changed (37) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +16 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.md +129 -0
  5. data/app/controllers/job_board/application_controller.rb +24 -0
  6. data/app/controllers/job_board/assets_controller.rb +19 -0
  7. data/app/controllers/job_board/jobs_controller.rb +88 -0
  8. data/app/controllers/job_board/processes_controller.rb +7 -0
  9. data/app/controllers/job_board/queues/pauses_controller.rb +15 -0
  10. data/app/controllers/job_board/queues_controller.rb +9 -0
  11. data/app/controllers/job_board/recurring_tasks_controller.rb +7 -0
  12. data/app/helpers/job_board/application_helper.rb +40 -0
  13. data/app/models/job_board/job_presenter.rb +37 -0
  14. data/app/models/job_board/job_row.rb +48 -0
  15. data/app/models/job_board/jobs_query.rb +86 -0
  16. data/app/models/job_board/latency_sla.rb +31 -0
  17. data/app/models/job_board/page.rb +35 -0
  18. data/app/models/job_board/process_tree.rb +49 -0
  19. data/app/views/job_board/jobs/_filters.html.erb +16 -0
  20. data/app/views/job_board/jobs/_job_row.html.erb +31 -0
  21. data/app/views/job_board/jobs/index.html.erb +63 -0
  22. data/app/views/job_board/jobs/show.html.erb +56 -0
  23. data/app/views/job_board/processes/_process.html.erb +28 -0
  24. data/app/views/job_board/processes/index.html.erb +32 -0
  25. data/app/views/job_board/queues/index.html.erb +50 -0
  26. data/app/views/job_board/recurring_tasks/index.html.erb +37 -0
  27. data/app/views/job_board/shared/_nav.html.erb +9 -0
  28. data/app/views/job_board/shared/_pagination.html.erb +5 -0
  29. data/app/views/layouts/job_board/application.html.erb +18 -0
  30. data/config/routes.rb +25 -0
  31. data/lib/job_board/assets/application.css +288 -0
  32. data/lib/job_board/assets/application.js +39 -0
  33. data/lib/job_board/configuration.rb +32 -0
  34. data/lib/job_board/engine.rb +5 -0
  35. data/lib/job_board/version.rb +3 -0
  36. data/lib/job_board.rb +17 -0
  37. metadata +108 -0
@@ -0,0 +1,39 @@
1
+ (function () {
2
+ "use strict";
3
+
4
+ // Confirmation dialogs for destructive button_to forms (no Turbo/UJS assumed).
5
+ document.addEventListener("submit", function (event) {
6
+ var form = event.target;
7
+ var message = form.dataset && form.dataset.confirm;
8
+ if (message && !window.confirm(message)) {
9
+ event.preventDefault();
10
+ }
11
+ });
12
+
13
+ // Auto-refresh: re-fetch the current page and swap [data-poll-region] contents.
14
+ var interval = parseInt(document.body.dataset.pollInterval, 10);
15
+ if (!interval || interval <= 0) return;
16
+ if (!document.querySelector("[data-poll-region]")) return;
17
+
18
+ setInterval(function () {
19
+ if (document.hidden) return;
20
+
21
+ fetch(window.location.href, {
22
+ headers: { "Accept": "text/html" },
23
+ credentials: "same-origin"
24
+ })
25
+ .then(function (response) {
26
+ if (!response.ok) throw new Error("poll failed");
27
+ return response.text();
28
+ })
29
+ .then(function (html) {
30
+ var fresh = new DOMParser().parseFromString(html, "text/html");
31
+ document.querySelectorAll("[data-poll-region]").forEach(function (region) {
32
+ var key = region.getAttribute("data-poll-region");
33
+ var replacement = fresh.querySelector('[data-poll-region="' + key + '"]');
34
+ if (replacement) region.innerHTML = replacement.innerHTML;
35
+ });
36
+ })
37
+ .catch(function () { /* transient network errors are fine; try again next tick */ });
38
+ }, interval * 1000);
39
+ })();
@@ -0,0 +1,32 @@
1
+ module JobBoard
2
+ class Configuration
3
+ # nil, or { name: "...", password: "..." } to protect the UI with HTTP Basic auth.
4
+ attr_accessor :http_basic_auth
5
+
6
+ # Seconds between page auto-refreshes. nil or 0 disables polling.
7
+ attr_accessor :poll_interval
8
+
9
+ # Rows per page on job lists.
10
+ attr_accessor :per_page
11
+
12
+ # Heartbeat age after which a process is flagged stale.
13
+ # nil falls back to SolidQueue.process_alive_threshold.
14
+ attr_accessor :stale_process_threshold
15
+
16
+ # Seconds of latency after which a queue is highlighted as breaching.
17
+ # Per-queue override: latency_warning_thresholds["queue_name"] = seconds.
18
+ # Queues named in the within_* convention (e.g. "within_5_minutes") get
19
+ # their threshold parsed from the name automatically.
20
+ attr_accessor :latency_warning_threshold
21
+ attr_accessor :latency_warning_thresholds
22
+
23
+ def initialize
24
+ @http_basic_auth = nil
25
+ @poll_interval = 5
26
+ @per_page = 25
27
+ @stale_process_threshold = nil
28
+ @latency_warning_threshold = 60
29
+ @latency_warning_thresholds = {}
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,5 @@
1
+ module JobBoard
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace JobBoard
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ module JobBoard
2
+ VERSION = "0.1.0"
3
+ end
data/lib/job_board.rb ADDED
@@ -0,0 +1,17 @@
1
+ require "solid_queue"
2
+
3
+ require "job_board/version"
4
+ require "job_board/configuration"
5
+ require "job_board/engine"
6
+
7
+ module JobBoard
8
+ class << self
9
+ def config
10
+ @config ||= Configuration.new
11
+ end
12
+
13
+ def configure
14
+ yield config
15
+ end
16
+ end
17
+ end
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: job_board
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Mike
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: rails
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '7.1'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '7.1'
26
+ - !ruby/object:Gem::Dependency
27
+ name: solid_queue
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '1.1'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '1.1'
40
+ description: Mountable Rails engine that shows queue latency, jobs by status, failed
41
+ job management, workers, and recurring tasks for Solid Queue.
42
+ email:
43
+ - mike@rowhomelabs.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - CHANGELOG.md
49
+ - MIT-LICENSE
50
+ - README.md
51
+ - app/controllers/job_board/application_controller.rb
52
+ - app/controllers/job_board/assets_controller.rb
53
+ - app/controllers/job_board/jobs_controller.rb
54
+ - app/controllers/job_board/processes_controller.rb
55
+ - app/controllers/job_board/queues/pauses_controller.rb
56
+ - app/controllers/job_board/queues_controller.rb
57
+ - app/controllers/job_board/recurring_tasks_controller.rb
58
+ - app/helpers/job_board/application_helper.rb
59
+ - app/models/job_board/job_presenter.rb
60
+ - app/models/job_board/job_row.rb
61
+ - app/models/job_board/jobs_query.rb
62
+ - app/models/job_board/latency_sla.rb
63
+ - app/models/job_board/page.rb
64
+ - app/models/job_board/process_tree.rb
65
+ - app/views/job_board/jobs/_filters.html.erb
66
+ - app/views/job_board/jobs/_job_row.html.erb
67
+ - app/views/job_board/jobs/index.html.erb
68
+ - app/views/job_board/jobs/show.html.erb
69
+ - app/views/job_board/processes/_process.html.erb
70
+ - app/views/job_board/processes/index.html.erb
71
+ - app/views/job_board/queues/index.html.erb
72
+ - app/views/job_board/recurring_tasks/index.html.erb
73
+ - app/views/job_board/shared/_nav.html.erb
74
+ - app/views/job_board/shared/_pagination.html.erb
75
+ - app/views/layouts/job_board/application.html.erb
76
+ - config/routes.rb
77
+ - lib/job_board.rb
78
+ - lib/job_board/assets/application.css
79
+ - lib/job_board/assets/application.js
80
+ - lib/job_board/configuration.rb
81
+ - lib/job_board/engine.rb
82
+ - lib/job_board/version.rb
83
+ homepage: https://github.com/kcdragon/job_board
84
+ licenses:
85
+ - MIT
86
+ metadata:
87
+ homepage_uri: https://github.com/kcdragon/job_board
88
+ source_code_uri: https://github.com/kcdragon/job_board
89
+ changelog_uri: https://github.com/kcdragon/job_board/blob/main/CHANGELOG.md
90
+ rubygems_mfa_required: 'true'
91
+ rdoc_options: []
92
+ require_paths:
93
+ - lib
94
+ required_ruby_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '3.2'
99
+ required_rubygems_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ requirements: []
105
+ rubygems_version: 4.0.16
106
+ specification_version: 4
107
+ summary: A dashboard for monitoring Solid Queue queues and jobs.
108
+ test_files: []