solid_queue_monitor 0.6.0 → 1.0.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.
@@ -101,6 +101,29 @@ module SolidQueueMonitor
101
101
  background: var(--background-color);
102
102
  }
103
103
 
104
+ .solid_queue_monitor .section-header-row {
105
+ display: flex;
106
+ justify-content: space-between;
107
+ align-items: center;
108
+ margin-bottom: 1.5rem;
109
+ padding: 1rem;
110
+ background: var(--card-background);
111
+ border-radius: 0.5rem;
112
+ box-shadow: var(--card-shadow);
113
+ }
114
+
115
+ .solid_queue_monitor .section-header-left {
116
+ display: flex;
117
+ align-items: center;
118
+ gap: 1rem;
119
+ }
120
+
121
+ .solid_queue_monitor .section-header-right {
122
+ display: flex;
123
+ align-items: center;
124
+ gap: 0.5rem;
125
+ }
126
+
104
127
  .solid_queue_monitor .stats-container {
105
128
  margin-bottom: 2rem;
106
129
  }
@@ -1154,6 +1177,232 @@ module SolidQueueMonitor
1154
1177
  align-items: center;
1155
1178
  gap: 0.75rem;
1156
1179
  }
1180
+
1181
+ /* Workers Page Styles */
1182
+ .solid_queue_monitor .workers-summary {
1183
+ display: grid;
1184
+ grid-template-columns: repeat(4, 1fr);
1185
+ gap: 1rem;
1186
+ margin-bottom: 1.5rem;
1187
+ }
1188
+
1189
+ .solid_queue_monitor .summary-card {
1190
+ background: var(--card-background);
1191
+ border: 1px solid var(--border-color);
1192
+ border-radius: 0.5rem;
1193
+ padding: 1rem 1.25rem;
1194
+ display: flex;
1195
+ flex-direction: column;
1196
+ align-items: center;
1197
+ gap: 0.25rem;
1198
+ border-left: 4px solid var(--border-color);
1199
+ position: relative;
1200
+ }
1201
+
1202
+ .solid_queue_monitor .summary-card .summary-label {
1203
+ font-size: 0.75rem;
1204
+ text-transform: uppercase;
1205
+ letter-spacing: 0.05em;
1206
+ color: var(--text-muted);
1207
+ }
1208
+
1209
+ .solid_queue_monitor .summary-card .summary-value {
1210
+ font-size: 1.75rem;
1211
+ font-weight: 600;
1212
+ color: var(--text-color);
1213
+ }
1214
+
1215
+ .solid_queue_monitor .summary-healthy {
1216
+ border-left-color: #10b981;
1217
+ }
1218
+
1219
+ .solid_queue_monitor .summary-healthy .summary-value {
1220
+ color: #10b981;
1221
+ }
1222
+
1223
+ .solid_queue_monitor .summary-stale {
1224
+ border-left-color: #f59e0b;
1225
+ }
1226
+
1227
+ .solid_queue_monitor .summary-stale .summary-value {
1228
+ color: #f59e0b;
1229
+ }
1230
+
1231
+ .solid_queue_monitor .summary-dead {
1232
+ border-left-color: #ef4444;
1233
+ }
1234
+
1235
+ .solid_queue_monitor .summary-dead .summary-value {
1236
+ color: #ef4444;
1237
+ }
1238
+
1239
+ .solid_queue_monitor .summary-action {
1240
+ font-size: 0.75rem;
1241
+ color: #f59e0b;
1242
+ text-decoration: none;
1243
+ border: 1px solid #f59e0b;
1244
+ padding: 0.25rem 0.5rem;
1245
+ border-radius: 0.25rem;
1246
+ margin-top: 0.5rem;
1247
+ transition: all 0.2s;
1248
+ }
1249
+
1250
+ .solid_queue_monitor .summary-action:hover {
1251
+ background: #f59e0b;
1252
+ color: #000;
1253
+ }
1254
+
1255
+ .solid_queue_monitor .kind-badge {
1256
+ display: inline-block;
1257
+ padding: 0.25rem 0.5rem;
1258
+ border-radius: 0.25rem;
1259
+ font-size: 0.75rem;
1260
+ font-weight: 500;
1261
+ }
1262
+
1263
+ .solid_queue_monitor .kind-worker {
1264
+ background: rgba(59, 130, 246, 0.15);
1265
+ color: #3b82f6;
1266
+ }
1267
+
1268
+ .solid_queue_monitor .kind-dispatcher {
1269
+ background: rgba(249, 115, 22, 0.15);
1270
+ color: #f97316;
1271
+ }
1272
+
1273
+ .solid_queue_monitor .kind-scheduler {
1274
+ background: rgba(168, 85, 247, 0.15);
1275
+ color: #a855f7;
1276
+ }
1277
+
1278
+ .solid_queue_monitor .kind-other {
1279
+ background: rgba(107, 114, 128, 0.15);
1280
+ color: #6b7280;
1281
+ }
1282
+
1283
+ .solid_queue_monitor .status-healthy {
1284
+ background: rgba(16, 185, 129, 0.15);
1285
+ color: #10b981;
1286
+ }
1287
+
1288
+ .solid_queue_monitor .status-stale {
1289
+ background: rgba(245, 158, 11, 0.15);
1290
+ color: #f59e0b;
1291
+ }
1292
+
1293
+ .solid_queue_monitor .status-dead {
1294
+ background: rgba(239, 68, 68, 0.15);
1295
+ color: #ef4444;
1296
+ }
1297
+
1298
+ .solid_queue_monitor .queue-tag {
1299
+ display: inline-block;
1300
+ background: var(--card-background);
1301
+ border: 1px solid var(--border-color);
1302
+ padding: 0.125rem 0.375rem;
1303
+ border-radius: 0.25rem;
1304
+ font-size: 0.75rem;
1305
+ margin-right: 0.25rem;
1306
+ }
1307
+
1308
+ .solid_queue_monitor .queue-more {
1309
+ color: var(--text-muted);
1310
+ font-size: 0.75rem;
1311
+ }
1312
+
1313
+ .solid_queue_monitor .jobs-idle {
1314
+ color: var(--text-muted);
1315
+ font-style: italic;
1316
+ }
1317
+
1318
+ .solid_queue_monitor .jobs-processing {
1319
+ color: #10b981;
1320
+ }
1321
+
1322
+ .solid_queue_monitor .jobs-processing .job-names {
1323
+ color: var(--text-muted);
1324
+ font-size: 0.8em;
1325
+ }
1326
+
1327
+ .solid_queue_monitor .worker-dead {
1328
+ background: rgba(239, 68, 68, 0.05);
1329
+ }
1330
+
1331
+ .solid_queue_monitor .worker-stale {
1332
+ background: rgba(245, 158, 11, 0.05);
1333
+ }
1334
+
1335
+ .solid_queue_monitor .action-placeholder {
1336
+ color: var(--text-muted);
1337
+ }
1338
+
1339
+ /* Table Link Styles */
1340
+ .solid_queue_monitor .job-class-link {
1341
+ color: var(--text-color);
1342
+ text-decoration: none;
1343
+ transition: color 0.2s;
1344
+ }
1345
+
1346
+ .solid_queue_monitor .job-class-link:hover {
1347
+ color: #3b82f6;
1348
+ text-decoration: underline;
1349
+ }
1350
+
1351
+ .solid_queue_monitor .queue-link {
1352
+ color: var(--text-color);
1353
+ text-decoration: none;
1354
+ transition: color 0.2s;
1355
+ }
1356
+
1357
+ .solid_queue_monitor .queue-link:hover {
1358
+ color: #3b82f6;
1359
+ text-decoration: underline;
1360
+ }
1361
+
1362
+ .solid_queue_monitor .back-link {
1363
+ color: var(--text-muted);
1364
+ text-decoration: none;
1365
+ display: inline-flex;
1366
+ align-items: center;
1367
+ gap: 0.25rem;
1368
+ font-size: 0.875rem;
1369
+ transition: color 0.2s;
1370
+ }
1371
+
1372
+ .solid_queue_monitor .back-link:hover {
1373
+ color: var(--text-color);
1374
+ }
1375
+
1376
+ .solid_queue_monitor .job-back-link {
1377
+ margin-bottom: 1rem;
1378
+ }
1379
+
1380
+ .solid_queue_monitor .empty-state {
1381
+ text-align: center;
1382
+ padding: 3rem 1rem;
1383
+ color: var(--text-muted);
1384
+ }
1385
+
1386
+ .solid_queue_monitor .empty-state p {
1387
+ margin: 0.5rem 0;
1388
+ }
1389
+
1390
+ .solid_queue_monitor .empty-state-hint {
1391
+ font-size: 0.875rem;
1392
+ opacity: 0.7;
1393
+ }
1394
+
1395
+ @media (max-width: 768px) {
1396
+ .solid_queue_monitor .workers-summary {
1397
+ grid-template-columns: repeat(2, 1fr);
1398
+ }
1399
+ }
1400
+
1401
+ @media (max-width: 480px) {
1402
+ .solid_queue_monitor .workers-summary {
1403
+ grid-template-columns: 1fr;
1404
+ }
1405
+ }
1157
1406
  CSS
