cosmonats 0.7.0 → 0.9.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.
- checksums.yaml +4 -4
- data/README.md +219 -113
- data/lib/cosmo/active_job/adapter.rb +1 -2
- data/lib/cosmo/api/counter.rb +17 -17
- data/lib/cosmo/api/cron/entry.rb +10 -11
- data/lib/cosmo/api/cron.rb +6 -3
- data/lib/cosmo/api/job.rb +1 -1
- data/lib/cosmo/api/kv.rb +3 -3
- data/lib/cosmo/api/registry.rb +1 -1
- data/lib/cosmo/api/stats/busy.rb +6 -1
- data/lib/cosmo/api/stats/metrics.rb +109 -0
- data/lib/cosmo/api/stats/processes.rb +14 -4
- data/lib/cosmo/api/stats/totals.rb +4 -12
- data/lib/cosmo/api/stats.rb +18 -2
- data/lib/cosmo/api/stream.rb +7 -2
- data/lib/cosmo/batch/counters.rb +19 -0
- data/lib/cosmo/batch.rb +6 -6
- data/lib/cosmo/cli.rb +21 -5
- data/lib/cosmo/client.rb +37 -14
- data/lib/cosmo/config/cosmo.yml +58 -0
- data/lib/cosmo/config/settings.rb +20 -0
- data/lib/cosmo/config.rb +144 -19
- data/lib/cosmo/heartbeat.rb +11 -0
- data/lib/cosmo/job/data.rb +17 -12
- data/lib/cosmo/job/enqueuer.rb +53 -0
- data/lib/cosmo/job/limit.rb +2 -2
- data/lib/cosmo/job/processor.rb +32 -58
- data/lib/cosmo/job/requeue.rb +20 -0
- data/lib/cosmo/job.rb +8 -22
- data/lib/cosmo/logger.rb +15 -2
- data/lib/cosmo/middleware/busy.rb +15 -0
- data/lib/cosmo/middleware/chain.rb +137 -0
- data/lib/cosmo/middleware/limit.rb +50 -0
- data/lib/cosmo/middleware/metrics.rb +39 -0
- data/lib/cosmo/{sentry/job_processor_middleware.rb → middleware/sentry.rb} +26 -30
- data/lib/cosmo/middleware/totals.rb +29 -0
- data/lib/cosmo/middleware.rb +7 -0
- data/lib/cosmo/processor.rb +11 -5
- data/lib/cosmo/publisher.rb +1 -13
- data/lib/cosmo/railtie.rb +2 -2
- data/lib/cosmo/services.rb +69 -0
- data/lib/cosmo/stream/processor.rb +7 -1
- data/lib/cosmo/utils/hash.rb +7 -8
- data/lib/cosmo/utils.rb +0 -1
- data/lib/cosmo/version.rb +1 -1
- data/lib/cosmo/web/assets/app.css +271 -571
- data/lib/cosmo/web/assets/app.js +158 -0
- data/lib/cosmo/web/assets/fonts/OFL.txt +92 -0
- data/lib/cosmo/web/assets/fonts/geist-mono.woff2 +0 -0
- data/lib/cosmo/web/assets/fonts/geist.woff2 +0 -0
- data/lib/cosmo/web/assets/logo.svg +10 -0
- data/lib/cosmo/web/cache.rb +75 -0
- data/lib/cosmo/web/chart.rb +122 -0
- data/lib/cosmo/web/circuit.rb +55 -0
- data/lib/cosmo/web/context.rb +0 -4
- data/lib/cosmo/web/controllers/application.rb +16 -0
- data/lib/cosmo/web/controllers/batches.rb +1 -0
- data/lib/cosmo/web/controllers/crons.rb +17 -2
- data/lib/cosmo/web/controllers/jobs.rb +59 -54
- data/lib/cosmo/web/controllers/metrics.rb +49 -0
- data/lib/cosmo/web/controllers/overview.rb +70 -0
- data/lib/cosmo/web/controllers/processes.rb +33 -0
- data/lib/cosmo/web/controllers/streams.rb +26 -28
- data/lib/cosmo/web/helpers/application.rb +67 -0
- data/lib/cosmo/web/renderer.rb +19 -6
- data/lib/cosmo/web/throughput.rb +104 -0
- data/lib/cosmo/web/views/batches/_table.erb +42 -43
- data/lib/cosmo/web/views/batches/index.erb +3 -10
- data/lib/cosmo/web/views/crons/_table.erb +32 -53
- data/lib/cosmo/web/views/crons/index.erb +2 -9
- data/lib/cosmo/web/views/jobs/_args.erb +5 -0
- data/lib/cosmo/web/views/jobs/_busy.erb +25 -121
- data/lib/cosmo/web/views/jobs/_dead.erb +42 -82
- data/lib/cosmo/web/views/jobs/_enqueued.erb +33 -113
- data/lib/cosmo/web/views/jobs/_panel.erb +29 -0
- data/lib/cosmo/web/views/jobs/_queue_row.erb +18 -0
- data/lib/cosmo/web/views/jobs/_queues.erb +20 -0
- data/lib/cosmo/web/views/jobs/_scheduled.erb +20 -54
- data/lib/cosmo/web/views/jobs/index.erb +4 -17
- data/lib/cosmo/web/views/layout.erb +73 -22
- data/lib/cosmo/web/views/metrics/_chart.erb +41 -0
- data/lib/cosmo/web/views/metrics/_panel.erb +13 -0
- data/lib/cosmo/web/views/metrics/_table.erb +25 -0
- data/lib/cosmo/web/views/metrics/index.erb +9 -0
- data/lib/cosmo/web/views/overview/_badges.erb +3 -0
- data/lib/cosmo/web/views/overview/_kpis.erb +19 -0
- data/lib/cosmo/web/views/overview/_running.erb +18 -0
- data/lib/cosmo/web/views/overview/_throughput.erb +50 -0
- data/lib/cosmo/web/views/overview/_workers.erb +25 -0
- data/lib/cosmo/web/views/overview/index.erb +28 -0
- data/lib/cosmo/web/views/processes/_table.erb +67 -0
- data/lib/cosmo/web/views/processes/index.erb +1 -0
- data/lib/cosmo/web/views/shared/_pager.erb +22 -0
- data/lib/cosmo/web/views/shared/unavailable.erb +7 -0
- data/lib/cosmo/web/views/streams/_info.erb +28 -86
- data/lib/cosmo/web/views/streams/_list.erb +7 -0
- data/lib/cosmo/web/views/streams/_pause_banner.erb +8 -16
- data/lib/cosmo/web/views/streams/_stream.erb +52 -0
- data/lib/cosmo/web/views/streams/index.erb +3 -11
- data/lib/cosmo/web/views/streams/info.erb +3 -11
- data/lib/cosmo/web.rb +67 -33
- data/lib/cosmo.rb +38 -0
- data/sig/cosmo/api/counter.rbs +2 -3
- data/sig/cosmo/api/cron/entry.rbs +2 -1
- data/sig/cosmo/api/stats/busy.rbs +3 -1
- data/sig/cosmo/api/stats/metrics.rbs +42 -0
- data/sig/cosmo/api/stats/processes.rbs +3 -0
- data/sig/cosmo/api/stats/totals.rbs +3 -2
- data/sig/cosmo/api/stats.rbs +4 -0
- data/sig/cosmo/api/stream.rbs +2 -0
- data/sig/cosmo/batch/counters.rbs +10 -0
- data/sig/cosmo/batch.rbs +3 -4
- data/sig/cosmo/cli.rbs +2 -0
- data/sig/cosmo/client.rbs +4 -1
- data/sig/cosmo/config/settings.rbs +31 -0
- data/sig/cosmo/config.rbs +59 -5
- data/sig/cosmo/heartbeat.rbs +2 -0
- data/sig/cosmo/job/data.rbs +5 -3
- data/sig/cosmo/job/enqueuer.rbs +11 -0
- data/sig/cosmo/job/processor.rbs +3 -5
- data/sig/cosmo/job/requeue.rbs +9 -0
- data/sig/cosmo/job.rbs +0 -2
- data/sig/cosmo/logger.rbs +6 -0
- data/sig/cosmo/middleware/chain.rbs +51 -0
- data/sig/cosmo/middleware/sentry.rbs +14 -0
- data/sig/cosmo/middleware.rbs +35 -0
- data/sig/cosmo/processor.rbs +2 -0
- data/sig/cosmo/publisher.rbs +1 -9
- data/sig/cosmo/services.rbs +18 -0
- data/sig/cosmo/stream/processor.rbs +2 -0
- data/sig/cosmo/utils/hash.rbs +2 -3
- data/sig/cosmo.rbs +11 -0
- metadata +60 -20
- data/lib/cosmo/sentry/auto.rb +0 -6
- data/lib/cosmo/utils/overrides.rb +0 -206
- data/lib/cosmo/utils/warnings.rb +0 -17
- data/lib/cosmo/web/controllers/actions.rb +0 -16
- data/lib/cosmo/web/views/actions/index.erb +0 -7
- data/lib/cosmo/web/views/jobs/_processes.erb +0 -131
- data/lib/cosmo/web/views/jobs/_stats.erb +0 -73
- data/lib/cosmo/web/views/jobs/_tabs.erb +0 -8
- data/lib/cosmo/web/views/jobs/busy.erb +0 -18
- data/lib/cosmo/web/views/jobs/dead.erb +0 -18
- data/lib/cosmo/web/views/jobs/enqueued.erb +0 -18
- data/lib/cosmo/web/views/jobs/scheduled.erb +0 -18
- data/lib/cosmo/web/views/streams/_stream_row.erb +0 -42
- data/lib/cosmo/web/views/streams/_table.erb +0 -25
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
<section>
|
|
2
|
-
<header><%= render('jobs/_tabs') %></header>
|
|
3
|
-
|
|
4
|
-
<div hx-get="<%= url_for('/jobs/_stats') %>"
|
|
5
|
-
hx-trigger="load, every <%= poll_interval %>s"
|
|
6
|
-
hx-swap="innerHTML">
|
|
7
|
-
<div class="alert alert-info">Loading statistics…</div>
|
|
8
|
-
</div>
|
|
9
|
-
|
|
10
|
-
<div id="content">
|
|
11
|
-
<div id="busy-poller"
|
|
12
|
-
hx-get="<%= url_for('/jobs/_busy') %>"
|
|
13
|
-
hx-trigger="load"
|
|
14
|
-
hx-swap="outerHTML">
|
|
15
|
-
<div class="alert alert-info">Loading busy jobs…</div>
|
|
16
|
-
</div>
|
|
17
|
-
</div>
|
|
18
|
-
</section>
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
<section>
|
|
2
|
-
<header><%= render('jobs/_tabs') %></header>
|
|
3
|
-
|
|
4
|
-
<div hx-get="<%= url_for('/jobs/_stats') %>"
|
|
5
|
-
hx-trigger="load, every <%= poll_interval %>s"
|
|
6
|
-
hx-swap="innerHTML">
|
|
7
|
-
<div class="alert alert-info">Loading statistics…</div>
|
|
8
|
-
</div>
|
|
9
|
-
|
|
10
|
-
<div id="content">
|
|
11
|
-
<div id="dead-jobs"
|
|
12
|
-
hx-get="<%= url_for('/jobs/_dead') %>"
|
|
13
|
-
hx-trigger="load"
|
|
14
|
-
hx-swap="outerHTML">
|
|
15
|
-
<div class="alert alert-info">Loading dead jobs…</div>
|
|
16
|
-
</div>
|
|
17
|
-
</div>
|
|
18
|
-
</section>
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
<section>
|
|
2
|
-
<header><%= render('jobs/_tabs') %></header>
|
|
3
|
-
|
|
4
|
-
<div hx-get="<%= url_for('/jobs/_stats') %>"
|
|
5
|
-
hx-trigger="load, every <%= poll_interval %>s"
|
|
6
|
-
hx-swap="innerHTML">
|
|
7
|
-
<div class="alert alert-info">Loading statistics…</div>
|
|
8
|
-
</div>
|
|
9
|
-
|
|
10
|
-
<div id="content">
|
|
11
|
-
<div id="enqueued-poller"
|
|
12
|
-
hx-get="<%= url_for('/jobs/_enqueued', stream_name: @stream_name) %>"
|
|
13
|
-
hx-trigger="load"
|
|
14
|
-
hx-swap="outerHTML">
|
|
15
|
-
<div class="alert alert-info">Loading enqueued jobs…</div>
|
|
16
|
-
</div>
|
|
17
|
-
</div>
|
|
18
|
-
</section>
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
<section>
|
|
2
|
-
<header><%= render('jobs/_tabs') %></header>
|
|
3
|
-
|
|
4
|
-
<div hx-get="<%= url_for('/jobs/_stats') %>"
|
|
5
|
-
hx-trigger="load, every <%= poll_interval %>s"
|
|
6
|
-
hx-swap="innerHTML">
|
|
7
|
-
<div class="alert alert-info">Loading statistics…</div>
|
|
8
|
-
</div>
|
|
9
|
-
|
|
10
|
-
<div id="content">
|
|
11
|
-
<div id="scheduled-poller"
|
|
12
|
-
hx-get="<%= url_for('/jobs/_scheduled') %>"
|
|
13
|
-
hx-trigger="load"
|
|
14
|
-
hx-swap="outerHTML">
|
|
15
|
-
<div class="alert alert-info">Loading scheduled jobs…</div>
|
|
16
|
-
</div>
|
|
17
|
-
</div>
|
|
18
|
-
</section>
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
<tr id="stream-row-<%= h(@stream[:name]) %>">
|
|
2
|
-
<td>
|
|
3
|
-
<a href="<%= url_for('/streams/info', { name: u(@stream[:name]) }) %>"
|
|
4
|
-
hx-get="<%= url_for('/streams/info', { name: u(@stream[:name]) }) %>"
|
|
5
|
-
hx-target="#content"
|
|
6
|
-
hx-push-url="true"
|
|
7
|
-
class="stream-link"><%= h(@stream[:name]) %></a>
|
|
8
|
-
</td>
|
|
9
|
-
<td><%= format_numbers(@stream[:messages]) %></td>
|
|
10
|
-
<td><%= format_bytes(@stream[:bytes]) %></td>
|
|
11
|
-
<td><%= @stream[:consumer_count] %></td>
|
|
12
|
-
<td>
|
|
13
|
-
<div class="subjects">
|
|
14
|
-
<% Array(@stream[:subjects]).each do |subject| -%>
|
|
15
|
-
<span class="subject-tag"><%= h(subject) %></span>
|
|
16
|
-
<% end -%>
|
|
17
|
-
</div>
|
|
18
|
-
</td>
|
|
19
|
-
<td><code><%= format_numbers(@stream[:first_seq]) %> → <%= format_numbers(@stream[:last_seq]) %></code></td>
|
|
20
|
-
<td>
|
|
21
|
-
<% if @stream[:paused] -%>
|
|
22
|
-
<span class="badge badge-warning">⏸ Paused</span>
|
|
23
|
-
<% elsif @stream[:consumer_count].to_i > 0 -%>
|
|
24
|
-
<span class="badge badge-success">▶ Active</span>
|
|
25
|
-
<% else -%>
|
|
26
|
-
<span class="badge">No consumers</span>
|
|
27
|
-
<% end -%>
|
|
28
|
-
</td>
|
|
29
|
-
<td>
|
|
30
|
-
<% if @stream[:paused] -%>
|
|
31
|
-
<a hx-patch="<%= url_for('/streams/unpause', { name: u(@stream[:name]) }) %>"
|
|
32
|
-
hx-target="#stream-row-<%= h(@stream[:name]) %>"
|
|
33
|
-
hx-swap="outerHTML"
|
|
34
|
-
class="btn btn-success">▶ Resume</a>
|
|
35
|
-
<% else -%>
|
|
36
|
-
<a hx-patch="<%= url_for('/streams/pause', { name: u(@stream[:name]) }) %>"
|
|
37
|
-
hx-target="#stream-row-<%= h(@stream[:name]) %>"
|
|
38
|
-
hx-swap="outerHTML"
|
|
39
|
-
class="btn btn-warning">⏸ Pause</a>
|
|
40
|
-
<% end -%>
|
|
41
|
-
</td>
|
|
42
|
-
</tr>
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
<% if @streams.empty? -%>
|
|
2
|
-
<div class="alert alert-info">No streams found</div>
|
|
3
|
-
<% else -%>
|
|
4
|
-
<div class="table-container">
|
|
5
|
-
<table>
|
|
6
|
-
<thead>
|
|
7
|
-
<tr>
|
|
8
|
-
<th>Name</th>
|
|
9
|
-
<th>Messages</th>
|
|
10
|
-
<th>Size</th>
|
|
11
|
-
<th>Consumers</th>
|
|
12
|
-
<th>Subjects</th>
|
|
13
|
-
<th>Sequence</th>
|
|
14
|
-
<th>Status</th>
|
|
15
|
-
<th>Actions</th>
|
|
16
|
-
</tr>
|
|
17
|
-
</thead>
|
|
18
|
-
<tbody>
|
|
19
|
-
<% @streams.each do |stream| -%>
|
|
20
|
-
<%= render("streams/_stream_row", { stream: stream }) %>
|
|
21
|
-
<% end -%>
|
|
22
|
-
</tbody>
|
|
23
|
-
</table>
|
|
24
|
-
</div>
|
|
25
|
-
<% end -%>
|