diff --git a/src/invidious.cr b/src/invidious.cr index 64ade49a..2acc860b 100644 --- a/src/invidious.cr +++ b/src/invidious.cr @@ -190,7 +190,6 @@ end if CONFIG.statistics_enabled Invidious::Jobs.register Invidious::Jobs::StatisticsRefreshJob.new(PG_DB, SOFTWARE) - add_handler Metrics::RouteMetricsCollector.new end if (CONFIG.use_pubsub_feeds.is_a?(Bool) && CONFIG.use_pubsub_feeds.as(Bool)) || (CONFIG.use_pubsub_feeds.is_a?(Int32) && CONFIG.use_pubsub_feeds.as(Int32) > 0) diff --git a/src/invidious/helpers/helpers.cr b/src/invidious/helpers/helpers.cr index a106ee18..6add0237 100644 --- a/src/invidious/helpers/helpers.cr +++ b/src/invidious/helpers/helpers.cr @@ -198,11 +198,3 @@ def get_playback_statistic return tracker.as(Hash(String, Int64 | Float64)) end - -def to_prometheus_metrics(metrics_struct : Hash(String, Number)) : String - return String.build do |str| - metrics_struct.each.each do |key, value| - str << key << " " << value << "\n" - end - end -end diff --git a/src/invidious/jobs/statistics_refresh_job.cr b/src/invidious/jobs/statistics_refresh_job.cr index 38eaf234..66c91ad5 100644 --- a/src/invidious/jobs/statistics_refresh_job.cr +++ b/src/invidious/jobs/statistics_refresh_job.cr @@ -27,11 +27,6 @@ class Invidious::Jobs::StatisticsRefreshJob < Invidious::Jobs::BaseJob "playback" => {} of String => Int64 | Float64, } - STATISTICS_PROMETHEUS = { - "invidious_updated_at" => Time.utc.to_unix, - "invidious_last_channel_refreshed_at" => 0_i64, - } - private getter db : DB::Database def initialize(@db, @software_config : Hash(String, String)) @@ -64,9 +59,6 @@ class Invidious::Jobs::StatisticsRefreshJob < Invidious::Jobs::BaseJob users["activeHalfyear"] = Invidious::Database::Statistics.count_users_active_6m users["activeMonth"] = Invidious::Database::Statistics.count_users_active_1m - STATISTICS_PROMETHEUS["invidious_updated_at"] = Time.utc.to_unix - STATISTICS_PROMETHEUS["invidious_last_channel_refreshed_at"] = Invidious::Database::Statistics.channel_last_update.try &.to_unix || 0_i64 - STATISTICS["metadata"] = { "updatedAt" => Time.utc.to_unix, "lastChannelRefreshedAt" => Invidious::Database::Statistics.channel_last_update.try &.to_unix || 0_i64, diff --git a/src/invidious/metrics.cr b/src/invidious/metrics.cr deleted file mode 100644 index 6fdd42b5..00000000 --- a/src/invidious/metrics.cr +++ /dev/null @@ -1,46 +0,0 @@ -# Module containing an optional Kemal handler, which can be used -# to collect metrics about the usage of various Invidious routes. -module Metrics - record MetricLabels, request_method : String, request_route : String, response_code : Int32 - - class RouteMetricsCollector < Kemal::Handler - # Counts how many times a given route was used - @@num_of_request_counters = Hash(MetricLabels, Int64).new - # Counts how much time was used to handle requests to each route - @@request_duration_seconds_sums = Hash(MetricLabels, Float32).new - - def self.num_of_request_counters - return @@num_of_request_counters - end - - def self.request_duration_seconds_sums - return @@request_duration_seconds_sums - end - - def call(context : HTTP::Server::Context) - request_handling_started = Time.utc - begin - call_next(context) - ensure - request_handling_finished = Time.utc - request_path = context.route.path - request_method = context.request.method - seconds_spent_handling = (request_handling_finished - request_handling_started).to_f - response_status = context.response.status_code.to_i - - LOGGER.trace("Collecting metrics: handling #{request_method} #{request_path} took #{seconds_spent_handling}s and finished with status #{response_status}") - metric_key = MetricLabels.new request_path, request_method, response_status - - unless @@num_of_request_counters.has_key?(metric_key) - @@num_of_request_counters[metric_key] = 0 - end - @@num_of_request_counters[metric_key] += 1 - - unless @@request_duration_seconds_sums.has_key?(metric_key) - @@request_duration_seconds_sums[metric_key] = 0.0 - end - @@request_duration_seconds_sums[metric_key] += seconds_spent_handling - end - end - end -end diff --git a/src/invidious/routes/api/v1/misc.cr b/src/invidious/routes/api/v1/misc.cr index 83f46f92..4f5b58da 100644 --- a/src/invidious/routes/api/v1/misc.cr +++ b/src/invidious/routes/api/v1/misc.cr @@ -1,5 +1,3 @@ -require "../../../metrics.cr" - module Invidious::Routes::API::V1::Misc # Stats API endpoint for Invidious def self.stats(env) @@ -28,39 +26,6 @@ module Invidious::Routes::API::V1::Misc end end - def self.metrics(env) - if !CONFIG.statistics_enabled - env.response.status_code = 204 - return - end - - env.response.content_type = "text/plain" - - return String.build do |str| - Metrics::RouteMetricsCollector.num_of_request_counters.each do |metric_labels, value| - str << "http_requests_total{" - str << "method=\"" << metric_labels.request_method << "\" " - str << "route=\"" << metric_labels.request_route << "\" " - str << "response_code=\"" << metric_labels.response_code << "\"" - str << "} " - str << value << "\n" - end - - Metrics::RouteMetricsCollector.request_duration_seconds_sums.each do |metric_labels, value| - str << "http_request_duration_seconds_sum{" - str << "method=\"" << metric_labels.request_method << "\" " - str << "route=\"" << metric_labels.request_route << "\" " - str << "response_code=\"" << metric_labels.response_code << "\"" - str << "} " - str << value << "\n" - end - - Invidious::Jobs::StatisticsRefreshJob::STATISTICS_PROMETHEUS.each.each do |key, value| - str << key << " " << value << "\n" - end - end - end - # APIv1 currently uses the same logic for both # user playlists and Invidious playlists. This means that we can't # reasonably split them yet. This should be addressed in APIv2 diff --git a/src/invidious/routing.cr b/src/invidious/routing.cr index 748fe737..38ddb839 100644 --- a/src/invidious/routing.cr +++ b/src/invidious/routing.cr @@ -312,7 +312,6 @@ module Invidious::Routing # Misc get "/api/v1/stats", {{namespace}}::Misc, :stats - get "/api/v1/metrics", {{namespace}}::Misc, :metrics get "/api/v1/playlists/:plid", {{namespace}}::Misc, :get_playlist get "/api/v1/auth/playlists/:plid", {{namespace}}::Misc, :get_playlist get "/api/v1/mixes/:rdid", {{namespace}}::Misc, :mixes