diff --git a/cutter/cutter/main.py b/cutter/cutter/main.py index 60745d6..ed14186 100644 --- a/cutter/cutter/main.py +++ b/cutter/cutter/main.py @@ -21,8 +21,29 @@ from common.segments import get_best_segments, cut_segments, ContainsHoles from .youtube import Youtube videos_cut = prom.Counter( - 'videos_uploaded' + 'videos_cut', + 'Number of videos successfully cut', + ['video_channel', 'video_quality'] ) + +videos_uploaded = prom.Counter( + 'videos_uploaded', + 'Number of videos successfully uploaded', + ['video_channel', 'video_quality', 'upload_location'] +) + +cutting_errors = prom.Counter( + 'cutting_errors', + 'Number of errors cutting a video', + ['video_channel', 'video_quality'] +) + +upload_errors = prom.Counter( + 'upload_errors', + 'Number of errors uploading a video', + ['video_channel', 'video_quality', 'upload_location'] +) + # A list of all the DB column names in CutJob CUT_JOB_PARAMS = [ "category", @@ -285,6 +306,7 @@ class Cutter(object): yield chunk except Exception as ex: self.logger.exception("Error occurred while trying to cut job {}".format(format_job(job))) + cutting_errors.labels(video_channel=job.video_channel, video_quality=job.video_quality).inc() # Assumed error is not retryable, set state back to UNEDITED and set error. if not set_row(state='UNEDITED', error="Error while cutting: {}".format(ex), uploader=None): self.logger.warning("Tried to roll back row {} to unedited but it was already cancelled.".format(job.id)) @@ -303,6 +325,7 @@ class Cutter(object): .format(job.id, self.name) ) finalize_begun[0] = True + videos_cut.labels(video_channel=job.video_channel, video_quality=job.video_quality).inc() # Now we return from this generator, and any errors between now and returning # from requests.post() are not recoverable. @@ -322,6 +345,7 @@ class Cutter(object): return except Exception as ex: self.refresh_conn() + upload_errors.labels(video_channel=job.video_channel, video_quality=job.video_quality, upload_location=job.upload_location).inc() # for HTTPErrors, getting http response body is also useful if isinstance(ex, requests.HTTPError): @@ -371,6 +395,7 @@ class Cutter(object): ) self.logger.info("Successfully cut and uploaded job {} as {}".format(format_job(job), link)) + videos_uploaded.labels(video_channel=job.video_channel, video_quality=job.video_quality, upload_location=job.upload_location).inc() def rollback_all_owned(self): """Roll back any in-progress jobs that claim to be owned by us,