summaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorJelle van der Waa <jelle@archlinux.org>2020-05-30 17:14:46 +0200
committerJelle van der Waa <jelle@archlinux.org>2020-06-29 16:28:27 +0200
commit1a15dea6700eadc8379d0fef2e0b3f37de92c54e (patch)
treebff44cd06c66c0faf08d42fa4c01d7d9d9aea34e /main
parentd0bafe48c47876492170eb1aa77a8dc4685db919 (diff)
downloadarchweb-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.py29
-rw-r--r--main/models.py35
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