Class: Conversant::V3::Services::CDN

Inherits:
Base
  • Object
show all
Includes:
Authorization
Defined in:
lib/conversant/v3/services/cdn.rb,
lib/conversant/v3/services/cdn/audit.rb,
lib/conversant/v3/services/cdn/domain.rb,
lib/conversant/v3/services/cdn/partner.rb,
lib/conversant/v3/services/cdn/business.rb,
lib/conversant/v3/services/cdn/analytics.rb,
lib/conversant/v3/services/cdn/dashboard.rb,
lib/conversant/v3/services/cdn/monitoring.rb,
lib/conversant/v3/services/cdn/certificate.rb,
lib/conversant/v3/services/cdn/partner/analytics.rb,
sig/conversant/v3/services/cdn.rbs

Overview

CDN service inherits from Base class

Defined Under Namespace

Classes: Analytics, Audit, Business, Certificate, Dashboard, Domain, Monitoring, Partner

Constant Summary

Constants included from HttpClient

HttpClient::PORTAL_SESSION_REDIS_KEY, HttpClient::SSO_GW_SESSION2_REDIS_KEY

Instance Attribute Summary

Attributes inherited from Base

#customer_id, #type

Instance Method Summary collapse

Methods included from Authorization

#authorize, #authorized_headers, #base_headers, #build_cookie_hash, #build_headers_with_cookies, #cached_session, #fetch_session_cookie, #fetch_sso_session, #format_cookies, #log_missing_session, #session_cache_key, #sso_cache_key

Methods inherited from Base

#identifier, #initialize, #portal_endpoint, #sso_endpoint, #validate_configuration!

Methods included from HttpClient

#add_cookies_to_headers, #authenticate, #cookie_jar, #cookie_jar=, #debug_log, #extract_form_action, #http_get, #http_post, #login_url, #parse_cookie_to_jar, #request, #sso_login, #update_cookie_jar

Constructor Details

This class inherits a constructor from Conversant::V3::Base

Instance Method Details

#analyticsCDN::Analytics

Service instances

Returns:



43
44
45
# File 'lib/conversant/v3/services/cdn.rb', line 43

def analytics
  @analytics ||= Analytics.new(self)
end

#auditAudit

Get audit service instance

Returns:

  • (Audit)

    audit service for activity logging and compliance

Since:

  • 1.0.0



59
60
61
# File 'lib/conversant/v3/services/cdn.rb', line 59

def audit
  @audit ||= Audit.new(self)
end

#businessBusiness

Get business metrics service instance

Returns:

  • (Business)

    business service for billing and usage metrics

Since:

  • 1.0.1



83
84
85
# File 'lib/conversant/v3/services/cdn.rb', line 83

def business
  @business ||= Business.new(self)
end

#call(method, uri, payload = nil) ⇒ String?

Parameters:

  • method (String)
  • path (String)
  • payload (Hash[Symbol, untyped], nil) (defaults to: nil)

Returns:

  • (String, nil)

Since:

  • 1.0.0



133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/conversant/v3/services/cdn.rb', line 133

def call(method, uri, payload = nil)
  url = "#{configuration.private_cdn_endpoint}#{uri}"

  headers = authorized_headers

  # Check for SESSION in Cookie header
  if headers['Cookie'].nil? || !headers['Cookie'].include?('SESSION=')
    logger.error "#{identifier}.METHOD:call.NO_SESSION"
    raise AuthenticationError, 'Missing SESSION for CDN'
  end

  code, response = request(method, url, payload, headers)

  if code >= 400
    logger.error "#{identifier}.METHOD:call.HTTP_ERROR:#{code}"
    raise ApiError, "CDN API error: #{code}"
  end

  response.body
end

#certificateCertificate

Get certificate management service instance

Returns:

  • (Certificate)

    certificate service for SSL/TLS management

Since:

  • 1.0.1



91
92
93
# File 'lib/conversant/v3/services/cdn.rb', line 91

def certificate
  @certificate ||= Certificate.new(self)
end

#configurationObject

Returns:

  • (Object)


32
# File 'sig/conversant/v3/services/cdn.rbs', line 32

def configuration: () -> untyped

#dashboardDashboard

Get dashboard service instance

Returns:

  • (Dashboard)

    dashboard service for quick daily metrics

Since:

  • 1.0.8



67
68
69
# File 'lib/conversant/v3/services/cdn.rb', line 67

def dashboard
  @dashboard ||= Dashboard.new(self)
end

#domainDomain

