sidekiq 5.2.7 → 8.0.5

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 (169) hide show
  1. checksums.yaml +4 -4
  2. data/Changes.md +845 -8
  3. data/LICENSE.txt +9 -0
  4. data/README.md +54 -54
  5. data/bin/multi_queue_bench +271 -0
  6. data/bin/sidekiq +22 -3
  7. data/bin/sidekiqload +219 -112
  8. data/bin/sidekiqmon +11 -0
  9. data/bin/webload +69 -0
  10. data/lib/active_job/queue_adapters/sidekiq_adapter.rb +120 -0
  11. data/lib/generators/sidekiq/job_generator.rb +59 -0
  12. data/lib/generators/sidekiq/templates/{worker.rb.erb → job.rb.erb} +2 -2
  13. data/lib/generators/sidekiq/templates/{worker_spec.rb.erb → job_spec.rb.erb} +1 -1
  14. data/lib/generators/sidekiq/templates/{worker_test.rb.erb → job_test.rb.erb} +1 -1
  15. data/lib/sidekiq/api.rb +757 -373
  16. data/lib/sidekiq/capsule.rb +132 -0
  17. data/lib/sidekiq/cli.rb +210 -233
  18. data/lib/sidekiq/client.rb +145 -103
  19. data/lib/sidekiq/component.rb +128 -0
  20. data/lib/sidekiq/config.rb +315 -0
  21. data/lib/sidekiq/deploy.rb +64 -0
  22. data/lib/sidekiq/embedded.rb +64 -0
  23. data/lib/sidekiq/fetch.rb +49 -42
  24. data/lib/sidekiq/iterable_job.rb +56 -0
  25. data/lib/sidekiq/job/interrupt_handler.rb +24 -0
  26. data/lib/sidekiq/job/iterable/active_record_enumerator.rb +53 -0
  27. data/lib/sidekiq/job/iterable/csv_enumerator.rb +47 -0
  28. data/lib/sidekiq/job/iterable/enumerators.rb +135 -0
  29. data/lib/sidekiq/job/iterable.rb +306 -0
  30. data/lib/sidekiq/job.rb +385 -0
  31. data/lib/sidekiq/job_logger.rb +34 -7
  32. data/lib/sidekiq/job_retry.rb +164 -109
  33. data/lib/sidekiq/job_util.rb +113 -0
  34. data/lib/sidekiq/launcher.rb +208 -107
  35. data/lib/sidekiq/logger.rb +80 -0
  36. data/lib/sidekiq/manager.rb +42 -46
  37. data/lib/sidekiq/metrics/query.rb +184 -0
  38. data/lib/sidekiq/metrics/shared.rb +109 -0
  39. data/lib/sidekiq/metrics/tracking.rb +150 -0
  40. data/lib/sidekiq/middleware/chain.rb +113 -56
  41. data/lib/sidekiq/middleware/current_attributes.rb +119 -0
  42. data/lib/sidekiq/middleware/i18n.rb +7 -7
  43. data/lib/sidekiq/middleware/modules.rb +23 -0
  44. data/lib/sidekiq/monitor.rb +147 -0
  45. data/lib/sidekiq/paginator.rb +41 -16
  46. data/lib/sidekiq/processor.rb +146 -127
  47. data/lib/sidekiq/profiler.rb +72 -0
  48. data/lib/sidekiq/rails.rb +46 -43
  49. data/lib/sidekiq/redis_client_adapter.rb +113 -0
  50. data/lib/sidekiq/redis_connection.rb +79 -108
  51. data/lib/sidekiq/ring_buffer.rb +31 -0
  52. data/lib/sidekiq/scheduled.rb +112 -50
  53. data/lib/sidekiq/sd_notify.rb +149 -0
  54. data/lib/sidekiq/systemd.rb +26 -0
  55. data/lib/sidekiq/testing/inline.rb +6 -5
  56. data/lib/sidekiq/testing.rb +91 -90
  57. data/lib/sidekiq/transaction_aware_client.rb +51 -0
  58. data/lib/sidekiq/version.rb +7 -1
  59. data/lib/sidekiq/web/action.rb +125 -60
  60. data/lib/sidekiq/web/application.rb +363 -259
  61. data/lib/sidekiq/web/config.rb +120 -0
  62. data/lib/sidekiq/web/csrf_protection.rb +183 -0
  63. data/lib/sidekiq/web/helpers.rb +241 -120
  64. data/lib/sidekiq/web/router.rb +62 -71
  65. data/lib/sidekiq/web.rb +69 -161
  66. data/lib/sidekiq/worker_compatibility_alias.rb +13 -0
  67. data/lib/sidekiq.rb +94 -182
  68. data/sidekiq.gemspec +26 -16
  69. data/web/assets/images/apple-touch-icon.png +0 -0
  70. data/web/assets/javascripts/application.js +150 -61
  71. data/web/assets/javascripts/base-charts.js +120 -0
  72. data/web/assets/javascripts/chart.min.js +13 -0
  73. data/web/assets/javascripts/chartjs-adapter-date-fns.min.js +7 -0
  74. data/web/assets/javascripts/chartjs-plugin-annotation.min.js +7 -0
  75. data/web/assets/javascripts/dashboard-charts.js +194 -0
  76. data/web/assets/javascripts/dashboard.js +41 -293
  77. data/web/assets/javascripts/metrics.js +280 -0
  78. data/web/assets/stylesheets/style.css +766 -0
  79. data/web/locales/ar.yml +72 -65
  80. data/web/locales/cs.yml +63 -62
  81. data/web/locales/da.yml +61 -53
  82. data/web/locales/de.yml +66 -53
  83. data/web/locales/el.yml +44 -24
  84. data/web/locales/en.yml +94 -66
  85. data/web/locales/es.yml +92 -54
  86. data/web/locales/fa.yml +66 -65
  87. data/web/locales/fr.yml +83 -62
  88. data/web/locales/gd.yml +99 -0
  89. data/web/locales/he.yml +66 -64
  90. data/web/locales/hi.yml +60 -59
  91. data/web/locales/it.yml +93 -54
  92. data/web/locales/ja.yml +75 -64
  93. data/web/locales/ko.yml +53 -52
  94. data/web/locales/lt.yml +84 -0
  95. data/web/locales/nb.yml +62 -61
  96. data/web/locales/nl.yml +53 -52
  97. data/web/locales/pl.yml +46 -45
  98. data/web/locales/{pt-br.yml → pt-BR.yml} +84 -56
  99. data/web/locales/pt.yml +52 -51
  100. data/web/locales/ru.yml +69 -63
  101. data/web/locales/sv.yml +54 -53
  102. data/web/locales/ta.yml +61 -60
  103. data/web/locales/tr.yml +101 -0
  104. data/web/locales/uk.yml +86 -61
  105. data/web/locales/ur.yml +65 -64
  106. data/web/locales/vi.yml +84 -0
  107. data/web/locales/zh-CN.yml +106 -0
  108. data/web/locales/{zh-tw.yml → zh-TW.yml} +43 -9
  109. data/web/views/_footer.erb +31 -19
  110. data/web/views/_job_info.erb +94 -75
  111. data/web/views/_metrics_period_select.erb +15 -0
  112. data/web/views/_nav.erb +14 -21
  113. data/web/views/_paging.erb +23 -19
  114. data/web/views/_poll_link.erb +3 -6
  115. data/web/views/_summary.erb +23 -23
  116. data/web/views/busy.erb +139 -87
  117. data/web/views/dashboard.erb +82 -53
  118. data/web/views/dead.erb +31 -27
  119. data/web/views/filtering.erb +6 -0
  120. data/web/views/layout.erb +15 -29
  121. data/web/views/metrics.erb +84 -0
  122. data/web/views/metrics_for_job.erb +58 -0
  123. data/web/views/morgue.erb +60 -70
  124. data/web/views/profiles.erb +43 -0
  125. data/web/views/queue.erb +50 -39
  126. data/web/views/queues.erb +45 -29
  127. data/web/views/retries.erb +65 -75
  128. data/web/views/retry.erb +32 -27
  129. data/web/views/scheduled.erb +58 -52
  130. data/web/views/scheduled_job_info.erb +1 -1
  131. metadata +96 -76
  132. data/.circleci/config.yml +0 -61
  133. data/.github/contributing.md +0 -32
  134. data/.github/issue_template.md +0 -11
  135. data/.gitignore +0 -15
  136. data/.travis.yml +0 -11
  137. data/3.0-Upgrade.md +0 -70
  138. data/4.0-Upgrade.md +0 -53
  139. data/5.0-Upgrade.md +0 -56
  140. data/COMM-LICENSE +0 -97
  141. data/Ent-Changes.md +0 -238
  142. data/Gemfile +0 -23
  143. data/LICENSE +0 -9
  144. data/Pro-2.0-Upgrade.md +0 -138
  145. data/Pro-3.0-Upgrade.md +0 -44
  146. data/Pro-4.0-Upgrade.md +0 -35
  147. data/Pro-Changes.md +0 -759
  148. data/Rakefile +0 -9
  149. data/bin/sidekiqctl +0 -20
  150. data/code_of_conduct.md +0 -50
  151. data/lib/generators/sidekiq/worker_generator.rb +0 -49
  152. data/lib/sidekiq/core_ext.rb +0 -1
  153. data/lib/sidekiq/ctl.rb +0 -221
  154. data/lib/sidekiq/delay.rb +0 -42
  155. data/lib/sidekiq/exception_handler.rb +0 -29
  156. data/lib/sidekiq/extensions/action_mailer.rb +0 -57
  157. data/lib/sidekiq/extensions/active_record.rb +0 -40
  158. data/lib/sidekiq/extensions/class_methods.rb +0 -40
  159. data/lib/sidekiq/extensions/generic_proxy.rb +0 -31
  160. data/lib/sidekiq/logging.rb +0 -122
  161. data/lib/sidekiq/middleware/server/active_record.rb +0 -23
  162. data/lib/sidekiq/util.rb +0 -66
  163. data/lib/sidekiq/worker.rb +0 -220
  164. data/web/assets/stylesheets/application-rtl.css +0 -246
  165. data/web/assets/stylesheets/application.css +0 -1144
  166. data/web/assets/stylesheets/bootstrap-rtl.min.css +0 -9
  167. data/web/assets/stylesheets/bootstrap.css +0 -5
  168. data/web/locales/zh-cn.yml +0 -68
  169. data/web/views/_status.erb +0 -4
