marty 6.1.0 → 8.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.gitlab-ci.yml +17 -3
- data/.rubocop.yml +5 -0
- data/.rubocop_todo.yml +3 -2
- data/Gemfile +2 -1
- data/app/assets/javascripts/marty/extjs/extensions/marty.js +23 -1
- data/app/assets/stylesheets/marty/application.css +4 -1
- data/app/assets/stylesheets/marty/dark_mode.css +17 -0
- data/app/components/marty/auth_app.rb +10 -1
- data/app/components/marty/auth_app/client/auth_app.js +4 -0
- data/app/components/marty/extras/layout.rb +2 -2
- data/app/components/marty/extras/misc.rb +1 -1
- data/app/components/marty/log_view.rb +0 -1
- data/app/components/marty/main_auth_app.rb +9 -12
- data/app/components/marty/promise_view.rb +5 -0
- data/app/components/marty/promise_view/client/promise_view.js +11 -0
- data/app/components/marty/schedule_jobs_dashboard.rb +30 -96
- data/app/components/marty/schedule_jobs_grid.rb +118 -0
- data/app/controllers/marty/application_controller.rb +6 -2
- data/app/models/marty/base.rb +48 -48
- data/app/models/marty/config.rb +14 -2
- data/app/models/marty/user.rb +12 -0
- data/app/services/marty/background_job/fetch_missing_in_schedule_cron_jobs.rb +19 -0
- data/app/services/marty/enums/report.rb +18 -0
- data/app/services/marty/promises/delorean/create.rb +16 -27
- data/app/services/marty/promises/ruby/create.rb +10 -1
- data/app/views/layouts/marty/application.html.erb +4 -1
- data/app/views/marty/diagnostic/op.html.erb +3 -1
- data/config/locales/en.yml +2 -0
- data/db/migrate/512_add_promise_priority.rb +9 -0
- data/db/migrate/513_add_priority_to_promise_view.rb +44 -0
- data/db/migrate/514_remove_marty_events.rb +13 -0
- data/delorean/enum_report.dl +11 -0
- data/delorean/table_report.dl +7 -0
- data/docker-compose.dummy.yml +7 -4
- data/lib/marty.rb +5 -2
- data/lib/marty/api/base.rb +15 -9
- data/lib/marty/cache_adapters.rb +2 -0
- data/lib/marty/cache_adapters/mcfly_ruby_cache.rb +1 -5
- data/lib/marty/cache_adapters/memory_and_redis.rb +93 -0
- data/lib/marty/cache_adapters/redis.rb +63 -0
- data/lib/marty/delayed_job/scheduled_job_plugin.rb +33 -0
- data/lib/marty/diagnostic/database.rb +1 -2
- data/lib/marty/logger.rb +50 -17
- data/lib/marty/monkey.rb +26 -6
- data/lib/marty/promise_ruby_job.rb +2 -0
- data/lib/marty/rails_app.rb +29 -0
- data/lib/marty/railtie.rb +1 -0
- data/lib/marty/version.rb +1 -1
- data/marty.gemspec +1 -0
- data/spec/controllers/job_controller_spec.rb +2 -2
- data/spec/dummy/app/components/gemini/cm_auth_app.rb +12 -0
- data/spec/dummy/app/components/gemini/simple_view.rb +17 -0
- data/spec/dummy/app/jobs/test_failing_job.rb +14 -0
- data/spec/dummy/app/models/gemini/helper.rb +90 -1
- data/spec/dummy/config/application.rb +1 -0
- data/spec/dummy/db/migrate/20191101132729_add_activity_flag_to_simple.rb +10 -0
- data/spec/dummy/delorean/blame_report.dl +1 -0
- data/spec/dummy/delorean/enum_report.dl +1 -0
- data/spec/dummy/delorean/marty_fields.dl +1 -0
- data/spec/dummy/delorean/table_report.dl +1 -0
- data/spec/features/data_blame_report_spec.rb +66 -0
- data/spec/features/data_grid_spec.rb +1 -1
- data/spec/features/enum_values_report_spec.rb +76 -0
- data/spec/features/inline_editing_spec.rb +33 -0
- data/spec/features/rule_spec.rb +1 -1
- data/spec/features/schedule_jobs_dashboard_spec.rb +1 -1
- data/spec/features/scripting_spec.rb +1 -1
- data/spec/features/user_list_report_spec.rb +74 -0
- data/spec/fixtures/misc/struct_compare_tests.txt +15 -5
- data/spec/job_helper.rb +39 -0
- data/spec/jobs/cron_job_spec.rb +91 -0
- data/spec/lib/mcfly_model_spec.rb +9 -0
- data/spec/models/promise_spec.rb +168 -1
- data/spec/other/diagnostic/delayed_job_workers_spec.rb +1 -1
- data/spec/performance/caching_spec.rb +99 -0
- data/spec/services/background_job/fetch_missing_in_schedule_cron_jobs_spec.rb +34 -0
- data/spec/support/delayed_job_helpers.rb +3 -3
- data/spec/support/shared_connection.rb +9 -1
- data/spec/support/structure_compare.rb +19 -3
- metadata +39 -6
- data/app/components/marty/event_view.rb +0 -129
- data/app/models/marty/event.rb +0 -317
- data/spec/dummy/db/migrate/20160923183516_add_bulk_pricing_event_ops.rb +0 -8
- data/spec/dummy/delorean/blame_report.dl +0 -268
- data/spec/dummy/delorean/marty_fields.dl +0 -63
- data/spec/dummy/delorean/table_report.dl +0 -34
- data/spec/models/event_spec.rb +0 -272
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ba9d8e9da88bf08b792bd49d882e4320dc0e68f338ab5ed35577a4c1c741ae90
|
4
|
+
data.tar.gz: b9b76371c794c41b8383c52a30d03d0ecccbfc428bfe88f598c8ec6778e4e63f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ddf969f74e26013d76713537bcddeba889983d83d80ea60d5ace5cb92cc44a77096e73a356524def77ca10a00b473574fa9a94acffbfa1182bbc61c0927b413f
|
7
|
+
data.tar.gz: 4a3f20060711fc70cce936e90197f88a1256f1c814d4cf2fbadde12b28715eeffde3c096e92db1c1a7693d9ad268966e77e4aa2b1ee20b3d7078e93838869f78
|
data/.gitignore
CHANGED
data/.gitlab-ci.yml
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
-
image: 415596832415.dkr.ecr.us-west-2.amazonaws.com/cm_tech/docker-ruby-ci-image:2.6.3-
|
1
|
+
image: 415596832415.dkr.ecr.us-west-2.amazonaws.com/cm_tech/docker-ruby-ci-image:2.6.3-extjs-7-20191018143452
|
2
2
|
|
3
3
|
services:
|
4
4
|
- "postgres:9.6"
|
5
|
+
- "redis:5.0.6-alpine"
|
5
6
|
|
6
7
|
before_script:
|
7
8
|
- time bundle install --jobs $(nproc) --path vendor "${FLAGS[@]}"
|
@@ -24,11 +25,23 @@ rspec-without-features:
|
|
24
25
|
script:
|
25
26
|
- bundle exec rspec --exclude-pattern "spec/features/**/*_spec.rb"
|
26
27
|
|
27
|
-
rspec-features:
|
28
|
+
rspec-features-1:
|
28
29
|
extends: .base-test
|
29
30
|
script:
|
30
31
|
- ln -s /opt/support/extjs /cm_tech/marty/spec/dummy/public/extjs
|
31
|
-
- bundle exec rspec spec/features
|
32
|
+
- bundle exec rspec spec/features --tag ~speed
|
33
|
+
|
34
|
+
rspec-features-2:
|
35
|
+
extends: .base-test
|
36
|
+
script:
|
37
|
+
- ln -s /opt/support/extjs /cm_tech/marty/spec/dummy/public/extjs
|
38
|
+
- bundle exec rspec spec/features --tag speed:slow
|
39
|
+
|
40
|
+
rspec-features-3:
|
41
|
+
extends: .base-test
|
42
|
+
script:
|
43
|
+
- ln -s /opt/support/extjs /cm_tech/marty/spec/dummy/public/extjs
|
44
|
+
- bundle exec rspec spec/features --tag speed:super_slow
|
32
45
|
|
33
46
|
cache:
|
34
47
|
key: 'marty_bundler_cache'
|
@@ -44,6 +57,7 @@ variables:
|
|
44
57
|
PGTZ: "America/Los_Angeles"
|
45
58
|
POSTGRES_USER: "runner"
|
46
59
|
POSTGRES_PASSWORD: ""
|
60
|
+
MARTY_REDIS_URL: 'localhost:6379/1'
|
47
61
|
RAILS_ENV: "test"
|
48
62
|
RAILS_DUMP_SCHEMA: "false"
|
49
63
|
REPOSITORY_URL: '415596832415.dkr.ecr.us-west-2.amazonaws.com/cm_tech/docker-ruby-ci-image'
|
data/.rubocop.yml
CHANGED
data/.rubocop_todo.yml
CHANGED
@@ -175,6 +175,7 @@ Lint/DuplicateMethods:
|
|
175
175
|
Lint/HandleExceptions:
|
176
176
|
Exclude:
|
177
177
|
- 'spec/support/netzke.rb'
|
178
|
+
- 'lib/marty/delayed_job/scheduled_job_plugin.rb'
|
178
179
|
|
179
180
|
# Offense count: 19
|
180
181
|
Lint/IneffectiveAccessModifier:
|
@@ -1028,7 +1029,7 @@ Style/TrailingCommaInHashLiteral:
|
|
1028
1029
|
|
1029
1030
|
# Offense count: 12
|
1030
1031
|
# Cop supports --auto-correct.
|
1031
|
-
Style/
|
1032
|
+
Style/RedundantPercentQ:
|
1032
1033
|
Exclude:
|
1033
1034
|
- 'app/components/marty/simple_app.rb'
|
1034
1035
|
- 'spec/features/rule_spec.rb'
|
@@ -1036,7 +1037,7 @@ Style/UnneededPercentQ:
|
|
1036
1037
|
|
1037
1038
|
# Offense count: 1
|
1038
1039
|
# Cop supports --auto-correct.
|
1039
|
-
Style/
|
1040
|
+
Style/RedundantSort:
|
1040
1041
|
Exclude:
|
1041
1042
|
- 'app/models/marty/event.rb'
|
1042
1043
|
|
data/Gemfile
CHANGED
@@ -9,7 +9,7 @@ group :default do
|
|
9
9
|
gem 'daemons'
|
10
10
|
gem 'delayed_job_active_record'
|
11
11
|
gem 'pg'
|
12
|
-
gem 'rails'
|
12
|
+
gem 'rails'
|
13
13
|
end
|
14
14
|
|
15
15
|
group :default, :cmit do
|
@@ -20,6 +20,7 @@ group :default, :cmit do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
group :development, :test do
|
23
|
+
gem 'benchmark-ips'
|
23
24
|
gem 'capybara'
|
24
25
|
gem 'connection_pool'
|
25
26
|
gem 'database_cleaner'
|
@@ -907,4 +907,26 @@ Ext.define('overrides.grid.column.Column', {
|
|
907
907
|
}
|
908
908
|
return this.callParent(arguments)
|
909
909
|
}
|
910
|
-
}
|
910
|
+
}
|
911
|
+
);
|
912
|
+
|
913
|
+
Ext.define('Ext.netzke.marty.MultiSelectCombo', {
|
914
|
+
extend: 'Ext.form.ComboBox',
|
915
|
+
alias: 'widget.multiselectcombo',
|
916
|
+
separator: ",",
|
917
|
+
multiSelect: true,
|
918
|
+
|
919
|
+
setValue: function(v) {
|
920
|
+
if (Ext.isString(v)) {
|
921
|
+
var vArray = v.split(this.separator);
|
922
|
+
this.callParent([vArray]);
|
923
|
+
} else {
|
924
|
+
this.callParent(arguments);
|
925
|
+
}
|
926
|
+
},
|
927
|
+
}
|
928
|
+
);
|
929
|
+
|
930
|
+
// Fix component fetching in ExtJS 7
|
931
|
+
// This flag was false by default in ExtJS 6
|
932
|
+
Ext.USE_NATIVE_JSON = false;
|
@@ -0,0 +1,17 @@
|
|
1
|
+
html {
|
2
|
+
background: #000 !important;
|
3
|
+
}
|
4
|
+
|
5
|
+
body {
|
6
|
+
background-color: #FFF !important;
|
7
|
+
filter: invert(90%) grayscale(10%) hue-rotate(180deg) !important;
|
8
|
+
-moz-filter: invert(90%) grayscale(10%) hue-rotate(180deg) !important;
|
9
|
+
-webkit-filter: invert(90%) grayscale(10%) hue-rotate(180deg) !important;
|
10
|
+
}
|
11
|
+
|
12
|
+
em, img, svg, image, video, audio, embed, iframe, object, button, canvas, figure:empty {
|
13
|
+
filter: invert(100%) !important;
|
14
|
+
-moz-filter: invert(100%) !important;
|
15
|
+
-webkit-filter: invert(100%) !important;
|
16
|
+
}
|
17
|
+
|
@@ -25,7 +25,7 @@ class Marty::AuthApp < Marty::SimpleApp
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def user_menu
|
28
|
-
[:sign_out]
|
28
|
+
[:sign_out, :toggle_dark_mode]
|
29
29
|
end
|
30
30
|
|
31
31
|
action :sign_in do |c|
|
@@ -37,6 +37,11 @@ class Marty::AuthApp < Marty::SimpleApp
|
|
37
37
|
c.text = "Sign out #{Mcfly.whodunnit.name}" if Mcfly.whodunnit
|
38
38
|
end
|
39
39
|
|
40
|
+
action :toggle_dark_mode do |a|
|
41
|
+
a.text = 'Toggle Dark Mode'
|
42
|
+
a.icon_cls = 'fa fa-adjust glyph'
|
43
|
+
end
|
44
|
+
|
40
45
|
endpoint :sign_in do |params|
|
41
46
|
user = Marty::User.try_to_login(params[:login], params[:password])
|
42
47
|
user ? Netzke::Base.controller.set_user(user) :
|
@@ -49,4 +54,8 @@ class Marty::AuthApp < Marty::SimpleApp
|
|
49
54
|
Netzke::Base.controller.logout_user
|
50
55
|
true
|
51
56
|
end
|
57
|
+
|
58
|
+
endpoint :toggle_dark_mode do
|
59
|
+
Netzke::Base.controller.toggle_dark_mode
|
60
|
+
end
|
52
61
|
end
|
@@ -73,7 +73,7 @@ module Layout
|
|
73
73
|
######################################################################
|
74
74
|
# PG ENUM field handling
|
75
75
|
|
76
|
-
def enum_column(c, class_or_array, col = nil)
|
76
|
+
def enum_column(c, class_or_array, col = nil, allow_null = true)
|
77
77
|
col ||= c.name.demodulize.tableize.singularize
|
78
78
|
vals = class_or_array.is_a?(Array) ? class_or_array : class_or_array::VALUES
|
79
79
|
editor_config = {
|
@@ -81,7 +81,7 @@ module Layout
|
|
81
81
|
xtype: :combo,
|
82
82
|
|
83
83
|
# hacky: extjs has issues with forceSelection true and clearing combos
|
84
|
-
store: vals + ['---'],
|
84
|
+
store: vals + (allow_null ? ['---'] : []),
|
85
85
|
|
86
86
|
# we can dynamically add enums (i.e. they're not in VALUES) --
|
87
87
|
# turn off forced selection.
|
@@ -3,7 +3,7 @@ module Marty::Extras::Misc
|
|
3
3
|
editor_config: {
|
4
4
|
trigger_action: :all,
|
5
5
|
xtype: :combo,
|
6
|
-
store: (1..12).map { |x| [x, '
|
6
|
+
store: (1..12).map { |x| [x, '%<x>02d' % { x: x }] },
|
7
7
|
# FIXME: for some reason, with Netzke 0.8.2, the label show
|
8
8
|
# up in the grid editor. This hack seems to fix the
|
9
9
|
# problem. However, the label in the add-in-form now looks
|
@@ -6,7 +6,6 @@ require 'marty/data_grid_view'
|
|
6
6
|
require 'marty/schedule_jobs_dashboard'
|
7
7
|
require 'marty/schedule_jobs_logs'
|
8
8
|
require 'marty/data_grid_user_view'
|
9
|
-
require 'marty/event_view'
|
10
9
|
require 'marty/import_type_view'
|
11
10
|
require 'marty/new_posting_window'
|
12
11
|
require 'marty/posting_window'
|
@@ -85,7 +84,6 @@ class Marty::MainAuthApp < Marty::AuthApp
|
|
85
84
|
:import_type_view,
|
86
85
|
:user_view,
|
87
86
|
:config_view,
|
88
|
-
:event_view,
|
89
87
|
:reload_scripts,
|
90
88
|
:load_seed,
|
91
89
|
] + background_jobs_menu + log_menu + api_menu
|
@@ -134,7 +132,7 @@ class Marty::MainAuthApp < Marty::AuthApp
|
|
134
132
|
def app_title
|
135
133
|
e = ENV['RAILS_ENV']
|
136
134
|
|
137
|
-
title = "#{app_moniker} #{
|
135
|
+
title = "#{app_moniker} #{::Marty::RailsApp.application_name.titleize}"
|
138
136
|
title += " - #{e.capitalize}" unless e == 'production'
|
139
137
|
title += ' [TIME WARPED]' if warped
|
140
138
|
title
|
@@ -202,13 +200,6 @@ class Marty::MainAuthApp < Marty::AuthApp
|
|
202
200
|
!self.class.has_perm?(:user_manager)
|
203
201
|
end
|
204
202
|
|
205
|
-
action :event_view do |a|
|
206
|
-
a.text = I18n.t('event_view')
|
207
|
-
a.handler = :netzke_load_component_by_action
|
208
|
-
a.icon_cls = 'fa fa-bolt glyph'
|
209
|
-
a.disabled = !self.class.has_perm?(:admin)
|
210
|
-
end
|
211
|
-
|
212
203
|
action :config_view do |a|
|
213
204
|
a.text = I18n.t('config_view')
|
214
205
|
a.handler = :netzke_load_component_by_action
|
@@ -297,6 +288,14 @@ class Marty::MainAuthApp < Marty::AuthApp
|
|
297
288
|
a.handler = :netzke_load_component_by_action
|
298
289
|
end
|
299
290
|
|
291
|
+
action :schedule_jobs_dashboard do |a|
|
292
|
+
a.text = 'Schedule Jobs Dashboard'
|
293
|
+
a.tooltip = 'Edit Delayed Jobs Cron schedules'
|
294
|
+
a.icon_cls = 'fa fa-cog glyph'
|
295
|
+
a.disabled = !self.class.has_perm?(:admin)
|
296
|
+
a.handler = :netzke_load_component_by_action
|
297
|
+
end
|
298
|
+
|
300
299
|
action :schedule_jobs_logs do |a|
|
301
300
|
a.text = "Schedule Job's Logs"
|
302
301
|
a.tooltip = "Show Scheduled Job's logs"
|
@@ -411,8 +410,6 @@ class Marty::MainAuthApp < Marty::AuthApp
|
|
411
410
|
component :data_grid_view
|
412
411
|
component :data_grid_user_view
|
413
412
|
|
414
|
-
component :event_view
|
415
|
-
|
416
413
|
component :import_type_view
|
417
414
|
|
418
415
|
component :log_view do |c|
|
@@ -30,6 +30,7 @@ class Marty::PromiseView < Netzke::Tree::Base
|
|
30
30
|
{ name: :title, xtype: :treecolumn },
|
31
31
|
:user__login,
|
32
32
|
:job_id,
|
33
|
+
:priority,
|
33
34
|
:start_dt,
|
34
35
|
:end_dt,
|
35
36
|
:status,
|
@@ -91,6 +92,10 @@ class Marty::PromiseView < Netzke::Tree::Base
|
|
91
92
|
config.width = 100
|
92
93
|
end
|
93
94
|
|
95
|
+
attribute :priority do |config|
|
96
|
+
config.width = 90
|
97
|
+
end
|
98
|
+
|
94
99
|
attribute :job_id do |config|
|
95
100
|
config.width = 90
|
96
101
|
end
|
@@ -28,19 +28,23 @@
|
|
28
28
|
if (status === true) return "green-row";
|
29
29
|
return "orange-row";
|
30
30
|
},
|
31
|
+
|
31
32
|
listenFn: function (obj, search_text) {
|
32
33
|
var lg = this.ownerCt.ownerCt;
|
33
34
|
lg.getStore().getProxy().extraParams.live_search = search_text;
|
34
35
|
lg.getStore().load();
|
35
36
|
},
|
37
|
+
|
36
38
|
netzkeOnDownload: function () {
|
37
39
|
var jid = this.getSelectionModel().getSelection()[0].getId();
|
38
40
|
// FIXME: seems pretty hacky
|
39
41
|
window.location = this.jobPath(jid);
|
40
42
|
},
|
43
|
+
|
41
44
|
netzkeOnRefresh: function () {
|
42
45
|
this.store.load();
|
43
46
|
},
|
47
|
+
|
44
48
|
netzkeOnClear: function (params) {
|
45
49
|
var me = this;
|
46
50
|
Ext.Msg.show({
|
@@ -53,5 +57,12 @@
|
|
53
57
|
(btn == "ok" && value == "CLEAR") && me.server.clear({});
|
54
58
|
}
|
55
59
|
});
|
60
|
+
},
|
61
|
+
|
62
|
+
// Updates model's `expanded` column if it's present.
|
63
|
+
// Since promises don't have such column, we don't need to send that
|
64
|
+
// extra request for every node expand event.
|
65
|
+
netzkeOnNodeStateChange: function() {
|
66
|
+
return;
|
56
67
|
}
|
57
68
|
}
|
@@ -1,117 +1,51 @@
|
|
1
|
-
|
2
|
-
ACCESSIBLE_BY = [:admin]
|
1
|
+
require 'marty/schedule_jobs_grid'
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
create: ACCESSIBLE_BY,
|
7
|
-
update: ACCESSIBLE_BY,
|
8
|
-
delete: ACCESSIBLE_BY,
|
9
|
-
destroy: ACCESSIBLE_BY,
|
10
|
-
job_run: ACCESSIBLE_BY,
|
11
|
-
edit_window__edit_form__submit: ACCESSIBLE_BY,
|
12
|
-
add_window__add_form__submit: ACCESSIBLE_BY
|
13
|
-
)
|
3
|
+
class Marty::ScheduleJobsDashboard < Marty::Form
|
4
|
+
include Marty::Extras::Layout
|
14
5
|
|
15
6
|
def configure(c)
|
16
7
|
super
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
c.paging = :buffered
|
21
|
-
c.editing = :in_form
|
22
|
-
c.multi_select = false
|
23
|
-
|
24
|
-
c.attributes = [
|
25
|
-
:job_class,
|
26
|
-
:cron,
|
27
|
-
:state
|
8
|
+
c.items = [
|
9
|
+
:schedule_jobs_grid,
|
10
|
+
:schedule_jobs_warnings
|
28
11
|
]
|
29
12
|
end
|
30
13
|
|
31
|
-
def
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
def default_bbar
|
36
|
-
super + [:do_job_run]
|
37
|
-
end
|
38
|
-
|
39
|
-
attribute :job_class do |c|
|
40
|
-
c.width = 400
|
41
|
-
end
|
42
|
-
|
43
|
-
attribute :cron do |c|
|
44
|
-
c.width = 400
|
45
|
-
end
|
46
|
-
|
47
|
-
attribute :state do |c|
|
48
|
-
c.width = 150
|
49
|
-
editor_config = {
|
50
|
-
trigger_action: :all,
|
51
|
-
xtype: :combo,
|
52
|
-
store: Marty::BackgroundJob::Schedule::ALL_STATES,
|
53
|
-
forceSelection: true,
|
54
|
-
}
|
55
|
-
|
56
|
-
c.column_config = { editor: editor_config }
|
57
|
-
c.field_config = editor_config
|
58
|
-
end
|
59
|
-
|
60
|
-
action :do_job_run do |a|
|
61
|
-
a.text = 'Run'
|
62
|
-
a.tooltip = 'Run'
|
63
|
-
a.icon_cls = 'fa fa-play glyph'
|
64
|
-
a.disabled = true
|
65
|
-
end
|
14
|
+
def prepare_warnings
|
15
|
+
djs = ::Marty::BackgroundJob::FetchMissingInScheduleCronJobs.call
|
66
16
|
|
67
|
-
|
68
|
-
|
69
|
-
|
17
|
+
messages = djs.map do |dj|
|
18
|
+
handler_str = dj.handler[/job_class.*\n/]
|
19
|
+
job_class = handler_str.gsub('job_class:', '').strip
|
70
20
|
|
71
|
-
|
72
|
-
|
21
|
+
"#{job_class} with cron #{dj.cron} is present in delayed_jobs table, " \
|
22
|
+
'but is missing in the Dashboard.'
|
23
|
+
end
|
73
24
|
|
74
|
-
|
25
|
+
messages.join('<br>')
|
75
26
|
end
|
76
27
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
obj_hash = result.first
|
82
|
-
Marty::BackgroundJob::UpdateSchedule.call(id: obj_hash['id'], job_class: obj_hash['job_class'])
|
83
|
-
|
84
|
-
result
|
28
|
+
client_class do |c|
|
29
|
+
c.header = false
|
30
|
+
# c.layout = :border
|
31
|
+
c.defaults = { body_style: 'padding:0px' }
|
85
32
|
end
|
86
33
|
|
87
|
-
|
88
|
-
|
34
|
+
component :schedule_jobs_grid do |c|
|
35
|
+
c.klass = Marty::ScheduleJobsGrid
|
36
|
+
c.region = :north
|
37
|
+
c.min_height = 500
|
89
38
|
end
|
90
39
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
# Do nothing If it wasn't destroyed
|
97
|
-
next hash.merge(result) unless result[id.to_i] == 'ok'
|
98
|
-
|
99
|
-
Marty::BackgroundJob::UpdateSchedule.call(id: id, job_class: job_class)
|
100
|
-
hash.merge(result)
|
101
|
-
end
|
102
|
-
|
103
|
-
res
|
40
|
+
component :schedule_jobs_warnings do |c|
|
41
|
+
c.klass = Marty::Panel
|
42
|
+
c.title = I18n.t('jobs.schedule_dashboard.warnings')
|
43
|
+
c.html = prepare_warnings
|
44
|
+
c.min_height = 200
|
104
45
|
end
|
105
46
|
|
106
|
-
|
107
|
-
|
108
|
-
s = Marty::BackgroundJob::Schedule.find(client_config['selected'])
|
109
|
-
klass = s.job_class
|
110
|
-
klass.constantize.new.perform
|
111
|
-
rescue StandardError => e
|
112
|
-
next client.netzke_notify(e.message)
|
113
|
-
end
|
114
|
-
client.netzke_notify("#{klass.demodulize} ran successfully.")
|
47
|
+
def default_bbar
|
48
|
+
[]
|
115
49
|
end
|
116
50
|
end
|
117
51
|
|