From cae460b11bff713e50835cdbe95305870cc5e6a5 Mon Sep 17 00:00:00 2001 From: Joseph Schorr Date: Thu, 12 Feb 2015 16:27:26 -0500 Subject: [PATCH 1/4] Fix test db --- test/data/test.db | Bin 684032 -> 712704 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/test/data/test.db b/test/data/test.db index c37aec119f0b2d599ca2fc5db9c1e1660280afa0..63d2768c14cff78e694a40d7549b9ecf17abbb68 100644 GIT binary patch delta 14003 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 delta 12539 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 D_1=ML From ae8bb5fc134ac4ab354489b30e814536fcf9f2e0 Mon Sep 17 00:00:00 2001 From: Joseph Schorr Date: Thu, 12 Feb 2015 16:38:43 -0500 Subject: [PATCH 2/4] Add preparing build node status item and change the build status colors to be variations on a blue color --- buildman/server.py | 4 ++++ static/css/quay.css | 22 +++++++++------------- static/js/app.js | 3 +++ 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/buildman/server.py b/buildman/server.py index 7b10995b4..ebbc558bb 100644 --- a/buildman/server.py +++ b/buildman/server.py @@ -11,6 +11,7 @@ from threading import Event from trollius.coroutines import From from datetime import timedelta +from buildman.jobutil.buildstatus import StatusHandler from buildman.jobutil.buildjob import BuildJob, BuildJobLoadException from data import database from data.queue import WorkQueue @@ -158,6 +159,9 @@ class BuilderServer(object): logger.debug('Build job found. Checking for an avaliable worker.') scheduled = yield From(self._lifecycle_manager.schedule(build_job)) if scheduled: + status_handler = StatusHandler(self._build_logs, build_job.repo_build.uuid) + status_handler.set_phase('build-scheduled') + self._job_count = self._job_count + 1 logger.debug('Build job scheduled. Running: %s', self._job_count) else: diff --git a/static/css/quay.css b/static/css/quay.css index 9046bf722..e09fce346 100644 --- a/static/css/quay.css +++ b/static/css/quay.css @@ -845,28 +845,24 @@ i.toggle-icon:hover { background-color: #DFFF00; } -.phase-icon.waiting, .phase-icon.unpacking, .phase-icon.starting, .phase-icon.initializing { - background-color: #ddd; +.phase-icon.waiting, .phase-icon.build-scheduled { + background-color: rgba(66, 139, 202, 0.2); } -.phase-icon.pulling { - background-color: #cab442; +.phase-icon.unpacking, .phase-icon.starting, .phase-icon.initializing { + background-color: rgba(66, 139, 202, 0.4); } -.phase-icon.building { - background-color: #f0ad4e; +.phase-icon.pulling, .phase-icon.priming-cache, .phase-icon.checking-cache { + background-color: rgba(66, 139, 202, 0.6); } -.phase-icon.priming-cache, .phase-icon.checking-cache { - background-color: #cab442; -} - -.phase-icon.pushing { - background-color: #5cb85c; +.phase-icon.pushing, .phase-icon.building { + background-color: rgba(66, 139, 202, 0.8); } .phase-icon.complete { - background-color: #428bca; + background-color: rgba(66, 139, 202, 1); } .build-status { diff --git a/static/js/app.js b/static/js/app.js index ed9c7a842..63f697755 100644 --- a/static/js/app.js +++ b/static/js/app.js @@ -5830,6 +5830,9 @@ quayApp.directive('buildMessage', function () { case 'priming-cache': return 'Priming cache for build'; + case 'build-scheduled': + return 'Preparing build node'; + case 'pushing': return 'Pushing image built from Dockerfile'; From cd245e62bf567da7979f601eb3c2793a28b1267e Mon Sep 17 00:00:00 2001 From: Jake Moshenko Date: Fri, 13 Feb 2015 11:56:59 -0500 Subject: [PATCH 3/4] Remove the access_token_id column from log entries. --- ...1d2d86d09fcd_actually_remove_the_column.py | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 data/migrations/versions/1d2d86d09fcd_actually_remove_the_column.py diff --git a/data/migrations/versions/1d2d86d09fcd_actually_remove_the_column.py b/data/migrations/versions/1d2d86d09fcd_actually_remove_the_column.py new file mode 100644 index 000000000..bfbea380e --- /dev/null +++ b/data/migrations/versions/1d2d86d09fcd_actually_remove_the_column.py @@ -0,0 +1,30 @@ +"""Actually remove the column access_token_id + +Revision ID: 1d2d86d09fcd +Revises: 14fe12ade3df +Create Date: 2015-02-12 16:27:30.260797 + +""" + +# revision identifiers, used by Alembic. +revision = '1d2d86d09fcd' +down_revision = '14fe12ade3df' + +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import mysql + +def upgrade(tables): + ### commands auto generated by Alembic - please adjust! ### + op.drop_constraint(u'fk_logentry_access_token_id_accesstoken', 'logentry', type_='foreignkey') + op.drop_index('logentry_access_token_id', table_name='logentry') + op.drop_column('logentry', 'access_token_id') + ### end Alembic commands ### + + +def downgrade(tables): + ### commands auto generated by Alembic - please adjust! ### + op.add_column('logentry', sa.Column('access_token_id', mysql.INTEGER(display_width=11), autoincrement=False, nullable=True)) + op.create_foreign_key(u'fk_logentry_access_token_id_accesstoken', 'logentry', 'accesstoken', ['access_token_id'], ['id']) + op.create_index('logentry_access_token_id', 'logentry', ['access_token_id'], unique=False) + ### end Alembic commands ### From 2743fe6f4da5b757bf8f2da765685d3a4945c289 Mon Sep 17 00:00:00 2001 From: Jake Moshenko Date: Fri, 13 Feb 2015 13:11:50 -0500 Subject: [PATCH 4/4] Trap migration exceptions for the migration that we expect to fail in prod. --- ...1d2d86d09fcd_actually_remove_the_column.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/data/migrations/versions/1d2d86d09fcd_actually_remove_the_column.py b/data/migrations/versions/1d2d86d09fcd_actually_remove_the_column.py index bfbea380e..a7942b7d4 100644 --- a/data/migrations/versions/1d2d86d09fcd_actually_remove_the_column.py +++ b/data/migrations/versions/1d2d86d09fcd_actually_remove_the_column.py @@ -13,18 +13,25 @@ down_revision = '14fe12ade3df' from alembic import op import sqlalchemy as sa from sqlalchemy.dialects import mysql +from sqlalchemy.exc import InternalError def upgrade(tables): ### commands auto generated by Alembic - please adjust! ### - op.drop_constraint(u'fk_logentry_access_token_id_accesstoken', 'logentry', type_='foreignkey') - op.drop_index('logentry_access_token_id', table_name='logentry') - op.drop_column('logentry', 'access_token_id') + try: + op.drop_constraint(u'fk_logentry_access_token_id_accesstoken', 'logentry', type_='foreignkey') + op.drop_index('logentry_access_token_id', table_name='logentry') + op.drop_column('logentry', 'access_token_id') + except InternalError: + pass ### end Alembic commands ### def downgrade(tables): ### commands auto generated by Alembic - please adjust! ### - op.add_column('logentry', sa.Column('access_token_id', mysql.INTEGER(display_width=11), autoincrement=False, nullable=True)) - op.create_foreign_key(u'fk_logentry_access_token_id_accesstoken', 'logentry', 'accesstoken', ['access_token_id'], ['id']) - op.create_index('logentry_access_token_id', 'logentry', ['access_token_id'], unique=False) + try: + op.add_column('logentry', sa.Column('access_token_id', mysql.INTEGER(display_width=11), autoincrement=False, nullable=True)) + op.create_foreign_key(u'fk_logentry_access_token_id_accesstoken', 'logentry', 'accesstoken', ['access_token_id'], ['id']) + op.create_index('logentry_access_token_id', 'logentry', ['access_token_id'], unique=False) + except InternalError: + pass ### end Alembic commands ###