mirror of
https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
synced 2024-12-24 02:24:20 +00:00
Update job database entries on status change.
This commit is contained in:
parent
9d0d386942
commit
3de48946b9
@ -5,12 +5,9 @@ from flask_mail import Mail
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
from .swarm import Swarm
|
||||
|
||||
|
||||
db = SQLAlchemy()
|
||||
|
||||
login_manager = LoginManager()
|
||||
login_manager.login_view = 'auth.login'
|
||||
|
||||
mail = Mail()
|
||||
swarm = Swarm()
|
||||
|
||||
@ -23,6 +20,7 @@ def create_app(config_name):
|
||||
db.init_app(app)
|
||||
login_manager.init_app(app)
|
||||
mail.init_app(app)
|
||||
swarm.init_app(app)
|
||||
|
||||
from .auth import auth as auth_blueprint
|
||||
app.register_blueprint(auth_blueprint, url_prefix='/auth')
|
||||
|
40
app/swarm.py
40
app/swarm.py
@ -1,3 +1,5 @@
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
import docker
|
||||
import time
|
||||
import json
|
||||
@ -5,9 +7,16 @@ import os
|
||||
|
||||
|
||||
class Swarm:
|
||||
def __init__(self):
|
||||
def __init__(self, app=None):
|
||||
self.app = app
|
||||
if app is not None:
|
||||
self.init_app(app)
|
||||
self.docker = docker.from_env()
|
||||
|
||||
def init_app(self, app):
|
||||
engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI'])
|
||||
self.Session = sessionmaker(bind=engine)
|
||||
|
||||
'''
|
||||
' Swarm mode is intendet to run containers which serve a non terminating
|
||||
' service like a webserver. For processing an occuring job it is necessary
|
||||
@ -81,18 +90,29 @@ class Swarm:
|
||||
restart_policy=_restart_policy
|
||||
)
|
||||
'''
|
||||
' Poll the service until the job is completly executed.
|
||||
'
|
||||
' Note: Because it takes some time until all data in the service object
|
||||
' is initialized (especcially the task list returned by the tasks
|
||||
' method) the poll loop also checks if the task list is empy (The
|
||||
' not service.tasks() condition implements this).
|
||||
' Because it takes some time until all data in the service object is
|
||||
' initialized (especcially the task list returned by the service.tasks
|
||||
' method), a poll loop checks if the task list is empty.
|
||||
'''
|
||||
print(service.attrs)
|
||||
while not service.tasks() or \
|
||||
service.tasks()[0].get('Status').get('State') != 'complete':
|
||||
while not service.tasks():
|
||||
time.sleep(1)
|
||||
service.reload()
|
||||
'''
|
||||
' Poll the service until the job is completly executed.
|
||||
'''
|
||||
session = self.Session()
|
||||
while True:
|
||||
current_state = service.tasks()[0].get('Status').get('State')
|
||||
if job.status != current_state:
|
||||
job.status = current_state
|
||||
session.add(job)
|
||||
session.commit()
|
||||
print(current_state)
|
||||
if current_state == 'complete':
|
||||
break
|
||||
time.sleep(1)
|
||||
service.reload()
|
||||
session.close()
|
||||
# Remove the service from the swarm.
|
||||
service.remove()
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user