finery 3.0.1 → 3.0.3
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 +1 -2
- data/app/assets/javascripts/blazer/application.js +2 -2
- data/app/assets/javascripts/blazer/controllers/application.js.erb +2 -0
- data/app/assets/javascripts/blazer/controllers/index.js +2 -0
- data/app/assets/javascripts/blazer/controllers/more_controller.js +13 -0
- data/app/assets/javascripts/blazer/controllers/navbar_padding_controller.js +7 -0
- data/app/assets/stylesheets/blazer/application.css +18 -52
- data/app/controllers/blazer/base_controller.rb +1 -0
- data/app/controllers/blazer/queries_controller.rb +2 -1
- data/app/helpers/blazer/base_helper.rb +6 -0
- data/app/views/blazer/_navbar.html.erb +40 -0
- data/app/views/blazer/_variables.html.erb +16 -12
- data/app/views/blazer/checks/_form.html.erb +6 -6
- data/app/views/blazer/checks/index.html.erb +0 -19
- data/app/views/blazer/dashboards/_form.html.erb +7 -5
- data/app/views/blazer/dashboards/show.html.erb +7 -18
- data/app/views/blazer/queries/_form.html.erb +19 -13
- data/app/views/blazer/queries/home.html.erb +17 -30
- data/app/views/blazer/queries/run.html.erb +1 -1
- data/app/views/blazer/queries/show.html.erb +26 -31
- data/app/views/blazer/uploads/_form.html.erb +3 -3
- data/app/views/blazer/uploads/index.html.erb +0 -18
- data/app/views/layouts/blazer/application.html.erb +10 -11
- data/lib/blazer/adapters/clickhouse_adapter.rb +5 -2
- data/lib/blazer/engine.rb +0 -5
- data/lib/blazer/version.rb +1 -1
- data/lib/blazer.rb +11 -8
- metadata +6 -15
- data/app/assets/fonts/blazer/glyphicons-halflings-regular.eot +0 -0
- data/app/assets/fonts/blazer/glyphicons-halflings-regular.svg +0 -288
- data/app/assets/fonts/blazer/glyphicons-halflings-regular.ttf +0 -0
- data/app/assets/fonts/blazer/glyphicons-halflings-regular.woff +0 -0
- data/app/assets/fonts/blazer/glyphicons-halflings-regular.woff2 +0 -0
- data/app/assets/javascripts/blazer/bootstrap.js +0 -2580
- data/app/assets/javascripts/blazer/controllers/application.js +0 -2
- data/app/assets/javascripts/blazer/selectize.js +0 -3891
- data/app/assets/stylesheets/blazer/bootstrap-propshaft.css +0 -10
- data/app/assets/stylesheets/blazer/bootstrap-sprockets.css.erb +0 -10
- data/app/assets/stylesheets/blazer/bootstrap.css +0 -6828
- data/app/assets/stylesheets/blazer/selectize.css +0 -403
- data/app/views/blazer/_nav.html.erb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 581c9c47c4c0b79536e441a4d4471fe021dfb782988a397e4ce781436cabe9fb
|
4
|
+
data.tar.gz: f5cf561aaff9f8362b28a28217b01b5591ce73b90d0c1eb7cd54dd67d51c8590
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07b7c9c15a2d9a433c2d0b4d45faeba9d2d7ea5c64fcd06b7099f8b849e2aa0e385b026b9198051230efa8c5fe15c0f368a43d3d0fc0319f7df3c6ce2a756f00
|
7
|
+
data.tar.gz: 8a4f16b2080bbc21071068bd93995c08255a0aac0dd3a72ea58fb1f51e0935580c36ede132d0617b8ce6163420f84d1a898b61d05c265e1ddf71d0784b342873
|
data/README.md
CHANGED
@@ -53,7 +53,7 @@ gem "finery"
|
|
53
53
|
Run:
|
54
54
|
|
55
55
|
```sh
|
56
|
-
rails generate
|
56
|
+
rails generate blazer:install
|
57
57
|
rails db:migrate
|
58
58
|
```
|
59
59
|
|
@@ -763,7 +763,6 @@ data_sources:
|
|
763
763
|
# optional settings
|
764
764
|
ssl_verify: true # false by default
|
765
765
|
```
|
766
|
-
>>>>>>> 41a6b49 (Added support for ClickHouse)
|
767
766
|
|
768
767
|
### Druid
|
769
768
|
|
@@ -5,7 +5,7 @@
|
|
5
5
|
//= require ./stupidtable
|
6
6
|
//= require ./stupidtable-custom-settings
|
7
7
|
//= require ./jquery.stickytableheaders
|
8
|
-
//= require
|
8
|
+
//= require selectize.min
|
9
9
|
//= require ./highlight.min
|
10
10
|
//= require ./moment
|
11
11
|
//= require ./moment-timezone-with-data
|
@@ -17,7 +17,7 @@
|
|
17
17
|
//= require ./chartjs-plugin-annotation.min
|
18
18
|
//= require ./ace
|
19
19
|
//= require ./Sortable
|
20
|
-
//= require
|
20
|
+
//= require bootstrap.bundle.min
|
21
21
|
//= require ./vue.global.prod
|
22
22
|
//= require ./routes
|
23
23
|
//= require ./queries
|
@@ -0,0 +1,13 @@
|
|
1
|
+
Stimulus.register("more", class extends Controller {
|
2
|
+
static targets = [ "field", "show" ]
|
3
|
+
|
4
|
+
connect() {
|
5
|
+
this.fieldTargets.forEach((e) => { e.style.display = "none" })
|
6
|
+
this.showTarget.classList.remove("d-none")
|
7
|
+
}
|
8
|
+
|
9
|
+
show(event) {
|
10
|
+
this.fieldTargets.forEach((e) => { e.style.display = "block" })
|
11
|
+
this.showTarget.classList.add("d-none")
|
12
|
+
}
|
13
|
+
})
|
@@ -1,20 +1,26 @@
|
|
1
1
|
/*
|
2
|
-
*= require
|
3
|
-
*= require
|
4
|
-
*= require ./selectize
|
2
|
+
*= require bootstrap.min
|
3
|
+
*= require selectize.bootstrap5
|
5
4
|
*= require ./github
|
6
5
|
*= require ./daterangepicker
|
7
6
|
*= require_self
|
8
7
|
*/
|
9
8
|
|
9
|
+
.hide {
|
10
|
+
display: none !important;
|
11
|
+
}
|
12
|
+
|
10
13
|
pre {
|
11
14
|
border: none;
|
12
15
|
border-radius: 0;
|
13
16
|
}
|
14
17
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
+
.text-pre-line {
|
19
|
+
white-space: pre-line;
|
20
|
+
}
|
21
|
+
|
22
|
+
body.with-navbar {
|
23
|
+
padding-top: 3.5rem;
|
18
24
|
}
|
19
25
|
|
20
26
|
table.results-table {
|
@@ -52,7 +58,11 @@ input.search:focus {
|
|
52
58
|
outline: none;
|
53
59
|
}
|
54
60
|
|
55
|
-
.
|
61
|
+
.selectize-control {
|
62
|
+
min-width: 10em;
|
63
|
+
}
|
64
|
+
|
65
|
+
.text-right .selectize-control {
|
56
66
|
display: inline-block;
|
57
67
|
vertical-align: middle;
|
58
68
|
margin-left: 5px;
|
@@ -157,26 +167,10 @@ input.search:focus {
|
|
157
167
|
background-color: #fff;
|
158
168
|
}
|
159
169
|
|
160
|
-
.
|
161
|
-
cursor: pointer;
|
162
|
-
color: #d9534f;
|
163
|
-
display: none;
|
164
|
-
float: right;
|
165
|
-
margin-top: 3px;
|
166
|
-
}
|
167
|
-
|
168
|
-
.list-group li:hover .glyphicon-remove {
|
169
|
-
display: inline;
|
170
|
-
}
|
171
|
-
|
172
|
-
.list-group {
|
170
|
+
#queries.list-group {
|
173
171
|
cursor: move;
|
174
172
|
}
|
175
173
|
|
176
|
-
#header a.active {
|
177
|
-
color: #999;
|
178
|
-
}
|
179
|
-
|
180
174
|
[v-cloak] {
|
181
175
|
display: none;
|
182
176
|
}
|
@@ -197,34 +191,6 @@ input.search:focus {
|
|
197
191
|
color: red;
|
198
192
|
}
|
199
193
|
|
200
|
-
.small-form {
|
201
|
-
margin-right: auto;
|
202
|
-
margin-left: auto;
|
203
|
-
max-width: 400px;
|
204
|
-
}
|
205
|
-
|
206
|
-
.alert {
|
207
|
-
padding-top: 8px;
|
208
|
-
padding-bottom: 8px;
|
209
|
-
}
|
210
|
-
|
211
|
-
h1, h2, h3, h4, p, hr, .table, .navbar, #header, .alert, .form-group {
|
212
|
-
margin-top: 0;
|
213
|
-
margin-bottom: 15px;
|
214
|
-
}
|
215
|
-
|
216
|
-
.double-margin, .chart-container {
|
217
|
-
margin-bottom: 30px;
|
218
|
-
}
|
219
|
-
|
220
|
-
h1 {
|
221
|
-
font-size: 24px;
|
222
|
-
}
|
223
|
-
|
224
|
-
h2 {
|
225
|
-
font-size: 20px;
|
226
|
-
}
|
227
|
-
|
228
194
|
.schema-table {
|
229
195
|
max-width: 500px;
|
230
196
|
}
|
@@ -61,6 +61,7 @@ module Blazer
|
|
61
61
|
def show
|
62
62
|
@statement = @query.statement_object
|
63
63
|
@success = process_vars(@statement)
|
64
|
+
@data_sources = [Blazer.data_sources[@query.data_source]]
|
64
65
|
|
65
66
|
@smart_vars = {}
|
66
67
|
@sql_errors = []
|
@@ -273,7 +274,7 @@ module Blazer
|
|
273
274
|
raise Error, @error if @error && Rails.env.test?
|
274
275
|
|
275
276
|
data = csv_data(@columns, @rows, @data_source)
|
276
|
-
query_params = variable_params.select { |k| @query.variables.include?(k) }
|
277
|
+
query_params = variable_params(@query).select { |k| @query.variables.include?(k) }
|
277
278
|
name = @query.try(:name).presence || "query"
|
278
279
|
filename = "#{name}-#{query_params.to_query}".parameterize + ".csv"
|
279
280
|
send_data data, type: "text/csv; charset=utf-8", disposition: "attachment", filename: filename
|
@@ -36,6 +36,12 @@ module Blazer
|
|
36
36
|
k.nil? ? "null" : k.to_s
|
37
37
|
end
|
38
38
|
|
39
|
+
def blazer_var_default?(key)
|
40
|
+
value = request.query_parameters[key]
|
41
|
+
return true if value.to_s == ""
|
42
|
+
return true if @data_sources.any? { |source| source.variable_defaults[key].to_s == value.to_s }
|
43
|
+
end
|
44
|
+
|
39
45
|
def blazer_format_annotations(annotations)
|
40
46
|
return [] unless annotations.is_a?(Array)
|
41
47
|
sorted = annotations.sort_by { |annotation| annotation[:min_date] }
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<nav class="navbar navbar-expand-md fixed-top bg-body-tertiary" data-navbar-padding-target="navbar">
|
2
|
+
<div class="container">
|
3
|
+
<div class="d-flex flex-nowrap mw-100">
|
4
|
+
<span class="navbar-brand d-none d-sm-inline">Finery</span>
|
5
|
+
<button class="navbar-toggler me-3" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
|
6
|
+
<span class="navbar-toggler-icon"></span>
|
7
|
+
</button>
|
8
|
+
<span class="navbar-brand d-sm-none text-truncate"><%= blazer_title || "Finery" %></span>
|
9
|
+
</div>
|
10
|
+
<div class="collapse navbar-collapse" id="navbarCollapse">
|
11
|
+
<ul class="navbar-nav me-auto mb-2 mb-md-0">
|
12
|
+
<li class="nav-item">
|
13
|
+
<%= link_to "Home", blazer.root_path, class: "nav-link" %>
|
14
|
+
</li>
|
15
|
+
<li class="nav-item">
|
16
|
+
<%= link_to "Checks", blazer.checks_path, class: "nav-link" %>
|
17
|
+
</li>
|
18
|
+
<% if Blazer.uploads? %>
|
19
|
+
<li class="nav-item">
|
20
|
+
<%= link_to "Uploads", blazer.uploads_path, class: "nav-link" %>
|
21
|
+
</li>
|
22
|
+
<% end %>
|
23
|
+
<li class="nav-item dropdown">
|
24
|
+
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
|
25
|
+
New
|
26
|
+
</a>
|
27
|
+
<ul class="dropdown-menu">
|
28
|
+
<li><%= link_to "Query", blazer.new_query_path, class: "dropdown-item" %></li>
|
29
|
+
<li><%= link_to "Dashboard", blazer.new_dashboard_path, class: "dropdown-item" %></li>
|
30
|
+
<li><%= link_to "Check", blazer.new_check_path(query_id: @query&.id), class: "dropdown-item" %></li>
|
31
|
+
<% if Blazer.uploads? %>
|
32
|
+
<%= link_to "Upload", blazer.new_upload_path, class: "dropdown-item" %>
|
33
|
+
<% end %>
|
34
|
+
</ul>
|
35
|
+
</li>
|
36
|
+
</ul>
|
37
|
+
<%= yield(:nav) %>
|
38
|
+
</div>
|
39
|
+
</div>
|
40
|
+
</nav>
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<script>
|
4
4
|
<%= blazer_js_var "timeZone", Blazer.time_zone.tzinfo.name %>
|
5
5
|
</script>
|
6
|
-
<form id="bind" method="get" action="<%= action %>" class="form-inline" style="margin-bottom: 15px;" data-controller="autosubmit" data-action="change->autosubmit#call">
|
6
|
+
<form id="bind" method="get" action="<%= action %>" class="form-inline row g-3" style="margin-bottom: 15px;" data-controller="autosubmit more" data-action="change->autosubmit#call">
|
7
7
|
<% date_vars = ["start_time", "end_time"] %>
|
8
8
|
<% if (date_vars - @bind_vars).empty? %>
|
9
9
|
<% @bind_vars = @bind_vars - date_vars %>
|
@@ -12,19 +12,17 @@
|
|
12
12
|
<% end %>
|
13
13
|
|
14
14
|
<% @bind_vars.each_with_index do |var, i| %>
|
15
|
-
<div class="
|
16
|
-
<%= label_tag var, var %>
|
17
|
-
<% if
|
18
|
-
<%= select_tag var, options_for_select([
|
15
|
+
<div class="col-12 col-md-2" <% if blazer_var_default?(var) %>data-more-target="field"<% end %>>
|
16
|
+
<%= label_tag var, var, class: "form-label" %>
|
17
|
+
<% if @smart_vars.key? var %>
|
18
|
+
<%= select_tag var, options_for_select(@smart_vars[var], var_params[var]), include_blank: true, data: { controller: "selectize" }, class: "form-select" %>
|
19
19
|
<% elsif var.end_with?("_at") || var == "start_time" || var == "end_time" %>
|
20
|
-
|
21
|
-
|
22
|
-
<div id="<%= var %>-select" class="selectize-input" style="display: inline-block;" data-controller="datepicker">
|
20
|
+
<div class="selectize-control single">
|
21
|
+
<div id="<%= var %>-select" class="selectize-input" data-controller="datepicker">
|
23
22
|
<%= hidden_field_tag var, var_params[var], data: { datepicker_target: "input" } %>
|
24
23
|
<span data-datepicker-target="span">Select a date</span>
|
25
24
|
</div>
|
26
25
|
</div>
|
27
|
-
|
28
26
|
<% else %>
|
29
27
|
<%= text_field_tag var, var_params[var], autofocus: i == 0 && !var.end_with?("_at") && !var_params[var], class: "form-control" %>
|
30
28
|
<% end %>
|
@@ -36,14 +34,20 @@
|
|
36
34
|
<%= hidden_field_tag var, var_params[var] %>
|
37
35
|
<% end %>
|
38
36
|
|
39
|
-
|
40
|
-
|
37
|
+
<div class="selectize-control single col-12 col-md-4">
|
38
|
+
<%= label_tag nil, date_vars.join(" & "), class: "form-label" %>
|
41
39
|
<div id="reportrange" class="selectize-input" style="display: inline-block;" data-controller="daterangepicker">
|
42
40
|
<span>Select a time range</span>
|
43
41
|
</div>
|
44
42
|
</div>
|
45
43
|
<% end %>
|
46
44
|
|
47
|
-
<
|
45
|
+
<div class="col-12 col-md-2 d-flex align-items-end d-none" data-more-target="show">
|
46
|
+
<button type="button" class="btn btn-info" data-action="more#show:prevent">More filters</button>
|
47
|
+
</div>
|
48
|
+
|
49
|
+
<div class="col-12">
|
50
|
+
<input type="submit" class="btn btn-success col-12 col-md-1 offset-md-11" value="Run">
|
51
|
+
</div>
|
48
52
|
</form>
|
49
53
|
<% end %>
|
@@ -7,7 +7,7 @@
|
|
7
7
|
<div class="alert alert-danger"><%= @check.errors.full_messages.first %></div>
|
8
8
|
<% end %>
|
9
9
|
|
10
|
-
<div class="form-group">
|
10
|
+
<div class="form-group mb-3">
|
11
11
|
<%= f.label :query_id, "Query" %>
|
12
12
|
<div class="hide">
|
13
13
|
<%= f.select :query_id, [], {include_blank: true} %>
|
@@ -21,7 +21,7 @@
|
|
21
21
|
</div>
|
22
22
|
|
23
23
|
<% if @check.respond_to?(:check_type) %>
|
24
|
-
<div class="form-group">
|
24
|
+
<div class="form-group mb-3">
|
25
25
|
<%= f.label :check_type, "Alert if" %>
|
26
26
|
<div class="hide">
|
27
27
|
<% check_options = [["Any results (bad data)", "bad_data"], ["No results (missing data)", "missing_data"]] %>
|
@@ -33,7 +33,7 @@
|
|
33
33
|
</script>
|
34
34
|
</div>
|
35
35
|
<% elsif @check.respond_to?(:invert) %>
|
36
|
-
<div class="form-group">
|
36
|
+
<div class="form-group mb-3">
|
37
37
|
<%= f.label :invert, "Fails if" %>
|
38
38
|
<div class="hide">
|
39
39
|
<%= f.select :invert, [["Any results (bad data)", false], ["No results (missing data)", true]] %>
|
@@ -45,7 +45,7 @@
|
|
45
45
|
<% end %>
|
46
46
|
|
47
47
|
<% if @check.respond_to?(:schedule) && Blazer.check_schedules %>
|
48
|
-
<div class="form-group">
|
48
|
+
<div class="form-group mb-3">
|
49
49
|
<%= f.label :schedule, "Run every" %>
|
50
50
|
<div class="hide">
|
51
51
|
<%= f.select :schedule, Blazer.check_schedules.map { |v| [v, v] } %>
|
@@ -56,13 +56,13 @@
|
|
56
56
|
</div>
|
57
57
|
<% end %>
|
58
58
|
|
59
|
-
<div class="form-group">
|
59
|
+
<div class="form-group mb-3">
|
60
60
|
<%= f.label :emails %>
|
61
61
|
<%= f.text_field :emails, placeholder: "Optional, comma separated", class: "form-control" %>
|
62
62
|
</div>
|
63
63
|
|
64
64
|
<% if Blazer.slack? %>
|
65
|
-
<div class="form-group">
|
65
|
+
<div class="form-group mb-3">
|
66
66
|
<%= f.label :slack_channels %>
|
67
67
|
<%= f.text_field :slack_channels, placeholder: "Optional, comma separated", class: "form-control" %>
|
68
68
|
</div>
|
@@ -1,25 +1,6 @@
|
|
1
1
|
<% blazer_title "Checks" %>
|
2
2
|
|
3
3
|
<div id="header">
|
4
|
-
<div class="pull-right" style="line-height: 34px;">
|
5
|
-
<div class="btn-group">
|
6
|
-
<%= link_to "New Check", new_check_path, class: "btn btn-info" %>
|
7
|
-
<button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
8
|
-
<span class="caret"></span>
|
9
|
-
<span class="sr-only">Toggle Dropdown</span>
|
10
|
-
</button>
|
11
|
-
<ul class="dropdown-menu">
|
12
|
-
<li><%= link_to "Home", root_path %></li>
|
13
|
-
<% if Blazer.uploads? %>
|
14
|
-
<li><%= link_to "Uploads", uploads_path %></li>
|
15
|
-
<% end %>
|
16
|
-
<li role="separator" class="divider"></li>
|
17
|
-
<li><%= link_to "New Query", new_query_path %></li>
|
18
|
-
<li><%= link_to "New Dashboard", new_dashboard_path %></li>
|
19
|
-
</ul>
|
20
|
-
</div>
|
21
|
-
</div>
|
22
|
-
|
23
4
|
<input id="search" type="text" placeholder="Start typing a query or state" style="width: 300px; display: inline-block;" class="search form-control" />
|
24
5
|
</div>
|
25
6
|
|
@@ -3,21 +3,23 @@
|
|
3
3
|
<div class="alert alert-danger"><%= @dashboard.errors.full_messages.first %></div>
|
4
4
|
<% end %>
|
5
5
|
|
6
|
-
<div class="form-group">
|
6
|
+
<div class="form-group mb-3">
|
7
7
|
<%= f.label :name %>
|
8
8
|
<%= f.text_field :name, class: "form-control" %>
|
9
9
|
</div>
|
10
|
-
<div class="form-group" v-show="queries.length">
|
10
|
+
<div class="form-group mb-3" v-show="queries.length">
|
11
11
|
<%= f.label :charts %>
|
12
12
|
<ul id="queries" class="list-group">
|
13
|
-
<li class="list-group-item" v-for="(query, index) in queries" :key="query.id" v-cloak>
|
14
|
-
<span class="glyphicon glyphicon-remove" aria-hidden="true" v-on:click="remove(index)"></span>
|
13
|
+
<li class="list-group-item d-flex justify-content-between align-items-center" v-for="(query, index) in queries" :key="query.id" v-cloak>
|
15
14
|
{{ query.name }}
|
15
|
+
<button class="btn btn-sm btn-danger" v-on:click="remove(index)">
|
16
|
+
remove
|
17
|
+
</button>
|
16
18
|
<input type="hidden" name="query_ids[]" :value="query.id">
|
17
19
|
</li>
|
18
20
|
</ul>
|
19
21
|
</div>
|
20
|
-
<div class="form-group" v-cloak>
|
22
|
+
<div class="form-group mb-3" v-cloak>
|
21
23
|
<%= f.label :query_id, "Add Chart" %>
|
22
24
|
<%= select_tag :query_id, nil, {include_blank: true, placeholder: "Select chart"} %>
|
23
25
|
</div>
|
@@ -1,22 +1,11 @@
|
|
1
1
|
<% blazer_title @dashboard.name %>
|
2
|
-
|
3
|
-
<
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
<%= @dashboard.name %>
|
10
|
-
</h3>
|
11
|
-
</div>
|
12
|
-
<div class="col-sm-3 text-right">
|
13
|
-
<%= link_to "Edit", edit_dashboard_path(@dashboard, params: variable_params(@dashboard)), class: "btn btn-info" %>
|
14
|
-
</div>
|
15
|
-
</div>
|
16
|
-
</div>
|
17
|
-
</div>
|
18
|
-
|
19
|
-
<div style="margin-bottom: 60px;"></div>
|
2
|
+
<% content_for :nav do %>
|
3
|
+
<ul class="navbar-nav justify-content-end flex-grow-1 pe-3">
|
4
|
+
<li class="nav-item">
|
5
|
+
<%= link_to "Edit", blazer.edit_dashboard_path(@dashboard, params: variable_params(@dashboard)), class: "nav-link" %>
|
6
|
+
</li>
|
7
|
+
</ul>
|
8
|
+
<% end %>
|
20
9
|
|
21
10
|
<% if @data_sources.any? { |ds| ds.cache_mode != "off" } %>
|
22
11
|
<p class="text-muted" style="float: right;">
|
@@ -7,38 +7,44 @@
|
|
7
7
|
<div id="app" v-cloak>
|
8
8
|
<%= form_for @query, url: (@query.persisted? ? query_path(@query, params: @variable_params) : queries_path(params: @variable_params)), html: {autocomplete: "off"}, data: { controller: "unsaved", action: "unsaved#clear input->unsaved#set" } do |f| %>
|
9
9
|
<div class="row">
|
10
|
-
<div id="statement-box" class="col-
|
10
|
+
<div id="statement-box" class="col-8">
|
11
11
|
<div class= "form-group">
|
12
12
|
<%= f.hidden_field :statement %>
|
13
13
|
<div id="editor-container">
|
14
14
|
<div id="editor" :style="{ height: editorHeight }"><%= @query.statement %></div>
|
15
15
|
</div>
|
16
16
|
</div>
|
17
|
-
<div class="form-group
|
18
|
-
<div
|
19
|
-
<%= link_to "Back", :back %>
|
20
|
-
<a :href="docsPath" target="_blank"
|
21
|
-
<a :href="schemaPath" target="_blank"
|
17
|
+
<div class="form-group d-flex justify-content-between my-2">
|
18
|
+
<div>
|
19
|
+
<%= link_to "Back", :back, class: "me-2" %>
|
20
|
+
<a :href="docsPath" target="_blank" class="m-2">Docs</a>
|
21
|
+
<a :href="schemaPath" target="_blank" class="m-2">Schema</a>
|
22
22
|
</div>
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
<div class="row">
|
25
|
+
<div class="col">
|
26
|
+
<%= f.select :data_source, Blazer.data_sources.map { |_, ds| [ds.name, ds.id] }, {}, class: ("hide" if Blazer.data_sources.size <= 1) %>
|
27
|
+
</div>
|
28
|
+
<div class="col">
|
29
|
+
<select id="table_names" placeholder="Preview table"></select>
|
30
|
+
</div>
|
27
31
|
</div>
|
32
|
+
</div>
|
33
|
+
<div class="form-group">
|
28
34
|
<a v-on:click="run" v-if="!running" class="btn btn-info" style="vertical-align: top; width: 70px;">Run</a>
|
29
35
|
<a v-on:click="cancel" v-if="running" class="btn btn-danger" style="vertical-align: top; width: 70px;">Cancel</a>
|
30
36
|
</div>
|
31
37
|
</div>
|
32
|
-
<div class="col-
|
33
|
-
<div class="form-group">
|
38
|
+
<div class="col-4">
|
39
|
+
<div class="form-group mb-3">
|
34
40
|
<%= f.label :name %>
|
35
41
|
<%= f.text_field :name, class: "form-control" %>
|
36
42
|
</div>
|
37
|
-
<div class="form-group">
|
43
|
+
<div class="form-group mb-3">
|
38
44
|
<%= f.label :description %>
|
39
45
|
<%= f.text_area :description, placeholder: "Optional", style: "height: 80px;", class: "form-control" %>
|
40
46
|
</div>
|
41
|
-
<div class="form-group text-
|
47
|
+
<div class="form-group text-end mb-3">
|
42
48
|
<%= f.submit "For Enter Press", class: "hide" %>
|
43
49
|
<% if @query.persisted? %>
|
44
50
|
<%= link_to "Delete", query_path(@query), method: :delete, "data-confirm" => "Are you sure?", class: "btn btn-danger" %>
|
@@ -1,35 +1,22 @@
|
|
1
1
|
<div id="queries">
|
2
|
-
<
|
3
|
-
<
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
2
|
+
<ul class="nav nav-pills d-flex flex-column flex-sm-row mb-3">
|
3
|
+
<li class="text-start flex-fill">
|
4
|
+
<input type="text" v-model="searchTerm" placeholder="Start typing a query, dashboard, or person" autofocus class="search form-control flex-fill align-self-stretch" />
|
5
|
+
</li>
|
6
|
+
<% if blazer_user %>
|
7
|
+
<li class="nav-item">
|
8
|
+
<%= link_to "All", blazer.root_path, class: { "nav-link": true, active: !params[:filter] } %>
|
9
|
+
</li>
|
10
|
+
<% if Blazer.audit %>
|
11
|
+
<li class="nav-item">
|
12
|
+
<%= link_to "Viewed", blazer.root_path(filter: "viewed"), class: { "nav-link": true, active: params[:filter] == "viewed" } %>
|
13
|
+
</li>
|
12
14
|
<% end %>
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
<span class="sr-only">Toggle Dropdown</span>
|
19
|
-
</button>
|
20
|
-
<ul class="dropdown-menu">
|
21
|
-
<li><%= link_to "Checks", checks_path %></li>
|
22
|
-
<% if Blazer.uploads? %>
|
23
|
-
<li><%= link_to "Uploads", uploads_path %></li>
|
24
|
-
<% end %>
|
25
|
-
<li role="separator" class="divider"></li>
|
26
|
-
<li><%= link_to "New Dashboard", new_dashboard_path %></li>
|
27
|
-
<li><%= link_to "New Check", new_check_path %></li>
|
28
|
-
</ul>
|
29
|
-
</div>
|
30
|
-
</div>
|
31
|
-
<input type="text" v-model="searchTerm" placeholder="Start typing a query, dashboard, or person" style="width: 300px; display: inline-block;" v-focus class="search form-control" />
|
32
|
-
</div>
|
15
|
+
<li class="nav-item">
|
16
|
+
<%= link_to "Mine", blazer.root_path(filter: "mine"), class: { "nav-link": true, active: params[:filter] == "mine" } %>
|
17
|
+
</li>
|
18
|
+
<% end %>
|
19
|
+
</ul>
|
33
20
|
|
34
21
|
<table class="table">
|
35
22
|
<thead>
|
@@ -131,7 +131,7 @@
|
|
131
131
|
|
132
132
|
<% unless @only_chart && !@no_chart %>
|
133
133
|
<% header_width = 100 / @columns.size.to_f %>
|
134
|
-
<div class="results-container">
|
134
|
+
<div class="results-container overflow-x-scroll">
|
135
135
|
<% if @columns == ["QUERY PLAN"] %>
|
136
136
|
<pre><code><%= @rows.map { |r| r[0] }.join("\n") %></code></pre>
|
137
137
|
<% elsif @columns == ["PLAN"] && @data_source.adapter == "druid" %>
|