mirror of
https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
synced 2024-12-24 10:34:17 +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 flask_sqlalchemy import SQLAlchemy
|
||||||
from .swarm import Swarm
|
from .swarm import Swarm
|
||||||
|
|
||||||
|
|
||||||
db = SQLAlchemy()
|
db = SQLAlchemy()
|
||||||
|
|
||||||
login_manager = LoginManager()
|
login_manager = LoginManager()
|
||||||
login_manager.login_view = 'auth.login'
|
login_manager.login_view = 'auth.login'
|
||||||
|
|
||||||
mail = Mail()
|
mail = Mail()
|
||||||
swarm = Swarm()
|
swarm = Swarm()
|
||||||
|
|
||||||
@ -23,6 +20,7 @@ def create_app(config_name):
|
|||||||
db.init_app(app)
|
db.init_app(app)
|
||||||
login_manager.init_app(app)
|
login_manager.init_app(app)
|
||||||
mail.init_app(app)
|
mail.init_app(app)
|
||||||
|
swarm.init_app(app)
|
||||||
|
|
||||||
from .auth import auth as auth_blueprint
|
from .auth import auth as auth_blueprint
|
||||||
app.register_blueprint(auth_blueprint, url_prefix='/auth')
|
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 docker
|
||||||
import time
|
import time
|
||||||
import json
|
import json
|
||||||
@ -5,9 +7,16 @@ import os
|
|||||||
|
|
||||||
|
|
||||||
class Swarm:
|
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()
|
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
|
' Swarm mode is intendet to run containers which serve a non terminating
|
||||||
' service like a webserver. For processing an occuring job it is necessary
|
' service like a webserver. For processing an occuring job it is necessary
|
||||||
@ -81,18 +90,29 @@ class Swarm:
|
|||||||
restart_policy=_restart_policy
|
restart_policy=_restart_policy
|
||||||
)
|
)
|
||||||
'''
|
'''
|
||||||
' Poll the service until the job is completly executed.
|
' Because it takes some time until all data in the service object is
|
||||||
'
|
' initialized (especcially the task list returned by the service.tasks
|
||||||
' Note: Because it takes some time until all data in the service object
|
' method), a poll loop checks if the task list is empty.
|
||||||
' 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).
|
|
||||||
'''
|
'''
|
||||||
print(service.attrs)
|
while not service.tasks():
|
||||||
while not service.tasks() or \
|
|
||||||
service.tasks()[0].get('Status').get('State') != 'complete':
|
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
service.reload()
|
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.
|
# Remove the service from the swarm.
|
||||||
service.remove()
|
service.remove()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user