[bitbake-devel] [PATCH v2 2/3] webhob: create Django models for webhob

Calin Dragomir calinx.l.dragomir at intel.com
Tue Jun 18 11:51:06 UTC 2013


Patch adds the models we need in order to store all the information
we need about the builds in the database using the Django ORM.
---
 lib/webhob/orm/__init__.py     |   0
 lib/webhob/orm/models.py       | 162 +++++++++++++++++++++++++++++++++++++++++
 lib/webhob/orm/tests.py        |  16 ++++
 lib/webhob/orm/views.py        |   1 +
 lib/webhob/whbmain/settings.py |   1 +
 5 files changed, 180 insertions(+)
 create mode 100644 lib/webhob/orm/__init__.py
 create mode 100644 lib/webhob/orm/models.py
 create mode 100644 lib/webhob/orm/tests.py
 create mode 100644 lib/webhob/orm/views.py

diff --git a/lib/webhob/orm/__init__.py b/lib/webhob/orm/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/lib/webhob/orm/models.py b/lib/webhob/orm/models.py
new file mode 100644
index 0000000..7e0c9b3
--- /dev/null
+++ b/lib/webhob/orm/models.py
@@ -0,0 +1,162 @@
+from django.db import models
+
+
+class Builds(models.Model):
+
+    BUILD_OUTCOME = (
+        (0, 'Succeded'),
+        (1, 'Failed'),
+    )
+
+    uuid = models.CharField(max_length=100, unique=True)
+    target = models.CharField(max_length=100)
+    host_machine = models.CharField(max_length=100)
+    distro = models.CharField(max_length=100)
+    distro_version = models.CharField(max_length=100)
+    host_system = models.CharField(max_length=100)
+    host_distribution = models.CharField(max_length=100)
+    target_system = models.ForeignKey('Machines', related_name='builds_machines')
+    layers = models.ManyToManyField('Layers')
+    started_on = models.DateTimeField()
+    completed_on = models.DateTimeField()
+    outcome = models.IntegerField(choices=BUILD_OUTCOME)
+    errors_no = models.IntegerField()
+    warnings_no = models.IntegerField()
+    cpu_usage = models.IntegerField()
+    disk_io = models.DecimalField(max_digits=20, decimal_places=10)
+    cooker_log_path = models.CharField(max_length=500)
+    build_name = models.CharField(max_length=100)
+    bitbake_version = models.CharField(max_length=50)
+
+
+class Tasks(models.Model):
+
+    SSTATE_RESULT = (
+        (0, 'Not Applicable'), # For rest of tasks, but they still need checking.
+        (1, 'Unavailable'), # it is a miss
+        (2, 'Failed'), # there was a pkg, but the script failed
+        (3, 'Restored'), # succesfully restored
+    )
+
+    TASK_CODING = (
+        (0, 'Python'),
+        (1, 'Shell'),
+    )
+
+    TASK_OUTCOME = (
+        (0, 'Covered'),
+        (1, 'Sstate'),
+        (2, 'Existing'),
+        (3, 'Succeded'),
+        (4, 'Failed'),
+    )
+
+    uuid = models.ForeignKey(Builds, to_field='uuid', related_name='tasks_builds')
+    order = models.IntegerField()
+    task_executed = models.BooleanField() # True means Executed, False means Prebuilt
+    outcome = models.IntegerField(choices=TASK_OUTCOME)
+    sstate_checksum = models.CharField(max_length=100)
+    path_to_sstate_obj = models.FilePathField(max_length=500, blank=True)
+    recipe = models.ForeignKey('Recipes', related_name='builds_recipes')
+    task_name = models.CharField(max_length=100)
+    source_url = models.FilePathField(max_length=200)
+    log_file = models.FilePathField(max_length=200, blank=True)
+    work_directory = models.FilePathField(max_length=200)
+    script_type = models.IntegerField(choices=TASK_CODING)
+    file_path = models.FilePathField(max_length=200)
+    line_number = models.IntegerField()
+    py_stack_trace = models.TextField()
+    disk_io = models.DecimalField(max_digits=20, decimal_places=10)
+    cpu_usage = models.IntegerField()
+    elapsed_time = models.CharField(max_length=50)
+    errors_no = models.IntegerField()
+    warnings_no = models.IntegerField()
+    error = models.TextField()
+    warning = models.TextField()
+    sstate_result = models.IntegerField(choices=SSTATE_RESULT)
+    diffsigs = models.CharField(max_length=500)
+
+
+class Task_Dependencies(models.Model):
+    task_id = models.ForeignKey(Tasks, related_name='task_dependencies_task')
+    depends_on = models.ForeignKey(Tasks, related_name='task_dependencies_depends')
+
+
+class Targets(models.Model):
+    uuid = models.ForeignKey(Builds, to_field='uuid',  related_name='targets_builds')
+    is_image = models.BooleanField()
+
+
+class Artifacts(models.Model):
+    uuid = models.ForeignKey(Builds, to_field='uuid', related_name='artifacts_builds')
+    target_id = models.ForeignKey(Targets, related_name='artifacts_targets')
+    file_name = models.CharField(max_length=100)
+    file_size = models.IntegerField()
+
+
+class Packages_In_Images(models.Model):
+    package_id = models.ForeignKey('Packages', related_name='packages_in_images_package')
+    target_id = models.ForeignKey(Targets, related_name='packages_in_images_target')
+
+
+class Packages(models.Model):
+    package_id = models.IntegerField()
+    recipe = models.ForeignKey('Recipes', related_name='packages_recipes')
+    name = models.CharField(max_length=100)
+    version = models.CharField(max_length=100)
+    size = models.IntegerField()
+
+
+class Package_Dependencies(models.Model):
+    package_id = models.ForeignKey(Packages, related_name='package_dependencies_package')
+    depends_on = models.ForeignKey(Packages, related_name='package_dependencies_depends')
+
+
+class Filelist(models.Model):
+    package_id = models.ForeignKey(Packages, related_name='filelist_packages')
+    complete_file_path = models.FilePathField(max_length=200, blank=True)
+    file_size = models.IntegerField()
+
+
+class Recipes(models.Model):
+    name = models.CharField(max_length=100)
+    version = models.CharField(max_length=100)
+    layer = models.ForeignKey('Layers', related_name='recipes_layers')
+    summary = models.CharField(max_length=100)
+    description = models.CharField(max_length=100)
+    section = models.CharField(max_length=100)
+    license = models.CharField(max_length=200)
+    licensing_info = models.TextField()
+    homepage = models.CharField(max_length=100)
+    bugtracker = models.CharField(max_length=100)
+    author = models.CharField(max_length=100)
+    file_path = models.FilePathField(max_length=200)
+
+
+class Recipe_Dependencies(models.Model):
+    recipe_id = models.ForeignKey(Recipes, related_name='recipe_dependencies_recipe')
+    depends_on = models.ForeignKey(Recipes, related_name='recipe_dependencies_depends')
+
+
+class Layers(models.Model):
+    name = models.CharField(max_length=100)
+    branch = models.CharField(max_length=50)
+    commit = models.CharField(max_length=100)
+    priority = models.IntegerField()
+    link_to_oe_core = models.URLField()
+
+
+class Variables(models.Model):
+    uuid = models.ForeignKey(Builds, to_field='uuid', related_name='variables_builds')
+    variable_name = models.CharField(max_length=100)
+    variable_value = models.TextField()
+    file = models.FilePathField(max_length=200)
+    changed = models.BooleanField()
+    human_readable_name = models.CharField(max_length=200)
+    description = models.TextField()
+
+
+class Machines(models.Model):
+    name = models.CharField(max_length=100)
+    description = models.TextField()
+
diff --git a/lib/webhob/orm/tests.py b/lib/webhob/orm/tests.py
new file mode 100644
index 0000000..501deb7
--- /dev/null
+++ b/lib/webhob/orm/tests.py
@@ -0,0 +1,16 @@
+"""
+This file demonstrates writing tests using the unittest module. These will pass
+when you run "manage.py test".
+
+Replace this with more appropriate tests for your application.
+"""
+
+from django.test import TestCase
+
+
+class SimpleTest(TestCase):
+    def test_basic_addition(self):
+        """
+        Tests that 1 + 1 always equals 2.
+        """
+        self.assertEqual(1 + 1, 2)
diff --git a/lib/webhob/orm/views.py b/lib/webhob/orm/views.py
new file mode 100644
index 0000000..60f00ef
--- /dev/null
+++ b/lib/webhob/orm/views.py
@@ -0,0 +1 @@
+# Create your views here.
diff --git a/lib/webhob/whbmain/settings.py b/lib/webhob/whbmain/settings.py
index 67aaf69..71bba4f 100644
--- a/lib/webhob/whbmain/settings.py
+++ b/lib/webhob/whbmain/settings.py
@@ -123,6 +123,7 @@ INSTALLED_APPS = (
     # 'django.contrib.admin',
     # Uncomment the next line to enable admin documentation:
     # 'django.contrib.admindocs',
+    'orm',
 )
 
 # A sample logging configuration. The only tangible logging
-- 
1.8.1.2




More information about the bitbake-devel mailing list