1158
1407
  end
1159
1408
  end
data/config/routes.rb CHANGED
@@ -14,8 +14,12 @@ SolidQueueMonitor::Engine.routes.draw do
14
14
  resources :failed_jobs, only: [:index]
15
15
  resources :in_progress_jobs, only: [:index]
16
16
  resources :queues, only: [:index]
17
+ get 'queues/:queue_name', to: 'queues#show', as: :queue_details, constraints: { queue_name: /[^\/]+/ }
18
+ resources :workers, only: [:index]
19
+ resources :jobs, only: [:show]
17
20
 
18
21
  post 'execute_jobs', to: 'scheduled_jobs#create', as: :execute_jobs
22
+ post 'execute_scheduled_job/:id', to: 'scheduled_jobs#execute', as: :execute_scheduled_job
19
23
  post 'reject_jobs', to: 'scheduled_jobs#reject_all', as: :reject_jobs
20
24
 
21
25
  post 'retry_failed_job/:id', to: 'failed_jobs#retry', as: :retry_failed_job
@@ -25,4 +29,7 @@ SolidQueueMonitor::Engine.routes.draw do
25
29
 
26
30
  post 'pause_queue', to: 'queues#pause', as: :pause_queue
27
31
  post 'resume_queue', to: 'queues#resume', as: :resume_queue
