class Spaceship::StatsMiddleware

Constants

ServiceOption
URLLog

Public Class Methods

new(app) click to toggle source
Calls superclass method
# File spaceship/lib/spaceship/stats_middleware.rb, line 39
def initialize(app)
  super(app)
end
request_logs() click to toggle source
# File spaceship/lib/spaceship/stats_middleware.rb, line 33
def request_logs
  @request_logs ||= []
  @request_logs
end
service_stats() click to toggle source
# File spaceship/lib/spaceship/stats_middleware.rb, line 29
def service_stats
  @service_stats ||= Hash.new(0)
end
services() click to toggle source
# File spaceship/lib/spaceship/stats_middleware.rb, line 10
def services
  return @services if @services

  require_relative 'tunes/tunes_client'
  require_relative 'portal/portal_client'
  require_relative 'connect_api/testflight/client'
  require_relative 'connect_api/provisioning/client'

  @services ||= [
    ServiceOption.new("App Store Connect API (official)", "api.appstoreconnect.apple.com", "JWT"),
    ServiceOption.new("App Store Connect API (web session)", Spaceship::ConnectAPI::TestFlight::Client.hostname.gsub("https://", ""), "Web session"),
    ServiceOption.new("App Store Connect API (web session)", Spaceship::ConnectAPI::Provisioning::Client.hostname.gsub("https://", ""), "Web session"),
    ServiceOption.new("Legacy iTunesConnect Auth", "idmsa.apple.com", "Web session"),
    ServiceOption.new("Legacy iTunesConnect Auth", "appstoreconnect.apple.com/olympus/v1/", "Web session"),
    ServiceOption.new("Legacy iTunesConnect", Spaceship::TunesClient.hostname.gsub("https://", ""), "Web session"),
    ServiceOption.new("Legacy iTunesConnect Developer Portal", Spaceship::PortalClient.hostname.gsub("https://", ""), "Web session")
  ]
end

Public Instance Methods

call(env) click to toggle source
# File spaceship/lib/spaceship/stats_middleware.rb, line 43
def call(env)
  log(env)
  @app.call(env)
end
log(env) click to toggle source
# File spaceship/lib/spaceship/stats_middleware.rb, line 48
def log(env)
  return false unless env && env.url && (uri = URI.parse(env.url.to_s))
  service = StatsMiddleware.services.find do |s|
    uri.to_s.include?(s.url)
  end

  service = ServiceOption.new("Unknown", uri.host, "Unknown") if service.nil?
  StatsMiddleware.service_stats[service] += 1

  StatsMiddleware.request_logs << URLLog.new(uri.to_s, service.auth_type)

  return true
rescue => e
  puts("Failed to log spaceship stats - #{e.message}") if Spaceship::Globals.verbose?
  return false
end