Sha256: 401b80330adf52f674e5a030ff708ff6b8d7e35a13aa31cc48ef28e125db0819
Contents?: true
Size: 1.66 KB
Versions: 1
Compression:
Stored size: 1.66 KB
Contents
# frozen_string_literal: true require 'httparty' require 'no_proxy_fix' require 'redis' require 'redis/connection/hiredis' require 'redis-namespace' require 'slack-notifier' module MShard class MShard include HTTParty base_uri ENV['MSHARD_URI'] def get(id) self.class.get("/v2/shards/#{id}").body end def set(params) self.class.post('/v2/shards', body: params)['id'] end def try(times: 3, delay: 2) times.times do begin return yield rescue StandardError sleep delay end end nil end def get_safe(*args) try { get(*args) } end def set_safe(*args) # rubocop:disable Naming/AccessorMethodName try { set(*args) } end def detour? ENV['http_proxy'] end def notify(**args) args[:slack] ||= true args[:webhook_url] ||= ENV['SLACK_WEBHOOK_URI'] args[:channel] ||= ENV['SLACK_CHANNEL'] return set(args) if detour? Slack::Notifier.new(args[:webhook_url], **args).ping(args[:text]) end def self.redis_cache(uri) @cache ||= Hash.new do |hash, uri_| hash[uri_] = Redis::Namespace.new(:shard, redis: Redis.new(url: uri_)) end @cache[uri] end def load(id, redis_uri: ENV['MSHARD_REDIS_URI']) return get(id) if detour? || redis_uri.nil? self.class.redis_cache(redis_uri).get(id) end def save(redis_uri: ENV['MSHARD_REDIS_URI'], **args) return set(**args) if detour? || redis_uri.nil? response = self.class.redis_cache(redis_uri).set(args[:id], args[:contents]) raise response unless response == 'OK' args[:id] end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
mshard-0.7.1 | lib/mshard/mshard.rb |