From 82b29099bc232601ad99dd3b304be8edf59e2179 Mon Sep 17 00:00:00 2001 From: Manu Chaudhary Date: Tue, 14 Jul 2026 11:35:43 +0530 Subject: [PATCH] feat(api): add usage analytics breakdown endpoint Stainless-Generated-From: 5869dc658c994c8d41e910639993cec7ed032035 --- .stats.yml | 2 +- Rakefile | 7 +- lib/imagekitio.rb | 4 + .../internal/transport/base_client.rb | 5 +- .../accounts/request_bandwidth_entry.rb | 26 + .../accounts/usage_analytics_get_params.rb | 39 + .../accounts/usage_analytics_response.rb | 1044 ++++++++ lib/imagekitio/resources/accounts.rb | 4 + lib/imagekitio/resources/accounts/usage.rb | 6 + .../resources/accounts/usage_analytics.rb | 55 + .../accounts/request_bandwidth_entry.rbi | 44 + .../accounts/usage_analytics_get_params.rbi | 64 + .../accounts/usage_analytics_response.rbi | 2097 +++++++++++++++++ rbi/imagekitio/resources/accounts.rbi | 3 + rbi/imagekitio/resources/accounts/usage.rbi | 6 + .../resources/accounts/usage_analytics.rbi | 46 + .../accounts/request_bandwidth_entry.rbs | 18 + .../accounts/usage_analytics_get_params.rbs | 30 + .../accounts/usage_analytics_response.rbs | 785 ++++++ sig/imagekitio/resources/accounts.rbs | 2 + .../resources/accounts/usage_analytics.rbs | 15 + .../accounts/usage_analytics_test.rb | 43 + 22 files changed, 4342 insertions(+), 3 deletions(-) create mode 100644 lib/imagekitio/models/accounts/request_bandwidth_entry.rb create mode 100644 lib/imagekitio/models/accounts/usage_analytics_get_params.rb create mode 100644 lib/imagekitio/models/accounts/usage_analytics_response.rb create mode 100644 lib/imagekitio/resources/accounts/usage_analytics.rb create mode 100644 rbi/imagekitio/models/accounts/request_bandwidth_entry.rbi create mode 100644 rbi/imagekitio/models/accounts/usage_analytics_get_params.rbi create mode 100644 rbi/imagekitio/models/accounts/usage_analytics_response.rbi create mode 100644 rbi/imagekitio/resources/accounts/usage_analytics.rbi create mode 100644 sig/imagekitio/models/accounts/request_bandwidth_entry.rbs create mode 100644 sig/imagekitio/models/accounts/usage_analytics_get_params.rbs create mode 100644 sig/imagekitio/models/accounts/usage_analytics_response.rbs create mode 100644 sig/imagekitio/resources/accounts/usage_analytics.rbs create mode 100644 test/imagekitio/resources/accounts/usage_analytics_test.rb diff --git a/.stats.yml b/.stats.yml index 006b15f4..58526a77 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1 +1 @@ -configured_endpoints: 47 +configured_endpoints: 48 diff --git a/Rakefile b/Rakefile index a0c9e54e..1b154dad 100644 --- a/Rakefile +++ b/Rakefile @@ -1,5 +1,6 @@ # frozen_string_literal: true +require "etc" require "pathname" require "securerandom" require "shellwords" @@ -37,7 +38,11 @@ multitask(:test) do ruby(*%w[-w -e], rb, verbose: false) { fail unless _1 } end -xargs = %w[xargs --no-run-if-empty --null --max-procs=0 --max-args=300 --] +# Cap parallelism at the CPU count. `--max-procs=0` spawns one process per +# 300-file batch with no upper bound; on large SDKs (thousands of files) that +# oversubscribes CPUs and stacks up rubocop processes, exhausting memory and +# slowing CI to the point of timing out. +xargs = %W[xargs --no-run-if-empty --null --max-procs=#{Etc.nprocessors} --max-args=300 --] ruby_opt = {"RUBYOPT" => [ENV["RUBYOPT"], "--encoding=UTF-8"].compact.join(" ")} filtered = ->(ext, dirs) do diff --git a/lib/imagekitio.rb b/lib/imagekitio.rb index f7888778..4b049982 100644 --- a/lib/imagekitio.rb +++ b/lib/imagekitio.rb @@ -55,6 +55,7 @@ require_relative "imagekitio/client" require_relative "imagekitio/models/accounts/origin_request" require_relative "imagekitio/models/accounts/url_endpoint_request" +require_relative "imagekitio/models/accounts/request_bandwidth_entry" require_relative "imagekitio/models/base_webhook_event" require_relative "imagekitio/models/update_file_request" require_relative "imagekitio/models/file" @@ -74,6 +75,8 @@ require_relative "imagekitio/models/accounts/url_endpoint_list_response" require_relative "imagekitio/models/accounts/url_endpoint_response" require_relative "imagekitio/models/accounts/url_endpoint_update_params" +require_relative "imagekitio/models/accounts/usage_analytics_get_params" +require_relative "imagekitio/models/accounts/usage_analytics_response" require_relative "imagekitio/models/accounts/usage_get_params" require_relative "imagekitio/models/accounts/usage_get_response" require_relative "imagekitio/models/ai_tag" @@ -185,6 +188,7 @@ require_relative "imagekitio/resources/accounts/origins" require_relative "imagekitio/resources/accounts/url_endpoints" require_relative "imagekitio/resources/accounts/usage" +require_relative "imagekitio/resources/accounts/usage_analytics" require_relative "imagekitio/resources/assets" require_relative "imagekitio/resources/beta" require_relative "imagekitio/resources/beta/v2" diff --git a/lib/imagekitio/internal/transport/base_client.rb b/lib/imagekitio/internal/transport/base_client.rb index f6c722bd..509622e1 100644 --- a/lib/imagekitio/internal/transport/base_client.rb +++ b/lib/imagekitio/internal/transport/base_client.rb @@ -306,7 +306,10 @@ def initialize( Imagekitio::Internal::Util.deep_merge(*[req[:body], opts[:extra_body]].compact) end - headers.delete("content-type") if body.nil? + # Generated methods always pass `req[:body]` for operations that define a + # request body, so only elide the content-type header when the operation + # has no body at all, not when an optional body param was omitted. + headers.delete("content-type") if body.nil? && !req.key?(:body) url = Imagekitio::Internal::Util.join_parsed_uri( @base_url_components, diff --git a/lib/imagekitio/models/accounts/request_bandwidth_entry.rb b/lib/imagekitio/models/accounts/request_bandwidth_entry.rb new file mode 100644 index 00000000..db008827 --- /dev/null +++ b/lib/imagekitio/models/accounts/request_bandwidth_entry.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +module Imagekitio + module Models + module Accounts + class RequestBandwidthEntry < Imagekitio::Internal::Type::BaseModel + # @!attribute bandwidth_bytes + # Total bandwidth used in bytes. + # + # @return [Float] + required :bandwidth_bytes, Float, api_name: :bandwidthBytes + + # @!attribute request_count + # Number of requests. + # + # @return [Float] + required :request_count, Float, api_name: :requestCount + + # @!method initialize(bandwidth_bytes:, request_count:) + # @param bandwidth_bytes [Float] Total bandwidth used in bytes. + # + # @param request_count [Float] Number of requests. + end + end + end +end diff --git a/lib/imagekitio/models/accounts/usage_analytics_get_params.rb b/lib/imagekitio/models/accounts/usage_analytics_get_params.rb new file mode 100644 index 00000000..d0adcff2 --- /dev/null +++ b/lib/imagekitio/models/accounts/usage_analytics_get_params.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +module Imagekitio + module Models + module Accounts + # @see Imagekitio::Resources::Accounts::UsageAnalytics#get + class UsageAnalyticsGetParams < Imagekitio::Internal::Type::BaseModel + extend Imagekitio::Internal::Type::RequestParameters::Converter + include Imagekitio::Internal::Type::RequestParameters + + # @!attribute end_date + # Specify an `endDate` in `YYYY-MM-DD` format, interpreted as a UTC calendar day. + # It should be after the `startDate`. The difference between `startDate` and + # `endDate` should be less than 90 days. + # + # @return [Date] + required :end_date, Date + + # @!attribute start_date + # Specify a `startDate` in `YYYY-MM-DD` format, interpreted as a UTC calendar day. + # It should be before the `endDate`. The difference between `startDate` and + # `endDate` should be less than 90 days. + # + # @return [Date] + required :start_date, Date + + # @!method initialize(end_date:, start_date:, request_options: {}) + # Some parameter documentations has been truncated, see + # {Imagekitio::Models::Accounts::UsageAnalyticsGetParams} for more details. + # + # @param end_date [Date] Specify an `endDate` in `YYYY-MM-DD` format, interpreted as a UTC calendar day. + # + # @param start_date [Date] Specify a `startDate` in `YYYY-MM-DD` format, interpreted as a UTC calendar day. + # + # @param request_options [Imagekitio::RequestOptions, Hash{Symbol=>Object}] + end + end + end +end diff --git a/lib/imagekitio/models/accounts/usage_analytics_response.rb b/lib/imagekitio/models/accounts/usage_analytics_response.rb new file mode 100644 index 00000000..696cfd57 --- /dev/null +++ b/lib/imagekitio/models/accounts/usage_analytics_response.rb @@ -0,0 +1,1044 @@ +# frozen_string_literal: true + +module Imagekitio + module Models + module Accounts + # @see Imagekitio::Resources::Accounts::UsageAnalytics#get + class UsageAnalyticsResponse < Imagekitio::Internal::Type::BaseModel + # @!attribute bandwidth_bytes + # Total bandwidth, in bytes, utilized during the specified date range. + # + # @return [Float] + required :bandwidth_bytes, Float, api_name: :bandwidthBytes + + # @!attribute browser + # CDN traffic grouped by browser. + # + # @return [Imagekitio::Models::Accounts::UsageAnalyticsResponse::Browser] + required :browser, -> { Imagekitio::Accounts::UsageAnalyticsResponse::Browser } + + # @!attribute cache + # CDN cache hit, miss and error counts for the date range. + # + # @return [Imagekitio::Models::Accounts::UsageAnalyticsResponse::Cache] + required :cache, -> { Imagekitio::Accounts::UsageAnalyticsResponse::Cache } + + # @!attribute country + # CDN traffic grouped by country. + # + # @return [Imagekitio::Models::Accounts::UsageAnalyticsResponse::Country] + required :country, -> { Imagekitio::Accounts::UsageAnalyticsResponse::Country } + + # @!attribute device + # CDN traffic grouped by device and operating system (e.g. `Desktop - Apple Mac`, + # `Smartphone - Apple iPhone`). + # + # @return [Imagekitio::Models::Accounts::UsageAnalyticsResponse::Device] + required :device, -> { Imagekitio::Accounts::UsageAnalyticsResponse::Device } + + # @!attribute end_date + # End date of the computed analytics data. + # + # @return [Date] + required :end_date, Date, api_name: :endDate + + # @!attribute error_reasons + # Request count grouped by origin error reason. This covers failed origin fetches, + # such as an asset not found at origin or an origin timeout. It is not the HTTP + # status code returned to the client, see `statusCodes` for that. + # + # @return [Array] + required :error_reasons, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::ErrorReason] + }, + api_name: :errorReasons + + # @!attribute extensions + # Raw per-extension operation counts for the date range. These are raw operation + # counts, not billable extension units. For billable usage, use the + # `/v1/accounts/usage` endpoint. + # + # @return [Array] + required :extensions, + -> { Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::Extension] } + + # @!attribute format_ + # CDN traffic grouped by response `Content-Type`. + # + # @return [Imagekitio::Models::Accounts::UsageAnalyticsResponse::Format] + required :format_, -> { Imagekitio::Accounts::UsageAnalyticsResponse::Format }, api_name: :format + + # @!attribute generated_at + # Date and time when the analytics data was computed. Use this to gauge how fresh + # the returned data is. The date and time is in ISO8601 format. + # + # @return [Time] + required :generated_at, Time, api_name: :generatedAt + + # @!attribute request_count + # Total number of requests made during the specified date range. + # + # @return [Float] + required :request_count, Float, api_name: :requestCount + + # @!attribute start_date + # Start date of the computed analytics data. + # + # @return [Date] + required :start_date, Date, api_name: :startDate + + # @!attribute status_codes + # Request count grouped by HTTP status code. + # + # @return [Array] + required :status_codes, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::StatusCode] + }, + api_name: :statusCodes + + # @!attribute top404_assets + # Top URLs that returned a 404 response. + # + # @return [Array] + required :top404_assets, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::Top404Asset] + }, + api_name: :top404Assets + + # @!attribute top_images + # Top image assets by traffic. + # + # @return [Imagekitio::Models::Accounts::UsageAnalyticsResponse::TopImages] + required :top_images, + -> { + Imagekitio::Accounts::UsageAnalyticsResponse::TopImages + }, + api_name: :topImages + + # @!attribute top_image_transforms + # Top image transformation strings by traffic. + # + # @return [Imagekitio::Models::Accounts::UsageAnalyticsResponse::TopImageTransforms] + required :top_image_transforms, + -> { Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms }, + api_name: :topImageTransforms + + # @!attribute top_other_assets + # Top non-image, non-video assets by traffic. + # + # @return [Imagekitio::Models::Accounts::UsageAnalyticsResponse::TopOtherAssets] + required :top_other_assets, + -> { Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets }, + api_name: :topOtherAssets + + # @!attribute top_referrers + # Top HTTP referrers by traffic. + # + # @return [Imagekitio::Models::Accounts::UsageAnalyticsResponse::TopReferrers] + required :top_referrers, + -> { Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers }, + api_name: :topReferrers + + # @!attribute top_user_agents + # Top user agents by traffic. + # + # @return [Imagekitio::Models::Accounts::UsageAnalyticsResponse::TopUserAgents] + required :top_user_agents, + -> { Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents }, + api_name: :topUserAgents + + # @!attribute top_videos + # Top video assets by traffic. + # + # @return [Imagekitio::Models::Accounts::UsageAnalyticsResponse::TopVideos] + required :top_videos, + -> { + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos + }, + api_name: :topVideos + + # @!attribute top_video_transforms + # Top video transformation strings by traffic. + # + # @return [Imagekitio::Models::Accounts::UsageAnalyticsResponse::TopVideoTransforms] + required :top_video_transforms, + -> { Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms }, + api_name: :topVideoTransforms + + # @!attribute url_endpoints + # CDN traffic grouped by configured URL endpoint. Traffic that does not match any + # named URL endpoint pattern is grouped under `Default`. + # + # @return [Imagekitio::Models::Accounts::UsageAnalyticsResponse::URLEndpoints] + required :url_endpoints, + -> { Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints }, + api_name: :urlEndpoints + + # @!attribute video_processing + # Raw observed video transcode output duration, in seconds, grouped by resolution + # and codec. These are raw seconds, not billable Video Processing Units (VPU). For + # billable VPU totals, use the `/v1/accounts/usage` endpoint. + # + # @return [Array] + required :video_processing, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::VideoProcessing] + }, + api_name: :videoProcessing + + # @!method initialize(bandwidth_bytes:, browser:, cache:, country:, device:, end_date:, error_reasons:, extensions:, format_:, generated_at:, request_count:, start_date:, status_codes:, top404_assets:, top_images:, top_image_transforms:, top_other_assets:, top_referrers:, top_user_agents:, top_videos:, top_video_transforms:, url_endpoints:, video_processing:) + # Some parameter documentations has been truncated, see + # {Imagekitio::Models::Accounts::UsageAnalyticsResponse} for more details. + # + # @param bandwidth_bytes [Float] Total bandwidth, in bytes, utilized during the specified date range. + # + # @param browser [Imagekitio::Models::Accounts::UsageAnalyticsResponse::Browser] CDN traffic grouped by browser. + # + # @param cache [Imagekitio::Models::Accounts::UsageAnalyticsResponse::Cache] CDN cache hit, miss and error counts for the date range. + # + # @param country [Imagekitio::Models::Accounts::UsageAnalyticsResponse::Country] CDN traffic grouped by country. + # + # @param device [Imagekitio::Models::Accounts::UsageAnalyticsResponse::Device] CDN traffic grouped by device and operating system (e.g. `Desktop - Apple Mac`, + # + # @param end_date [Date] End date of the computed analytics data. + # + # @param error_reasons [Array] Request count grouped by origin error reason. This covers failed origin fetches, + # + # @param extensions [Array] Raw per-extension operation counts for the date range. These are raw operation c + # + # @param format_ [Imagekitio::Models::Accounts::UsageAnalyticsResponse::Format] CDN traffic grouped by response `Content-Type`. + # + # @param generated_at [Time] Date and time when the analytics data was computed. Use this to gauge how fresh + # + # @param request_count [Float] Total number of requests made during the specified date range. + # + # @param start_date [Date] Start date of the computed analytics data. + # + # @param status_codes [Array] Request count grouped by HTTP status code. + # + # @param top404_assets [Array] Top URLs that returned a 404 response. + # + # @param top_images [Imagekitio::Models::Accounts::UsageAnalyticsResponse::TopImages] Top image assets by traffic. + # + # @param top_image_transforms [Imagekitio::Models::Accounts::UsageAnalyticsResponse::TopImageTransforms] Top image transformation strings by traffic. + # + # @param top_other_assets [Imagekitio::Models::Accounts::UsageAnalyticsResponse::TopOtherAssets] Top non-image, non-video assets by traffic. + # + # @param top_referrers [Imagekitio::Models::Accounts::UsageAnalyticsResponse::TopReferrers] Top HTTP referrers by traffic. + # + # @param top_user_agents [Imagekitio::Models::Accounts::UsageAnalyticsResponse::TopUserAgents] Top user agents by traffic. + # + # @param top_videos [Imagekitio::Models::Accounts::UsageAnalyticsResponse::TopVideos] Top video assets by traffic. + # + # @param top_video_transforms [Imagekitio::Models::Accounts::UsageAnalyticsResponse::TopVideoTransforms] Top video transformation strings by traffic. + # + # @param url_endpoints [Imagekitio::Models::Accounts::UsageAnalyticsResponse::URLEndpoints] CDN traffic grouped by configured URL endpoint. Traffic that does not match any + # + # @param video_processing [Array] Raw observed video transcode output duration, in seconds, grouped by resolution + + # @see Imagekitio::Models::Accounts::UsageAnalyticsResponse#browser + class Browser < Imagekitio::Internal::Type::BaseModel + # @!attribute by_bandwidth + # Top browsers sorted by bandwidth utilized. + # + # @return [Array] + required :by_bandwidth, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::Browser::ByBandwidth] + }, + api_name: :byBandwidth + + # @!attribute by_requests + # Top browsers sorted by request count. + # + # @return [Array] + required :by_requests, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::Browser::ByRequest] + }, + api_name: :byRequests + + # @!method initialize(by_bandwidth:, by_requests:) + # CDN traffic grouped by browser. + # + # @param by_bandwidth [Array] Top browsers sorted by bandwidth utilized. + # + # @param by_requests [Array] Top browsers sorted by request count. + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute name + # Browser name (e.g. `Chrome`). + # + # @return [String] + required :name, String + + # @!method initialize(name:) + # @param name [String] Browser name (e.g. `Chrome`). + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute name + # Browser name (e.g. `Chrome`). + # + # @return [String] + required :name, String + + # @!method initialize(name:) + # @param name [String] Browser name (e.g. `Chrome`). + end + end + + # @see Imagekitio::Models::Accounts::UsageAnalyticsResponse#cache + class Cache < Imagekitio::Internal::Type::BaseModel + # @!attribute error_count + # Number of requests where the CDN encountered a cache error or exceeded capacity + # while serving the response. + # + # @return [Float] + required :error_count, Float, api_name: :errorCount + + # @!attribute hit_count + # Number of requests served from cache, including full hits and revalidated hits. + # + # @return [Float] + required :hit_count, Float, api_name: :hitCount + + # @!attribute miss_count + # Number of requests that were not found in cache and had to be fetched from + # origin. + # + # @return [Float] + required :miss_count, Float, api_name: :missCount + + # @!method initialize(error_count:, hit_count:, miss_count:) + # Some parameter documentations has been truncated, see + # {Imagekitio::Models::Accounts::UsageAnalyticsResponse::Cache} for more details. + # + # CDN cache hit, miss and error counts for the date range. + # + # @param error_count [Float] Number of requests where the CDN encountered a cache error or exceeded capacity + # + # @param hit_count [Float] Number of requests served from cache, including full hits and revalidated hits. + # + # @param miss_count [Float] Number of requests that were not found in cache and had to be fetched from origi + end + + # @see Imagekitio::Models::Accounts::UsageAnalyticsResponse#country + class Country < Imagekitio::Internal::Type::BaseModel + # @!attribute by_bandwidth + # Top requesting countries sorted by total bandwidth utilized. + # + # @return [Array] + required :by_bandwidth, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::Country::ByBandwidth] + }, + api_name: :byBandwidth + + # @!attribute by_requests + # Top requesting countries sorted by request count. + # + # @return [Array] + required :by_requests, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::Country::ByRequest] + }, + api_name: :byRequests + + # @!method initialize(by_bandwidth:, by_requests:) + # CDN traffic grouped by country. + # + # @param by_bandwidth [Array] Top requesting countries sorted by total bandwidth utilized. + # + # @param by_requests [Array] Top requesting countries sorted by request count. + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute code + # ISO country code. + # + # @return [String] + required :code, String + + # @!attribute name + # Country name. + # + # @return [String] + required :name, String + + # @!method initialize(code:, name:) + # @param code [String] ISO country code. + # + # @param name [String] Country name. + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute code + # ISO country code. + # + # @return [String] + required :code, String + + # @!attribute name + # Country name. + # + # @return [String] + required :name, String + + # @!method initialize(code:, name:) + # @param code [String] ISO country code. + # + # @param name [String] Country name. + end + end + + # @see Imagekitio::Models::Accounts::UsageAnalyticsResponse#device + class Device < Imagekitio::Internal::Type::BaseModel + # @!attribute by_bandwidth + # Top device/OS combinations sorted by bandwidth utilized. + # + # @return [Array] + required :by_bandwidth, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::Device::ByBandwidth] + }, + api_name: :byBandwidth + + # @!attribute by_requests + # Top device/OS combinations sorted by request count. + # + # @return [Array] + required :by_requests, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::Device::ByRequest] + }, + api_name: :byRequests + + # @!method initialize(by_bandwidth:, by_requests:) + # CDN traffic grouped by device and operating system (e.g. `Desktop - Apple Mac`, + # `Smartphone - Apple iPhone`). + # + # @param by_bandwidth [Array] Top device/OS combinations sorted by bandwidth utilized. + # + # @param by_requests [Array] Top device/OS combinations sorted by request count. + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute name + # Device category combined with operating system or vendor (e.g. + # `Desktop - Windows PC`). + # + # @return [String] + required :name, String + + # @!method initialize(name:) + # Some parameter documentations has been truncated, see + # {Imagekitio::Models::Accounts::UsageAnalyticsResponse::Device::ByBandwidth} for + # more details. + # + # @param name [String] Device category combined with operating system or vendor (e.g. `Desktop - Window + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute name + # Device category combined with operating system or vendor (e.g. + # `Desktop - Windows PC`). + # + # @return [String] + required :name, String + + # @!method initialize(name:) + # Some parameter documentations has been truncated, see + # {Imagekitio::Models::Accounts::UsageAnalyticsResponse::Device::ByRequest} for + # more details. + # + # @param name [String] Device category combined with operating system or vendor (e.g. `Desktop - Window + end + end + + class ErrorReason < Imagekitio::Internal::Type::BaseModel + # @!attribute name + # Description of the error reason. + # + # @return [String] + required :name, String + + # @!attribute request_count + # Number of requests that failed with this error reason. + # + # @return [Float] + required :request_count, Float, api_name: :requestCount + + # @!method initialize(name:, request_count:) + # @param name [String] Description of the error reason. + # + # @param request_count [Float] Number of requests that failed with this error reason. + end + + class Extension < Imagekitio::Internal::Type::BaseModel + # @!attribute name + # Extension identifier. + # + # @return [String] + required :name, String + + # @!attribute operation_count + # Number of times this extension ran during the date range. + # + # @return [Float] + required :operation_count, Float, api_name: :operationCount + + # @!method initialize(name:, operation_count:) + # @param name [String] Extension identifier. + # + # @param operation_count [Float] Number of times this extension ran during the date range. + end + + # @see Imagekitio::Models::Accounts::UsageAnalyticsResponse#format_ + class Format < Imagekitio::Internal::Type::BaseModel + # @!attribute by_bandwidth + # Top content types sorted by bandwidth utilized. + # + # @return [Array] + required :by_bandwidth, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::Format::ByBandwidth] + }, + api_name: :byBandwidth + + # @!attribute by_requests + # Top content types sorted by request count. + # + # @return [Array] + required :by_requests, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::Format::ByRequest] + }, + api_name: :byRequests + + # @!method initialize(by_bandwidth:, by_requests:) + # CDN traffic grouped by response `Content-Type`. + # + # @param by_bandwidth [Array] Top content types sorted by bandwidth utilized. + # + # @param by_requests [Array] Top content types sorted by request count. + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute name + # MIME type (e.g. `image/webp`). + # + # @return [String] + required :name, String + + # @!method initialize(name:) + # @param name [String] MIME type (e.g. `image/webp`). + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute name + # MIME type (e.g. `image/webp`). + # + # @return [String] + required :name, String + + # @!method initialize(name:) + # @param name [String] MIME type (e.g. `image/webp`). + end + end + + class StatusCode < Imagekitio::Internal::Type::BaseModel + # @!attribute name + # HTTP status code. + # + # @return [String] + required :name, String + + # @!attribute request_count + # Number of requests that received this status code. + # + # @return [Float] + required :request_count, Float, api_name: :requestCount + + # @!method initialize(name:, request_count:) + # @param name [String] HTTP status code. + # + # @param request_count [Float] Number of requests that received this status code. + end + + class Top404Asset < Imagekitio::Internal::Type::BaseModel + # @!attribute name + # URL that returned a 404 response. + # + # @return [String] + required :name, String + + # @!attribute request_count + # Number of requests to this URL that returned a 404 response. + # + # @return [Float] + required :request_count, Float, api_name: :requestCount + + # @!method initialize(name:, request_count:) + # @param name [String] URL that returned a 404 response. + # + # @param request_count [Float] Number of requests to this URL that returned a 404 response. + end + + # @see Imagekitio::Models::Accounts::UsageAnalyticsResponse#top_images + class TopImages < Imagekitio::Internal::Type::BaseModel + # @!attribute by_bandwidth + # Top image assets sorted by bandwidth utilized. + # + # @return [Array] + required :by_bandwidth, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::TopImages::ByBandwidth] + }, + api_name: :byBandwidth + + # @!attribute by_requests + # Top image assets sorted by request count. + # + # @return [Array] + required :by_requests, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::TopImages::ByRequest] + }, + api_name: :byRequests + + # @!method initialize(by_bandwidth:, by_requests:) + # Top image assets by traffic. + # + # @param by_bandwidth [Array] Top image assets sorted by bandwidth utilized. + # + # @param by_requests [Array] Top image assets sorted by request count. + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute name + # URL of the image asset. + # + # @return [String] + required :name, String + + # @!method initialize(name:) + # @param name [String] URL of the image asset. + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute name + # URL of the image asset. + # + # @return [String] + required :name, String + + # @!method initialize(name:) + # @param name [String] URL of the image asset. + end + end + + # @see Imagekitio::Models::Accounts::UsageAnalyticsResponse#top_image_transforms + class TopImageTransforms < Imagekitio::Internal::Type::BaseModel + # @!attribute by_bandwidth + # Top image transformation strings sorted by bandwidth utilized. + # + # @return [Array] + required :by_bandwidth, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms::ByBandwidth] + }, + api_name: :byBandwidth + + # @!attribute by_requests + # Top image transformation strings sorted by request count. + # + # @return [Array] + required :by_requests, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms::ByRequest] + }, + api_name: :byRequests + + # @!method initialize(by_bandwidth:, by_requests:) + # Top image transformation strings by traffic. + # + # @param by_bandwidth [Array] Top image transformation strings sorted by bandwidth utilized. + # + # @param by_requests [Array] Top image transformation strings sorted by request count. + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute name + # Image transformation string (e.g. `tr:w-400,h-400`). + # + # @return [String] + required :name, String + + # @!method initialize(name:) + # @param name [String] Image transformation string (e.g. `tr:w-400,h-400`). + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute name + # Image transformation string (e.g. `tr:w-400,h-400`). + # + # @return [String] + required :name, String + + # @!method initialize(name:) + # @param name [String] Image transformation string (e.g. `tr:w-400,h-400`). + end + end + + # @see Imagekitio::Models::Accounts::UsageAnalyticsResponse#top_other_assets + class TopOtherAssets < Imagekitio::Internal::Type::BaseModel + # @!attribute by_bandwidth + # Top non-image, non-video assets sorted by bandwidth utilized. + # + # @return [Array] + required :by_bandwidth, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets::ByBandwidth] + }, + api_name: :byBandwidth + + # @!attribute by_requests + # Top non-image, non-video assets sorted by request count. + # + # @return [Array] + required :by_requests, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets::ByRequest] + }, + api_name: :byRequests + + # @!method initialize(by_bandwidth:, by_requests:) + # Top non-image, non-video assets by traffic. + # + # @param by_bandwidth [Array] Top non-image, non-video assets sorted by bandwidth utilized. + # + # @param by_requests [Array] Top non-image, non-video assets sorted by request count. + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute name + # URL of the non-image, non-video asset. + # + # @return [String] + required :name, String + + # @!method initialize(name:) + # @param name [String] URL of the non-image, non-video asset. + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute name + # URL of the non-image, non-video asset. + # + # @return [String] + required :name, String + + # @!method initialize(name:) + # @param name [String] URL of the non-image, non-video asset. + end + end + + # @see Imagekitio::Models::Accounts::UsageAnalyticsResponse#top_referrers + class TopReferrers < Imagekitio::Internal::Type::BaseModel + # @!attribute by_bandwidth + # Top HTTP referrers sorted by bandwidth utilized. + # + # @return [Array] + required :by_bandwidth, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers::ByBandwidth] + }, + api_name: :byBandwidth + + # @!attribute by_requests + # Top HTTP referrers sorted by request count. + # + # @return [Array] + required :by_requests, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers::ByRequest] + }, + api_name: :byRequests + + # @!method initialize(by_bandwidth:, by_requests:) + # Top HTTP referrers by traffic. + # + # @param by_bandwidth [Array] Top HTTP referrers sorted by bandwidth utilized. + # + # @param by_requests [Array] Top HTTP referrers sorted by request count. + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute name + # Referrer URL. + # + # @return [String] + required :name, String + + # @!method initialize(name:) + # @param name [String] Referrer URL. + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute name + # Referrer URL. + # + # @return [String] + required :name, String + + # @!method initialize(name:) + # @param name [String] Referrer URL. + end + end + + # @see Imagekitio::Models::Accounts::UsageAnalyticsResponse#top_user_agents + class TopUserAgents < Imagekitio::Internal::Type::BaseModel + # @!attribute by_bandwidth + # Top user agents sorted by bandwidth utilized. + # + # @return [Array] + required :by_bandwidth, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents::ByBandwidth] + }, + api_name: :byBandwidth + + # @!attribute by_requests + # Top user agents sorted by request count. + # + # @return [Array] + required :by_requests, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents::ByRequest] + }, + api_name: :byRequests + + # @!method initialize(by_bandwidth:, by_requests:) + # Top user agents by traffic. + # + # @param by_bandwidth [Array] Top user agents sorted by bandwidth utilized. + # + # @param by_requests [Array] Top user agents sorted by request count. + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute name + # User agent string. + # + # @return [String] + required :name, String + + # @!method initialize(name:) + # @param name [String] User agent string. + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute name + # User agent string. + # + # @return [String] + required :name, String + + # @!method initialize(name:) + # @param name [String] User agent string. + end + end + + # @see Imagekitio::Models::Accounts::UsageAnalyticsResponse#top_videos + class TopVideos < Imagekitio::Internal::Type::BaseModel + # @!attribute by_bandwidth + # Top video assets sorted by bandwidth utilized. + # + # @return [Array] + required :by_bandwidth, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos::ByBandwidth] + }, + api_name: :byBandwidth + + # @!attribute by_requests + # Top video assets sorted by request count. + # + # @return [Array] + required :by_requests, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos::ByRequest] + }, + api_name: :byRequests + + # @!method initialize(by_bandwidth:, by_requests:) + # Top video assets by traffic. + # + # @param by_bandwidth [Array] Top video assets sorted by bandwidth utilized. + # + # @param by_requests [Array] Top video assets sorted by request count. + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute name + # URL of the video asset. + # + # @return [String] + required :name, String + + # @!method initialize(name:) + # @param name [String] URL of the video asset. + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute name + # Full URL of the video asset (e.g. `https://ik.imagekit.io/demo/clip.mp4`). + # + # @return [String] + required :name, String + + # @!method initialize(name:) + # @param name [String] Full URL of the video asset (e.g. `https://ik.imagekit.io/demo/clip.mp4`). + end + end + + # @see Imagekitio::Models::Accounts::UsageAnalyticsResponse#top_video_transforms + class TopVideoTransforms < Imagekitio::Internal::Type::BaseModel + # @!attribute by_bandwidth + # Top video transformation strings sorted by bandwidth utilized. + # + # @return [Array] + required :by_bandwidth, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms::ByBandwidth] + }, + api_name: :byBandwidth + + # @!attribute by_requests + # Top video transformation strings sorted by request count. + # + # @return [Array] + required :by_requests, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms::ByRequest] + }, + api_name: :byRequests + + # @!method initialize(by_bandwidth:, by_requests:) + # Top video transformation strings by traffic. + # + # @param by_bandwidth [Array] Top video transformation strings sorted by bandwidth utilized. + # + # @param by_requests [Array] Top video transformation strings sorted by request count. + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute name + # Video transformation string (e.g. `tr:h-720,f-mp4`). + # + # @return [String] + required :name, String + + # @!method initialize(name:) + # @param name [String] Video transformation string (e.g. `tr:h-720,f-mp4`). + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute name + # Video transformation string (e.g. `tr:h-720,f-mp4`). + # + # @return [String] + required :name, String + + # @!method initialize(name:) + # @param name [String] Video transformation string (e.g. `tr:h-720,f-mp4`). + end + end + + # @see Imagekitio::Models::Accounts::UsageAnalyticsResponse#url_endpoints + class URLEndpoints < Imagekitio::Internal::Type::BaseModel + # @!attribute by_bandwidth + # Top URL endpoints sorted by bandwidth utilized. + # + # @return [Array] + required :by_bandwidth, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints::ByBandwidth] + }, + api_name: :byBandwidth + + # @!attribute by_requests + # Top URL endpoints sorted by request count. + # + # @return [Array] + required :by_requests, + -> { + Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints::ByRequest] + }, + api_name: :byRequests + + # @!method initialize(by_bandwidth:, by_requests:) + # CDN traffic grouped by configured URL endpoint. Traffic that does not match any + # named URL endpoint pattern is grouped under `Default`. + # + # @param by_bandwidth [Array] Top URL endpoints sorted by bandwidth utilized. + # + # @param by_requests [Array] Top URL endpoints sorted by request count. + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute name + # URL endpoint name, or `Default` for traffic that does not match a named + # endpoint. + # + # @return [String] + required :name, String + + # @!method initialize(name:) + # Some parameter documentations has been truncated, see + # {Imagekitio::Models::Accounts::UsageAnalyticsResponse::URLEndpoints::ByBandwidth} + # for more details. + # + # @param name [String] URL endpoint name, or `Default` for traffic that does not match a named endpoint + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + # @!attribute name + # URL endpoint name, or `Default` for traffic that does not match a named + # endpoint. + # + # @return [String] + required :name, String + + # @!method initialize(name:) + # Some parameter documentations has been truncated, see + # {Imagekitio::Models::Accounts::UsageAnalyticsResponse::URLEndpoints::ByRequest} + # for more details. + # + # @param name [String] URL endpoint name, or `Default` for traffic that does not match a named endpoint + end + end + + class VideoProcessing < Imagekitio::Internal::Type::BaseModel + # @!attribute codec + # Video codec used for the output (e.g. `h264`, `av1`). + # + # @return [String] + required :codec, String + + # @!attribute duration_seconds + # Total output duration, in seconds, for this resolution and codec combination. + # + # @return [Float] + required :duration_seconds, Float, api_name: :durationSeconds + + # @!attribute resolution + # Output resolution tier (e.g. `SD`, `HD`, `4K`). + # + # @return [String] + required :resolution, String + + # @!method initialize(codec:, duration_seconds:, resolution:) + # @param codec [String] Video codec used for the output (e.g. `h264`, `av1`). + # + # @param duration_seconds [Float] Total output duration, in seconds, for this resolution and codec combination. + # + # @param resolution [String] Output resolution tier (e.g. `SD`, `HD`, `4K`). + end + end + end + end +end diff --git a/lib/imagekitio/resources/accounts.rb b/lib/imagekitio/resources/accounts.rb index 54395573..342f4ea7 100644 --- a/lib/imagekitio/resources/accounts.rb +++ b/lib/imagekitio/resources/accounts.rb @@ -6,6 +6,9 @@ class Accounts # @return [Imagekitio::Resources::Accounts::Usage] attr_reader :usage + # @return [Imagekitio::Resources::Accounts::UsageAnalytics] + attr_reader :usage_analytics + # @return [Imagekitio::Resources::Accounts::Origins] attr_reader :origins @@ -18,6 +21,7 @@ class Accounts def initialize(client:) @client = client @usage = Imagekitio::Resources::Accounts::Usage.new(client: client) + @usage_analytics = Imagekitio::Resources::Accounts::UsageAnalytics.new(client: client) @origins = Imagekitio::Resources::Accounts::Origins.new(client: client) @url_endpoints = Imagekitio::Resources::Accounts::URLEndpoints.new(client: client) end diff --git a/lib/imagekitio/resources/accounts/usage.rb b/lib/imagekitio/resources/accounts/usage.rb index bbb3fc36..c64c4934 100644 --- a/lib/imagekitio/resources/accounts/usage.rb +++ b/lib/imagekitio/resources/accounts/usage.rb @@ -12,6 +12,12 @@ class Usage # other words, the data covers the period starting from the specified start date # up to, but not including, the end date. # + # For an agency account, the returned usage is aggregated across the agency and + # all of its child accounts that are billed to it. + # + # The response is cached for 6 hours per account, date range and requested + # metrics. + # # @overload get(end_date:, start_date:, request_options: {}) # # @param end_date [Date] Specify a `endDate` in `YYYY-MM-DD` format. It should be after the `startDate`. diff --git a/lib/imagekitio/resources/accounts/usage_analytics.rb b/lib/imagekitio/resources/accounts/usage_analytics.rb new file mode 100644 index 00000000..2bb311fc --- /dev/null +++ b/lib/imagekitio/resources/accounts/usage_analytics.rb @@ -0,0 +1,55 @@ +# frozen_string_literal: true + +module Imagekitio + module Resources + class Accounts + class UsageAnalytics + # Some parameter documentations has been truncated, see + # {Imagekitio::Models::Accounts::UsageAnalyticsGetParams} for more details. + # + # **Note:** This API is currently in beta. + # + # Get the account analytics data between two dates. The response covers the period + # from the start date to the end date, both dates inclusive. Both dates are + # interpreted as UTC calendar days. + # + # The returned data is scoped to the requesting account only. Unlike + # `/v1/accounts/usage`, an agency account's analytics are not aggregated across + # its child accounts. + # + # The response is cached for 5 minutes per account and date range. Use + # `generatedAt` to check how fresh the returned data is. + # + # @overload get(end_date:, start_date:, request_options: {}) + # + # @param end_date [Date] Specify an `endDate` in `YYYY-MM-DD` format, interpreted as a UTC calendar day. + # + # @param start_date [Date] Specify a `startDate` in `YYYY-MM-DD` format, interpreted as a UTC calendar day. + # + # @param request_options [Imagekitio::RequestOptions, Hash{Symbol=>Object}, nil] + # + # @return [Imagekitio::Models::Accounts::UsageAnalyticsResponse] + # + # @see Imagekitio::Models::Accounts::UsageAnalyticsGetParams + def get(params) + parsed, options = Imagekitio::Accounts::UsageAnalyticsGetParams.dump_request(params) + query = Imagekitio::Internal::Util.encode_query_params(parsed) + @client.request( + method: :get, + path: "v1/accounts/usage-analytics", + query: query.transform_keys(end_date: "endDate", start_date: "startDate"), + model: Imagekitio::Accounts::UsageAnalyticsResponse, + options: options + ) + end + + # @api private + # + # @param client [Imagekitio::Client] + def initialize(client:) + @client = client + end + end + end + end +end diff --git a/rbi/imagekitio/models/accounts/request_bandwidth_entry.rbi b/rbi/imagekitio/models/accounts/request_bandwidth_entry.rbi new file mode 100644 index 00000000..47597761 --- /dev/null +++ b/rbi/imagekitio/models/accounts/request_bandwidth_entry.rbi @@ -0,0 +1,44 @@ +# typed: strong + +module Imagekitio + module Models + module Accounts + class RequestBandwidthEntry < Imagekitio::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::RequestBandwidthEntry, + Imagekitio::Internal::AnyHash + ) + end + + # Total bandwidth used in bytes. + sig { returns(Float) } + attr_accessor :bandwidth_bytes + + # Number of requests. + sig { returns(Float) } + attr_accessor :request_count + + sig do + params(bandwidth_bytes: Float, request_count: Float).returns( + T.attached_class + ) + end + def self.new( + # Total bandwidth used in bytes. + bandwidth_bytes:, + # Number of requests. + request_count: + ) + end + + sig do + override.returns({ bandwidth_bytes: Float, request_count: Float }) + end + def to_hash + end + end + end + end +end diff --git a/rbi/imagekitio/models/accounts/usage_analytics_get_params.rbi b/rbi/imagekitio/models/accounts/usage_analytics_get_params.rbi new file mode 100644 index 00000000..99d0cb7f --- /dev/null +++ b/rbi/imagekitio/models/accounts/usage_analytics_get_params.rbi @@ -0,0 +1,64 @@ +# typed: strong + +module Imagekitio + module Models + module Accounts + class UsageAnalyticsGetParams < Imagekitio::Internal::Type::BaseModel + extend Imagekitio::Internal::Type::RequestParameters::Converter + include Imagekitio::Internal::Type::RequestParameters + + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsGetParams, + Imagekitio::Internal::AnyHash + ) + end + + # Specify an `endDate` in `YYYY-MM-DD` format, interpreted as a UTC calendar day. + # It should be after the `startDate`. The difference between `startDate` and + # `endDate` should be less than 90 days. + sig { returns(Date) } + attr_accessor :end_date + + # Specify a `startDate` in `YYYY-MM-DD` format, interpreted as a UTC calendar day. + # It should be before the `endDate`. The difference between `startDate` and + # `endDate` should be less than 90 days. + sig { returns(Date) } + attr_accessor :start_date + + sig do + params( + end_date: Date, + start_date: Date, + request_options: Imagekitio::RequestOptions::OrHash + ).returns(T.attached_class) + end + def self.new( + # Specify an `endDate` in `YYYY-MM-DD` format, interpreted as a UTC calendar day. + # It should be after the `startDate`. The difference between `startDate` and + # `endDate` should be less than 90 days. + end_date:, + # Specify a `startDate` in `YYYY-MM-DD` format, interpreted as a UTC calendar day. + # It should be before the `endDate`. The difference between `startDate` and + # `endDate` should be less than 90 days. + start_date:, + request_options: {} + ) + end + + sig do + override.returns( + { + end_date: Date, + start_date: Date, + request_options: Imagekitio::RequestOptions + } + ) + end + def to_hash + end + end + end + end +end diff --git a/rbi/imagekitio/models/accounts/usage_analytics_response.rbi b/rbi/imagekitio/models/accounts/usage_analytics_response.rbi new file mode 100644 index 00000000..e1241f66 --- /dev/null +++ b/rbi/imagekitio/models/accounts/usage_analytics_response.rbi @@ -0,0 +1,2097 @@ +# typed: strong + +module Imagekitio + module Models + module Accounts + class UsageAnalyticsResponse < Imagekitio::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse, + Imagekitio::Internal::AnyHash + ) + end + + # Total bandwidth, in bytes, utilized during the specified date range. + sig { returns(Float) } + attr_accessor :bandwidth_bytes + + # CDN traffic grouped by browser. + sig { returns(Imagekitio::Accounts::UsageAnalyticsResponse::Browser) } + attr_reader :browser + + sig do + params( + browser: + Imagekitio::Accounts::UsageAnalyticsResponse::Browser::OrHash + ).void + end + attr_writer :browser + + # CDN cache hit, miss and error counts for the date range. + sig { returns(Imagekitio::Accounts::UsageAnalyticsResponse::Cache) } + attr_reader :cache + + sig do + params( + cache: Imagekitio::Accounts::UsageAnalyticsResponse::Cache::OrHash + ).void + end + attr_writer :cache + + # CDN traffic grouped by country. + sig { returns(Imagekitio::Accounts::UsageAnalyticsResponse::Country) } + attr_reader :country + + sig do + params( + country: + Imagekitio::Accounts::UsageAnalyticsResponse::Country::OrHash + ).void + end + attr_writer :country + + # CDN traffic grouped by device and operating system (e.g. `Desktop - Apple Mac`, + # `Smartphone - Apple iPhone`). + sig { returns(Imagekitio::Accounts::UsageAnalyticsResponse::Device) } + attr_reader :device + + sig do + params( + device: Imagekitio::Accounts::UsageAnalyticsResponse::Device::OrHash + ).void + end + attr_writer :device + + # End date of the computed analytics data. + sig { returns(Date) } + attr_accessor :end_date + + # Request count grouped by origin error reason. This covers failed origin fetches, + # such as an asset not found at origin or an origin timeout. It is not the HTTP + # status code returned to the client, see `statusCodes` for that. + sig do + returns( + T::Array[Imagekitio::Accounts::UsageAnalyticsResponse::ErrorReason] + ) + end + attr_accessor :error_reasons + + # Raw per-extension operation counts for the date range. These are raw operation + # counts, not billable extension units. For billable usage, use the + # `/v1/accounts/usage` endpoint. + sig do + returns( + T::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Extension] + ) + end + attr_accessor :extensions + + # CDN traffic grouped by response `Content-Type`. + sig { returns(Imagekitio::Accounts::UsageAnalyticsResponse::Format) } + attr_reader :format_ + + sig do + params( + format_: + Imagekitio::Accounts::UsageAnalyticsResponse::Format::OrHash + ).void + end + attr_writer :format_ + + # Date and time when the analytics data was computed. Use this to gauge how fresh + # the returned data is. The date and time is in ISO8601 format. + sig { returns(Time) } + attr_accessor :generated_at + + # Total number of requests made during the specified date range. + sig { returns(Float) } + attr_accessor :request_count + + # Start date of the computed analytics data. + sig { returns(Date) } + attr_accessor :start_date + + # Request count grouped by HTTP status code. + sig do + returns( + T::Array[Imagekitio::Accounts::UsageAnalyticsResponse::StatusCode] + ) + end + attr_accessor :status_codes + + # Top URLs that returned a 404 response. + sig do + returns( + T::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Top404Asset] + ) + end + attr_accessor :top404_assets + + # Top image assets by traffic. + sig { returns(Imagekitio::Accounts::UsageAnalyticsResponse::TopImages) } + attr_reader :top_images + + sig do + params( + top_images: + Imagekitio::Accounts::UsageAnalyticsResponse::TopImages::OrHash + ).void + end + attr_writer :top_images + + # Top image transformation strings by traffic. + sig do + returns( + Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms + ) + end + attr_reader :top_image_transforms + + sig do + params( + top_image_transforms: + Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms::OrHash + ).void + end + attr_writer :top_image_transforms + + # Top non-image, non-video assets by traffic. + sig do + returns(Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets) + end + attr_reader :top_other_assets + + sig do + params( + top_other_assets: + Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets::OrHash + ).void + end + attr_writer :top_other_assets + + # Top HTTP referrers by traffic. + sig do + returns(Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers) + end + attr_reader :top_referrers + + sig do + params( + top_referrers: + Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers::OrHash + ).void + end + attr_writer :top_referrers + + # Top user agents by traffic. + sig do + returns(Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents) + end + attr_reader :top_user_agents + + sig do + params( + top_user_agents: + Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents::OrHash + ).void + end + attr_writer :top_user_agents + + # Top video assets by traffic. + sig { returns(Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos) } + attr_reader :top_videos + + sig do + params( + top_videos: + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos::OrHash + ).void + end + attr_writer :top_videos + + # Top video transformation strings by traffic. + sig do + returns( + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms + ) + end + attr_reader :top_video_transforms + + sig do + params( + top_video_transforms: + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms::OrHash + ).void + end + attr_writer :top_video_transforms + + # CDN traffic grouped by configured URL endpoint. Traffic that does not match any + # named URL endpoint pattern is grouped under `Default`. + sig do + returns(Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints) + end + attr_reader :url_endpoints + + sig do + params( + url_endpoints: + Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints::OrHash + ).void + end + attr_writer :url_endpoints + + # Raw observed video transcode output duration, in seconds, grouped by resolution + # and codec. These are raw seconds, not billable Video Processing Units (VPU). For + # billable VPU totals, use the `/v1/accounts/usage` endpoint. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::VideoProcessing + ] + ) + end + attr_accessor :video_processing + + sig do + params( + bandwidth_bytes: Float, + browser: + Imagekitio::Accounts::UsageAnalyticsResponse::Browser::OrHash, + cache: Imagekitio::Accounts::UsageAnalyticsResponse::Cache::OrHash, + country: + Imagekitio::Accounts::UsageAnalyticsResponse::Country::OrHash, + device: + Imagekitio::Accounts::UsageAnalyticsResponse::Device::OrHash, + end_date: Date, + error_reasons: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::ErrorReason::OrHash + ], + extensions: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Extension::OrHash + ], + format_: + Imagekitio::Accounts::UsageAnalyticsResponse::Format::OrHash, + generated_at: Time, + request_count: Float, + start_date: Date, + status_codes: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::StatusCode::OrHash + ], + top404_assets: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Top404Asset::OrHash + ], + top_images: + Imagekitio::Accounts::UsageAnalyticsResponse::TopImages::OrHash, + top_image_transforms: + Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms::OrHash, + top_other_assets: + Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets::OrHash, + top_referrers: + Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers::OrHash, + top_user_agents: + Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents::OrHash, + top_videos: + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos::OrHash, + top_video_transforms: + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms::OrHash, + url_endpoints: + Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints::OrHash, + video_processing: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::VideoProcessing::OrHash + ] + ).returns(T.attached_class) + end + def self.new( + # Total bandwidth, in bytes, utilized during the specified date range. + bandwidth_bytes:, + # CDN traffic grouped by browser. + browser:, + # CDN cache hit, miss and error counts for the date range. + cache:, + # CDN traffic grouped by country. + country:, + # CDN traffic grouped by device and operating system (e.g. `Desktop - Apple Mac`, + # `Smartphone - Apple iPhone`). + device:, + # End date of the computed analytics data. + end_date:, + # Request count grouped by origin error reason. This covers failed origin fetches, + # such as an asset not found at origin or an origin timeout. It is not the HTTP + # status code returned to the client, see `statusCodes` for that. + error_reasons:, + # Raw per-extension operation counts for the date range. These are raw operation + # counts, not billable extension units. For billable usage, use the + # `/v1/accounts/usage` endpoint. + extensions:, + # CDN traffic grouped by response `Content-Type`. + format_:, + # Date and time when the analytics data was computed. Use this to gauge how fresh + # the returned data is. The date and time is in ISO8601 format. + generated_at:, + # Total number of requests made during the specified date range. + request_count:, + # Start date of the computed analytics data. + start_date:, + # Request count grouped by HTTP status code. + status_codes:, + # Top URLs that returned a 404 response. + top404_assets:, + # Top image assets by traffic. + top_images:, + # Top image transformation strings by traffic. + top_image_transforms:, + # Top non-image, non-video assets by traffic. + top_other_assets:, + # Top HTTP referrers by traffic. + top_referrers:, + # Top user agents by traffic. + top_user_agents:, + # Top video assets by traffic. + top_videos:, + # Top video transformation strings by traffic. + top_video_transforms:, + # CDN traffic grouped by configured URL endpoint. Traffic that does not match any + # named URL endpoint pattern is grouped under `Default`. + url_endpoints:, + # Raw observed video transcode output duration, in seconds, grouped by resolution + # and codec. These are raw seconds, not billable Video Processing Units (VPU). For + # billable VPU totals, use the `/v1/accounts/usage` endpoint. + video_processing: + ) + end + + sig do + override.returns( + { + bandwidth_bytes: Float, + browser: Imagekitio::Accounts::UsageAnalyticsResponse::Browser, + cache: Imagekitio::Accounts::UsageAnalyticsResponse::Cache, + country: Imagekitio::Accounts::UsageAnalyticsResponse::Country, + device: Imagekitio::Accounts::UsageAnalyticsResponse::Device, + end_date: Date, + error_reasons: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::ErrorReason + ], + extensions: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Extension + ], + format_: Imagekitio::Accounts::UsageAnalyticsResponse::Format, + generated_at: Time, + request_count: Float, + start_date: Date, + status_codes: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::StatusCode + ], + top404_assets: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Top404Asset + ], + top_images: + Imagekitio::Accounts::UsageAnalyticsResponse::TopImages, + top_image_transforms: + Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms, + top_other_assets: + Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets, + top_referrers: + Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers, + top_user_agents: + Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents, + top_videos: + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos, + top_video_transforms: + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms, + url_endpoints: + Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints, + video_processing: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::VideoProcessing + ] + } + ) + end + def to_hash + end + + class Browser < Imagekitio::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::Browser, + Imagekitio::Internal::AnyHash + ) + end + + # Top browsers sorted by bandwidth utilized. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Browser::ByBandwidth + ] + ) + end + attr_accessor :by_bandwidth + + # Top browsers sorted by request count. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Browser::ByRequest + ] + ) + end + attr_accessor :by_requests + + # CDN traffic grouped by browser. + sig do + params( + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Browser::ByBandwidth::OrHash + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Browser::ByRequest::OrHash + ] + ).returns(T.attached_class) + end + def self.new( + # Top browsers sorted by bandwidth utilized. + by_bandwidth:, + # Top browsers sorted by request count. + by_requests: + ) + end + + sig do + override.returns( + { + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Browser::ByBandwidth + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Browser::ByRequest + ] + } + ) + end + def to_hash + end + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::Browser::ByBandwidth, + Imagekitio::Internal::AnyHash + ) + end + + # Browser name (e.g. `Chrome`). + sig { returns(String) } + attr_accessor :name + + sig { params(name: String).returns(T.attached_class) } + def self.new( + # Browser name (e.g. `Chrome`). + name: + ) + end + + sig { override.returns({ name: String }) } + def to_hash + end + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::Browser::ByRequest, + Imagekitio::Internal::AnyHash + ) + end + + # Browser name (e.g. `Chrome`). + sig { returns(String) } + attr_accessor :name + + sig { params(name: String).returns(T.attached_class) } + def self.new( + # Browser name (e.g. `Chrome`). + name: + ) + end + + sig { override.returns({ name: String }) } + def to_hash + end + end + end + + class Cache < Imagekitio::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::Cache, + Imagekitio::Internal::AnyHash + ) + end + + # Number of requests where the CDN encountered a cache error or exceeded capacity + # while serving the response. + sig { returns(Float) } + attr_accessor :error_count + + # Number of requests served from cache, including full hits and revalidated hits. + sig { returns(Float) } + attr_accessor :hit_count + + # Number of requests that were not found in cache and had to be fetched from + # origin. + sig { returns(Float) } + attr_accessor :miss_count + + # CDN cache hit, miss and error counts for the date range. + sig do + params( + error_count: Float, + hit_count: Float, + miss_count: Float + ).returns(T.attached_class) + end + def self.new( + # Number of requests where the CDN encountered a cache error or exceeded capacity + # while serving the response. + error_count:, + # Number of requests served from cache, including full hits and revalidated hits. + hit_count:, + # Number of requests that were not found in cache and had to be fetched from + # origin. + miss_count: + ) + end + + sig do + override.returns( + { error_count: Float, hit_count: Float, miss_count: Float } + ) + end + def to_hash + end + end + + class Country < Imagekitio::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::Country, + Imagekitio::Internal::AnyHash + ) + end + + # Top requesting countries sorted by total bandwidth utilized. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Country::ByBandwidth + ] + ) + end + attr_accessor :by_bandwidth + + # Top requesting countries sorted by request count. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Country::ByRequest + ] + ) + end + attr_accessor :by_requests + + # CDN traffic grouped by country. + sig do + params( + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Country::ByBandwidth::OrHash + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Country::ByRequest::OrHash + ] + ).returns(T.attached_class) + end + def self.new( + # Top requesting countries sorted by total bandwidth utilized. + by_bandwidth:, + # Top requesting countries sorted by request count. + by_requests: + ) + end + + sig do + override.returns( + { + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Country::ByBandwidth + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Country::ByRequest + ] + } + ) + end + def to_hash + end + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::Country::ByBandwidth, + Imagekitio::Internal::AnyHash + ) + end + + # ISO country code. + sig { returns(String) } + attr_accessor :code + + # Country name. + sig { returns(String) } + attr_accessor :name + + sig { params(code: String, name: String).returns(T.attached_class) } + def self.new( + # ISO country code. + code:, + # Country name. + name: + ) + end + + sig { override.returns({ code: String, name: String }) } + def to_hash + end + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::Country::ByRequest, + Imagekitio::Internal::AnyHash + ) + end + + # ISO country code. + sig { returns(String) } + attr_accessor :code + + # Country name. + sig { returns(String) } + attr_accessor :name + + sig { params(code: String, name: String).returns(T.attached_class) } + def self.new( + # ISO country code. + code:, + # Country name. + name: + ) + end + + sig { override.returns({ code: String, name: String }) } + def to_hash + end + end + end + + class Device < Imagekitio::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::Device, + Imagekitio::Internal::AnyHash + ) + end + + # Top device/OS combinations sorted by bandwidth utilized. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Device::ByBandwidth + ] + ) + end + attr_accessor :by_bandwidth + + # Top device/OS combinations sorted by request count. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Device::ByRequest + ] + ) + end + attr_accessor :by_requests + + # CDN traffic grouped by device and operating system (e.g. `Desktop - Apple Mac`, + # `Smartphone - Apple iPhone`). + sig do + params( + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Device::ByBandwidth::OrHash + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Device::ByRequest::OrHash + ] + ).returns(T.attached_class) + end + def self.new( + # Top device/OS combinations sorted by bandwidth utilized. + by_bandwidth:, + # Top device/OS combinations sorted by request count. + by_requests: + ) + end + + sig do + override.returns( + { + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Device::ByBandwidth + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Device::ByRequest + ] + } + ) + end + def to_hash + end + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::Device::ByBandwidth, + Imagekitio::Internal::AnyHash + ) + end + + # Device category combined with operating system or vendor (e.g. + # `Desktop - Windows PC`). + sig { returns(String) } + attr_accessor :name + + sig { params(name: String).returns(T.attached_class) } + def self.new( + # Device category combined with operating system or vendor (e.g. + # `Desktop - Windows PC`). + name: + ) + end + + sig { override.returns({ name: String }) } + def to_hash + end + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::Device::ByRequest, + Imagekitio::Internal::AnyHash + ) + end + + # Device category combined with operating system or vendor (e.g. + # `Desktop - Windows PC`). + sig { returns(String) } + attr_accessor :name + + sig { params(name: String).returns(T.attached_class) } + def self.new( + # Device category combined with operating system or vendor (e.g. + # `Desktop - Windows PC`). + name: + ) + end + + sig { override.returns({ name: String }) } + def to_hash + end + end + end + + class ErrorReason < Imagekitio::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::ErrorReason, + Imagekitio::Internal::AnyHash + ) + end + + # Description of the error reason. + sig { returns(String) } + attr_accessor :name + + # Number of requests that failed with this error reason. + sig { returns(Float) } + attr_accessor :request_count + + sig do + params(name: String, request_count: Float).returns(T.attached_class) + end + def self.new( + # Description of the error reason. + name:, + # Number of requests that failed with this error reason. + request_count: + ) + end + + sig { override.returns({ name: String, request_count: Float }) } + def to_hash + end + end + + class Extension < Imagekitio::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::Extension, + Imagekitio::Internal::AnyHash + ) + end + + # Extension identifier. + sig { returns(String) } + attr_accessor :name + + # Number of times this extension ran during the date range. + sig { returns(Float) } + attr_accessor :operation_count + + sig do + params(name: String, operation_count: Float).returns( + T.attached_class + ) + end + def self.new( + # Extension identifier. + name:, + # Number of times this extension ran during the date range. + operation_count: + ) + end + + sig { override.returns({ name: String, operation_count: Float }) } + def to_hash + end + end + + class Format < Imagekitio::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::Format, + Imagekitio::Internal::AnyHash + ) + end + + # Top content types sorted by bandwidth utilized. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Format::ByBandwidth + ] + ) + end + attr_accessor :by_bandwidth + + # Top content types sorted by request count. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Format::ByRequest + ] + ) + end + attr_accessor :by_requests + + # CDN traffic grouped by response `Content-Type`. + sig do + params( + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Format::ByBandwidth::OrHash + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Format::ByRequest::OrHash + ] + ).returns(T.attached_class) + end + def self.new( + # Top content types sorted by bandwidth utilized. + by_bandwidth:, + # Top content types sorted by request count. + by_requests: + ) + end + + sig do + override.returns( + { + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Format::ByBandwidth + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::Format::ByRequest + ] + } + ) + end + def to_hash + end + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::Format::ByBandwidth, + Imagekitio::Internal::AnyHash + ) + end + + # MIME type (e.g. `image/webp`). + sig { returns(String) } + attr_accessor :name + + sig { params(name: String).returns(T.attached_class) } + def self.new( + # MIME type (e.g. `image/webp`). + name: + ) + end + + sig { override.returns({ name: String }) } + def to_hash + end + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::Format::ByRequest, + Imagekitio::Internal::AnyHash + ) + end + + # MIME type (e.g. `image/webp`). + sig { returns(String) } + attr_accessor :name + + sig { params(name: String).returns(T.attached_class) } + def self.new( + # MIME type (e.g. `image/webp`). + name: + ) + end + + sig { override.returns({ name: String }) } + def to_hash + end + end + end + + class StatusCode < Imagekitio::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::StatusCode, + Imagekitio::Internal::AnyHash + ) + end + + # HTTP status code. + sig { returns(String) } + attr_accessor :name + + # Number of requests that received this status code. + sig { returns(Float) } + attr_accessor :request_count + + sig do + params(name: String, request_count: Float).returns(T.attached_class) + end + def self.new( + # HTTP status code. + name:, + # Number of requests that received this status code. + request_count: + ) + end + + sig { override.returns({ name: String, request_count: Float }) } + def to_hash + end + end + + class Top404Asset < Imagekitio::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::Top404Asset, + Imagekitio::Internal::AnyHash + ) + end + + # URL that returned a 404 response. + sig { returns(String) } + attr_accessor :name + + # Number of requests to this URL that returned a 404 response. + sig { returns(Float) } + attr_accessor :request_count + + sig do + params(name: String, request_count: Float).returns(T.attached_class) + end + def self.new( + # URL that returned a 404 response. + name:, + # Number of requests to this URL that returned a 404 response. + request_count: + ) + end + + sig { override.returns({ name: String, request_count: Float }) } + def to_hash + end + end + + class TopImages < Imagekitio::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::TopImages, + Imagekitio::Internal::AnyHash + ) + end + + # Top image assets sorted by bandwidth utilized. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopImages::ByBandwidth + ] + ) + end + attr_accessor :by_bandwidth + + # Top image assets sorted by request count. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopImages::ByRequest + ] + ) + end + attr_accessor :by_requests + + # Top image assets by traffic. + sig do + params( + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopImages::ByBandwidth::OrHash + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopImages::ByRequest::OrHash + ] + ).returns(T.attached_class) + end + def self.new( + # Top image assets sorted by bandwidth utilized. + by_bandwidth:, + # Top image assets sorted by request count. + by_requests: + ) + end + + sig do + override.returns( + { + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopImages::ByBandwidth + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopImages::ByRequest + ] + } + ) + end + def to_hash + end + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::TopImages::ByBandwidth, + Imagekitio::Internal::AnyHash + ) + end + + # URL of the image asset. + sig { returns(String) } + attr_accessor :name + + sig { params(name: String).returns(T.attached_class) } + def self.new( + # URL of the image asset. + name: + ) + end + + sig { override.returns({ name: String }) } + def to_hash + end + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::TopImages::ByRequest, + Imagekitio::Internal::AnyHash + ) + end + + # URL of the image asset. + sig { returns(String) } + attr_accessor :name + + sig { params(name: String).returns(T.attached_class) } + def self.new( + # URL of the image asset. + name: + ) + end + + sig { override.returns({ name: String }) } + def to_hash + end + end + end + + class TopImageTransforms < Imagekitio::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms, + Imagekitio::Internal::AnyHash + ) + end + + # Top image transformation strings sorted by bandwidth utilized. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms::ByBandwidth + ] + ) + end + attr_accessor :by_bandwidth + + # Top image transformation strings sorted by request count. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms::ByRequest + ] + ) + end + attr_accessor :by_requests + + # Top image transformation strings by traffic. + sig do + params( + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms::ByBandwidth::OrHash + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms::ByRequest::OrHash + ] + ).returns(T.attached_class) + end + def self.new( + # Top image transformation strings sorted by bandwidth utilized. + by_bandwidth:, + # Top image transformation strings sorted by request count. + by_requests: + ) + end + + sig do + override.returns( + { + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms::ByBandwidth + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms::ByRequest + ] + } + ) + end + def to_hash + end + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms::ByBandwidth, + Imagekitio::Internal::AnyHash + ) + end + + # Image transformation string (e.g. `tr:w-400,h-400`). + sig { returns(String) } + attr_accessor :name + + sig { params(name: String).returns(T.attached_class) } + def self.new( + # Image transformation string (e.g. `tr:w-400,h-400`). + name: + ) + end + + sig { override.returns({ name: String }) } + def to_hash + end + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms::ByRequest, + Imagekitio::Internal::AnyHash + ) + end + + # Image transformation string (e.g. `tr:w-400,h-400`). + sig { returns(String) } + attr_accessor :name + + sig { params(name: String).returns(T.attached_class) } + def self.new( + # Image transformation string (e.g. `tr:w-400,h-400`). + name: + ) + end + + sig { override.returns({ name: String }) } + def to_hash + end + end + end + + class TopOtherAssets < Imagekitio::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets, + Imagekitio::Internal::AnyHash + ) + end + + # Top non-image, non-video assets sorted by bandwidth utilized. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets::ByBandwidth + ] + ) + end + attr_accessor :by_bandwidth + + # Top non-image, non-video assets sorted by request count. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets::ByRequest + ] + ) + end + attr_accessor :by_requests + + # Top non-image, non-video assets by traffic. + sig do + params( + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets::ByBandwidth::OrHash + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets::ByRequest::OrHash + ] + ).returns(T.attached_class) + end + def self.new( + # Top non-image, non-video assets sorted by bandwidth utilized. + by_bandwidth:, + # Top non-image, non-video assets sorted by request count. + by_requests: + ) + end + + sig do + override.returns( + { + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets::ByBandwidth + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets::ByRequest + ] + } + ) + end + def to_hash + end + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets::ByBandwidth, + Imagekitio::Internal::AnyHash + ) + end + + # URL of the non-image, non-video asset. + sig { returns(String) } + attr_accessor :name + + sig { params(name: String).returns(T.attached_class) } + def self.new( + # URL of the non-image, non-video asset. + name: + ) + end + + sig { override.returns({ name: String }) } + def to_hash + end + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets::ByRequest, + Imagekitio::Internal::AnyHash + ) + end + + # URL of the non-image, non-video asset. + sig { returns(String) } + attr_accessor :name + + sig { params(name: String).returns(T.attached_class) } + def self.new( + # URL of the non-image, non-video asset. + name: + ) + end + + sig { override.returns({ name: String }) } + def to_hash + end + end + end + + class TopReferrers < Imagekitio::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers, + Imagekitio::Internal::AnyHash + ) + end + + # Top HTTP referrers sorted by bandwidth utilized. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers::ByBandwidth + ] + ) + end + attr_accessor :by_bandwidth + + # Top HTTP referrers sorted by request count. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers::ByRequest + ] + ) + end + attr_accessor :by_requests + + # Top HTTP referrers by traffic. + sig do + params( + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers::ByBandwidth::OrHash + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers::ByRequest::OrHash + ] + ).returns(T.attached_class) + end + def self.new( + # Top HTTP referrers sorted by bandwidth utilized. + by_bandwidth:, + # Top HTTP referrers sorted by request count. + by_requests: + ) + end + + sig do + override.returns( + { + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers::ByBandwidth + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers::ByRequest + ] + } + ) + end + def to_hash + end + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers::ByBandwidth, + Imagekitio::Internal::AnyHash + ) + end + + # Referrer URL. + sig { returns(String) } + attr_accessor :name + + sig { params(name: String).returns(T.attached_class) } + def self.new( + # Referrer URL. + name: + ) + end + + sig { override.returns({ name: String }) } + def to_hash + end + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers::ByRequest, + Imagekitio::Internal::AnyHash + ) + end + + # Referrer URL. + sig { returns(String) } + attr_accessor :name + + sig { params(name: String).returns(T.attached_class) } + def self.new( + # Referrer URL. + name: + ) + end + + sig { override.returns({ name: String }) } + def to_hash + end + end + end + + class TopUserAgents < Imagekitio::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents, + Imagekitio::Internal::AnyHash + ) + end + + # Top user agents sorted by bandwidth utilized. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents::ByBandwidth + ] + ) + end + attr_accessor :by_bandwidth + + # Top user agents sorted by request count. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents::ByRequest + ] + ) + end + attr_accessor :by_requests + + # Top user agents by traffic. + sig do + params( + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents::ByBandwidth::OrHash + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents::ByRequest::OrHash + ] + ).returns(T.attached_class) + end + def self.new( + # Top user agents sorted by bandwidth utilized. + by_bandwidth:, + # Top user agents sorted by request count. + by_requests: + ) + end + + sig do + override.returns( + { + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents::ByBandwidth + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents::ByRequest + ] + } + ) + end + def to_hash + end + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents::ByBandwidth, + Imagekitio::Internal::AnyHash + ) + end + + # User agent string. + sig { returns(String) } + attr_accessor :name + + sig { params(name: String).returns(T.attached_class) } + def self.new( + # User agent string. + name: + ) + end + + sig { override.returns({ name: String }) } + def to_hash + end + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents::ByRequest, + Imagekitio::Internal::AnyHash + ) + end + + # User agent string. + sig { returns(String) } + attr_accessor :name + + sig { params(name: String).returns(T.attached_class) } + def self.new( + # User agent string. + name: + ) + end + + sig { override.returns({ name: String }) } + def to_hash + end + end + end + + class TopVideos < Imagekitio::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos, + Imagekitio::Internal::AnyHash + ) + end + + # Top video assets sorted by bandwidth utilized. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos::ByBandwidth + ] + ) + end + attr_accessor :by_bandwidth + + # Top video assets sorted by request count. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos::ByRequest + ] + ) + end + attr_accessor :by_requests + + # Top video assets by traffic. + sig do + params( + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos::ByBandwidth::OrHash + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos::ByRequest::OrHash + ] + ).returns(T.attached_class) + end + def self.new( + # Top video assets sorted by bandwidth utilized. + by_bandwidth:, + # Top video assets sorted by request count. + by_requests: + ) + end + + sig do + override.returns( + { + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos::ByBandwidth + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos::ByRequest + ] + } + ) + end + def to_hash + end + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos::ByBandwidth, + Imagekitio::Internal::AnyHash + ) + end + + # URL of the video asset. + sig { returns(String) } + attr_accessor :name + + sig { params(name: String).returns(T.attached_class) } + def self.new( + # URL of the video asset. + name: + ) + end + + sig { override.returns({ name: String }) } + def to_hash + end + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos::ByRequest, + Imagekitio::Internal::AnyHash + ) + end + + # Full URL of the video asset (e.g. `https://ik.imagekit.io/demo/clip.mp4`). + sig { returns(String) } + attr_accessor :name + + sig { params(name: String).returns(T.attached_class) } + def self.new( + # Full URL of the video asset (e.g. `https://ik.imagekit.io/demo/clip.mp4`). + name: + ) + end + + sig { override.returns({ name: String }) } + def to_hash + end + end + end + + class TopVideoTransforms < Imagekitio::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms, + Imagekitio::Internal::AnyHash + ) + end + + # Top video transformation strings sorted by bandwidth utilized. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms::ByBandwidth + ] + ) + end + attr_accessor :by_bandwidth + + # Top video transformation strings sorted by request count. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms::ByRequest + ] + ) + end + attr_accessor :by_requests + + # Top video transformation strings by traffic. + sig do + params( + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms::ByBandwidth::OrHash + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms::ByRequest::OrHash + ] + ).returns(T.attached_class) + end + def self.new( + # Top video transformation strings sorted by bandwidth utilized. + by_bandwidth:, + # Top video transformation strings sorted by request count. + by_requests: + ) + end + + sig do + override.returns( + { + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms::ByBandwidth + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms::ByRequest + ] + } + ) + end + def to_hash + end + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms::ByBandwidth, + Imagekitio::Internal::AnyHash + ) + end + + # Video transformation string (e.g. `tr:h-720,f-mp4`). + sig { returns(String) } + attr_accessor :name + + sig { params(name: String).returns(T.attached_class) } + def self.new( + # Video transformation string (e.g. `tr:h-720,f-mp4`). + name: + ) + end + + sig { override.returns({ name: String }) } + def to_hash + end + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms::ByRequest, + Imagekitio::Internal::AnyHash + ) + end + + # Video transformation string (e.g. `tr:h-720,f-mp4`). + sig { returns(String) } + attr_accessor :name + + sig { params(name: String).returns(T.attached_class) } + def self.new( + # Video transformation string (e.g. `tr:h-720,f-mp4`). + name: + ) + end + + sig { override.returns({ name: String }) } + def to_hash + end + end + end + + class URLEndpoints < Imagekitio::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints, + Imagekitio::Internal::AnyHash + ) + end + + # Top URL endpoints sorted by bandwidth utilized. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints::ByBandwidth + ] + ) + end + attr_accessor :by_bandwidth + + # Top URL endpoints sorted by request count. + sig do + returns( + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints::ByRequest + ] + ) + end + attr_accessor :by_requests + + # CDN traffic grouped by configured URL endpoint. Traffic that does not match any + # named URL endpoint pattern is grouped under `Default`. + sig do + params( + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints::ByBandwidth::OrHash + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints::ByRequest::OrHash + ] + ).returns(T.attached_class) + end + def self.new( + # Top URL endpoints sorted by bandwidth utilized. + by_bandwidth:, + # Top URL endpoints sorted by request count. + by_requests: + ) + end + + sig do + override.returns( + { + by_bandwidth: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints::ByBandwidth + ], + by_requests: + T::Array[ + Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints::ByRequest + ] + } + ) + end + def to_hash + end + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints::ByBandwidth, + Imagekitio::Internal::AnyHash + ) + end + + # URL endpoint name, or `Default` for traffic that does not match a named + # endpoint. + sig { returns(String) } + attr_accessor :name + + sig { params(name: String).returns(T.attached_class) } + def self.new( + # URL endpoint name, or `Default` for traffic that does not match a named + # endpoint. + name: + ) + end + + sig { override.returns({ name: String }) } + def to_hash + end + end + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints::ByRequest, + Imagekitio::Internal::AnyHash + ) + end + + # URL endpoint name, or `Default` for traffic that does not match a named + # endpoint. + sig { returns(String) } + attr_accessor :name + + sig { params(name: String).returns(T.attached_class) } + def self.new( + # URL endpoint name, or `Default` for traffic that does not match a named + # endpoint. + name: + ) + end + + sig { override.returns({ name: String }) } + def to_hash + end + end + end + + class VideoProcessing < Imagekitio::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + Imagekitio::Accounts::UsageAnalyticsResponse::VideoProcessing, + Imagekitio::Internal::AnyHash + ) + end + + # Video codec used for the output (e.g. `h264`, `av1`). + sig { returns(String) } + attr_accessor :codec + + # Total output duration, in seconds, for this resolution and codec combination. + sig { returns(Float) } + attr_accessor :duration_seconds + + # Output resolution tier (e.g. `SD`, `HD`, `4K`). + sig { returns(String) } + attr_accessor :resolution + + sig do + params( + codec: String, + duration_seconds: Float, + resolution: String + ).returns(T.attached_class) + end + def self.new( + # Video codec used for the output (e.g. `h264`, `av1`). + codec:, + # Total output duration, in seconds, for this resolution and codec combination. + duration_seconds:, + # Output resolution tier (e.g. `SD`, `HD`, `4K`). + resolution: + ) + end + + sig do + override.returns( + { codec: String, duration_seconds: Float, resolution: String } + ) + end + def to_hash + end + end + end + end + end +end diff --git a/rbi/imagekitio/resources/accounts.rbi b/rbi/imagekitio/resources/accounts.rbi index 19a20e7f..e9e93e6b 100644 --- a/rbi/imagekitio/resources/accounts.rbi +++ b/rbi/imagekitio/resources/accounts.rbi @@ -6,6 +6,9 @@ module Imagekitio sig { returns(Imagekitio::Resources::Accounts::Usage) } attr_reader :usage + sig { returns(Imagekitio::Resources::Accounts::UsageAnalytics) } + attr_reader :usage_analytics + sig { returns(Imagekitio::Resources::Accounts::Origins) } attr_reader :origins diff --git a/rbi/imagekitio/resources/accounts/usage.rbi b/rbi/imagekitio/resources/accounts/usage.rbi index 83fb3b2d..3f27aeec 100644 --- a/rbi/imagekitio/resources/accounts/usage.rbi +++ b/rbi/imagekitio/resources/accounts/usage.rbi @@ -8,6 +8,12 @@ module Imagekitio # includes data from the start date while excluding data from the end date. In # other words, the data covers the period starting from the specified start date # up to, but not including, the end date. + # + # For an agency account, the returned usage is aggregated across the agency and + # all of its child accounts that are billed to it. + # + # The response is cached for 6 hours per account, date range and requested + # metrics. sig do params( end_date: Date, diff --git a/rbi/imagekitio/resources/accounts/usage_analytics.rbi b/rbi/imagekitio/resources/accounts/usage_analytics.rbi new file mode 100644 index 00000000..b324f883 --- /dev/null +++ b/rbi/imagekitio/resources/accounts/usage_analytics.rbi @@ -0,0 +1,46 @@ +# typed: strong + +module Imagekitio + module Resources + class Accounts + class UsageAnalytics + # **Note:** This API is currently in beta. + # + # Get the account analytics data between two dates. The response covers the period + # from the start date to the end date, both dates inclusive. Both dates are + # interpreted as UTC calendar days. + # + # The returned data is scoped to the requesting account only. Unlike + # `/v1/accounts/usage`, an agency account's analytics are not aggregated across + # its child accounts. + # + # The response is cached for 5 minutes per account and date range. Use + # `generatedAt` to check how fresh the returned data is. + sig do + params( + end_date: Date, + start_date: Date, + request_options: Imagekitio::RequestOptions::OrHash + ).returns(Imagekitio::Accounts::UsageAnalyticsResponse) + end + def get( + # Specify an `endDate` in `YYYY-MM-DD` format, interpreted as a UTC calendar day. + # It should be after the `startDate`. The difference between `startDate` and + # `endDate` should be less than 90 days. + end_date:, + # Specify a `startDate` in `YYYY-MM-DD` format, interpreted as a UTC calendar day. + # It should be before the `endDate`. The difference between `startDate` and + # `endDate` should be less than 90 days. + start_date:, + request_options: {} + ) + end + + # @api private + sig { params(client: Imagekitio::Client).returns(T.attached_class) } + def self.new(client:) + end + end + end + end +end diff --git a/sig/imagekitio/models/accounts/request_bandwidth_entry.rbs b/sig/imagekitio/models/accounts/request_bandwidth_entry.rbs new file mode 100644 index 00000000..0c8644aa --- /dev/null +++ b/sig/imagekitio/models/accounts/request_bandwidth_entry.rbs @@ -0,0 +1,18 @@ +module Imagekitio + module Models + module Accounts + type request_bandwidth_entry = + { bandwidth_bytes: Float, request_count: Float } + + class RequestBandwidthEntry < Imagekitio::Internal::Type::BaseModel + attr_accessor bandwidth_bytes: Float + + attr_accessor request_count: Float + + def initialize: (bandwidth_bytes: Float, request_count: Float) -> void + + def to_hash: -> { bandwidth_bytes: Float, request_count: Float } + end + end + end +end diff --git a/sig/imagekitio/models/accounts/usage_analytics_get_params.rbs b/sig/imagekitio/models/accounts/usage_analytics_get_params.rbs new file mode 100644 index 00000000..a1db53d7 --- /dev/null +++ b/sig/imagekitio/models/accounts/usage_analytics_get_params.rbs @@ -0,0 +1,30 @@ +module Imagekitio + module Models + module Accounts + type usage_analytics_get_params = + { end_date: Date, start_date: Date } + & Imagekitio::Internal::Type::request_parameters + + class UsageAnalyticsGetParams < Imagekitio::Internal::Type::BaseModel + extend Imagekitio::Internal::Type::RequestParameters::Converter + include Imagekitio::Internal::Type::RequestParameters + + attr_accessor end_date: Date + + attr_accessor start_date: Date + + def initialize: ( + end_date: Date, + start_date: Date, + ?request_options: Imagekitio::request_opts + ) -> void + + def to_hash: -> { + end_date: Date, + start_date: Date, + request_options: Imagekitio::RequestOptions + } + end + end + end +end diff --git a/sig/imagekitio/models/accounts/usage_analytics_response.rbs b/sig/imagekitio/models/accounts/usage_analytics_response.rbs new file mode 100644 index 00000000..6062a30f --- /dev/null +++ b/sig/imagekitio/models/accounts/usage_analytics_response.rbs @@ -0,0 +1,785 @@ +module Imagekitio + module Models + module Accounts + type usage_analytics_response = + { + bandwidth_bytes: Float, + browser: Imagekitio::Accounts::UsageAnalyticsResponse::Browser, + cache: Imagekitio::Accounts::UsageAnalyticsResponse::Cache, + country: Imagekitio::Accounts::UsageAnalyticsResponse::Country, + device: Imagekitio::Accounts::UsageAnalyticsResponse::Device, + end_date: Date, + error_reasons: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::ErrorReason], + extensions: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Extension], + format_: Imagekitio::Accounts::UsageAnalyticsResponse::Format, + generated_at: Time, + request_count: Float, + start_date: Date, + status_codes: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::StatusCode], + :top404_assets => ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Top404Asset], + top_images: Imagekitio::Accounts::UsageAnalyticsResponse::TopImages, + top_image_transforms: Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms, + top_other_assets: Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets, + top_referrers: Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers, + top_user_agents: Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents, + top_videos: Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos, + top_video_transforms: Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms, + url_endpoints: Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints, + video_processing: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::VideoProcessing] + } + + class UsageAnalyticsResponse < Imagekitio::Internal::Type::BaseModel + attr_accessor bandwidth_bytes: Float + + attr_accessor browser: Imagekitio::Accounts::UsageAnalyticsResponse::Browser + + attr_accessor cache: Imagekitio::Accounts::UsageAnalyticsResponse::Cache + + attr_accessor country: Imagekitio::Accounts::UsageAnalyticsResponse::Country + + attr_accessor device: Imagekitio::Accounts::UsageAnalyticsResponse::Device + + attr_accessor end_date: Date + + attr_accessor error_reasons: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::ErrorReason] + + attr_accessor extensions: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Extension] + + attr_accessor format_: Imagekitio::Accounts::UsageAnalyticsResponse::Format + + attr_accessor generated_at: Time + + attr_accessor request_count: Float + + attr_accessor start_date: Date + + attr_accessor status_codes: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::StatusCode] + + attr_accessor top404_assets: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Top404Asset] + + attr_accessor top_images: Imagekitio::Accounts::UsageAnalyticsResponse::TopImages + + attr_accessor top_image_transforms: Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms + + attr_accessor top_other_assets: Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets + + attr_accessor top_referrers: Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers + + attr_accessor top_user_agents: Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents + + attr_accessor top_videos: Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos + + attr_accessor top_video_transforms: Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms + + attr_accessor url_endpoints: Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints + + attr_accessor video_processing: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::VideoProcessing] + + def initialize: ( + bandwidth_bytes: Float, + browser: Imagekitio::Accounts::UsageAnalyticsResponse::Browser, + cache: Imagekitio::Accounts::UsageAnalyticsResponse::Cache, + country: Imagekitio::Accounts::UsageAnalyticsResponse::Country, + device: Imagekitio::Accounts::UsageAnalyticsResponse::Device, + end_date: Date, + error_reasons: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::ErrorReason], + extensions: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Extension], + format_: Imagekitio::Accounts::UsageAnalyticsResponse::Format, + generated_at: Time, + request_count: Float, + start_date: Date, + status_codes: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::StatusCode], + top404_assets: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Top404Asset], + top_images: Imagekitio::Accounts::UsageAnalyticsResponse::TopImages, + top_image_transforms: Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms, + top_other_assets: Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets, + top_referrers: Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers, + top_user_agents: Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents, + top_videos: Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos, + top_video_transforms: Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms, + url_endpoints: Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints, + video_processing: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::VideoProcessing] + ) -> void + + def to_hash: -> { + bandwidth_bytes: Float, + browser: Imagekitio::Accounts::UsageAnalyticsResponse::Browser, + cache: Imagekitio::Accounts::UsageAnalyticsResponse::Cache, + country: Imagekitio::Accounts::UsageAnalyticsResponse::Country, + device: Imagekitio::Accounts::UsageAnalyticsResponse::Device, + end_date: Date, + error_reasons: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::ErrorReason], + extensions: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Extension], + format_: Imagekitio::Accounts::UsageAnalyticsResponse::Format, + generated_at: Time, + request_count: Float, + start_date: Date, + status_codes: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::StatusCode], + :top404_assets => ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Top404Asset], + top_images: Imagekitio::Accounts::UsageAnalyticsResponse::TopImages, + top_image_transforms: Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms, + top_other_assets: Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets, + top_referrers: Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers, + top_user_agents: Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents, + top_videos: Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos, + top_video_transforms: Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms, + url_endpoints: Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints, + video_processing: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::VideoProcessing] + } + + type browser = + { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Browser::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Browser::ByRequest] + } + + class Browser < Imagekitio::Internal::Type::BaseModel + attr_accessor by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Browser::ByBandwidth] + + attr_accessor by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Browser::ByRequest] + + def initialize: ( + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Browser::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Browser::ByRequest] + ) -> void + + def to_hash: -> { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Browser::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Browser::ByRequest] + } + + type by_bandwidth = { name: String } + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + def name: -> String + + def name=: (String _) -> String + + def initialize: (name: String) -> void + + def to_hash: -> { name: String } + end + + type by_request = { name: String } + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + def name: -> String + + def name=: (String _) -> String + + def initialize: (name: String) -> void + + def to_hash: -> { name: String } + end + end + + type cache = { error_count: Float, hit_count: Float, miss_count: Float } + + class Cache < Imagekitio::Internal::Type::BaseModel + attr_accessor error_count: Float + + attr_accessor hit_count: Float + + attr_accessor miss_count: Float + + def initialize: ( + error_count: Float, + hit_count: Float, + miss_count: Float + ) -> void + + def to_hash: -> { + error_count: Float, + hit_count: Float, + miss_count: Float + } + end + + type country = + { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Country::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Country::ByRequest] + } + + class Country < Imagekitio::Internal::Type::BaseModel + attr_accessor by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Country::ByBandwidth] + + attr_accessor by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Country::ByRequest] + + def initialize: ( + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Country::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Country::ByRequest] + ) -> void + + def to_hash: -> { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Country::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Country::ByRequest] + } + + type by_bandwidth = { code: String, name: String } + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + def code: -> String + + def code=: (String _) -> String + + def name: -> String + + def name=: (String _) -> String + + def initialize: (code: String, name: String) -> void + + def to_hash: -> { code: String, name: String } + end + + type by_request = { code: String, name: String } + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + def code: -> String + + def code=: (String _) -> String + + def name: -> String + + def name=: (String _) -> String + + def initialize: (code: String, name: String) -> void + + def to_hash: -> { code: String, name: String } + end + end + + type device = + { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Device::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Device::ByRequest] + } + + class Device < Imagekitio::Internal::Type::BaseModel + attr_accessor by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Device::ByBandwidth] + + attr_accessor by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Device::ByRequest] + + def initialize: ( + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Device::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Device::ByRequest] + ) -> void + + def to_hash: -> { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Device::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Device::ByRequest] + } + + type by_bandwidth = { name: String } + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + def name: -> String + + def name=: (String _) -> String + + def initialize: (name: String) -> void + + def to_hash: -> { name: String } + end + + type by_request = { name: String } + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + def name: -> String + + def name=: (String _) -> String + + def initialize: (name: String) -> void + + def to_hash: -> { name: String } + end + end + + type error_reason = { name: String, request_count: Float } + + class ErrorReason < Imagekitio::Internal::Type::BaseModel + attr_accessor name: String + + attr_accessor request_count: Float + + def initialize: (name: String, request_count: Float) -> void + + def to_hash: -> { name: String, request_count: Float } + end + + type extension = { name: String, operation_count: Float } + + class Extension < Imagekitio::Internal::Type::BaseModel + attr_accessor name: String + + attr_accessor operation_count: Float + + def initialize: (name: String, operation_count: Float) -> void + + def to_hash: -> { name: String, operation_count: Float } + end + + type format_ = + { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Format::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Format::ByRequest] + } + + class Format < Imagekitio::Internal::Type::BaseModel + attr_accessor by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Format::ByBandwidth] + + attr_accessor by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Format::ByRequest] + + def initialize: ( + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Format::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Format::ByRequest] + ) -> void + + def to_hash: -> { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Format::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::Format::ByRequest] + } + + type by_bandwidth = { name: String } + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + def name: -> String + + def name=: (String _) -> String + + def initialize: (name: String) -> void + + def to_hash: -> { name: String } + end + + type by_request = { name: String } + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + def name: -> String + + def name=: (String _) -> String + + def initialize: (name: String) -> void + + def to_hash: -> { name: String } + end + end + + type status_code = { name: String, request_count: Float } + + class StatusCode < Imagekitio::Internal::Type::BaseModel + attr_accessor name: String + + attr_accessor request_count: Float + + def initialize: (name: String, request_count: Float) -> void + + def to_hash: -> { name: String, request_count: Float } + end + + type top404_asset = { name: String, request_count: Float } + + class Top404Asset < Imagekitio::Internal::Type::BaseModel + attr_accessor name: String + + attr_accessor request_count: Float + + def initialize: (name: String, request_count: Float) -> void + + def to_hash: -> { name: String, request_count: Float } + end + + type top_images = + { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopImages::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopImages::ByRequest] + } + + class TopImages < Imagekitio::Internal::Type::BaseModel + attr_accessor by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopImages::ByBandwidth] + + attr_accessor by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopImages::ByRequest] + + def initialize: ( + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopImages::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopImages::ByRequest] + ) -> void + + def to_hash: -> { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopImages::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopImages::ByRequest] + } + + type by_bandwidth = { name: String } + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + def name: -> String + + def name=: (String _) -> String + + def initialize: (name: String) -> void + + def to_hash: -> { name: String } + end + + type by_request = { name: String } + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + def name: -> String + + def name=: (String _) -> String + + def initialize: (name: String) -> void + + def to_hash: -> { name: String } + end + end + + type top_image_transforms = + { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms::ByRequest] + } + + class TopImageTransforms < Imagekitio::Internal::Type::BaseModel + attr_accessor by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms::ByBandwidth] + + attr_accessor by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms::ByRequest] + + def initialize: ( + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms::ByRequest] + ) -> void + + def to_hash: -> { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms::ByRequest] + } + + type by_bandwidth = { name: String } + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + def name: -> String + + def name=: (String _) -> String + + def initialize: (name: String) -> void + + def to_hash: -> { name: String } + end + + type by_request = { name: String } + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + def name: -> String + + def name=: (String _) -> String + + def initialize: (name: String) -> void + + def to_hash: -> { name: String } + end + end + + type top_other_assets = + { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets::ByRequest] + } + + class TopOtherAssets < Imagekitio::Internal::Type::BaseModel + attr_accessor by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets::ByBandwidth] + + attr_accessor by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets::ByRequest] + + def initialize: ( + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets::ByRequest] + ) -> void + + def to_hash: -> { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets::ByRequest] + } + + type by_bandwidth = { name: String } + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + def name: -> String + + def name=: (String _) -> String + + def initialize: (name: String) -> void + + def to_hash: -> { name: String } + end + + type by_request = { name: String } + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + def name: -> String + + def name=: (String _) -> String + + def initialize: (name: String) -> void + + def to_hash: -> { name: String } + end + end + + type top_referrers = + { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers::ByRequest] + } + + class TopReferrers < Imagekitio::Internal::Type::BaseModel + attr_accessor by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers::ByBandwidth] + + attr_accessor by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers::ByRequest] + + def initialize: ( + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers::ByRequest] + ) -> void + + def to_hash: -> { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers::ByRequest] + } + + type by_bandwidth = { name: String } + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + def name: -> String + + def name=: (String _) -> String + + def initialize: (name: String) -> void + + def to_hash: -> { name: String } + end + + type by_request = { name: String } + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + def name: -> String + + def name=: (String _) -> String + + def initialize: (name: String) -> void + + def to_hash: -> { name: String } + end + end + + type top_user_agents = + { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents::ByRequest] + } + + class TopUserAgents < Imagekitio::Internal::Type::BaseModel + attr_accessor by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents::ByBandwidth] + + attr_accessor by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents::ByRequest] + + def initialize: ( + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents::ByRequest] + ) -> void + + def to_hash: -> { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents::ByRequest] + } + + type by_bandwidth = { name: String } + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + def name: -> String + + def name=: (String _) -> String + + def initialize: (name: String) -> void + + def to_hash: -> { name: String } + end + + type by_request = { name: String } + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + def name: -> String + + def name=: (String _) -> String + + def initialize: (name: String) -> void + + def to_hash: -> { name: String } + end + end + + type top_videos = + { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos::ByRequest] + } + + class TopVideos < Imagekitio::Internal::Type::BaseModel + attr_accessor by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos::ByBandwidth] + + attr_accessor by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos::ByRequest] + + def initialize: ( + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos::ByRequest] + ) -> void + + def to_hash: -> { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos::ByRequest] + } + + type by_bandwidth = { name: String } + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + def name: -> String + + def name=: (String _) -> String + + def initialize: (name: String) -> void + + def to_hash: -> { name: String } + end + + type by_request = { name: String } + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + def name: -> String + + def name=: (String _) -> String + + def initialize: (name: String) -> void + + def to_hash: -> { name: String } + end + end + + type top_video_transforms = + { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms::ByRequest] + } + + class TopVideoTransforms < Imagekitio::Internal::Type::BaseModel + attr_accessor by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms::ByBandwidth] + + attr_accessor by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms::ByRequest] + + def initialize: ( + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms::ByRequest] + ) -> void + + def to_hash: -> { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms::ByRequest] + } + + type by_bandwidth = { name: String } + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + def name: -> String + + def name=: (String _) -> String + + def initialize: (name: String) -> void + + def to_hash: -> { name: String } + end + + type by_request = { name: String } + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + def name: -> String + + def name=: (String _) -> String + + def initialize: (name: String) -> void + + def to_hash: -> { name: String } + end + end + + type url_endpoints = + { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints::ByRequest] + } + + class URLEndpoints < Imagekitio::Internal::Type::BaseModel + attr_accessor by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints::ByBandwidth] + + attr_accessor by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints::ByRequest] + + def initialize: ( + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints::ByRequest] + ) -> void + + def to_hash: -> { + by_bandwidth: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints::ByBandwidth], + by_requests: ::Array[Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints::ByRequest] + } + + type by_bandwidth = { name: String } + + class ByBandwidth < Imagekitio::Models::Accounts::RequestBandwidthEntry + def name: -> String + + def name=: (String _) -> String + + def initialize: (name: String) -> void + + def to_hash: -> { name: String } + end + + type by_request = { name: String } + + class ByRequest < Imagekitio::Models::Accounts::RequestBandwidthEntry + def name: -> String + + def name=: (String _) -> String + + def initialize: (name: String) -> void + + def to_hash: -> { name: String } + end + end + + type video_processing = + { codec: String, duration_seconds: Float, resolution: String } + + class VideoProcessing < Imagekitio::Internal::Type::BaseModel + attr_accessor codec: String + + attr_accessor duration_seconds: Float + + attr_accessor resolution: String + + def initialize: ( + codec: String, + duration_seconds: Float, + resolution: String + ) -> void + + def to_hash: -> { + codec: String, + duration_seconds: Float, + resolution: String + } + end + end + end + end +end diff --git a/sig/imagekitio/resources/accounts.rbs b/sig/imagekitio/resources/accounts.rbs index 0e844846..5518b4d8 100644 --- a/sig/imagekitio/resources/accounts.rbs +++ b/sig/imagekitio/resources/accounts.rbs @@ -3,6 +3,8 @@ module Imagekitio class Accounts attr_reader usage: Imagekitio::Resources::Accounts::Usage + attr_reader usage_analytics: Imagekitio::Resources::Accounts::UsageAnalytics + attr_reader origins: Imagekitio::Resources::Accounts::Origins attr_reader url_endpoints: Imagekitio::Resources::Accounts::URLEndpoints diff --git a/sig/imagekitio/resources/accounts/usage_analytics.rbs b/sig/imagekitio/resources/accounts/usage_analytics.rbs new file mode 100644 index 00000000..1df725e1 --- /dev/null +++ b/sig/imagekitio/resources/accounts/usage_analytics.rbs @@ -0,0 +1,15 @@ +module Imagekitio + module Resources + class Accounts + class UsageAnalytics + def get: ( + end_date: Date, + start_date: Date, + ?request_options: Imagekitio::request_opts + ) -> Imagekitio::Accounts::UsageAnalyticsResponse + + def initialize: (client: Imagekitio::Client) -> void + end + end + end +end diff --git a/test/imagekitio/resources/accounts/usage_analytics_test.rb b/test/imagekitio/resources/accounts/usage_analytics_test.rb new file mode 100644 index 00000000..6f47556c --- /dev/null +++ b/test/imagekitio/resources/accounts/usage_analytics_test.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +require_relative "../../test_helper" + +class Imagekitio::Test::Resources::Accounts::UsageAnalyticsTest < Imagekitio::Test::ResourceTest + def test_get_required_params + skip("Mock server tests are disabled") + + response = @image_kit.accounts.usage_analytics.get(end_date: "2019-12-27", start_date: "2019-12-27") + + assert_pattern do + response => Imagekitio::Accounts::UsageAnalyticsResponse + end + + assert_pattern do + response => { + bandwidth_bytes: Float, + browser: Imagekitio::Accounts::UsageAnalyticsResponse::Browser, + cache: Imagekitio::Accounts::UsageAnalyticsResponse::Cache, + country: Imagekitio::Accounts::UsageAnalyticsResponse::Country, + device: Imagekitio::Accounts::UsageAnalyticsResponse::Device, + end_date: Date, + error_reasons: ^(Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::ErrorReason]), + extensions: ^(Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::Extension]), + format_: Imagekitio::Accounts::UsageAnalyticsResponse::Format, + generated_at: Time, + request_count: Float, + start_date: Date, + status_codes: ^(Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::StatusCode]), + top404_assets: ^(Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::Top404Asset]), + top_images: Imagekitio::Accounts::UsageAnalyticsResponse::TopImages, + top_image_transforms: Imagekitio::Accounts::UsageAnalyticsResponse::TopImageTransforms, + top_other_assets: Imagekitio::Accounts::UsageAnalyticsResponse::TopOtherAssets, + top_referrers: Imagekitio::Accounts::UsageAnalyticsResponse::TopReferrers, + top_user_agents: Imagekitio::Accounts::UsageAnalyticsResponse::TopUserAgents, + top_videos: Imagekitio::Accounts::UsageAnalyticsResponse::TopVideos, + top_video_transforms: Imagekitio::Accounts::UsageAnalyticsResponse::TopVideoTransforms, + url_endpoints: Imagekitio::Accounts::UsageAnalyticsResponse::URLEndpoints, + video_processing: ^(Imagekitio::Internal::Type::ArrayOf[Imagekitio::Accounts::UsageAnalyticsResponse::VideoProcessing]) + } + end + end +end