module SnowmanIO # Helpfull class to seed data and update DB class Migration def initialize @db = Mongoid::Sessions.default @done_versions = @db[:snowman_io_schema].find.map { |c| c["version"] } @migration_versions = [] end def migrate SnowmanIO.logger.info "Migration start" migration "Set boundary template for all checks" do @db[:snowman_io_checks].find().update_all("$set" => {"template" => "boundary"}) end migration "boundary => last_value_limit" do @db[:snowman_io_checks].find({template: "boundary"}).update_all("$set" => {"template" => "last_value_limit"}) end migration "daily_datapoints => prev_day_datapoints_limit" do @db[:snowman_io_checks].find({template: "daily_datapoints"}).update_all("$set" => {"template" => "prev_day_datapoints_limit"}) end migration "set owner to each check" do if user = @db[:snowman_io_users].find.first @db[:snowman_io_checks].find.update_all("$set" => {"user_id" => user["_id"]}) end end migration "users timestamps" do @db[:snowman_io_users].find.update_all("$set" => {"created_at" => Time.now}) @db[:snowman_io_users].find.update_all("$set" => {"updated_at" => Time.now}) end migration "users daily_report" do @db[:snowman_io_users].find.update_all("$set" => {"daily_report" => true}) end migration "users invite_token" do @db[:snowman_io_users].find.update_all("$set" => {"invite_token" => ""}) end migration "users invite_send_count" do @db[:snowman_io_users].find.update_all("$set" => {"invite_send_count" => 0}) end migration "users status" do @db[:snowman_io_users].find.update_all("$set" => {"status" => "wait_invite"}) @db[:snowman_io_users].where(invite_token: "").update_all("$set" => {"status" => "active"}) end migration "users name" do @db[:snowman_io_users].where(status: "active").each do |record| @db[:snowman_io_users].where(_id: record["_id"]).update_all("$set" => {"name" => record["email"]}) end end migration "remove next_report_date setting" do @db[:snowman_io_settings].where(name: "next_report_date").remove_all end migration "user daily_report" do @db[:snowman_io_users].find.update_all("$unset" => {"daily_report" => 1}) end migration "add sys app" do @db[:snowman_io_apps].find.update_all("$set" => {"system" => false}) @db[:snowman_io_apps].insert(name: "Snowman", system: true) end SnowmanIO.logger.info "Migration done" end private def migration(version, &block) if @migration_versions.include?(version) raise "Duplicate migration version '#{version}'" end @migration_versions.push version return if @done_versions.include?(version) SnowmanIO.logger.info "Apply: #{version} ..." yield @db[:snowman_io_schema].insert(version: version) SnowmanIO.logger.info "Apply: #{version} ... OK" end end end