32
+
33
+ post 'remove_worker/:id', to: 'workers#remove', as: :remove_worker
34
+ post 'prune_workers', to: 'workers#prune', as: :prune_workers
28
35
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SolidQueueMonitor
4
- VERSION = '0.6.0'
4
+ VERSION = '1.0.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solid_queue_monitor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vishal Sadriya
@@ -52,20 +52,25 @@ files:
52
52
  - app/controllers/solid_queue_monitor/base_controller.rb
53
53
  - app/controllers/solid_queue_monitor/failed_jobs_controller.rb
54
54
  - app/controllers/solid_queue_monitor/in_progress_jobs_controller.rb
55
+ - app/controllers/solid_queue_monitor/jobs_controller.rb
55
56
  - app/controllers/solid_queue_monitor/overview_controller.rb
56
57
  - app/controllers/solid_queue_monitor/queues_controller.rb
57
58
  - app/controllers/solid_queue_monitor/ready_jobs_controller.rb
58
59
  - app/controllers/solid_queue_monitor/recurring_jobs_controller.rb
59
60
  - app/controllers/solid_queue_monitor/scheduled_jobs_controller.rb
61
+ - app/controllers/solid_queue_monitor/workers_controller.rb
60
62
  - app/presenters/solid_queue_monitor/base_presenter.rb
61
63
  - app/presenters/solid_queue_monitor/failed_jobs_presenter.rb
62
64
  - app/presenters/solid_queue_monitor/in_progress_jobs_presenter.rb
65
+ - app/presenters/solid_queue_monitor/job_details_presenter.rb
63
66
  - app/presenters/solid_queue_monitor/jobs_presenter.rb
67
+ - app/presenters/solid_queue_monitor/queue_details_presenter.rb
64
68
  - app/presenters/solid_queue_monitor/queues_presenter.rb
65
69
  - app/presenters/solid_queue_monitor/ready_jobs_presenter.rb
66
70
  - app/presenters/solid_queue_monitor/recurring_jobs_presenter.rb
67
71
  - app/presenters/solid_queue_monitor/scheduled_jobs_presenter.rb
68
72
  - app/presenters/solid_queue_monitor/stats_presenter.rb
73
+ - app/presenters/solid_queue_monitor/workers_presenter.rb
69
74
  - app/services/solid_queue_monitor/authentication_service.rb
70
75
  - app/services/solid_queue_monitor/chart_data_service.rb
71
76
  - app/services/solid_queue_monitor/chart_presenter.rb