Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
ugly POC to get billable seconds per project for a gitlab runner from the api
import gitlab
from datetime import datetime, timedelta
import dateutil.parser
import pytz
import pprint
import os
pp = pprint.PrettyPrinter(indent=2)
billable_seconds = {}
utc = pytz.UTC
cutoff_day = utc.localize( - timedelta(days=BILLING_PERIOD_DAYS))
gl = gitlab.Gitlab('https://your.gitlab.instance', private_token=os.getenv('GITLAB_TOKEN'))
runner = gl.runners.get(13)
jobs ='desc', order_by='id', as_list=False)
for job in jobs:
created_day = dateutil.parser.parse(job.created_at)
if created_day < cutoff_day:
if not type(job.duration) == float:
print("[!!] found job %d with invalid duration for project %d, not reflected in total." % (, job.project.get('id')))
billable_seconds[job.project.get('id')] = billable_seconds.get(job.project.get('id'), 0.0) + job.duration
total_billable_seconds = 0.0
for project in billable_seconds:
total_billable_seconds += billable_seconds[project]
print('[==] total billable seconds across all projects: %d' % total_billable_seconds)
print("[==] billable seconds for the past %d days per project_id:" % BILLING_PERIOD_DAYS)
for project in billable_seconds:
percentage = 100 * (billable_seconds[project] / total_billable_seconds)
print('%d;%.2fs;%.2f%%' % (project, billable_seconds[project], percentage))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.