Get domain management service instance

Returns:

  • (Domain)

    domain service for CDN domain management

Since:

  • 1.0.1



75
76
77
# File 'lib/conversant/v3/services/cdn.rb', line 75

def domain
  @domain ||= Domain.new(self)
end

#fetch_new_sessionString?

Returns:

  • (String, nil)

Since:

  • 1.0.0



156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
# File 'lib/conversant/v3/services/cdn.rb', line 156

def fetch_new_session
  sessions = authenticate
  return nil unless sessions && sessions[:session] && sessions[:sso_gw_session2]

  signature_url = "#{configuration.private_cdn_endpoint}/partner-dashboard?customerId=#{customer_id}"
  logger.debug "#{identifier}.METHOD:authorize.REQUESTING_SESSION"

  response = RestClient.get(
    signature_url,
    {
      authority: URI.parse(configuration.private_cdn_endpoint).hostname,
      referer: portal_endpoint,
      user_agent: configuration.default_ua,
      cookies: {
        'SESSION': sessions[:session],
        'SSO_GW_SESSION2': sessions[:sso_gw_session2]
      },
      timeout: 30,
      open_timeout: 30
    }
  )

  if response.cookies['SESSION']
    session_cookie = response.cookies['SESSION']
    redis.set(session_cache_key, session_cookie, ex: configuration.cache_ttl)
    logger.debug "#{identifier}.METHOD:authorize.SESSION_OBTAINED"
    session_cookie
  else
    logger.error "#{identifier}.METHOD:authorize.NO_SESSION_IN_RESPONSE"
    nil
  end
rescue RestClient::Unauthorized, RestClient::Forbidden => e
  logger.error "#{identifier}.METHOD:authorize.AUTH_ERROR:#{e.message}"
  nil
rescue StandardError => e
  logger.error "#{identifier}.METHOD:authorize.ERROR:#{e.message}"
  nil
end

#loggerObject

Returns:

  • (Object)


31
# File 'sig/conversant/v3/services/cdn.rbs', line 31

def logger: () -> untyped

#monitoringMonitoring

Get monitoring service instance

Returns:

  • (Monitoring)

    monitoring service for real-time CDN performance

Since:

  • 1.0.0



51
52
53
# File 'lib/conversant/v3/services/cdn.rb', line 51

def monitoring
  @monitoring ||= Monitoring.new(self)
end

#partnerPartner

Get partner service instance

Provides access to partner-level analytics and reporting that aggregate data across multiple customer accounts.

Examples:

Access partner analytics

cdn = Conversant::V3.cdn(12345)
bandwidth = cdn.partner.analytics.bandwidth(payload)
storage = cdn.partner.oss.storage_usage(payload)

Returns:

  • (Partner)

    partner service for CDN and OSS analytics

Since:

  • 1.0.12



107
108
109
# File 'lib/conversant/v3/services/cdn.rb', line 107

def partner
  @partner ||= Partner.new(self)
end

#partner_analyticsCDN::Partner::Analytics

Deprecated.

Use #partner instead

Get partner analytics service instance (deprecated)

Returns:

Since:

  • 1.0.8



117
118
119
# File 'lib/conversant/v3/services/cdn.rb', line 117

def partner_analytics
  @partner_analytics ||= Partner::Analytics.new(self)
end

#partner_ossConversant::V3::Services::OSS::Partner::Analytics

Deprecated.

Use Conversant::V3.oss instead

Get partner OSS analytics service instance (deprecated)

Returns:

Since:

  • 1.0.8



127
128
129
# File 'lib/conversant/v3/services/cdn.rb', line 127

def partner_oss
  @partner_oss ||= Conversant::V3::Services::OSS::Partner::Analytics.new(self)
end

#redisObject

Returns:

  • (Object)


33
# File 'sig/conversant/v3/services/cdn.rbs', line 33

def redis: () -> untyped

#requires_session?Boolean

Returns:

  • (Boolean)

Since:

  • 1.0.0



205
206
207
# File 'lib/conversant/v3/services/cdn.rb', line 205

def requires_session?
  true
end

#service_endpointString

Returns:

  • (String)

Since:

  • 1.0.0



197
198
199
# File 'lib/conversant/v3/services/cdn.rb', line 197

def service_endpoint
  configuration.private_cdn_endpoint
end

Returns:

  • (String)

Since:

  • 1.0.0



201
202
203
# File 'lib/conversant/v3/services/cdn.rb', line 201

def session_cookie_name
  'SESSION'
end