module Meeseeker
Constants
- AGENT_ID
- BLOCKS_PER_DAY
- BLOCK_INTERVAL
- DEFAULT_HIVE_FAILOVER_URLS
- DEFAULT_HIVE_URL
- DEFAULT_STEEM_FAILOVER_URLS
- DEFAULT_STEEM_URL
- HIVE_CHAIN_ID
- HIVE_CHAIN_KEY_PREFIX
- HIVE_ENGINE_CHAIN_KEY_PREFIX
- HIVE_LEGACY_CHAIN_ID
- LAST_BLOCK_NUM_KEY_SUFFIX
- LAST_STEEM_ENGINE_BLOCK_NUM_KEY_SUFFIX
- SHUFFLE_URL
- STEEM_CHAIN_ID
- STEEM_CHAIN_KEY_PREFIX
- STEEM_ENGINE_CHAIN_KEY_PREFIX
- VERSION
- VIRTUAL_TRX_ID
Attributes
expire_keys[RW]
hive_engine_node_url[RW]
include_block_header[RW]
include_virtual[RW]
max_keys[RW]
node_url[RW]
publish_op_custom_id[RW]
redis[RW]
steem_engine_node_url[RW]
stream_mode[RW]
Public Class Methods
api_class(chain = default_chain_key_prefix)
click to toggle source
# File lib/meeseeker.rb, line 117 def self.api_class(chain = default_chain_key_prefix) case chain.to_s when STEEM_CHAIN_KEY_PREFIX then Steem::Api when HIVE_CHAIN_KEY_PREFIX then Hive::Api else raise "Unknown chain: #{chain}" end end
block_api_class(chain = default_chain_key_prefix)
click to toggle source
# File lib/meeseeker.rb, line 135 def self.block_api_class(chain = default_chain_key_prefix) case chain.to_s when STEEM_CHAIN_KEY_PREFIX then Steem::BlockApi when HIVE_CHAIN_KEY_PREFIX then Hive::BlockApi else raise "Unknown chain: #{chain}" end end
chain_key_prefix()
click to toggle source
# File lib/meeseeker.rb, line 53 def self.chain_key_prefix @chain_key_prefix ||= {} url = default_url(HIVE_CHAIN_KEY_PREFIX) return @chain_key_prefix[url] if !!@chain_key_prefix[url] # Just use the Hive API for either chain, until we know which one we're # using. api = Hive::DatabaseApi.new(url: url) api.get_config do |config| @chain_key_prefix[node_url] = if !!config.HIVE_CHAIN_ID && config.HIVE_CHAIN_ID == HIVE_CHAIN_ID HIVE_CHAIN_KEY_PREFIX elsif !!config.HIVE_CHAIN_ID && config.HIVE_CHAIN_ID == HIVE_LEGACY_CHAIN_ID HIVE_CHAIN_KEY_PREFIX elsif !!config.STEEM_CHAIN_ID && config.STEEM_CHAIN_ID == STEEM_CHAIN_ID STEEM_CHAIN_KEY_PREFIX else config.keys.find{|k| k.end_with? '_CHAIN_ID'}.split('_').first.downcase.tap do |guess| warn "Guessing chain_key_prefix = '#{guess}' for unknown chain on: #{node_url}" end end end end
condenser_api_class(chain = default_chain_key_prefix)
click to toggle source
# File lib/meeseeker.rb, line 126 def self.condenser_api_class(chain = default_chain_key_prefix) case chain.to_s when STEEM_CHAIN_KEY_PREFIX then Steem::CondenserApi when HIVE_CHAIN_KEY_PREFIX then Hive::CondenserApi else raise "Unknown chain: #{chain}" end end
database_api_class(chain = default_chain_key_prefix)
click to toggle source
# File lib/meeseeker.rb, line 144 def self.database_api_class(chain = default_chain_key_prefix) case chain.to_s when STEEM_CHAIN_KEY_PREFIX then Steem::DatabaseApi when HIVE_CHAIN_KEY_PREFIX then Hive::DatabaseApi else raise "Unknown chain: #{chain}" end end
default_url(chain = default_chain_key_prefix)
click to toggle source
# File lib/meeseeker.rb, line 78 def self.default_url(chain = default_chain_key_prefix) ENV.fetch('MEESEEKER_NODE_URL') do case chain.to_s when STEEM_CHAIN_KEY_PREFIX then DEFAULT_STEEM_URL when HIVE_CHAIN_KEY_PREFIX then DEFAULT_HIVE_URL else raise "Unknown chain: #{chain}" end end end
shuffle_node_url(chain = ENV.fetch('MEESEEKER_CHAIN_KEY_PREFIX', HIVE_CHAIN_KEY_PREFIX))
click to toggle source
# File lib/meeseeker.rb, line 108 def self.shuffle_node_url(chain = ENV.fetch('MEESEEKER_CHAIN_KEY_PREFIX', HIVE_CHAIN_KEY_PREFIX)) chain = chain.to_s node_url = ENV.fetch('MEESEEKER_NODE_URL', default_url(ENV.fetch('MEESEEKER_CHAIN_KEY_PREFIX', chain))) return node_url unless node_url == SHUFFLE_URL @problem_node_urls = [] if rand(1..1000) == 13 shuffle_node_url!(chain) end
shuffle_node_url!(chain = ENV.fetch('MEESEEKER_CHAIN_KEY_PREFIX', HIVE_CHAIN_KEY_PREFIX))
click to toggle source
# File lib/meeseeker.rb, line 162 def self.shuffle_node_url!(chain = ENV.fetch('MEESEEKER_CHAIN_KEY_PREFIX', HIVE_CHAIN_KEY_PREFIX)) chain = chain.to_s failover_urls = case chain when STEEM_CHAIN_KEY_PREFIX then DEFAULT_STEEM_FAILOVER_URLS - @problem_node_urls when HIVE_CHAIN_KEY_PREFIX then DEFAULT_HIVE_FAILOVER_URLS - @problem_node_urls else; [] end url = failover_urls.sample api = api_class(chain).new(url: url) api.get_accounts(['fullnodeupdate']) do |accounts| fullnodeupdate = accounts.first metadata = (JSON[fullnodeupdate.json_metadata] rescue nil) || {} nodes = metadata.fetch('report', []).map do |report| next if chain == HIVE_CHAIN_KEY_PREFIX && !report[HIVE_CHAIN_KEY_PREFIX] next if chain != HIVE_CHAIN_KEY_PREFIX && !!report[HIVE_CHAIN_KEY_PREFIX] report['node'] end.compact.uniq nodes -= @problem_node_urls if nodes.any? nodes.sample else @node_url = failover_urls.sample end end rescue => e puts "#{url}: #{e}" @problem_node_urls << url failover_urls -= @problem_node_urls failover_urls.sample end
stream_class(chain = default_chain_key_prefix)
click to toggle source
# File lib/meeseeker.rb, line 153 def self.stream_class(chain = default_chain_key_prefix) case chain.to_s when STEEM_CHAIN_KEY_PREFIX then Steem::Stream when HIVE_CHAIN_KEY_PREFIX then Hive::Stream else raise "Unknown chain: #{chain}" end end
Public Instance Methods
default_chain_key_prefix()
click to toggle source
# File lib/meeseeker.rb, line 49 def default_chain_key_prefix ENV.fetch('MEESEEKER_CHAIN_KEY_PREFIX', chain_key_prefix) end