def dockerfile(bid): """ Displays the dockerfile contents for the build in question. :param bid: Identfies the build object in the database. :return: An HTML template rendered with log information, sent periodically from worker nodes. """ if request.method == 'GET': fname = 'dockerfile.html' if demo_mode: fname = 'demo/dockerfile.html' bid_short = bid[0:5] created = "Unknown" description = "Unknown" git_url = "Unknown" state = "Unknown" dockerfile = "<center>This build is waiting for a worker.</center>" err = False b = models.Build.query.filter_by(bid=bid).first() if b is None: err = True else: form = Dockerfile() created = formatting.pretty_date(b.created) description = b.options['description'] git_url = b.options['url'] state = b.state if b.dockerfile is not None: dockerfile = b.dockerfile form.dockerfile.data = dockerfile port_data = json.dumps(b.options['ports']) return render_template(fname, title='Chorus - Logs', ports=port_data, form=form, bid=bid, bid_short=bid_short, created=created, description=description, git_url=git_url, state=state, err=False) elif request.method == 'POST': b = models.Build.query.filter_by(bid=bid).first() if b is None or b.state not in ['Stopped', 'Failed']: return make_response(redirect('/queue')) else: form = Dockerfile(request.form) if form.validate(): options = dict(b.options) options['bid'] = str(uuid.uuid4()) options['timeout'] = app.config['BUILD_TIMEOUT'] options['dockerfile_content'] = form.dockerfile.data # Insert build into db db.session.commit() q.schedule(options) return make_response(redirect('/queue'))
def ajax_queue(taskid): """ This route is an ajax call from the /queue page that populates a table via javascript. :param taskid: The TaskID of the celery task started in '/queue' :return: A json object that can be used to create a table on the client side HTML. """ State.hosts = {} try: ret_value = list(State.tasks[taskid].get(timeout=TIMEOUT)) parsed = [] for i in ret_value: q.update_state(i, parsed) except Exception as e: app.logger.error(str(e)) pass results = [] records = list(models.Build.query.filter_by().order_by(models.Build.created).all()) db.session.commit() for b in records: s = dict() s['created'] = formatting.pretty_date(b.created) s['id'] = b.bid s['description'] = b.options['description'] s['url'] = b.options['url'] s['state'] = b.state results.append(s) results.reverse() return jsonify(builds=results)
def logs(bid): """ Displays the log contents for the build in question. :param bid: Identfies the build object in the database. :return: An HTML template rendered with log information, sent periodically from worker nodes. """ bid_short = bid[0:5] created = "Unknown" description = "Unknown" git_url = "Unknown" state = "Unknown" logdata = "<center>This build is waiting for a worker.</center>" err = False b = models.Build.query.filter_by(bid=bid).first() if b is None: err = True else: created = formatting.pretty_date(b.created) description = b.options['description'] git_url = b.options['url'] state = b.state if b.log is not None: logdata = b.log.replace('\n\n', '\n').replace('\n', '<br>') if b.dockerfile is not None: dockerfile_available = True else: dockerfile_available = False port_data = json.dumps(b.options['ports']) return render_template('logs.html', title='Chorus - Logs', bid=bid, ports=port_data, bid_short=bid_short, created=created, description=description, git_url=git_url, state=state, logdata=logdata, dockerfile_available=dockerfile_available, err=False)