@@ -1,1144 +0,0 @@
1
- * {
2
- box-sizing: border-box;
3
- }
4
-
5
- body {
6
- color: #585454;
7
- padding: 0;
8
- text-rendering: optimizeLegibility;
9
- -webkit-font-smoothing: antialiased;
10
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
11
- background: #f3f3f3 url(data:image/png;base64,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);
12
- }
13
-
14
- .ltr {
15
- direction: ltr;
16
- }
17
-
18
- .rtl {
19
- direction: rtl;
20
- }
21
-
22
- a {
23
- color: #b1003e;
24
- }
25
- a:active, a:hover, a:visited {
26
- color: #4b001a;
27
- }
28
- a.btn {
29
- color: #585454;
30
- }
31
- a.btn-primary {
32
- color: white;
33
- }
34
-
35
- h1, h2, h3, h4, h5, h6, strong {
36
- font-weight: 700;
37
- }
38
-
39
- .navbar-brand, .navbar .navbar-brand, h5, h4, h3, h2, h1 {
40
- font-family: Armata, "Helvetica Neue", Helvetica, Arial, sans-serif;
41
- font-weight: 400;
42
- }
43
-
44
- .title {
45
- color: #b1003e;
46
- }
47
-
48
- pre {
49
- font-size: 11px;
50
- }
51
-
52
- code {
53
- background: none;
54
- border: none;
55
- }
56
-
57
- section {
58
- padding-top: 10px;
59
- }
60
-
61
- code {
62
- padding: 0;
63
- }
64
-
65
- footer {
66
- padding: 40px 20px;
67
- text-align: center;
68
- }
69
- footer .edits {
70
- margin-right: 40px;
71
- }
72
-
73
- body {
74
- padding: 0 20px;
75
- }
76
-
77
- h3 {
78
- line-height: 45px;
79
- }
80
-
81
- .centered {
82
- text-align: center;
83
- }
84
-
85
- .admin #page {
86
- padding: 60px 0;
87
- }
88
-
89
- header.row .pagination {
90
- margin: 12px 0;
91
- }
92
-
93
- .summary_bar .status {
94
- margin-left: 10px;
95
- }
96
- .summary_bar .summary {
97
- margin-top: 12px;
98
- background-color: #fff;
99
- -webkit-box-shadow: 0 0 5px rgba(50, 50, 50, 0.25);
100
- -moz-box-shadow: 0 0 5px rgba(50, 50, 50, 0.25);
101
- box-shadow: 0 0 5px rgba(50, 50, 50, 0.25);
102
- -webkit-border-radius: 4px;
103
- -moz-border-radius: 4px;
104
- border-radius: 4px;
105
- padding: 8px;
106
- margin-bottom: 10px;
107
- border-width: 0;
108
- }
109
- .poll-wrapper {
110
- margin: 9px;
111
- }
112
- #live-poll.active {
113
- background-color: #009300;
114
- }
115
- .summary_bar ul {
116
- margin: 0 0 38px 0;
117
- }
118
- .summary_bar ul h3 {
119
- font-size: 1em;
120
- margin: 0;
121
- font-weight: normal;
122
- line-height: 1em;
123
- }
124
- .summary_bar ul li {
125
- padding: 4px 0 2px 0;
126
- text-align: center;
127
- width: 14%;
128
- }
129
- @media (max-width: 767px) and (min-width: 200px) {
130
- .summary_bar ul li {
131
- width: 100%;
132
- }
133
-
134
- .summary_bar ul li span {
135
- width: 50% !important;
136
- }
137
- .summary_bar ul .desc {
138
- text-align: left;
139
- }
140
- .summary_bar ul .count {
141
- text-align: right;
142
- }
143
- }
144
- @media (max-width: 979px) and (min-width: 768px) {
145
- .summary_bar ul li.col-sm-2 {
146
- margin: 0 10px;
147
- width: 96px !important;
148
- }
149
- }
150
- /*@media (max-width: 1199px) and (min-width: 980px) {
151
- .summary_bar ul li.col-sm-2 {
152
- width: 130px !important;
153
- }
154
- }
155
- @media (min-width: 1200px) {
156
- .summary_bar ul li.col-sm-2 {
157
- width: 154px !important;
158
- }
159
- }*/
160
- .summary_bar ul .desc {
161
- display: block;
162
- font-size: 1em;
163
- font-weight: normal;
164
- width: 100%;
165
- }
166
- .summary_bar ul .count {
167
- color: #b1003e;
168
- display: block;
169
- font-size: 1em;
170
- font-weight: bold;
171
- float: right;
172
- padding: 0 0 2px 0;
173
- width: 100%;
174
- }
175
-
176
- .table_container {
177
- overflow: overlay;
178
- }
179
-
180
- table.table-white {
181
- background-color: #fff;
182
- }
183
-
184
- .queues form {
185
- margin: 0;
186
- }
187
-
188
- form .btn {
189
- margin-right: 5px;
190
- }
191
-
192
- form .btn-group .btn {
193
- margin-right: 1px;
194
- }
195
-
196
- td form {
197
- margin-bottom: 0;
198
- }
199
-
200
- .table tr > td.table-checkbox, .table tr > th.table-checkbox {
201
- padding: 0;
202
- }
203
-
204
- table .table-checkbox label {
205
- height: 100%;
206
- width: 100%;
207
- padding: 0 16px;
208
- margin-bottom: 0;
209
- line-height: 32px;
210
- }
211
-
212
- .navbar .navbar-brand {
213
- color: #b1003e;
214
- padding: 13px;
215
- text-shadow: none;
216
- }
217
-
218
- .navbar .navbar-brand .status {
219
- color: #585454;
220
- }
221
-
222
-
223
- .nav.navbar-nav{
224
- display: flex;
225
- width: 100%;
226
- }
227
-
228
- .navbar-livereload{
229
- margin-left: auto;
230
- white-space: nowrap;
231
- }
232
-
233
- .navbar-livereload .poll-wrapper a:last-child{
234
- margin-left: 8px;
235
- }
236
-
237
- .navbar-right{
238
- margin-right: 0;
239
- }
240
-
241
- .navbar-collapse.collapse{
242
- overflow-x: auto !important;
243
- }
244
-
245
- @media (max-width: 768px) {
246
- .navbar .navbar-header .navbar-livereload {
247
- border: none;
248
- margin: 9px 10px 0;
249
- padding: 0;
250
- }
251
-
252
- .navbar .navbar-collapse {
253
- max-height: 400px;
254
- }
255
-
256
- .navbar .navbar-collapse .navbar-livereload {
257
- display: none;
258
- }
259
-
260
- .nav.navbar-nav{
261
- display: block;
262
- width: auto;
263
- }
264
-
265
- .navbar.navbar-fixed-top ul {
266
- margin-right: -15px!important;
267
- }
268
-
269
- .navbar .nav a {
270
- text-align: center;
271
- }
272
-
273
- }
274
-
275
- @media (width: 768px) {
276
- .navbar .navbar-collapse .navbar-livereload {
277
- display: block;
278
- margin-top: 5px;
279
- }
280
-
281
- .navbar .poll-wrapper {
282
- margin: 4px 4px 0 0;
283
- }
284
-
285
- .navbar .dropdown-menu {
286
- min-width: 120px;
287
- }
288
-
289
- .navbar .dropdown-menu a {
290
- text-align: left;
291
- }
292
- }
293
-
294
- .nav .dropdown {
295
- display: none;
296
- }
297
-
298
- .navbar-footer .navbar ul.nav {
299
- text-align: center;
300
- float: none;
301
- }
302
- .navbar-footer .navbar ul.nav a {
303
- font-weight: 700;
304
- font-size: 16px;
305
- padding: 15px;
306
- }
307
-
308
- .navbar-footer .navbar ul.nav a.navbar-brand {
309
- font-weight: 400;
310
- padding: 0 15px 0 0;
311
- }
312
-
313
- .navbar-footer .navbar ul.nav li {
314
- display: inline-block;
315
- float: none;
316
- }
317
- .navbar-footer .navbar.affix {
318
- top: 0;
319
- width: 100%;
320
- z-index: 10;
321
- }
322
-
323
- img.smallogo {
324
- width: 30px;
325
- margin: 0 0 6px 0;
326
- }
327
-
328
- .navbar-fixed-bottom li {
329
- margin-right: 20px;
330
- }
331
-
332
- .status-sprite {
333
- background-image: url(../images/status.png);
334
- height: 19px;
335
- width: 20px;
336
- display: inline-block;
337
- background-size: 20px;
338
- }
339
- .status-active {
340
- background-position: 0 0;
341
- }
342
-
343
- .status-idle {
344
- background-position: 0 -54px;
345
- }
346
-
347
- .btn {
348
- font-weight: 700;
349
- border: none;
350
- -webkit-border-radius: 3px;
351
- -moz-border-radius: 3px;
352
- -ms-border-radius: 3px;
353
- -o-border-radius: 3px;
354
- border-radius: 3px;
355
- -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.4);
356
- -moz-box-shadow: 0 0 2px rgba(0, 0, 0, 0.4);
357
- box-shadow: 0 0 2px rgba(0, 0, 0, 0.4);
358
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fafafa), color-stop(100%, #ededed));
359
- background-image: -webkit-linear-gradient(#fafafa, #ededed);
360
- background-image: -moz-linear-gradient(#fafafa, #ededed);
361
- background-image: -o-linear-gradient(#fafafa, #ededed);
362
- background-image: linear-gradient(#fafafa, #ededed);
363
- }
364
- .btn:hover {
365
- background-color: #ededed;
366
- }
367
-
368
- .btn-primary {
369
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b1003e), color-stop(100%, #980035));
370
- background-image: -webkit-linear-gradient(#b1003e, #980035);
371
- background-image: -moz-linear-gradient(#b1003e, #980035);
372
- background-image: -o-linear-gradient(#b1003e, #980035);
373
- background-image: linear-gradient(#b1003e, #980035);
374
- }
375
- .btn-primary:hover {
376
- background-color: #980035;
377
- }
378
-
379
- .btn-danger {
380
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b1003e), color-stop(100%, #980035));
381
- background-image: -webkit-linear-gradient(#b1003e, #980035);
382
- background-image: -moz-linear-gradient(#b1003e, #980035);
383
- background-image: -o-linear-gradient(#b1003e, #980035);
384
- background-image: linear-gradient(#b1003e, #980035);
385
- }
386
- .btn-danger:hover {
387
- background-color: #980035;
388
- }
389
-
390
- .poll-status {
391
- padding: 10px 0;
392
- }
393
-
394
- .redis-wrapper {
395
- width: 100%;
396
- text-align: center;
397
- }
398
-
399
- .stats-container {
400
- display: inline-block;
401
- }
402
-
403
- .stat {
404
- float: left;
405
- text-align: center;
406
- margin-right: 20px;
407
- border: 1px solid rgba(0, 0, 0, 0.1);
408
- padding: 5px;
409
- width: 150px;
410
- margin-bottom: 20px;
411
- }
412
-
413
- .stat:last-child {
414
- margin-right: 0;
415
- }
416
-
417
- .stat p {
418
- font-size: 0.9em;
419
- }
420
- @media (max-width: 767px) {
421
- .stats-container {
422
- display: block;
423
- }
424
- .stat {
425
- float: left;
426
- margin-right: 10px;
427
- width: 100%;
428
- text-align: left;
429
- line-height: 45px;
430
- }
431
- .stat h3{
432
- float: right;
433
- margin: 5px 10px 5px 5px;
434
- }
435
- .stat p{
436
- font-size: 1em;
437
- margin: 5px 5px 5px 10px;
438
- }
439
- }
440
-
441
- /* Dashboard
442
- ********************************** */
443
- div.dashboard h3 {
444
- float: left;
445
- }
446
-
447
- div.interval-slider {
448
- float: right;
449
- line-height: 1.3;
450
- font-size: 0.95em;
451
- padding: 15px 0 0;
452
- }
453
-
454
- span.current-interval {
455
- min-width: 40px;
456
- display: inline-block;
457
- padding: 0 0 5px 0;
458
- color: #B1003E;
459
- }
460
-
461
- div.interval-slider input {
462
- width: 160px;
463
- }
464
-
465
- #realtime-legend,
466
- #history-legend {
467
- width: 580px;
468
- text-align: left;
469
- margin-top: 5px;
470
- float: right;
471
- }
472
- #realtime-legend .timestamp,
473
- #history-legend .timestamp {
474
- display: inline-block;
475
- width: 220px;
476
- text-align: right;
477
- }
478
- #realtime-legend .line,
479
- #history-legend .line {
480
- display: inline-block;
481
- margin: 0 0 0 20px;
482
- }
483
- #realtime-legend .swatch,
484
- #history-legend .swatch {
485
- display: inline-block;
486
- width: 10px;
487
- height: 10px;
488
- margin: 0 8px 0 0;
489
- }
490
- #realtime-legend .tag,
491
- #history-legend .tag {
492
- display: inline-block;
493
- }
494
-
495
- @media (max-width: 790px) {
496
- #realtime-legend,
497
- #history-legend {
498
- float: none;
499
- width: 100%;
500
- margin-bottom: 20px;
501
- }
502
- }
503
-
504
- @media (max-width: 500px) {
505
- #realtime-legend,
506
- #history-legend {
507
- text-align: center;
508
- }
509
- }
510
- /* Beacon
511
- ********************************** */
512
-
513
- .beacon {
514
- position: relative;
515
- width: 20px;
516
- height: 20px;
517
- display: inline-block;
518
- }
519
-
520
- .beacon .dot,
521
- .beacon .ring {
522
- position: absolute;
523
- top: 50%;
524
- left: 50%;
525
- }
526
-
527
- .beacon .dot {
528
- width: 10px;
529
- height: 10px;
530
- margin: -5px 0 0 -5px;
531
- background-color: #80002d;
532
- border-radius: 10px;
533
- box-shadow: 0 0 9px #666;
534
- -moz-box-shadow: 0 0 9px #666;
535
- -webkit-box-shadow: 0 0 9px #666;
536
- border: 3px solid transparent;
537
- z-index: 10;
538
- }
539
-
540
- .beacon.pulse .dot {
541
- -webkit-animation: beacon-dot-pulse 1s ease-out;
542
- -moz-animation: beacon-dot-pulse 1s ease-out;
543
- animation: beacon-dot-pulse 1s ease-out;
544
- }
545
-
546
- @-webkit-keyframes beacon-dot-pulse {
547
- from {
548
- background-color: #80002d;
549
- -webkit-box-shadow: 0 0 9px #666;
550
- }
551
- 50% {
552
- background-color: #c90047;
553
- -webkit-box-shadow: 0 0 18px #666;
554
- }
555
- to {
556
- background-color: #80002d;
557
- -webkit-box-shadow: 0 0 9px #666;
558
- }
559
- }
560
-
561
- @-moz-keyframes beacon-dot-pulse {
562
- from {
563
- background-color: #80002d;
564
- -moz-box-shadow: 0 0 9px #666;
565
- }
566
- 50% {
567
- background-color: #c90047;
568
- -moz-box-shadow: 0 0 18px #666;
569
- }
570
- to {
571
- background-color: #80002d;
572
- -moz-box-shadow: 0 0 9px #666;
573
- }
574
- }
575
-
576
- @keyframes beacon-dot-pulse {
577
- from {
578
- background-color: #80002d;
579
- box-shadow: 0 0 9px #666;
580
- }
581
- 50% {
582
- background-color: #c90047;
583
- box-shadow: 0 0 18px #666;
584
- }
585
- to {
586
- background-color: #80002d;
587
- box-shadow: 0 0 9px #666;
588
- }
589
- }
590
-
591
- .beacon .ring {
592
- width: 28px;
593
- height: 28px;
594
- margin: -14px 0 0 -14px;
595
- border-radius: 28px;
596
- border: 3px solid #80002d;
597
- z-index: 5;
598
- opacity: 0;
599
- }
600
-
601
- .beacon.pulse .ring {
602
- -webkit-animation: beacon-ring-pulse 1s;
603
- -moz-animation: beacon-ring-pulse 1s;
604
- animation: beacon-ring-pulse 1s;
605
- }
606
-
607
- @-webkit-keyframes beacon-ring-pulse {
608
- 0% {
609
- opacity: 1;
610
- -webkit-transform: scale(0.3);
611
- }
612
- 100% {
613
- opacity: 0;
614
- -webkit-transform: scale(1);
615
- }
616
- }
617
-
618
- @-moz-keyframes beacon-ring-pulse {
619
- 0% {
620
- opacity: 1;
621
- -moz-transform: scale(0.3);
622
- }
623
- 100% {
624
- opacity: 0;
625
- -moz-transform: scale(1);
626
- }
627
- }
628
-
629
- @keyframes beacon-ring-pulse {
630
- 0% {
631
- opacity: 1;
632
- transform: scale(0.3);
633
- }
634
- 100% {
635
- opacity: 0;
636
- transform: scale(1);
637
- }
638
- }
639
-
640
- .chart {
641
- margin: 0;
642
- }
643
-
644
- .history-heading {
645
- padding-right: 15px;
646
- }
647
-
648
- .history-graph {
649
- font-size: 0.8em;
650
- padding: 3px;
651
- border-radius: 3px;
652
- }
653
-
654
- .history-graph.active {
655
- background-color: #B1003E;
656
- color: white;
657
- }
658
-
659
- .history-graph.active:hover {
660
- text-decoration: none;
661
- }
662
-
663
- @media (max-width: 767px) {
664
- .navbar .navbar-brand {
665
- float: none;
666
- display: block;
667
- }
668
-
669
- .navbar.navbar-fixed-top ul {
670
- margin-right: 0;
671
- }
672
-
673
- .navbar.navbar-fixed-top li {
674
- margin-right: 0;
675
- }
676
-
677
- .navbar #navbar-menu{
678
- display: none;
679
- }
680
-
681
- .poll-wrapper {
682
- width: 100%;
683
- text-align: center;
684
- }
685
-
686
- .poll-wrapper > a {
687
- display: inline-block;
688
- margin: 5px;
689
- }
690
-
691
- .navbar.navbar-fixed-bottom ul {
692
- float: none;
693
- margin-right: 0;
694
- }
695
-
696
- .navbar.navbar-fixed-bottom li {
697
- float: none;
698
- margin-right: 0;
699
- }
700
-
701
- .navbar-text {
702
- float:none;
703
- line-height: 30px;
704
- margin: 15px auto;
705
- }
706
- }
707
-
708
- @media (max-width: 767px) {
709
- .navbar-fixed-top, .navbar-fixed-bottom {
710
- margin: 0 -20px;
711
- }
712
-
713
- .navbar ul.nav li a {
714
- padding: 0 8px;
715
- }
716
-
717
- .admin #page {
718
- padding-top: 10px;
719
- }
720
- }
721
-
722
- @media (max-width: 500px) {
723
- .navbar-footer .navbar ul.nav a.navbar-brand {
724
- padding-right: 5px;
725
- }
726
- }
727
-
728
- .rickshaw_graph .detail {
729
- pointer-events: none;
730
- position: absolute;
731
- top: 0;
732
- z-index: 2;
733
- background: rgba(0, 0, 0, .1);
734
- bottom: 0;
735
- width: 1px;
736
- transition: opacity .25s linear;
737
- -moz-transition: opacity .25s linear;
738
- -o-transition: opacity .25s linear;
739
- -webkit-transition: opacity .25s linear
740
- }
741
- .rickshaw_graph .detail.inactive {
742
- opacity: 0
743
- }
744
- .rickshaw_graph .detail .item.active {
745
- opacity: 1
746
- }
747
- .rickshaw_graph .detail .x_label {
748
- font-family: Arial, sans-serif;
749
- border-radius: 3px;
750
- padding: 6px;
751
- opacity: .5;
752
- border: 1px solid #e0e0e0;
753
- font-size: 12px;
754
- position: absolute;
755
- background: #fff;
756
- white-space: nowrap
757
- }
758
- .rickshaw_graph .detail .x_label.left {
759
- left: 0
760
- }
761
- .rickshaw_graph .detail .x_label.right {
762
- right: 0
763
- }
764
- .rickshaw_graph .detail .item {
765
- position: absolute;
766
- z-index: 2;
767
- border-radius: 3px;
768
- padding: .25em;
769
- font-size: 12px;
770
- font-family: Arial, sans-serif;
771
- opacity: 0;
772
- background: rgba(0, 0, 0, .4);
773
- color: #fff;
774
- border: 1px solid rgba(0, 0, 0, .4);
775
- margin-left: 1em;
776
- margin-right: 1em;
777
- margin-top: -1em;
778
- white-space: nowrap
779
- }
780
- .rickshaw_graph .detail .item.left {
781
- left: 0
782
- }
783
- .rickshaw_graph .detail .item.right {
784
- right: 0
785
- }
786
- .rickshaw_graph .detail .item.active {
787
- opacity: 1;
788
- background: rgba(0, 0, 0, .8)
789
- }
790
- .rickshaw_graph .detail .item:after {
791
- position: absolute;
792
- display: block;
793
- width: 0;
794
- height: 0;
795
- content: "";
796
- border: 5px solid transparent
797
- }
798
- .rickshaw_graph .detail .item.left:after {
799
- top: 1em;
800
- left: -5px;
801
- margin-top: -5px;
802
- border-right-color: rgba(0, 0, 0, .8);
803
- border-left-width: 0
804
- }
805
- .rickshaw_graph .detail .item.right:after {
806
- top: 1em;
807
- right: -5px;
808
- margin-top: -5px;
809
- border-left-color: rgba(0, 0, 0, .8);
810
- border-right-width: 0
811
- }
812
- .rickshaw_graph .detail .dot {
813
- width: 4px;
814
- height: 4px;
815
- margin-left: -3px;
816
- margin-top: -3.5px;
817
- border-radius: 5px;
818
- position: absolute;
819
- box-shadow: 0 0 2px rgba(0, 0, 0, .6);
820
- box-sizing: content-box;
821
- -moz-box-sizing: content-box;
822
- background: #fff;
823
- border-width: 2px;
824
- border-style: solid;
825
- display: none;
826
- background-clip: padding-box
827
- }
828
- .rickshaw_graph .detail .dot.active {
829
- display: block
830
- }
831
- .rickshaw_graph {
832
- position: relative
833
- }
834
- .rickshaw_graph svg {
835
- display: block;
836
- overflow: hidden
837
- }
838
- .rickshaw_graph .x_tick {
839
- position: absolute;
840
- top: 0;
841
- bottom: 0;
842
- width: 0;
843
- border-left: 1px dotted rgba(0, 0, 0, .2);
844
- pointer-events: none
845
- }
846
- .rickshaw_graph .x_tick .title {
847
- position: absolute;
848
- font-size: 12px;
849
- font-family: Arial, sans-serif;
850
- opacity: .5;
851
- white-space: nowrap;
852
- margin-left: 3px;
853
- bottom: 1px
854
- }
855
- .rickshaw_annotation_timeline {
856
- height: 1px;
857
- border-top: 1px solid #e0e0e0;
858
- margin-top: 10px;
859
- position: relative
860
- }
861
- .rickshaw_annotation_timeline .annotation {
862
- position: absolute;
863
- height: 6px;
864
- width: 6px;
865
- margin-left: -2px;
866
- top: -3px;
867
- border-radius: 5px;
868
- background-color: rgba(0, 0, 0, .25)
869
- }
870
- .rickshaw_graph .annotation_line {
871
- position: absolute;
872
- top: 0;
873
- bottom: -6px;
874
- width: 0;
875
- border-left: 2px solid rgba(0, 0, 0, .3);
876
- display: none
877
- }
878
- .rickshaw_graph .annotation_line.active {
879
- display: block
880
- }
881
- .rickshaw_graph .annotation_range {
882
- background: rgba(0, 0, 0, .1);
883
- display: none;
884
- position: absolute;
885
- top: 0;
886
- bottom: -6px
887
- }
888
- .rickshaw_graph .annotation_range.active {
889
- display: block
890
- }
891
- .rickshaw_graph .annotation_range.active.offscreen {
892
- display: none
893
- }
894
- .rickshaw_annotation_timeline .annotation .content {
895
- background: #fff;
896
- color: #000;
897
- opacity: .9;
898
- padding: 5px;
899
- box-shadow: 0 0 2px rgba(0, 0, 0, .8);
900
- border-radius: 3px;
901
- position: relative;
902
- z-index: 20;
903
- font-size: 12px;
904
- padding: 6px 8px 8px;
905
- top: 18px;
906
- left: -11px;
907
- width: 160px;
908
- display: none;
909
- cursor: pointer
910
- }
911
- .rickshaw_annotation_timeline .annotation .content:before {
912
- content: "\25b2";
913
- position: absolute;
914
- top: -11px;
915
- color: #fff;
916
- text-shadow: 0 -1px 1px rgba(0, 0, 0, .8)
917
- }
918
- .rickshaw_annotation_timeline .annotation.active,
919
- .rickshaw_annotation_timeline .annotation:hover {
920
- background-color: rgba(0, 0, 0, .8);
921
- cursor: none
922
- }
923
- .rickshaw_annotation_timeline .annotation .content:hover {
924
- z-index: 50
925
- }
926
- .rickshaw_annotation_timeline .annotation.active .content {
927
- display: block
928
- }
929
- .rickshaw_annotation_timeline .annotation:hover .content {
930
- display: block;
931
- z-index: 50
932
- }
933
- .rickshaw_graph .y_axis,
934
- .rickshaw_graph .x_axis_d3 {
935
- fill: none
936
- }
937
- .rickshaw_graph .y_ticks .tick line,
938
- .rickshaw_graph .x_ticks_d3 .tick {
939
- stroke: rgba(0, 0, 0, .16);
940
- stroke-width: 2px;
941
- shape-rendering: crisp-edges;
942
- pointer-events: none
943
- }
944
- .rickshaw_graph .y_grid .tick,
945
- .rickshaw_graph .x_grid_d3 .tick {
946
- z-index: -1;
947
- stroke: rgba(0, 0, 0, .2);
948
- stroke-width: 1px;
949
- stroke-dasharray: 1 1
950
- }
951
- .rickshaw_graph .y_grid .tick[data-y-value="0"] {
952
- stroke-dasharray: 1 0
953
- }
954
- .rickshaw_graph .y_grid path,
955
- .rickshaw_graph .x_grid_d3 path {
956
- fill: none;
957
- stroke: none
958
- }
959
- .rickshaw_graph .y_ticks path,
960
- .rickshaw_graph .x_ticks_d3 path {
961
- fill: none;
962
- stroke: gray
963
- }
964
- .rickshaw_graph .y_ticks text,
965
- .rickshaw_graph .x_ticks_d3 text {
966
- opacity: .5;
967
- font-size: 12px;
968
- pointer-events: none
969
- }
970
- .rickshaw_graph .x_tick.glow .title,
971
- .rickshaw_graph .y_ticks.glow text {
972
- fill: #000;
973
- color: #000;
974
- text-shadow: -1px 1px 0 rgba(255, 255, 255, .1), 1px -1px 0 rgba(255, 255, 255, .1), 1px 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1), 0 -1px 0 rgba(255, 255, 255, .1), 1px 0 0 rgba(255, 255, 255, .1), -1px 0 0 rgba(255, 255, 255, .1), -1px -1px 0 rgba(255, 255, 255, .1)
975
- }
976
- .rickshaw_graph .x_tick.inverse .title,
977
- .rickshaw_graph .y_ticks.inverse text {
978
- fill: #fff;
979
- color: #fff;
980
- text-shadow: -1px 1px 0 rgba(0, 0, 0, .8), 1px -1px 0 rgba(0, 0, 0, .8), 1px 1px 0 rgba(0, 0, 0, .8), 0 1px 0 rgba(0, 0, 0, .8), 0 -1px 0 rgba(0, 0, 0, .8), 1px 0 0 rgba(0, 0, 0, .8), -1px 0 0 rgba(0, 0, 0, .8), -1px -1px 0 rgba(0, 0, 0, .8)
981
- }
982
- .rickshaw_legend {
983
- font-family: Arial;
984
- font-size: 12px;
985
- color: #fff;
986
- background: #404040;
987
- display: inline-block;
988
- padding: 12px 5px;
989
- border-radius: 2px;
990
- position: relative
991
- }
992
- .rickshaw_legend:hover {
993
- z-index: 10
994
- }
995
- .rickshaw_legend .swatch {
996
- width: 10px;
997
- height: 10px;
998
- border: 1px solid rgba(0, 0, 0, .2)
999
- }
1000
- .rickshaw_legend .line {
1001
- clear: both;
1002
- line-height: 140%;
1003
- padding-right: 15px
1004
- }
1005
- .rickshaw_legend .line .swatch {
1006
- display: inline-block;
1007
- margin-right: 3px;
1008
- border-radius: 2px
1009
- }
1010
- .rickshaw_legend .label {
1011
- margin: 0;
1012
- white-space: nowrap;
1013
- display: inline;
1014
- font-size: inherit;
1015
- background-color: transparent;
1016
- color: inherit;
1017
- font-weight: 400;
1018
- line-height: normal;
1019
- padding: 0;
1020
- text-shadow: none
1021
- }
1022
- .rickshaw_legend .action:hover {
1023
- opacity: .6
1024
- }
1025
- .rickshaw_legend .action {
1026
- margin-right: .2em;
1027
- font-size: 10px;
1028
- opacity: .2;
1029
- cursor: pointer;
1030
- font-size: 14px
1031
- }
1032
- .rickshaw_legend .line.disabled {
1033
- opacity: .4
1034
- }
1035
- .rickshaw_legend ul {
1036
- list-style-type: none;
1037
- margin: 0;
1038
- padding: 0;
1039
- margin: 2px;
1040
- cursor: pointer
1041
- }
1042
- .rickshaw_legend li {
1043
- padding: 0 0 0 2px;
1044
- min-width: 80px;
1045
- white-space: nowrap
1046
- }
1047
- .rickshaw_legend li:hover {
1048
- background: rgba(255, 255, 255, .08);
1049
- border-radius: 3px
1050
- }
1051
- .rickshaw_legend li:active {
1052
- background: rgba(255, 255, 255, .2);
1053
- border-radius: 3px
1054
- }
1055
-
1056
- .code-wrap {
1057
- white-space: normal;
1058
- }
1059
- .args {
1060
- overflow-y: auto;
1061
- max-height: 100px;
1062
- word-break: break-all;
1063
- }
1064
- .args-extended {
1065
- overflow-y: scroll;
1066
- max-height: 500px;
1067
- word-break: break-all;
1068
- }
1069
-
1070
-
1071
- /* BOOTSTRAP 3 FIXES */
1072
- /* @grid-float-breakpoint -1 */
1073
- .container {
1074
- padding: 0;
1075
- }
1076
- @media (max-width: 767px) {
1077
- .navbar-fixed-top, .navbar-fixed-bottom {
1078
- position: relative;
1079
- top: auto;
1080
- }
1081
- }
1082
-
1083
- .redis-url, .redis-namespace {
1084
- overflow: hidden;
1085
- white-space: nowrap;
1086
- }
1087
-
1088
- @media (min-width: 768px) {
1089
- .redis-url {
1090
- max-width: 200px;
1091
- }
1092
-
1093
- .redis-namespace {
1094
- max-width: 150px;
1095
- }
1096
- }
1097
-
1098
- @media (min-width: 992px) {
1099
- .redis-url {
1100
- max-width: 390px;
1101
- }
1102
-
1103
- .redis-namespace {
1104
- max-width: 300px;
1105
- }
1106
- }
1107
- @media (min-width: 1200px) {
1108
- .redis-url {
1109
- max-width: 480px;
1110
- }
1111
-
1112
- .redis-namespace {
1113
- max-width: 350px;
1114
- }
1115
- }
1116
-
1117
- .redis-url {
1118
- text-overflow: ellipsis;
1119
- }
1120
-
1121
- .product-version {
1122
- color:white;
1123
- }
1124
-
1125
- .warning-messages {
1126
- margin-top: 20px;
1127
- margin-bottom: 10px;
1128
- }
1129
-
1130
- .toggle {
1131
- display: none;
1132
- }
1133
-
1134
- .box {
1135
- width: 50%;
1136
- }
1137
-
1138
- .checkbox-column {
1139
- width: 20px;
1140
- }
1141
-
1142
- .delete-confirm {
1143
- width: 20%;
1144
- }