From b4655f18c61fda2e29c758c5dfb6aaffbbf33a5c Mon Sep 17 00:00:00 2001 From: Mike Lang Date: Sat, 29 Jun 2019 15:54:04 -0700 Subject: [PATCH] downloader: Track total duration of downloaded segments --- downloader/downloader/main.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/downloader/downloader/main.py b/downloader/downloader/main.py index 26adcd8..4a42d2b 100644 --- a/downloader/downloader/main.py +++ b/downloader/downloader/main.py @@ -29,6 +29,13 @@ segments_downloaded = prom.Counter( ["partial", "channel", "quality"], ) +segment_duration_downloaded = prom.Counter( + "segment_duration_downloaded", + "Total duration of all segments partially or fully downloaded. " + "Note partial segments still count the full duration.", + ["partial", "stream", "variant"], +) + latest_segment = prom.Gauge( "latest_segment", "Timestamp of the time of the newest segment fully downloaded", @@ -74,8 +81,6 @@ def soft_hard_timeout(logger, description, (soft_timeout, hard_timeout), on_soft finished = True - - class StreamsManager(object): """Keeps track of what qualities are being downloaded and the workers doing so. Re-fetches master playlist when needed and starts new stream workers. @@ -542,12 +547,14 @@ class SegmentGetter(object): self.logger.warning("Saving partial segment {} as {}".format(temp_path, partial_path)) common.rename(temp_path, partial_path) segments_downloaded.labels(partial="True", channel=self.channel, quality=self.quality).inc() + segment_duration_downloaded.labels(partial="True", channel=self.channel, quality=self.quality).inc(self.segment.duration) raise ex_type, ex, tb else: full_path = self.make_path("full", hash) self.logger.debug("Saving completed segment {} as {}".format(temp_path, full_path)) common.rename(temp_path, full_path) segments_downloaded.labels(partial="False", channel=self.channel, quality=self.quality).inc() + segment_duration_downloaded.labels(partial="False", channel=self.channel, quality=self.quality).inc(self.segment.duration) # Prom doesn't provide a way to compare value to gauge's existing value, # we need to reach into internals stat = latest_segment.labels(channel=self.channel, quality=self.quality)