diff options
| -rw-r--r-- | bitbake/lib/toaster/bldcontrol/management/commands/checksettings.py | 26 | ||||
| -rw-r--r-- | bitbake/lib/toaster/bldcontrol/models.py | 3 | ||||
| -rw-r--r-- | bitbake/lib/toaster/orm/models.py | 3 |
3 files changed, 30 insertions, 2 deletions
diff --git a/bitbake/lib/toaster/bldcontrol/management/commands/checksettings.py b/bitbake/lib/toaster/bldcontrol/management/commands/checksettings.py index 1ff5c92833..3c524464fa 100644 --- a/bitbake/lib/toaster/bldcontrol/management/commands/checksettings.py +++ b/bitbake/lib/toaster/bldcontrol/management/commands/checksettings.py | |||
| @@ -2,7 +2,7 @@ from django.core.management.base import NoArgsCommand, CommandError | |||
| 2 | from django.db import transaction | 2 | from django.db import transaction |
| 3 | from bldcontrol.bbcontroller import getBuildEnvironmentController, ShellCmdException | 3 | from bldcontrol.bbcontroller import getBuildEnvironmentController, ShellCmdException |
| 4 | from bldcontrol.models import BuildRequest, BuildEnvironment, BRError | 4 | from bldcontrol.models import BuildRequest, BuildEnvironment, BRError |
| 5 | from orm.models import ToasterSetting | 5 | from orm.models import ToasterSetting, Build |
| 6 | import os | 6 | import os |
| 7 | 7 | ||
| 8 | def DN(path): | 8 | def DN(path): |
| @@ -61,7 +61,7 @@ class Command(NoArgsCommand): | |||
| 61 | return DN(self._find_first_path_for_file(DN(self.guesspath), "bblayers.conf", 4)) | 61 | return DN(self._find_first_path_for_file(DN(self.guesspath), "bblayers.conf", 4)) |
| 62 | 62 | ||
| 63 | 63 | ||
| 64 | def handle(self, **options): | 64 | def _verify_artifact_storage_dir(self): |
| 65 | # verify that we have a settings for downloading artifacts | 65 | # verify that we have a settings for downloading artifacts |
| 66 | while ToasterSetting.objects.filter(name="ARTIFACTS_STORAGE_DIR").count() == 0: | 66 | while ToasterSetting.objects.filter(name="ARTIFACTS_STORAGE_DIR").count() == 0: |
| 67 | guessedpath = os.getcwd() + "/toaster_build_artifacts/" | 67 | guessedpath = os.getcwd() + "/toaster_build_artifacts/" |
| @@ -78,7 +78,10 @@ class Command(NoArgsCommand): | |||
| 78 | else: | 78 | else: |
| 79 | raise ose | 79 | raise ose |
| 80 | ToasterSetting.objects.create(name="ARTIFACTS_STORAGE_DIR", value=artifacts_storage_dir) | 80 | ToasterSetting.objects.create(name="ARTIFACTS_STORAGE_DIR", value=artifacts_storage_dir) |
| 81 | return 0 | ||
| 82 | |||
| 81 | 83 | ||
| 84 | def _verify_build_environment(self): | ||
| 82 | self.guesspath = DN(DN(DN(DN(DN(DN(DN(__file__))))))) | 85 | self.guesspath = DN(DN(DN(DN(DN(DN(DN(__file__))))))) |
| 83 | # refuse to start if we have no build environments | 86 | # refuse to start if we have no build environments |
| 84 | while BuildEnvironment.objects.count() == 0: | 87 | while BuildEnvironment.objects.count() == 0: |
| @@ -197,12 +200,16 @@ class Command(NoArgsCommand): | |||
| 197 | 200 | ||
| 198 | while (_verify_be()): | 201 | while (_verify_be()): |
| 199 | pass | 202 | pass |
| 203 | return 0 | ||
| 200 | 204 | ||
| 205 | def _verify_default_settings(self): | ||
| 201 | # verify that default settings are there | 206 | # verify that default settings are there |
| 202 | if ToasterSetting.objects.filter(name = 'DEFAULT_RELEASE').count() != 1: | 207 | if ToasterSetting.objects.filter(name = 'DEFAULT_RELEASE').count() != 1: |
| 203 | ToasterSetting.objects.filter(name = 'DEFAULT_RELEASE').delete() | 208 | ToasterSetting.objects.filter(name = 'DEFAULT_RELEASE').delete() |
| 204 | ToasterSetting.objects.get_or_create(name = 'DEFAULT_RELEASE', value = '') | 209 | ToasterSetting.objects.get_or_create(name = 'DEFAULT_RELEASE', value = '') |
| 210 | return 0 | ||
| 205 | 211 | ||
| 212 | def _verify_builds_in_progress(self): | ||
| 206 | # we are just starting up. we must not have any builds in progress, or build environments taken | 213 | # we are just starting up. we must not have any builds in progress, or build environments taken |
| 207 | for b in BuildRequest.objects.filter(state = BuildRequest.REQ_INPROGRESS): | 214 | for b in BuildRequest.objects.filter(state = BuildRequest.REQ_INPROGRESS): |
| 208 | BRError.objects.create(req = b, errtype = "toaster", errmsg = "Toaster found this build IN PROGRESS while Toaster started up. This is an inconsistent state, and the build was marked as failed") | 215 | BRError.objects.create(req = b, errtype = "toaster", errmsg = "Toaster found this build IN PROGRESS while Toaster started up. This is an inconsistent state, and the build was marked as failed") |
| @@ -211,4 +218,19 @@ class Command(NoArgsCommand): | |||
| 211 | 218 | ||
| 212 | BuildEnvironment.objects.update(lock = BuildEnvironment.LOCK_FREE) | 219 | BuildEnvironment.objects.update(lock = BuildEnvironment.LOCK_FREE) |
| 213 | 220 | ||
| 221 | # also mark "In Progress builds as failures" | ||
| 222 | from django.utils import timezone | ||
| 223 | Build.objects.filter(outcome = Build.IN_PROGRESS).update(outcome = Build.FAILED, completed_on = timezone.now()) | ||
| 224 | |||
| 214 | return 0 | 225 | return 0 |
| 226 | |||
| 227 | |||
| 228 | |||
| 229 | def handle(self, **options): | ||
| 230 | retval = 0 | ||
| 231 | retval += self._verify_artifact_storage_dir() | ||
| 232 | retval += self._verify_build_environment() | ||
| 233 | retval += self._verify_default_settings() | ||
| 234 | retval += self._verify_builds_in_progress() | ||
| 235 | |||
| 236 | return retval | ||
diff --git a/bitbake/lib/toaster/bldcontrol/models.py b/bitbake/lib/toaster/bldcontrol/models.py index 02cfaf7086..b789446fa1 100644 --- a/bitbake/lib/toaster/bldcontrol/models.py +++ b/bitbake/lib/toaster/bldcontrol/models.py | |||
| @@ -125,6 +125,9 @@ class BuildRequest(models.Model): | |||
| 125 | def get_machine(self): | 125 | def get_machine(self): |
| 126 | return self.brvariable_set.get(name="MACHINE").value | 126 | return self.brvariable_set.get(name="MACHINE").value |
| 127 | 127 | ||
| 128 | def __str__(self): | ||
| 129 | return "%s %s" % (self.project, self.get_state_display()) | ||
| 130 | |||
| 128 | # These tables specify the settings for running an actual build. | 131 | # These tables specify the settings for running an actual build. |
| 129 | # They MUST be kept in sync with the tables in orm.models.Project* | 132 | # They MUST be kept in sync with the tables in orm.models.Project* |
| 130 | 133 | ||
diff --git a/bitbake/lib/toaster/orm/models.py b/bitbake/lib/toaster/orm/models.py index fb62a55d71..8a9a21eeee 100644 --- a/bitbake/lib/toaster/orm/models.py +++ b/bitbake/lib/toaster/orm/models.py | |||
| @@ -267,6 +267,9 @@ class Build(models.Model): | |||
| 267 | def toaster_exceptions(self): | 267 | def toaster_exceptions(self): |
| 268 | return self.logmessage_set.filter(level=LogMessage.EXCEPTION) | 268 | return self.logmessage_set.filter(level=LogMessage.EXCEPTION) |
| 269 | 269 | ||
| 270 | def __str__(self): | ||
| 271 | return "%d %s %s" % (self.id, self.project, ",".join([t.target for t in self.target_set.all()])) | ||
| 272 | |||
| 270 | 273 | ||
| 271 | # an Artifact is anything that results from a Build, and may be of interest to the user, and is not stored elsewhere | 274 | # an Artifact is anything that results from a Build, and may be of interest to the user, and is not stored elsewhere |
| 272 | class BuildArtifact(models.Model): | 275 | class BuildArtifact(models.Model): |
