class DruidConfig::Entities::DataSource

Init a DataSource

Constants

DEFAULT_DATASOURCE

Name of default datasource

Attributes

load_status[R]
name[R]
properties[R]

Public Class Methods

new(metadata, load_status) click to toggle source

Initialize a DataSource

# File lib/druid_config/entities/data_source.rb, line 21
def initialize(metadata, load_status)
  @name = metadata['name']
  @properties = metadata['properties']
  @load_status = load_status
  # Set end point for HTTParty
  self.class.base_uri(
    "#{DruidConfig.client.coordinator}"\
    "druid/coordinator/#{DruidConfig::Version::API_VERSION}")
end

Public Instance Methods

destroy(interval = nil) click to toggle source

Destroy the current data source. Becareful, this action will remove the data associated to the data source

@param interval [String] Optional parameter to define the interval to

destroy the data associated to the data source. By default, it will
destroy all data.

@return [Hash, nil] Hash with error or nil

# File lib/druid_config/entities/data_source.rb, line 69
def destroy(interval = nil)
  interval = all_interval unless interval
  # Disable data source
  disable
  # Execute kill task
  secure_query do
    self.class.delete(
      "/datasources/#{@name}?kill=true&interval=#{interval}")
  end
end
disable() click to toggle source

Disable the current data source

# File lib/druid_config/entities/data_source.rb, line 54
def disable
  secure_query do
    self.class.delete("/datasources/#{@name}")
  end
end
enable() click to toggle source

Enable the current data source

# File lib/druid_config/entities/data_source.rb, line 46
def enable
  secure_query do
    self.class.post("/datasources/#{@name}")
  end
end
history_rules(interval) click to toggle source
# File lib/druid_config/entities/data_source.rb, line 158
def history_rules(interval)
  secure_query do
    self.class.get("/rules/#{@name}/history"\
                   "?interval=#{interval}")
  end
end
info() click to toggle source

The following methods are referenced to Druid API. To check the funcionality about it, please go to Druid documentation:

druid.io/docs/0.8.1/design/coordinator.html

# File lib/druid_config/entities/data_source.rb, line 38
def info
  secure_query do
    @info ||= self.class.get("/datasources/#{@name}")
  end
end
interval(interval, params = '') click to toggle source
# File lib/druid_config/entities/data_source.rb, line 90
def interval(interval, params = '')
  secure_query do
    self.class.get("/datasources/#{@name}/intervals/#{interval}"\
                   "?#{params}")
  end
end
intervals(params = '') click to toggle source

Intervals


# File lib/druid_config/entities/data_source.rb, line 84
def intervals(params = '')
  secure_query do
    self.class.get("/datasources/#{@name}/intervals?#{params}")
  end
end
rules(params = '') click to toggle source

Rules


# File lib/druid_config/entities/data_source.rb, line 118
def rules(params = '')
  return @rules if @rules
  @rules = DruidConfig::Entities::RuleCollection.new
  secure_query do
    self.class.get("/rules/#{@name}?#{params}").each do |rule|
      @rules << DruidConfig::Entities::Rule.parse(rule)
    end
  end
  @rules
end
save_rules() click to toggle source

Save current rules

Returns:

Boolean indicating the status of the request

# File lib/druid_config/entities/data_source.rb, line 154
def save_rules
  post_rules(rules)
end
segment(segment) click to toggle source
# File lib/druid_config/entities/data_source.rb, line 108
def segment(segment)
  segments.select { |s| s.id == segment }
end
segments() click to toggle source

Segments and Tiers


# File lib/druid_config/entities/data_source.rb, line 99
def segments
  secure_query do
    @segments ||=
      self.class.get("/datasources/#{@name}/segments?full").map do |s|
        DruidConfig::Entities::Segment.new(s)
      end
  end
end
tiers() click to toggle source
# File lib/druid_config/entities/data_source.rb, line 112
def tiers
  info['tiers']
end
update_rules(new_rules) click to toggle source

Apply given rules to the datasource

Paremeters:

rules

RuleCollection of rules

Returns:

Boolean indicating the status of the request

# File lib/druid_config/entities/data_source.rb, line 139
def update_rules(new_rules)
  if post_rules(new_rules)
    @rules = new_rules
    true
  else
    false
  end
end

Private Instance Methods

all_interval() click to toggle source

Return an ISO8601 interval from 0 to tomorrow. This is used to destroy all the data of a data source

@return [String] ISO8601 interval

# File lib/druid_config/entities/data_source.rb, line 172
def all_interval
  beginning = '1970-01-01T00:00:00Z'
  # We use today + 1.day to ensure all data is deleted
  last = (Time.now + 24*60*60).strftime('%Y-%m-%dT%H:%M:00Z')
  # Return the interval
  "#{beginning}/#{last}"
end
post_rules(new_rules) click to toggle source

Save rules of this data source

Paremeters:

rules

RuleCollection of rules

Returns:

Boolean indicating the status of the request

# File lib/druid_config/entities/data_source.rb, line 190
def post_rules(new_rules)
  fail(ArgumentError, 'Rules must be a RuleCollection instance') unless
    new_rules.is_a?(RuleCollection)
  uri = URI("#{self.class.base_uri}/rules/#{name}")
  http = Net::HTTP.new(uri.host, uri.port)
  request = Net::HTTP::Post.new(uri.request_uri)
  request['Content-Type'] = 'application/json'
  request.body = new_rules.map(&:to_h).to_json
  response = http.request(request)
  # Check statys
  response.code.to_i == 200
end