railsblazer 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +7 -0
  2. data/.gitattributes +1 -0
  3. data/.github/ISSUE_TEMPLATE.md +0 -0
  4. data/.gitignore +14 -0
  5. data/CHANGELOG.md +247 -0
  6. data/CONTRIBUTING.md +42 -0
  7. data/Gemfile +4 -0
  8. data/LICENSE.txt +22 -0
  9. data/README.md +855 -0
  10. data/Rakefile +1 -0
  11. data/app/assets/fonts/blazer/glyphicons-halflings-regular.eot +0 -0
  12. data/app/assets/fonts/blazer/glyphicons-halflings-regular.svg +288 -0
  13. data/app/assets/fonts/blazer/glyphicons-halflings-regular.ttf +0 -0
  14. data/app/assets/fonts/blazer/glyphicons-halflings-regular.woff +0 -0
  15. data/app/assets/fonts/blazer/glyphicons-halflings-regular.woff2 +0 -0
  16. data/app/assets/javascripts/blazer/Chart.js +14145 -0
  17. data/app/assets/javascripts/blazer/Sortable.js +1144 -0
  18. data/app/assets/javascripts/blazer/ace.js +6 -0
  19. data/app/assets/javascripts/blazer/ace/ace.js +11 -0
  20. data/app/assets/javascripts/blazer/ace/ext-language_tools.js +5 -0
  21. data/app/assets/javascripts/blazer/ace/mode-sql.js +1 -0
  22. data/app/assets/javascripts/blazer/ace/snippets/sql.js +1 -0
  23. data/app/assets/javascripts/blazer/ace/snippets/text.js +1 -0
  24. data/app/assets/javascripts/blazer/ace/theme-twilight.js +1 -0
  25. data/app/assets/javascripts/blazer/application.js +79 -0
  26. data/app/assets/javascripts/blazer/bootstrap.js +2366 -0
  27. data/app/assets/javascripts/blazer/chartkick.js +1693 -0
  28. data/app/assets/javascripts/blazer/daterangepicker.js +1505 -0
  29. data/app/assets/javascripts/blazer/fuzzysearch.js +24 -0
  30. data/app/assets/javascripts/blazer/highlight.pack.js +1 -0
  31. data/app/assets/javascripts/blazer/jquery.js +10308 -0
  32. data/app/assets/javascripts/blazer/jquery.stickytableheaders.js +263 -0
  33. data/app/assets/javascripts/blazer/jquery_ujs.js +469 -0
  34. data/app/assets/javascripts/blazer/moment-timezone.js +1007 -0
  35. data/app/assets/javascripts/blazer/moment.js +3043 -0
  36. data/app/assets/javascripts/blazer/queries.js +110 -0
  37. data/app/assets/javascripts/blazer/routes.js +23 -0
  38. data/app/assets/javascripts/blazer/selectize.js +3667 -0
  39. data/app/assets/javascripts/blazer/stupidtable.js +114 -0
  40. data/app/assets/javascripts/blazer/vue.js +7515 -0
  41. data/app/assets/stylesheets/blazer/application.css +198 -0
  42. data/app/assets/stylesheets/blazer/bootstrap.css.erb +6202 -0
  43. data/app/assets/stylesheets/blazer/daterangepicker-bs3.css +375 -0
  44. data/app/assets/stylesheets/blazer/github.css +125 -0
  45. data/app/assets/stylesheets/blazer/selectize.default.css +387 -0
  46. data/app/controllers/blazer/base_controller.rb +113 -0
  47. data/app/controllers/blazer/checks_controller.rb +56 -0
  48. data/app/controllers/blazer/dashboards_controller.rb +105 -0
  49. data/app/controllers/blazer/queries_controller.rb +337 -0
  50. data/app/helpers/blazer/base_helper.rb +57 -0
  51. data/app/mailers/blazer/check_mailer.rb +27 -0
  52. data/app/mailers/blazer/slack_notifier.rb +76 -0
  53. data/app/models/blazer/audit.rb +6 -0
  54. data/app/models/blazer/check.rb +104 -0
  55. data/app/models/blazer/connection.rb +5 -0
  56. data/app/models/blazer/dashboard.rb +13 -0
  57. data/app/models/blazer/dashboard_query.rb +9 -0
  58. data/app/models/blazer/query.rb +40 -0
  59. data/app/models/blazer/record.rb +5 -0
  60. data/app/views/blazer/_nav.html.erb +16 -0
  61. data/app/views/blazer/_variables.html.erb +102 -0
  62. data/app/views/blazer/check_mailer/failing_checks.html.erb +6 -0
  63. data/app/views/blazer/check_mailer/state_change.html.erb +47 -0
  64. data/app/views/blazer/checks/_form.html.erb +79 -0
  65. data/app/views/blazer/checks/edit.html.erb +1 -0
  66. data/app/views/blazer/checks/index.html.erb +43 -0
  67. data/app/views/blazer/checks/new.html.erb +1 -0
  68. data/app/views/blazer/dashboards/_form.html.erb +76 -0
  69. data/app/views/blazer/dashboards/edit.html.erb +1 -0
  70. data/app/views/blazer/dashboards/new.html.erb +1 -0
  71. data/app/views/blazer/dashboards/show.html.erb +47 -0
  72. data/app/views/blazer/queries/_form.html.erb +240 -0
  73. data/app/views/blazer/queries/edit.html.erb +2 -0
  74. data/app/views/blazer/queries/home.html.erb +152 -0
  75. data/app/views/blazer/queries/new.html.erb +2 -0
  76. data/app/views/blazer/queries/run.html.erb +165 -0
  77. data/app/views/blazer/queries/schema.html.erb +20 -0
  78. data/app/views/blazer/queries/show.html.erb +73 -0
  79. data/app/views/layouts/blazer/application.html.erb +24 -0
  80. data/blazer-0.0.1.gem +0 -0
  81. data/blazer.gemspec +27 -0
  82. data/config/routes.rb +16 -0
  83. data/lib/blazer.rb +223 -0
  84. data/lib/blazer/adapters/athena_adapter.rb +128 -0
  85. data/lib/blazer/adapters/base_adapter.rb +53 -0
  86. data/lib/blazer/adapters/bigquery_adapter.rb +68 -0
  87. data/lib/blazer/adapters/cassandra_adapter.rb +59 -0
  88. data/lib/blazer/adapters/drill_adapter.rb +28 -0
  89. data/lib/blazer/adapters/druid_adapter.rb +67 -0
  90. data/lib/blazer/adapters/elasticsearch_adapter.rb +46 -0
  91. data/lib/blazer/adapters/mongodb_adapter.rb +39 -0
  92. data/lib/blazer/adapters/presto_adapter.rb +45 -0
  93. data/lib/blazer/adapters/snowflake_adapter.rb +73 -0
  94. data/lib/blazer/adapters/sql_adapter.rb +182 -0
  95. data/lib/blazer/data_source.rb +195 -0
  96. data/lib/blazer/detect_anomalies.R +19 -0
  97. data/lib/blazer/engine.rb +30 -0
  98. data/lib/blazer/result.rb +170 -0
  99. data/lib/blazer/run_statement.rb +40 -0
  100. data/lib/blazer/run_statement_job.rb +21 -0
  101. data/lib/blazer/version.rb +3 -0
  102. data/lib/generators/blazer/install_generator.rb +39 -0
  103. data/lib/generators/blazer/templates/config.yml.tt +62 -0
  104. data/lib/generators/blazer/templates/install.rb.tt +46 -0
  105. data/lib/tasks/blazer.rake +11 -0
  106. data/railsblazer-0.0.1.gem +0 -0
  107. metadata +234 -0
