Class: INatGet::App::Server::API
- Inherits:
-
INatGet::App::Server
- Object
- INatGet::App::Server
- INatGet::App::Server::API
- Defined in:
- lib/inat-get/app/core/api.rb,
lib/inat-get/app/core/api_cache.rb
Overview
require_relative 'api_cache'
Defined Under Namespace
Classes: Cache
Instance Attribute Summary
Attributes inherited from INatGet::App::Server
Instance Method Summary collapse
- #faraday ⇒ Object private
- #get(query, **opts) ⇒ Object private
-
#initialize(socket_path, **params) ⇒ API
constructor
A new instance of API.
Methods inherited from INatGet::App::Server
#after_loop, #before_loop, create, #on_error, #process_msg, #run, used?, wait_answer?
Constructor Details
#initialize(socket_path, **params) ⇒ API
Returns a new instance of API.
16 17 18 19 20 21 22 |
# File 'lib/inat-get/app/core/api.rb', line 16 def initialize socket_path, **params @console = params.delete :console @logger = ::INatGet::App::ConsoleLogger::new @console, progname: 'API' super(socket_path, **params) @config = INatGet::App::Setup::config @delay = IS::Duration::parse @config.dig(:api, :delay) end |
Instance Method Details
#faraday ⇒ Object (private)
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/inat-get/app/core/api.rb', line 58 def faraday logger = ::Logger::new 'api.log', level: :debug # logger.info @faraday ||= Faraday::new do |f| f.request :retry, max: @config.dig(:api, :retry, :max), interval: IS::Duration::parse(@config.dig(:api, :retry, :interval)), interval_randomness: @config.dig(:api, :retry, :randomness), backoff_factor: @config.dig(:api, :retry, :backoff), retry_block: lambda { |env:, options:, retry_count:, exception:, will_retry_in:| @logger.warn "retry... : #{ retry_count } : #{ exception.class }" }, exceptions: [Faraday::TimeoutError, Faraday::ConnectionFailed, Faraday::SSLError, Faraday::ClientError] f.request :url_encoded f.response :logger, logger, { bodies: false, headers: true } # f.response :gzip f.response :raise_error # f.adapter Faraday.default_adapter f.adapter :typhoeus # do |typhoeus| # typhoeus.options[:connecttimeout] = 5 # typhoeus.options[:timeout] = 10 # typhoeus.options[:nosignal] = 1 # typhoeus.options[:dns_cache_timeout] = 0 # end end end |
#get(query, **opts) ⇒ Object (private)
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/inat-get/app/core/api.rb', line 26 def get query, **opts endpoint = @config.dig(:api, :root) + query[:endpoint].to_s @logger.info query[:endpoint].to_s timepoint = Time::now if @last_request delta = timepoint - @last_request sleep (@delay - delta) if delta < @delay end @last_request = timepoint response = faraday.get(endpoint) do |rq| rq.params[:per_page] = @config.dig(:api, :pager) rq.params.compact! rq.params.merge! query[:query] rq.headers["User-Agent"] = "iNatGet v#{INatGet::Info::VERSION} (#{ INatGet::Info::VERSION_ALIAS })" end @logger.clear if response.success? begin data = JSON.parse response.body, symbolize_names: true return data.freeze rescue => e @logger.error "Error while parsing: #{e.}" return { status: :error, error: e. }.freeze end else @logger.error "Error in response: #{response.status}" return { status: :error, error: response.status }.freeze end rescue => e return { status: :error, error: e. }.freeze end |