barbeque 0.2.4 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/barbeque/job_executions_controller.rb +1 -0
- data/app/controllers/barbeque/monitors_controller.rb +38 -0
- data/app/views/barbeque/job_definitions/edit.html.haml +1 -1
- data/app/views/barbeque/job_executions/show.html.haml +2 -2
- data/app/views/barbeque/monitors/index.html.haml +50 -0
- data/app/views/layouts/barbeque/_sidebar.html.haml +7 -3
- data/app/views/layouts/barbeque/monitors.html.haml +6 -0
- data/config/routes.rb +2 -0
- data/lib/barbeque/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7811c426dbfc4b9b7514f444e45845ce6f894a67
|
4
|
+
data.tar.gz: 32fb25ca095959abc65c0e751d8edcfd36efee9d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab8d6fb436a2dedbd01be1e094199ffb580bcfe5091bb457dd8260223421ed7afd26d02699b0be7aae18ca998a9283bffa54d53a0f1593074e459d728b65b119
|
7
|
+
data.tar.gz: 8fb3fedcce8573d92bb6019583d229db768c8ed24e6c107874ea2a02f86fb11d2ad29e68d46013b3b379e191c7d861619b6b389917b557dea8481ad8d3a9df8b
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class Barbeque::MonitorsController < Barbeque::ApplicationController
|
2
|
+
def index
|
3
|
+
hour_sql = "date_format(#{Barbeque::JobExecution.table_name}.created_at, '%Y-%m-%d %H:00:00')"
|
4
|
+
now = Time.zone.now
|
5
|
+
from = 6.hours.ago(now.beginning_of_hour)
|
6
|
+
rows = Barbeque::JobExecution.
|
7
|
+
joins(job_definition: :app).
|
8
|
+
where(created_at: from .. now).
|
9
|
+
group("#{hour_sql}, #{Barbeque::JobDefinition.table_name}.id").
|
10
|
+
pluck("#{hour_sql}, #{Barbeque::App.table_name}.id, #{Barbeque::App.table_name}.name, #{Barbeque::JobDefinition.table_name}.id, #{Barbeque::JobDefinition.table_name}.job, count(1)")
|
11
|
+
|
12
|
+
jobs = {}
|
13
|
+
rows.each do |_, app_id, app_name, job_id, job_name, _|
|
14
|
+
job = {
|
15
|
+
app_id: app_id,
|
16
|
+
app_name: app_name,
|
17
|
+
job_id: job_id,
|
18
|
+
job_name: job_name,
|
19
|
+
}
|
20
|
+
jobs[job_id] = job
|
21
|
+
end
|
22
|
+
|
23
|
+
@recently_processed_jobs = {}
|
24
|
+
t = from
|
25
|
+
while t < now
|
26
|
+
@recently_processed_jobs[t] = {}
|
27
|
+
jobs.each do |job_id, job|
|
28
|
+
@recently_processed_jobs[t][job_id] = job.merge(count: 0)
|
29
|
+
end
|
30
|
+
t += 1.hour
|
31
|
+
end
|
32
|
+
|
33
|
+
rows.each do |date_hour, _, _, job_id, _, count|
|
34
|
+
date_hour = Time.zone.parse("#{date_hour} UTC")
|
35
|
+
@recently_processed_jobs[date_hour][job_id] = jobs[job_id].merge(count: count)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -49,7 +49,7 @@
|
|
49
49
|
Retries
|
50
50
|
|
51
51
|
.box-body
|
52
|
-
- if @
|
52
|
+
- if @job_retries.present?
|
53
53
|
%table.table.table-bordered
|
54
54
|
%thead
|
55
55
|
%tr
|
@@ -59,7 +59,7 @@
|
|
59
59
|
%th Elapsed Time
|
60
60
|
%th
|
61
61
|
%tbody
|
62
|
-
- @
|
62
|
+
- @job_retries.each do |job_retry|
|
63
63
|
%tr
|
64
64
|
%td= job_retry.id
|
65
65
|
%td= status_label(job_retry.status)
|
@@ -0,0 +1,50 @@
|
|
1
|
+
.row
|
2
|
+
.col-sm-12
|
3
|
+
.box.box-primary
|
4
|
+
.box-header
|
5
|
+
%h3.box-title.with_padding Recently processed jobs (hourly)
|
6
|
+
.box-body
|
7
|
+
#recently-processed-jobs-chart{data: { jobs: @recently_processed_jobs.to_json }}
|
8
|
+
%table.table
|
9
|
+
%thead
|
10
|
+
%tr
|
11
|
+
%th Hour
|
12
|
+
%th Application
|
13
|
+
%th Job
|
14
|
+
%th Count
|
15
|
+
%tbody
|
16
|
+
- @recently_processed_jobs.keys.sort { |x, y| y <=> x }.each do |date_hour|
|
17
|
+
- jobs = @recently_processed_jobs[date_hour]
|
18
|
+
- jobs.keys.sort.each do |job_id|
|
19
|
+
- job = jobs[job_id]
|
20
|
+
%tr
|
21
|
+
%td= date_hour
|
22
|
+
%td= link_to(job[:app_name], app_path(job[:app_id]))
|
23
|
+
%td= link_to(job[:job_name], job_definition_path(job[:job_id]))
|
24
|
+
%td= job[:count]
|
25
|
+
|
26
|
+
:coffee
|
27
|
+
chartDiv = document.getElementById('recently-processed-jobs-chart')
|
28
|
+
recentlyProcesedJobs = JSON.parse(chartDiv.dataset.jobs)
|
29
|
+
|
30
|
+
countsPerJob = {}
|
31
|
+
for own dateHour, jobs of recentlyProcesedJobs
|
32
|
+
for own jobId, job of jobs
|
33
|
+
name = job.app_name + ' - ' + job.job_name
|
34
|
+
countsPerJob[name] ||= []
|
35
|
+
countsPerJob[name][dateHour] ||= job.count
|
36
|
+
|
37
|
+
plotlyArgs = []
|
38
|
+
for own name, series of countsPerJob
|
39
|
+
x = []
|
40
|
+
y = []
|
41
|
+
for own dateHour, count of series
|
42
|
+
x.push(dateHour)
|
43
|
+
y.push(count)
|
44
|
+
plotlyArgs.push({
|
45
|
+
type: 'scatter',
|
46
|
+
name: name,
|
47
|
+
x: x,
|
48
|
+
y: y,
|
49
|
+
})
|
50
|
+
Plotly.plot(chartDiv, plotlyArgs)
|
@@ -2,15 +2,19 @@
|
|
2
2
|
%section.sidebar
|
3
3
|
%ul.sidebar-menu
|
4
4
|
%li.header Menu
|
5
|
-
%li{ class: ('active' if controller_path == 'apps') }
|
5
|
+
%li{ class: ('active' if controller_path == 'barbeque/apps') }
|
6
6
|
= link_to root_path do
|
7
7
|
%i.fa.fa-users
|
8
8
|
%span Applications
|
9
|
-
%li{ class: ('active' if controller_path == 'job_definitions') }
|
9
|
+
%li{ class: ('active' if controller_path == 'barbeque/job_definitions') }
|
10
10
|
= link_to job_definitions_path do
|
11
11
|
%i.fa.fa-tasks
|
12
12
|
%span Job Definitions
|
13
|
-
%li{ class: ('active' if controller_path == 'job_queues') }
|
13
|
+
%li{ class: ('active' if controller_path == 'barbeque/job_queues') }
|
14
14
|
= link_to job_queues_path do
|
15
15
|
%i.fa.fa-cubes
|
16
16
|
%span Queues
|
17
|
+
%li{ class: ('active' if controller_path == 'barbeque/monitors') }
|
18
|
+
= link_to monitors_path do
|
19
|
+
%i.fa.fa-tachometer
|
20
|
+
%span Monitors
|
data/config/routes.rb
CHANGED
@@ -16,6 +16,8 @@ Barbeque::Engine.routes.draw do
|
|
16
16
|
|
17
17
|
resources :job_queues
|
18
18
|
|
19
|
+
resources :monitors, only: %i[index]
|
20
|
+
|
19
21
|
scope :v1, module: 'api', as: :v1 do
|
20
22
|
resources :apps, only: [], param: :name, constraints: { name: /[\w-]+/ } do
|
21
23
|
resource :revision_lock, only: [:create, :destroy]
|
data/lib/barbeque/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: barbeque
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Takashi Kokubun
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04-
|
11
|
+
date: 2017-04-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: adminlte2-rails
|
@@ -288,6 +288,7 @@ files:
|
|
288
288
|
- app/controllers/barbeque/job_executions_controller.rb
|
289
289
|
- app/controllers/barbeque/job_queues_controller.rb
|
290
290
|
- app/controllers/barbeque/job_retries_controller.rb
|
291
|
+
- app/controllers/barbeque/monitors_controller.rb
|
291
292
|
- app/helpers/barbeque/application_helper.rb
|
292
293
|
- app/helpers/barbeque/job_definitions_helper.rb
|
293
294
|
- app/helpers/barbeque/job_executions_helper.rb
|
@@ -325,6 +326,7 @@ files:
|
|
325
326
|
- app/views/barbeque/job_queues/new.html.haml
|
326
327
|
- app/views/barbeque/job_queues/show.html.haml
|
327
328
|
- app/views/barbeque/job_retries/show.html.haml
|
329
|
+
- app/views/barbeque/monitors/index.html.haml
|
328
330
|
- app/views/layouts/barbeque/_header.html.haml
|
329
331
|
- app/views/layouts/barbeque/_sidebar.html.haml
|
330
332
|
- app/views/layouts/barbeque/application.html.haml
|
@@ -332,6 +334,7 @@ files:
|
|
332
334
|
- app/views/layouts/barbeque/job_definitions.html.haml
|
333
335
|
- app/views/layouts/barbeque/job_executions.html.haml
|
334
336
|
- app/views/layouts/barbeque/job_queues.html.haml
|
337
|
+
- app/views/layouts/barbeque/monitors.html.haml
|
335
338
|
- config/initializers/garage.rb
|
336
339
|
- config/routes.rb
|
337
340
|
- db/migrate/20160217020910_create_job_queues.rb
|