class RedashBackup::Base

Public Class Methods

export!(dir) click to toggle source
# File lib/redash_backup/base.rb, line 2
def self.export!(dir)
  new(dir).export
end
new(dir) click to toggle source
# File lib/redash_backup/base.rb, line 6
def initialize(dir)
  @dir = dir
  require 'redash_backup/model'
end

Public Instance Methods

export() click to toggle source
# File lib/redash_backup/base.rb, line 11
def export
  FileUtils.rm_r(@dir) if Dir.exist? @dir
  Dir.mkdir(@dir)
  Dashboard.active.all.find_each { |board| export_by_board!(board) }
  export_unused_queries!
end

Private Instance Methods

export_by_board!(board) click to toggle source
# File lib/redash_backup/base.rb, line 20
  def export_by_board!(board)
    board_name = board.name.gsub('/', '_')
    Dir.mkdir(@dir + '/' + board_name)
    board.widgets.each do |widget|
      query = widget.visualization&.query
      next unless query

      text = <<~TEXT
        -- #{board_name}
        -- #{query.name}
        -- #{Time.now.strftime('%Y/%m/%d %H:%M')}

        #{query.query}
      TEXT
      File.open(@dir + "/#{board_name}/#{query.name.gsub('/', '_')}.sql", 'w') do |file|
        file.puts text
      end
    end
    puts "Completed export to #{@dir}/#{board_name}/*.sql"
  end
export_unused_queries!() click to toggle source

unused: queries not attach to dashboard

# File lib/redash_backup/base.rb, line 42
  def export_unused_queries!
    Dir.mkdir(@dir + '/unused')
    Query.inactive.all.find_each do |query|
      text = <<~TEXT
        -- ※ Not attached to dashboard
        -- is_draft: #{query.is_draft}
        -- #{Time.now.strftime('%Y/%m/%d %H:%M')}

        #{query.query}
      TEXT
      File.open(@dir + "/unused/#{query.name.gsub('/', '_')}.sql", 'w') do |file|
        file.puts text
      end
    end
    puts "Completed export to #{@dir}/unused/*.sql"
  end