@@ -0,0 +1,21 @@
1
+ require "sucker_punch"
2
+
3
+ module Blazer
4
+ class RunStatementJob
5
+ include SuckerPunch::Job
6
+ workers 4
7
+
8
+ def perform(result, data_source, statement, options)
9
+ begin
10
+ ActiveRecord::Base.connection_pool.with_connection do
11
+ result << Blazer::RunStatement.new.perform(data_source, statement, options)
12
+ end
13
+ rescue Exception => e
14
+ result.clear
15
+ result << Blazer::Result.new(data_source, [], [], "Unknown error", nil, false)
16
+ Blazer.cache.write(data_source.run_cache_key(options[:run_id]), Marshal.dump([[], [], "Unknown error", nil]), expires_in: 30.seconds)
17
+ raise e
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,3 @@
1
+ module Blazer
2
+ VERSION = "2.0.0"
3
+ end
@@ -0,0 +1,39 @@
1
+ # taken from https://github.com/collectiveidea/audited/blob/master/lib/generators/audited/install_generator.rb
2
+ require "rails/generators"
3
+ require "rails/generators/migration"
4
+ require "active_record"
5
+ require "rails/generators/active_record"
6
+
7
+ module Blazer
8
+ module Generators
9
+ class InstallGenerator < Rails::Generators::Base
10
+ include Rails::Generators::Migration
11
+
12
+ source_root File.expand_path("../templates", __FILE__)
13
+
14
+ # Implement the required interface for Rails::Generators::Migration.
15
+ def self.next_migration_number(dirname) #:nodoc:
16
+ next_migration_number = current_migration_number(dirname) + 1
17
+ if ActiveRecord::Base.timestamped_migrations
18
+ [Time.now.utc.strftime("%Y%m%d%H%M%S"), "%.14d" % next_migration_number].max
19
+ else
20
+ "%.3d" % next_migration_number
21
+ end
22
+ end
23
+
24
+ def copy_migration
25
+ migration_template "install.rb", "db/migrate/install_blazer.rb", migration_version: migration_version
26
+ end
27
+
28
+ def copy_config
29
+ template "config.yml", "config/blazer.yml"
30
+ end
31
+
32
+ def migration_version
33
+ if ActiveRecord::VERSION::MAJOR >= 5
34
+ "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,62 @@
1
+ # see https://github.com/ankane/blazer for more info
2
+
3
+ data_sources:
4
+ main:
5
+ url: <%%= ENV["BLAZER_DATABASE_URL"] %>
6
+
7
+ # statement timeout, in seconds
8
+ # none by default
9
+ # timeout: 15
10
+
11
+ # caching settings
12
+ # can greatly improve speed
13
+ # off by default
14
+ # cache:
15
+ # mode: slow # or all
16
+ # expires_in: 60 # min
17
+ # slow_threshold: 15 # sec, only used in slow mode
18
+
19
+ # wrap queries in a transaction for safety
20
+ # not necessary if you use a read-only user
21
+ # true by default
22
+ # use_transaction: false
23
+
24
+ smart_variables:
25
+ # zone_id: "SELECT id, name FROM zones ORDER BY name ASC"
26
+ # period: ["day", "week", "month"]
27
+ # status: {0: "Active", 1: "Archived"}
28
+
29
+ linked_columns:
30
+ # user_id: "/admin/users/{value}"
31
+
32
+ smart_columns:
33
+ # user_id: "SELECT id, name FROM users WHERE id IN {value}"
34
+
35
+ # create audits
36
+ audit: true
37
+
38
+ # change the time zone
39
+ # time_zone: "Pacific Time (US & Canada)"
40
+
41
+ # class name of the user model
42
+ # user_class: User
43
+
44
+ # method name for the current user
45
+ # user_method: current_user
46
+
47
+ # method name for the display name
48
+ # user_name: name
49
+
50
+ # custom before_action to use for auth
51
+ # before_action_method: require_admin
52
+
53
+ # email to send checks from
54
+ # from_email: blazer@example.org
55
+
56
+ check_schedules:
57
+ - "1 day"
58
+ - "1 hour"
59
+ - "5 minutes"
60
+
61
+ # override app-wide CSP for Blazer controllers
62
+ # override_csp: true
@@ -0,0 +1,46 @@
1
+ class <%= migration_class_name %> < ActiveRecord::Migration<%= migration_version %>
2
+ def change
3
+ create_table :blazer_queries do |t|
4
+ t.references :creator
5
+ t.string :name
6
+ t.text :description
7
+ t.text :statement
8
+ t.string :data_source
9
+ t.timestamps null: false
10
+ end
11
+
12
+ create_table :blazer_audits do |t|
13
+ t.references :user
14
+ t.references :query
15
+ t.text :statement
16
+ t.string :data_source
17
+ t.timestamp :created_at
18
+ end
19
+
20
+ create_table :blazer_dashboards do |t|
21
+ t.references :creator
22
+ t.text :name
23
+ t.timestamps null: false
24
+ end
25
+
26
+ create_table :blazer_dashboard_queries do |t|
27
+ t.references :dashboard
28
+ t.references :query
29
+ t.integer :position
30
+ t.timestamps null: false
31
+ end
32
+
33
+ create_table :blazer_checks do |t|
34
+ t.references :creator
35
+ t.references :query
36
+ t.string :state
37
+ t.string :schedule
38
+ t.text :emails
39
+ t.text :slack_channels
40
+ t.string :check_type
41
+ t.text :message
42
+ t.timestamp :last_run_at
43
+ t.timestamps null: false
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,11 @@
1
+ namespace :blazer do
2
+ desc "run checks"
3
+ task :run_checks, [:schedule] => :environment do |_, args|
4
+ Blazer.run_checks(schedule: args[:schedule] || ENV["SCHEDULE"])
5
+ end
6
+
7
+ desc "send failing checks"
8
+ task send_failing_checks: :environment do
9
+ Blazer.send_failing_checks
10
+ end
11
+ end
Binary file
metadata ADDED
@@ -0,0 +1,234 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: railsblazer
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Andrew Kane
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-04-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: railties
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '4'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activerecord
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '4'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: chartkick
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: safely_block
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 0.1.1
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 0.1.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.7'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.7'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '10.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '10.0'
97
+ description:
98
+ email:
99
+ - andrew@chartkick.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".gitattributes"
105
+ - ".github/ISSUE_TEMPLATE.md"
106
+ - ".gitignore"
107
+ - CHANGELOG.md
108
+ - CONTRIBUTING.md
109
+ - Gemfile
110
+ - LICENSE.txt
111
+ - README.md
112
+ - Rakefile
113
+ - app/assets/fonts/blazer/glyphicons-halflings-regular.eot
114
+ - app/assets/fonts/blazer/glyphicons-halflings-regular.svg
115
+ - app/assets/fonts/blazer/glyphicons-halflings-regular.ttf
116
+ - app/assets/fonts/blazer/glyphicons-halflings-regular.woff
117
+ - app/assets/fonts/blazer/glyphicons-halflings-regular.woff2
118
+ - app/assets/javascripts/blazer/Chart.js
119
+ - app/assets/javascripts/blazer/Sortable.js
120
+ - app/assets/javascripts/blazer/ace.js
121
+ - app/assets/javascripts/blazer/ace/ace.js
122
+ - app/assets/javascripts/blazer/ace/ext-language_tools.js
123
+ - app/assets/javascripts/blazer/ace/mode-sql.js
124
+ - app/assets/javascripts/blazer/ace/snippets/sql.js
125
+ - app/assets/javascripts/blazer/ace/snippets/text.js
126
+ - app/assets/javascripts/blazer/ace/theme-twilight.js
127
+ - app/assets/javascripts/blazer/application.js
128
+ - app/assets/javascripts/blazer/bootstrap.js
129
+ - app/assets/javascripts/blazer/chartkick.js
130
+ - app/assets/javascripts/blazer/daterangepicker.js
131
+ - app/assets/javascripts/blazer/fuzzysearch.js
132
+ - app/assets/javascripts/blazer/highlight.pack.js
133
+ - app/assets/javascripts/blazer/jquery.js
134
+ - app/assets/javascripts/blazer/jquery.stickytableheaders.js
135
+ - app/assets/javascripts/blazer/jquery_ujs.js
136
+ - app/assets/javascripts/blazer/moment-timezone.js
137
+ - app/assets/javascripts/blazer/moment.js
138
+ - app/assets/javascripts/blazer/queries.js
139
+ - app/assets/javascripts/blazer/routes.js
140
+ - app/assets/javascripts/blazer/selectize.js
141
+ - app/assets/javascripts/blazer/stupidtable.js
142
+ - app/assets/javascripts/blazer/vue.js
143
+ - app/assets/stylesheets/blazer/application.css
144
+ - app/assets/stylesheets/blazer/bootstrap.css.erb
145
+ - app/assets/stylesheets/blazer/daterangepicker-bs3.css
146
+ - app/assets/stylesheets/blazer/github.css
147
+ - app/assets/stylesheets/blazer/selectize.default.css
148
+ - app/controllers/blazer/base_controller.rb
149
+ - app/controllers/blazer/checks_controller.rb
150
+ - app/controllers/blazer/dashboards_controller.rb
151
+ - app/controllers/blazer/queries_controller.rb
152
+ - app/helpers/blazer/base_helper.rb
153
+ - app/mailers/blazer/check_mailer.rb
154
+ - app/mailers/blazer/slack_notifier.rb
155
+ - app/models/blazer/audit.rb
156
+ - app/models/blazer/check.rb
157
+ - app/models/blazer/connection.rb
158
+ - app/models/blazer/dashboard.rb
159
+ - app/models/blazer/dashboard_query.rb
160
+ - app/models/blazer/query.rb
161
+ - app/models/blazer/record.rb
162
+ - app/views/blazer/_nav.html.erb
163
+ - app/views/blazer/_variables.html.erb
164
+ - app/views/blazer/check_mailer/failing_checks.html.erb
165
+ - app/views/blazer/check_mailer/state_change.html.erb
166
+ - app/views/blazer/checks/_form.html.erb
167
+ - app/views/blazer/checks/edit.html.erb
168
+ - app/views/blazer/checks/index.html.erb
169
+ - app/views/blazer/checks/new.html.erb
170
+ - app/views/blazer/dashboards/_form.html.erb
171
+ - app/views/blazer/dashboards/edit.html.erb
172
+ - app/views/blazer/dashboards/new.html.erb
173
+ - app/views/blazer/dashboards/show.html.erb
174
+ - app/views/blazer/queries/_form.html.erb
175
+ - app/views/blazer/queries/edit.html.erb
176
+ - app/views/blazer/queries/home.html.erb
177
+ - app/views/blazer/queries/new.html.erb
178
+ - app/views/blazer/queries/run.html.erb
179
+ - app/views/blazer/queries/schema.html.erb
180
+ - app/views/blazer/queries/show.html.erb
181
+ - app/views/layouts/blazer/application.html.erb
182
+ - blazer-0.0.1.gem
183
+ - blazer.gemspec
184
+ - config/routes.rb
185
+ - lib/blazer.rb
186
+ - lib/blazer/adapters/athena_adapter.rb
187
+ - lib/blazer/adapters/base_adapter.rb
188
+ - lib/blazer/adapters/bigquery_adapter.rb
189
+ - lib/blazer/adapters/cassandra_adapter.rb
190
+ - lib/blazer/adapters/drill_adapter.rb
191
+ - lib/blazer/adapters/druid_adapter.rb
192
+ - lib/blazer/adapters/elasticsearch_adapter.rb
193
+ - lib/blazer/adapters/mongodb_adapter.rb
194
+ - lib/blazer/adapters/presto_adapter.rb
195
+ - lib/blazer/adapters/snowflake_adapter.rb
196
+ - lib/blazer/adapters/sql_adapter.rb
197
+ - lib/blazer/data_source.rb
198
+ - lib/blazer/detect_anomalies.R
199
+ - lib/blazer/engine.rb
200
+ - lib/blazer/result.rb
201
+ - lib/blazer/run_statement.rb
202
+ - lib/blazer/run_statement_job.rb
203
+ - lib/blazer/version.rb
204
+ - lib/generators/blazer/install_generator.rb
205
+ - lib/generators/blazer/templates/config.yml.tt
206
+ - lib/generators/blazer/templates/install.rb.tt
207
+ - lib/tasks/blazer.rake
208
+ - railsblazer-0.0.1.gem
209
+ homepage: https://github.com/ankane/blazer
210
+ licenses:
211
+ - MIT
212
+ metadata: {}
213
+ post_install_message:
214
+ rdoc_options: []
215
+ require_paths:
216
+ - lib
217
+ required_ruby_version: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - ">="
220
+ - !ruby/object:Gem::Version
221
+ version: '0'
222
+ required_rubygems_version: !ruby/object:Gem::Requirement
223
+ requirements:
224
+ - - ">="
225
+ - !ruby/object:Gem::Version
226
+ version: '0'
227
+ requirements: []
228
+ rubyforge_project:
229
+ rubygems_version: 2.5.2.3
230
+ signing_key:
231
+ specification_version: 4
232
+ summary: Explore your data with SQL. Easily create charts and dashboards, and share
233
+ them with your team.
234
+ test_files: []