marty 2.5.2 → 2.5.4
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 +5 -5
- data/.gitignore +4 -0
- data/.rubocop.yml +7 -0
- data/.rubocop_todo.yml +11 -589
- data/Gemfile +9 -9
- data/Gemfile.lock +1 -1
- data/Rakefile +1 -3
- data/app/components/marty/api_auth_view.rb +3 -3
- data/app/components/marty/api_config_view.rb +8 -8
- data/app/components/marty/api_log_view.rb +16 -20
- data/app/components/marty/auth_app.rb +6 -6
- data/app/components/marty/base_rule_view.rb +27 -19
- data/app/components/marty/config_view.rb +12 -9
- data/app/components/marty/data_grid_view.rb +26 -26
- data/app/components/marty/delorean_rule_view.rb +0 -1
- data/app/components/marty/event_view.rb +27 -27
- data/app/components/marty/extras/layout.rb +26 -26
- data/app/components/marty/extras/misc.rb +2 -2
- data/app/components/marty/grid.rb +13 -13
- data/app/components/marty/grid_append_only.rb +0 -1
- data/app/components/marty/import_type_view.rb +13 -13
- data/app/components/marty/import_view.rb +17 -16
- data/app/components/marty/log_view.rb +16 -14
- data/app/components/marty/main_auth_app.rb +59 -59
- data/app/components/marty/main_auth_app/client/main_auth_app.js +3 -3
- data/app/components/marty/mcfly_grid_panel.rb +10 -10
- data/app/components/marty/new_posting_form.rb +11 -11
- data/app/components/marty/new_posting_window.rb +0 -1
- data/app/components/marty/posting_grid.rb +12 -13
- data/app/components/marty/promise_view.rb +6 -6
- data/app/components/marty/report_form.rb +50 -53
- data/app/components/marty/report_select.rb +27 -27
- data/app/components/marty/reporting.rb +4 -4
- data/app/components/marty/script_form.rb +40 -42
- data/app/components/marty/script_grid.rb +24 -24
- data/app/components/marty/script_tester.rb +40 -42
- data/app/components/marty/scripting.rb +25 -27
- data/app/components/marty/simple_app.rb +24 -9
- data/app/components/marty/tag_grid.rb +12 -13
- data/app/components/marty/user_view.rb +35 -35
- data/app/controllers/marty/application_controller.rb +3 -4
- data/app/controllers/marty/components_controller.rb +1 -1
- data/app/controllers/marty/delayed_job_controller.rb +1 -0
- data/app/controllers/marty/diagnostic/controller.rb +4 -6
- data/app/controllers/marty/job_controller.rb +6 -6
- data/app/controllers/marty/report_controller.rb +11 -11
- data/app/controllers/marty/rpc_controller.rb +15 -16
- data/app/helpers/marty/script_set.rb +4 -4
- data/app/models/marty/api_auth.rb +4 -5
- data/app/models/marty/api_config.rb +1 -1
- data/app/models/marty/base.rb +9 -8
- data/app/models/marty/base_rule.rb +18 -13
- data/app/models/marty/config.rb +4 -5
- data/app/models/marty/data_grid.rb +157 -181
- data/app/models/marty/delorean_rule.rb +63 -62
- data/app/models/marty/enum.rb +1 -1
- data/app/models/marty/event.rb +56 -59
- data/app/models/marty/helper.rb +38 -6
- data/app/models/marty/import_type.rb +6 -6
- data/app/models/marty/log.rb +3 -2
- data/app/models/marty/name_validator.rb +3 -2
- data/app/models/marty/pg_enum.rb +3 -4
- data/app/models/marty/posting.rb +20 -24
- data/app/models/marty/promise.rb +28 -30
- data/app/models/marty/script.rb +30 -28
- data/app/models/marty/tag.rb +8 -8
- data/app/models/marty/token.rb +2 -2
- data/app/models/marty/user.rb +24 -23
- data/app/models/marty/vw_promise.rb +10 -11
- data/config/routes.rb +2 -2
- data/delorean/blame_report.dl +268 -0
- data/{spec/dummy/delorean/fields.dl → delorean/marty_fields.dl} +8 -0
- data/delorean/table_report.dl +34 -0
- data/docker-compose.dummy.yml +2 -3
- data/lib/marty/aws/base.rb +8 -8
- data/lib/marty/aws/request.rb +4 -4
- data/lib/marty/cache_adapters/mcfly_ruby_cache.rb +1 -0
- data/lib/marty/content_handler.rb +25 -25
- data/lib/marty/data_change.rb +49 -71
- data/lib/marty/data_conversion.rb +20 -28
- data/lib/marty/data_exporter.rb +25 -28
- data/lib/marty/data_importer.rb +25 -27
- data/lib/marty/engine.rb +1 -2
- data/lib/marty/json_schema.rb +22 -24
- data/lib/marty/logger.rb +6 -9
- data/lib/marty/mcfly_model.rb +20 -24
- data/lib/marty/migrations.rb +37 -35
- data/lib/marty/monkey.rb +33 -33
- data/lib/marty/permissions.rb +18 -18
- data/lib/marty/promise_job.rb +17 -17
- data/lib/marty/promise_proxy.rb +6 -6
- data/lib/marty/relation.rb +6 -7
- data/lib/marty/rpc_call.rb +13 -12
- data/lib/marty/rule_script_set.rb +32 -28
- data/lib/marty/schema_helper.rb +37 -51
- data/lib/marty/util.rb +25 -24
- data/lib/marty/version.rb +1 -1
- data/lib/marty/xl.rb +121 -115
- data/make-dummy.mk +3 -0
- data/marty.gemspec +21 -21
- data/other/marty/api/base.rb +34 -35
- data/other/marty/diagnostic/aws/ec2_instance.rb +8 -8
- data/other/marty/diagnostic/base.rb +13 -14
- data/other/marty/diagnostic/collection.rb +2 -1
- data/other/marty/diagnostic/connections.rb +8 -6
- data/other/marty/diagnostic/database.rb +1 -0
- data/other/marty/diagnostic/delayed_job_version.rb +7 -9
- data/other/marty/diagnostic/delayed_job_worker_total_count.rb +1 -1
- data/other/marty/diagnostic/delayed_job_workers.rb +1 -1
- data/other/marty/diagnostic/environment_variables.rb +17 -15
- data/other/marty/diagnostic/fatal.rb +1 -1
- data/other/marty/diagnostic/node.rb +5 -9
- data/other/marty/diagnostic/nodes.rb +7 -5
- data/other/marty/diagnostic/packer.rb +7 -7
- data/other/marty/diagnostic/reporter.rb +24 -27
- data/other/marty/diagnostic/version.rb +3 -5
- data/script/rails +2 -1
- data/spec/controllers/application_controller_spec.rb +6 -6
- data/spec/controllers/delayed_job_controller_spec.rb +4 -4
- data/spec/controllers/diagnostic/controller_spec.rb +59 -60
- data/spec/controllers/job_controller_spec.rb +68 -69
- data/spec/controllers/rpc_controller_spec.rb +353 -359
- data/spec/controllers/rpc_import_spec.rb +15 -16
- data/spec/dummy/delorean/blame_report.dl +110 -15
- data/spec/dummy/delorean/data_report.dl +4 -4
- data/spec/dummy/delorean/marty_fields.dl +63 -0
- data/spec/dummy/delorean/table_report.dl +34 -0
- data/spec/features/auth_app_spec.rb +1 -2
- data/spec/features/data_import_spec.rb +2 -3
- data/spec/features/enum_spec.rb +42 -46
- data/spec/features/jobs_dashboard_spec.rb +14 -8
- data/spec/features/log_view_spec.rb +40 -43
- data/spec/features/reporting_spec.rb +15 -15
- data/spec/features/rule_spec.rb +195 -190
- data/spec/features/scripting_spec.rb +17 -20
- data/spec/features/scripting_test_spec.rb +32 -33
- data/spec/features/user_view_spec.rb +15 -17
- data/spec/job_helper.rb +11 -11
- data/spec/lib/data_blame_spec.rb +82 -0
- data/spec/lib/data_exporter_spec.rb +31 -32
- data/spec/lib/data_importer_spec.rb +382 -395
- data/spec/lib/delorean_query_spec.rb +117 -119
- data/spec/lib/json_schema_spec.rb +382 -392
- data/spec/lib/logger_spec.rb +23 -24
- data/spec/lib/mcfly_model_spec.rb +112 -109
- data/spec/lib/migrations_spec.rb +10 -10
- data/spec/lib/struct_compare_spec.rb +6 -6
- data/spec/lib/table_report_spec.rb +90 -0
- data/spec/lib/xl_spec.rb +63 -65
- data/spec/lib/xl_styles_spec.rb +16 -19
- data/spec/models/api_auth_spec.rb +30 -30
- data/spec/models/config_spec.rb +32 -32
- data/spec/models/data_grid_spec.rb +642 -655
- data/spec/models/event_spec.rb +96 -88
- data/spec/models/import_type_spec.rb +20 -20
- data/spec/models/posting_spec.rb +35 -35
- data/spec/models/promise_spec.rb +5 -5
- data/spec/models/rule_spec.rb +280 -269
- data/spec/models/script_spec.rb +27 -18
- data/spec/models/user_spec.rb +9 -9
- data/spec/other/diagnostic/base_spec.rb +20 -19
- data/spec/other/diagnostic/collection_spec.rb +6 -5
- data/spec/other/diagnostic/delayed_job_version_spec.rb +1 -1
- data/spec/other/diagnostic/delayed_job_workers_spec.rb +8 -8
- data/spec/other/diagnostic/reporter_spec.rb +31 -33
- data/spec/spec_helper.rb +5 -5
- data/spec/support/chromedriver.rb +3 -5
- data/spec/support/components/netzke_combobox.rb +1 -1
- data/spec/support/components/netzke_grid.rb +17 -17
- data/spec/support/custom_matchers.rb +2 -2
- data/spec/support/download_helper.rb +1 -1
- data/spec/support/helper.rb +1 -2
- data/spec/support/netzke.rb +31 -31
- data/spec/support/performance_helper.rb +8 -8
- data/spec/support/post_run_logger.rb +1 -2
- data/spec/support/setup.rb +1 -4
- data/spec/support/shared_connection.rb +2 -2
- data/spec/support/structure_compare.rb +21 -22
- data/spec/support/suite.rb +1 -2
- data/spec/support/users.rb +5 -6
- metadata +32 -26
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
prompt: true,
|
|
80
80
|
fn: function (btn, value) {
|
|
81
81
|
if (btn == "ok" && value == "STOP") {
|
|
82
|
-
me.
|
|
82
|
+
me.showLoadMask('Stopping delayed job...');
|
|
83
83
|
me.server.bgStop({});
|
|
84
84
|
}
|
|
85
85
|
}
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
prompt: true,
|
|
97
97
|
fn: function (btn, value) {
|
|
98
98
|
if (btn == "ok" && value == "RESTART") {
|
|
99
|
-
me.
|
|
99
|
+
me.showLoadMask('Restarting delayed job...');
|
|
100
100
|
me.server.bgRestart({});
|
|
101
101
|
}
|
|
102
102
|
}
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
},
|
|
105
105
|
|
|
106
106
|
netzkeOnBgStatus: function () {
|
|
107
|
-
this.
|
|
107
|
+
this.showLoadMask('Checking delayed job status...');
|
|
108
108
|
this.server.bgStatus({});
|
|
109
109
|
},
|
|
110
110
|
|
|
@@ -4,14 +4,14 @@ class Marty::McflyGridPanel < Marty::Grid
|
|
|
4
4
|
|
|
5
5
|
warped = Marty::Util.warped?
|
|
6
6
|
|
|
7
|
-
c.editing
|
|
7
|
+
c.editing = !warped && c.editing || :none
|
|
8
8
|
|
|
9
9
|
[:update, :delete, :create].each do |perm|
|
|
10
10
|
c.permissions[perm] = false if warped
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
# default sort all Mcfly grids with id
|
|
14
|
-
c.store_config.merge!(
|
|
14
|
+
c.store_config.merge!(sorters: [{ property: :id, direction: 'ASC' }])
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def get_records(params)
|
|
@@ -19,9 +19,9 @@ class Marty::McflyGridPanel < Marty::Grid
|
|
|
19
19
|
tb = model.table_name
|
|
20
20
|
|
|
21
21
|
model.where("#{tb}.obsoleted_dt >= ? AND #{tb}.created_dt < ?",
|
|
22
|
-
|
|
22
|
+
ts, ts).scoping do
|
|
23
23
|
super
|
|
24
|
-
|
|
24
|
+
end
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
######################################################################
|
|
@@ -34,7 +34,7 @@ class Marty::McflyGridPanel < Marty::Grid
|
|
|
34
34
|
assoc_name, assoc_method = c[:name].split('__')
|
|
35
35
|
begin
|
|
36
36
|
aklass = model.reflect_on_association(assoc_name.to_sym).klass
|
|
37
|
-
rescue
|
|
37
|
+
rescue StandardError
|
|
38
38
|
raise "trouble finding #{assoc_name} assoc class on #{model}"
|
|
39
39
|
end
|
|
40
40
|
c[:scope] = Mcfly.has_mcfly?(aklass) ?
|
|
@@ -49,14 +49,13 @@ class Marty::McflyGridPanel < Marty::Grid
|
|
|
49
49
|
|
|
50
50
|
action :dup_in_form do |a|
|
|
51
51
|
a.hidden = !config[:permissions][:create]
|
|
52
|
-
a.icon_cls =
|
|
52
|
+
a.icon_cls = 'fa fa-copy glyph'
|
|
53
53
|
a.disabled = true
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
# edit-in-form submit with dup support
|
|
57
57
|
endpoint :edit_window__edit_form__submit do |params|
|
|
58
|
-
|
|
59
|
-
if params["dup"]
|
|
58
|
+
if params['dup']
|
|
60
59
|
# FIXME: copied from basepack grid endpoint
|
|
61
60
|
# :add_window__add_form__netzke_submit
|
|
62
61
|
|
|
@@ -80,11 +79,12 @@ class Marty::McflyGridPanel < Marty::Grid
|
|
|
80
79
|
end
|
|
81
80
|
end
|
|
82
81
|
|
|
83
|
-
private
|
|
82
|
+
private
|
|
83
|
+
|
|
84
84
|
def self.mcfly_scope(sort_column)
|
|
85
85
|
lambda { |r|
|
|
86
86
|
ts = Mcfly.normalize_infinity(Marty::Util.get_posting_time)
|
|
87
|
-
r.where(
|
|
87
|
+
r.where('obsoleted_dt >= ? AND created_dt < ?', ts, ts).
|
|
88
88
|
order(sort_column.to_sym)
|
|
89
89
|
}
|
|
90
90
|
end
|
|
@@ -9,8 +9,8 @@ class Marty::NewPostingForm < Marty::Form
|
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
action :apply do |a|
|
|
12
|
-
a.text = I18n.t(
|
|
13
|
-
a.tooltip = I18n.t(
|
|
12
|
+
a.text = I18n.t('create_posting')
|
|
13
|
+
a.tooltip = I18n.t('create_posting')
|
|
14
14
|
a.icon_cls = 'fa fa-clock glyph'
|
|
15
15
|
end
|
|
16
16
|
|
|
@@ -25,16 +25,16 @@ class Marty::NewPostingForm < Marty::Form
|
|
|
25
25
|
def configure(c)
|
|
26
26
|
super
|
|
27
27
|
|
|
28
|
-
c.model =
|
|
28
|
+
c.model = 'Marty::Posting'
|
|
29
29
|
c.items = [
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
30
|
+
{
|
|
31
|
+
name: :posting_type__name,
|
|
32
|
+
scope: lambda { |r|
|
|
33
|
+
r.where(name: Marty::NewPostingForm.can_perform_actions)
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
:comment,
|
|
37
|
+
]
|
|
38
38
|
end
|
|
39
39
|
end
|
|
40
40
|
|
|
@@ -6,11 +6,11 @@ class Marty::PostingGrid < Marty::Grid
|
|
|
6
6
|
super
|
|
7
7
|
|
|
8
8
|
c.header = false
|
|
9
|
-
c.model =
|
|
10
|
-
c.attributes
|
|
11
|
-
c.multi_select
|
|
12
|
-
c.store_config.merge!(
|
|
13
|
-
page_size: 12
|
|
9
|
+
c.model = 'Marty::Posting'
|
|
10
|
+
c.attributes = [:name, :created_dt, :user__name, :comment]
|
|
11
|
+
c.multi_select = false
|
|
12
|
+
c.store_config.merge!(sorters: [{ property: :created_dt, direction: 'DESC' }],
|
|
13
|
+
page_size: 12)
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
client_class do |c|
|
|
@@ -19,9 +19,9 @@ class Marty::PostingGrid < Marty::Grid
|
|
|
19
19
|
|
|
20
20
|
# hijacking delete button
|
|
21
21
|
action :delete do |a|
|
|
22
|
-
a.text =
|
|
23
|
-
a.tooltip =
|
|
24
|
-
a.icon_cls =
|
|
22
|
+
a.text = 'Select'
|
|
23
|
+
a.tooltip = 'Select'
|
|
24
|
+
a.icon_cls = 'fa fa-clock glyph'
|
|
25
25
|
a.disabled = true
|
|
26
26
|
end
|
|
27
27
|
|
|
@@ -30,8 +30,8 @@ class Marty::PostingGrid < Marty::Grid
|
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
action :detail do |a|
|
|
33
|
-
a.text =
|
|
34
|
-
a.icon_cls =
|
|
33
|
+
a.text = 'Detail'
|
|
34
|
+
a.icon_cls = 'fa fa-th-large glyph'
|
|
35
35
|
a.handler = :detail
|
|
36
36
|
a.disabled = true
|
|
37
37
|
end
|
|
@@ -61,8 +61,8 @@ class Marty::PostingGrid < Marty::Grid
|
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
attribute :created_dt do |c|
|
|
64
|
-
c.text =
|
|
65
|
-
c.format =
|
|
64
|
+
c.text = 'Date/Time'
|
|
65
|
+
c.format = 'Y-m-d H:i'
|
|
66
66
|
c.hidden = true
|
|
67
67
|
end
|
|
68
68
|
|
|
@@ -73,7 +73,6 @@ class Marty::PostingGrid < Marty::Grid
|
|
|
73
73
|
attribute :comment do |c|
|
|
74
74
|
c.width = 100
|
|
75
75
|
end
|
|
76
|
-
|
|
77
76
|
end
|
|
78
77
|
|
|
79
78
|
PostingGrid = Marty::PostingGrid
|
|
@@ -17,10 +17,10 @@ class Marty::PromiseView < Netzke::Tree::Base
|
|
|
17
17
|
|
|
18
18
|
def configure(config)
|
|
19
19
|
super
|
|
20
|
-
config.title = I18n.t(
|
|
21
|
-
config.model =
|
|
20
|
+
config.title = I18n.t('jobs.promise_view')
|
|
21
|
+
config.model = 'Marty::VwPromise'
|
|
22
22
|
config.attributes = [
|
|
23
|
-
{name: :title, xtype: :treecolumn},
|
|
23
|
+
{ name: :title, xtype: :treecolumn },
|
|
24
24
|
:user__login,
|
|
25
25
|
:job_id,
|
|
26
26
|
:start_dt,
|
|
@@ -48,20 +48,20 @@ class Marty::PromiseView < Netzke::Tree::Base
|
|
|
48
48
|
action :clear do |a|
|
|
49
49
|
a.text = a.tooltip = 'Clear'
|
|
50
50
|
a.disabled = false
|
|
51
|
-
a.icon_cls =
|
|
51
|
+
a.icon_cls = 'fa fa-minus glyph'
|
|
52
52
|
a.hidden = !self.class.has_admin_perm?
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
action :download do |a|
|
|
56
56
|
a.text = a.tooltip = 'Download'
|
|
57
57
|
a.disabled = true
|
|
58
|
-
a.icon_cls =
|
|
58
|
+
a.icon_cls = 'fa fa-download glyph'
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
action :refresh do |a|
|
|
62
62
|
a.text = a.tooltip = 'Refresh'
|
|
63
63
|
a.disabled = false
|
|
64
|
-
a.icon_cls =
|
|
64
|
+
a.icon_cls = 'fa fa-sync-alt glyph'
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
endpoint :clear do |params|
|
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
class Marty::ReportForm < Marty::Form
|
|
2
|
-
|
|
3
2
|
# override apply for background generation
|
|
4
3
|
action :apply do |a|
|
|
5
|
-
a.text = a.tooltip = I18n.t(
|
|
4
|
+
a.text = a.tooltip = I18n.t('reporting.background')
|
|
6
5
|
a.handler = :netzke_on_apply
|
|
7
|
-
a.icon_cls =
|
|
6
|
+
a.icon_cls = 'fa fa-cloud glyph'
|
|
8
7
|
a.disabled = false
|
|
9
8
|
end
|
|
10
9
|
|
|
11
10
|
action :foreground do |a|
|
|
12
|
-
a.text = a.tooltip = I18n.t(
|
|
13
|
-
a.icon_cls =
|
|
11
|
+
a.text = a.tooltip = I18n.t('reporting.generate')
|
|
12
|
+
a.icon_cls = 'fa fa-download glyph'
|
|
14
13
|
a.disabled = false
|
|
15
14
|
end
|
|
16
15
|
|
|
17
16
|
action :link do |a|
|
|
18
|
-
a.text = a.tooltip = I18n.t(
|
|
19
|
-
a.icon_cls =
|
|
17
|
+
a.text = a.tooltip = I18n.t('reporting.link')
|
|
18
|
+
a.icon_cls = 'fa fa-link glyph'
|
|
20
19
|
a.disabled = false
|
|
21
20
|
end
|
|
22
21
|
|
|
@@ -31,25 +30,25 @@ class Marty::ReportForm < Marty::Form
|
|
|
31
30
|
######################################################################
|
|
32
31
|
|
|
33
32
|
def self.get_report_engine(params)
|
|
34
|
-
d_params = ActiveSupport::JSON.decode(params[:data] ||
|
|
35
|
-
d_params.each_pair do |k,v|
|
|
36
|
-
d_params[k] = nil if v.blank? || v ==
|
|
33
|
+
d_params = ActiveSupport::JSON.decode(params[:data] || '{}')
|
|
34
|
+
d_params.each_pair do |k, v|
|
|
35
|
+
d_params[k] = nil if v.blank? || v == 'null'
|
|
37
36
|
end
|
|
38
37
|
|
|
39
|
-
tag_id = d_params.delete(
|
|
40
|
-
script_name = d_params.delete(
|
|
41
|
-
node = d_params.delete(
|
|
38
|
+
tag_id = d_params.delete('selected_tag_id')
|
|
39
|
+
script_name = d_params.delete('selected_script_name')
|
|
40
|
+
node = d_params.delete('selected_node')
|
|
42
41
|
|
|
43
42
|
engine = Marty::ScriptSet.new(tag_id).get_engine(script_name)
|
|
44
43
|
|
|
45
|
-
roles = engine.evaluate(node,
|
|
44
|
+
roles = engine.evaluate(node, 'roles', {}) rescue nil
|
|
46
45
|
|
|
47
|
-
if roles && !roles.any?{ |r| Marty::User.has_role(r) }
|
|
46
|
+
if roles && !roles.any? { |r| Marty::User.has_role(r) }
|
|
48
47
|
# insufficient permissions
|
|
49
48
|
return []
|
|
50
49
|
end
|
|
51
50
|
|
|
52
|
-
d_params[
|
|
51
|
+
d_params['p_title'] ||= engine.evaluate(node, 'title', {}).to_s
|
|
53
52
|
|
|
54
53
|
[engine, d_params, node]
|
|
55
54
|
end
|
|
@@ -57,17 +56,17 @@ class Marty::ReportForm < Marty::Form
|
|
|
57
56
|
def self.run_eval(params)
|
|
58
57
|
engine, d_params, node = get_report_engine(params)
|
|
59
58
|
|
|
60
|
-
raise
|
|
61
|
-
raise
|
|
59
|
+
raise 'Insufficient permissions' unless engine
|
|
60
|
+
raise 'no selected report node' unless String === node
|
|
62
61
|
|
|
63
62
|
begin
|
|
64
|
-
engine.evaluate(node,
|
|
65
|
-
rescue => exc
|
|
63
|
+
engine.evaluate(node, 'result', d_params)
|
|
64
|
+
rescue StandardError => exc
|
|
66
65
|
Marty::Util.logger.error "run_eval failed: #{exc.backtrace}"
|
|
67
66
|
|
|
68
67
|
res = Delorean::Engine.grok_runtime_exception(exc)
|
|
69
|
-
res[
|
|
70
|
-
res[
|
|
68
|
+
res['backtrace'] =
|
|
69
|
+
res['backtrace'].map { |m, line, fn| "#{m}:#{line} #{fn}" }.join('\n')
|
|
71
70
|
res
|
|
72
71
|
end
|
|
73
72
|
end
|
|
@@ -77,16 +76,16 @@ class Marty::ReportForm < Marty::Form
|
|
|
77
76
|
|
|
78
77
|
engine, d_params, node = self.class.get_report_engine(params)
|
|
79
78
|
|
|
80
|
-
return client.netzke_notify
|
|
79
|
+
return client.netzke_notify 'Insufficient permissions to run report!' unless
|
|
81
80
|
engine
|
|
82
81
|
|
|
83
82
|
# start background promise to get report result
|
|
84
83
|
engine.background_eval(node,
|
|
85
84
|
d_params,
|
|
86
|
-
[
|
|
87
|
-
|
|
85
|
+
['result', 'title', 'format'],
|
|
86
|
+
)
|
|
88
87
|
|
|
89
|
-
client.netzke_notify
|
|
88
|
+
client.netzke_notify 'Report can be accessed from the Jobs Dashboard ...'
|
|
90
89
|
end
|
|
91
90
|
|
|
92
91
|
######################################################################
|
|
@@ -94,9 +93,9 @@ class Marty::ReportForm < Marty::Form
|
|
|
94
93
|
client_class do |c|
|
|
95
94
|
# Find the mount path for the Marty engine. FIXME: this is likely
|
|
96
95
|
# very brittle.
|
|
97
|
-
@@mount_path = Rails.application.routes.routes.detect
|
|
98
|
-
|
|
99
|
-
|
|
96
|
+
@@mount_path = Rails.application.routes.routes.detect do |r|
|
|
97
|
+
r.app.app == Marty::Engine
|
|
98
|
+
end.format({})
|
|
100
99
|
|
|
101
100
|
c.mount_path = l(<<-JS)
|
|
102
101
|
function() {
|
|
@@ -113,11 +112,11 @@ class Marty::ReportForm < Marty::Form
|
|
|
113
112
|
def eval_form_items(engine, items)
|
|
114
113
|
case items
|
|
115
114
|
when Array
|
|
116
|
-
items.map {|x| eval_form_items(engine, x)}
|
|
115
|
+
items.map { |x| eval_form_items(engine, x) }
|
|
117
116
|
when Hash
|
|
118
|
-
items.each_with_object({})
|
|
117
|
+
items.each_with_object({}) do |(key, value), result|
|
|
119
118
|
result[key] = eval_form_items(engine, value)
|
|
120
|
-
|
|
119
|
+
end
|
|
121
120
|
when String
|
|
122
121
|
items.starts_with?(':') ? items[1..-1].to_sym : items
|
|
123
122
|
when Class
|
|
@@ -138,7 +137,7 @@ class Marty::ReportForm < Marty::Form
|
|
|
138
137
|
super
|
|
139
138
|
|
|
140
139
|
unless root_sess[:selected_script_name] && root_sess[:selected_node]
|
|
141
|
-
c.title =
|
|
140
|
+
c.title = 'No Report selected.'
|
|
142
141
|
return
|
|
143
142
|
end
|
|
144
143
|
|
|
@@ -150,35 +149,34 @@ class Marty::ReportForm < Marty::Form
|
|
|
150
149
|
|
|
151
150
|
items, title, format = engine.
|
|
152
151
|
evaluate(root_sess[:selected_node],
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
152
|
+
['form', 'title', 'format'],
|
|
153
|
+
{},
|
|
154
|
+
)
|
|
156
155
|
|
|
157
|
-
raise
|
|
158
|
-
raise
|
|
156
|
+
raise 'bad form items' unless items.is_a?(Array)
|
|
157
|
+
raise 'bad format' unless
|
|
159
158
|
Marty::ContentHandler::GEN_FORMATS.member?(format)
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
c.title = "ERROR"
|
|
159
|
+
rescue StandardError => exc
|
|
160
|
+
c.title = 'ERROR'
|
|
163
161
|
c.items =
|
|
164
162
|
[
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
163
|
+
{
|
|
164
|
+
field_label: 'Exception',
|
|
165
|
+
xtype: :displayfield,
|
|
166
|
+
name: 'displayfield1',
|
|
167
|
+
value: "<span style=\"color:red;\">#{exc}</span>"
|
|
168
|
+
},
|
|
171
169
|
]
|
|
172
170
|
return
|
|
173
171
|
end
|
|
174
172
|
|
|
175
173
|
# if there's a background_only flag, we disable the foreground submit
|
|
176
174
|
background_only =
|
|
177
|
-
engine.evaluate(root_sess[:selected_node],
|
|
175
|
+
engine.evaluate(root_sess[:selected_node], 'background_only') rescue nil
|
|
178
176
|
|
|
179
177
|
items = Marty::Xl.symbolize_keys(eval_form_items(engine, items), ':')
|
|
180
178
|
|
|
181
|
-
items = [{html:
|
|
179
|
+
items = [{ html: '<br><b>No input is needed for this report.</b>' }] if
|
|
182
180
|
items.empty?
|
|
183
181
|
|
|
184
182
|
# add hidden fields for selected tag/script/node
|
|
@@ -186,15 +184,14 @@ class Marty::ReportForm < Marty::Form
|
|
|
186
184
|
:selected_script_name,
|
|
187
185
|
:selected_node,
|
|
188
186
|
# just for testing
|
|
189
|
-
:selected_testing,
|
|
190
|
-
].map { |f|
|
|
187
|
+
:selected_testing,].map do |f|
|
|
191
188
|
{
|
|
192
189
|
name: f,
|
|
193
190
|
xtype: :textfield,
|
|
194
191
|
hidden: true,
|
|
195
192
|
value: root_sess[f],
|
|
196
193
|
}
|
|
197
|
-
|
|
194
|
+
end
|
|
198
195
|
|
|
199
196
|
c.items = items
|
|
200
197
|
c.repformat = format
|
|
@@ -202,7 +199,7 @@ class Marty::ReportForm < Marty::Form
|
|
|
202
199
|
c.reptitle = title
|
|
203
200
|
c.authenticity_token = controller.send(:form_authenticity_token)
|
|
204
201
|
|
|
205
|
-
[:foreground, :link].each{|a| actions[a].disabled = !!background_only}
|
|
202
|
+
[:foreground, :link].each { |a| actions[a].disabled = !!background_only }
|
|
206
203
|
end
|
|
207
204
|
end
|
|
208
205
|
|