module MicroserviceDSL

Constants

VERSION

Public Class Methods

cache_key(url, req) click to toggle source
# File lib/microservice_dsl.rb, line 90
def self.cache_key(url, req)
  @@taggers ||= nil
  url = url.tr(':', '|')
  if @@taggers
    @@taggers.map { |t| Digest::MD5.hexdigest(req.options[:headers][t]) }.join('/') + '-' + url
  else
    url
  end
end
cache_taggers=(taggers) click to toggle source
# File lib/microservice_dsl.rb, line 123
def self.cache_taggers=(taggers)
  raise unless taggers.is_a?(Array)
  @@taggers = taggers
end
caching?() click to toggle source
# File lib/microservice_dsl.rb, line 67
def self.caching?
  if ENV['MS_CACHE_URL']
    true
  else
    false
  end
end
current_hop() click to toggle source
# File lib/microservice_dsl.rb, line 148
def self.current_hop
  Thread.current[:microservice_dsl_current_hop] = '1' unless Thread.current[:microservice_dsl_current_hop]
  Thread.current[:microservice_dsl_current_hop]
end
current_hop=(hop) click to toggle source
# File lib/microservice_dsl.rb, line 144
def self.current_hop=(hop)
  Thread.current[:microservice_dsl_current_hop] = hop
end
default_headers() click to toggle source
# File lib/microservice_dsl.rb, line 136
def self.default_headers
  Thread.current[:microservice_dsl_default_headers] || {}
end
default_headers=(headers = {}) click to toggle source
# File lib/microservice_dsl.rb, line 140
def self.default_headers=(headers = {})
  Thread.current[:microservice_dsl_default_headers] = headers
end
get_cache(url, req) click to toggle source
# File lib/microservice_dsl.rb, line 112
def self.get_cache(url, req)
  return nil unless caching?
  if val = redis.get([redis_hash_name, cache_key(url, req)].join(':'))
    JSON.parse(val, symbolize_names: true)
  end
end
get_etag(url, req) click to toggle source
# File lib/microservice_dsl.rb, line 100
def self.get_etag(url, req)
  return nil unless caching?
  if val = get_cache(url, req)
    val[:etag]
  end
end
has_cache?(url, etag, req) click to toggle source
# File lib/microservice_dsl.rb, line 107
def self.has_cache?(url, etag, req)
  return nil unless caching?
  (stored_etag = get_etag(url, req)) && (stored_etag == etag) && stored_etag
end
hashable_string_for(obj) click to toggle source
# File lib/microservice_dsl.rb, line 166
def self.hashable_string_for(obj)
  case obj
  when Hash
    hashable_string_for(obj.sort_by { |sub_obj| sub_obj.first.to_s })
  when Array
    obj.map { |sub_obj| hashable_string_for(sub_obj) }.to_s
  else
    obj.to_s
  end
end
hop_header() click to toggle source
# File lib/microservice_dsl.rb, line 128
def self.hop_header
  'X-Hop-Count'
end
hop_string() click to toggle source
# File lib/microservice_dsl.rb, line 162
def self.hop_string
  [current_hop, next_hop].join('.')
end
next_hop() click to toggle source
# File lib/microservice_dsl.rb, line 157
def self.next_hop
  Thread.current[:microservice_dsl_next_hop] = 0 unless Thread.current[:microservice_dsl_next_hop]
  Thread.current[:microservice_dsl_next_hop] += 1
end
next_hop=(hop) click to toggle source
# File lib/microservice_dsl.rb, line 153
def self.next_hop=(hop)
  Thread.current[:microservice_dsl_next_hop] = hop
end
rack_hop_header() click to toggle source
# File lib/microservice_dsl.rb, line 132
def self.rack_hop_header
  "HTTP_#{hop_header.upcase.tr('-', '_')}"
end
redis() click to toggle source
# File lib/microservice_dsl.rb, line 59
def self.redis
  return nil unless caching?
  splitted = ENV['MS_CACHE_URL'].split(':')
  host = splitted[0]
  port = splitted[1] || '6379'
  @@redis ||= Redis.new(host: host, port: port)
end
redis_hash_name() click to toggle source
# File lib/microservice_dsl.rb, line 119
def self.redis_hash_name
  ENV['MS_CACHE_HASH'] || 'msdsl'
end
redis_reset!() click to toggle source
# File lib/microservice_dsl.rb, line 55
def self.redis_reset!
  @@redis = nil
end
set_cache(url, etag, res) click to toggle source
# File lib/microservice_dsl.rb, line 75
def self.set_cache(url, etag, res)
  return nil unless caching?
  puts "Etag: #{etag}"
  data = {
    etag: etag,
    response: {
      body: res.body,
      code: res.code,
      headers: res.headers
    }
  }
  puts data
  redis.set([redis_hash_name, cache_key(url, res.request)].join(':'), JSON.dump(data))
end