class InfluxdbSetup::LoadQueries

Constants

FileFormatError

Public Instance Methods

call() click to toggle source
# File lib/influxdb_setup/load_queries.rb, line 18
def call
  queries_file = Pathname.new("db/influxdb_queries.yml")

  if queries_file.exist?
    db = @config.db_name
    root = @config.build_client(db)
    existing_queries = root.list_continuous_queries(db)
    raw = YAML.load(ERB.new(queries_file.read).result) || {}
    raise FileFormatError, "expected influxdb_queries.yml to be a hash, was a #{raw.class.name}" unless raw.is_a?(Hash)

    expected_queries = raw.map do |name, query|
      Query.new(name, query)
    end

    # Delete first in case an old name is getting overwritten
    existing_queries.each do |query|
      if expected_queries.none? {|expected| expected.name == query["name"]}
        log "Removing '#{query['name']}', was: '#{query['query']}'"
        root.delete_continuous_query(query["name"], db)
      end
    end

    expected_queries.each do |expected|
      if existing_queries.any? {|hash| hash["name"] == expected.name}
        log "Skipping '#{expected.raw_name}', a query by that name already exists"
      else
        log "Adding '#{expected.raw_name}': '#{expected.query}'"
        root.create_continuous_query(expected.name, db, expected.query)
      end
    end
  else
    log "No influxdb_queries.yml file found, skipping continuous queries setup"
  end
end