diff --git a/.env.example b/.env.example index ac0751b..2d88877 100644 --- a/.env.example +++ b/.env.example @@ -6,3 +6,10 @@ SUTTY=sutty.local SUTTY_WITH_PORT=sutty.local:3000 REDIS_SERVER= REDIS_CLIENT= +# API authentication +HTTP_BASIC_USER= +HTTP_BASIC_PASSWORD= +BLAZER_DATABASE_URL= +BLAZER_SLACK_WEBHOOK_URL= +BLAZER_USERNAME= +BLAZER_PASSWORD= diff --git a/Gemfile b/Gemfile index 059fa2d..b9a7107 100644 --- a/Gemfile +++ b/Gemfile @@ -38,7 +38,7 @@ gem 'turbolinks', '~> 5' gem 'jbuilder', '~> 2.5' # Use ActiveModel has_secure_password gem 'bcrypt', '~> 3.1.7' - +gem 'blazer' gem 'bootstrap', '~> 4' gem 'commonmarker' gem 'devise' diff --git a/Gemfile.lock b/Gemfile.lock index 51ea323..c46f333 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -79,6 +79,11 @@ GEM bcrypt (3.1.13) bcrypt_pbkdf (1.0.1) bindex (0.8.1) + blazer (2.2.1) + activerecord (>= 5) + chartkick (>= 3.2) + railties (>= 5) + safely_block (>= 0.1.1) bootstrap (4.4.1) autoprefixer-rails (>= 9.1.0) popper_js (>= 1.14.3, < 2) @@ -92,6 +97,7 @@ GEM rack (>= 1.0.0) rack-test (>= 0.5.4) xpath (>= 2.0, < 4.0) + chartkick (3.3.1) childprocess (3.0.0) coderay (1.1.2) colorator (1.1.0) @@ -122,6 +128,7 @@ GEM email_address (0.1.12) netaddr (>= 2.0.4, < 3) simpleidn + errbase (0.2.0) erubi (1.9.0) eventmachine (1.2.7) exception_notification (4.4.0) @@ -324,6 +331,8 @@ GEM rubyzip (2.0.0) rugged (0.28.4.1) safe_yaml (1.0.5) + safely_block (0.3.0) + errbase (>= 0.1.1) sassc (2.2.1) ffi (~> 1.9) sassc-rails (2.1.2) @@ -396,6 +405,7 @@ PLATFORMS DEPENDENCIES bcrypt (~> 3.1.7) bcrypt_pbkdf + blazer bootstrap (~> 4) brakeman capybara (~> 2.13) @@ -453,4 +463,4 @@ RUBY VERSION ruby 2.6.5p114 BUNDLED WITH - 2.0.2 + 2.1.4 diff --git a/config/blazer.yml b/config/blazer.yml new file mode 100644 index 0000000..3ce51b8 --- /dev/null +++ b/config/blazer.yml @@ -0,0 +1,75 @@ +# see https://github.com/ankane/blazer for more info + +data_sources: + main: + url: <%= ENV["BLAZER_DATABASE_URL"] %> + + # statement timeout, in seconds + # none by default + # timeout: 15 + + # caching settings + # can greatly improve speed + # off by default + # cache: + # mode: slow # or all + # expires_in: 60 # min + # slow_threshold: 15 # sec, only used in slow mode + + # wrap queries in a transaction for safety + # not necessary if you use a read-only user + # true by default + # use_transaction: false + + smart_variables: + site_id: 'select id, name from sites order by name asc' + # zone_id: "SELECT id, name FROM zones ORDER BY name ASC" + # period: ["day", "week", "month"] + # status: {0: "Active", 1: "Archived"} + + linked_columns: + # user_id: "/admin/users/{value}" + + smart_columns: + site_id: 'select id, name from sites where id in {value}' + # user_id: "SELECT id, name FROM users WHERE id IN {value}" + +# create audits +audit: true + +# change the time zone +# time_zone: "Pacific Time (US & Canada)" + +# class name of the user model +user_class: Usuarie + +# method name for the current user +user_method: current_usuarie + +# method name for the display name +user_name: email + +# custom before_action to use for auth +# before_action_method: require_admin + +# email to send checks from +from_email: blazer@<%= ENV.fetch('SUTTY', 'sutty.nl') %> + +# webhook for Slack +# slack_webhook_url: <%= ENV["BLAZER_SLACK_WEBHOOK_URL"] %> + +check_schedules: + - "1 day" + - "1 hour" + - "5 minutes" + +# enable anomaly detection +# note: with trend, time series are sent to https://trendapi.org +# anomaly_checks: trend / r + +# enable forecasting +# note: with trend, time series are sent to https://trendapi.org +# forecasting: trend + +# enable map +# mapbox_access_token: <%= ENV["MAPBOX_ACCESS_TOKEN"] %> diff --git a/config/routes.rb b/config/routes.rb index abad9ea..d8b5f39 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -2,6 +2,7 @@ Rails.application.routes.draw do devise_for :usuaries + mount Blazer::Engine, at: 'blazer' root 'application#index' diff --git a/db/migrate/20200206163257_install_blazer.rb b/db/migrate/20200206163257_install_blazer.rb new file mode 100644 index 0000000..9b08416 --- /dev/null +++ b/db/migrate/20200206163257_install_blazer.rb @@ -0,0 +1,51 @@ +# frozen_string_literal: true + +# Blazer +class InstallBlazer < ActiveRecord::Migration[6.0] + def change + return unless Rails.env.production? + + create_table :blazer_queries do |t| + t.references :creator + t.string :name + t.text :description + t.text :statement + t.string :data_source + t.timestamps null: false + end + + create_table :blazer_audits do |t| + t.references :user + t.references :query + t.text :statement + t.string :data_source + t.timestamp :created_at + end + + create_table :blazer_dashboards do |t| + t.references :creator + t.text :name + t.timestamps null: false + end + + create_table :blazer_dashboard_queries do |t| + t.references :dashboard + t.references :query + t.integer :position + t.timestamps null: false + end + + create_table :blazer_checks do |t| + t.references :creator + t.references :query + t.string :state + t.string :schedule + t.text :emails + t.text :slack_channels + t.string :check_type + t.text :message + t.timestamp :last_run_at + t.timestamps null: false + end + end +end