diff options
author | Jelle van der Waa <jelle@archlinux.org> | 2020-05-30 17:14:46 +0200 |
---|---|---|
committer | Jelle van der Waa <jelle@archlinux.org> | 2020-06-29 16:28:27 +0200 |
commit | 1a15dea6700eadc8379d0fef2e0b3f37de92c54e (patch) | |
tree | bff44cd06c66c0faf08d42fa4c01d7d9d9aea34e /main | |
parent | d0bafe48c47876492170eb1aa77a8dc4685db919 (diff) | |
download | archweb-1a15dea6700eadc8379d0fef2e0b3f37de92c54e.tar.gz archweb-1a15dea6700eadc8379d0fef2e0b3f37de92c54e.zip |
Add rebuilderd status import and reporting functionalityrelease_2020-06-29
Import the rebuilderd status periodically with a django management
command into RebuilderdStats which holds one record per pkgname with
it's pkgver/pkgrel/epoch all recorded. Shown as a developer dashboard
and with opt in mail notifications for when a package becomes not
reproducible.
Diffstat (limited to 'main')
-rw-r--r-- | main/migrations/0003_rebuilderdstatus.py | 29 | ||||
-rw-r--r-- | main/models.py | 35 |
2 files changed, 64 insertions, 0 deletions
diff --git a/main/migrations/0003_rebuilderdstatus.py b/main/migrations/0003_rebuilderdstatus.py new file mode 100644 index 00000000..5cc0ad59 --- /dev/null +++ b/main/migrations/0003_rebuilderdstatus.py @@ -0,0 +1,29 @@ +# Generated by Django 3.0.7 on 2020-06-28 19:34 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0002_repo_public_testing'), + ] + + operations = [ + migrations.CreateModel( + name='RebuilderdStatus', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('pkgname', models.CharField(max_length=255)), + ('pkgver', models.CharField(max_length=255)), + ('pkgrel', models.CharField(max_length=255)), + ('epoch', models.PositiveIntegerField(default=0)), + ('status', models.SmallIntegerField(choices=[(0, 'Good'), (1, 'Bad'), (2, 'Unknown')], default=2)), + ('was_repro', models.BooleanField(default=False)), + ('arch', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='main.Arch')), + ('pkg', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='main.Package')), + ('repo', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='main.Repo')), + ], + ), + ] diff --git a/main/models.py b/main/models.py index 094e80a9..7f60276c 100644 --- a/main/models.py +++ b/main/models.py @@ -444,6 +444,41 @@ class PackageFile(models.Model): db_table = 'package_files' +class RebuilderdStatus(models.Model): + # https://github.com/kpcyrd/rebuilderd/blob/2eeef725940ca8710c7c21579ce093445d1875c8/common/src/api.rs#L279 + GOOD = 0 + BAD = 1 + UNKNOWN = 2 + + REBUILDERD_API_STATUSES = { + 'GOOD': GOOD, + 'BAD': BAD, + 'UNKWN': UNKNOWN, + } + REBUILDERD_STATUSES = ( + (GOOD, 'Good'), + (BAD, 'Bad'), + (UNKNOWN, 'Unknown'), + ) + + pkg = models.ForeignKey(Package, on_delete=models.CASCADE) + pkgname = models.CharField(max_length=255) + pkgver = models.CharField(max_length=255) + pkgrel = models.CharField(max_length=255) + epoch = models.PositiveIntegerField(default=0) + arch = models.ForeignKey(Arch, on_delete=models.CASCADE) + repo = models.ForeignKey(Repo, on_delete=models.CASCADE) + status = models.SmallIntegerField(default=UNKNOWN, choices=REBUILDERD_STATUSES) + was_repro = models.BooleanField(default=False) + + @property + def status_str(self): + return self.REBUILDERD_STATUSES[self.status][1] + + def __str__(self): + return "pkg=%s, status=%s" % (self.pkg, self.status_str) + + from django.db.models.signals import pre_save # note: reporead sets the 'created' field on Package objects, so no signal |