131 lines
4.5 KiB
Python
131 lines
4.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
#########################################################
|
|
# python
|
|
import logging
|
|
import os
|
|
import platform
|
|
import threading
|
|
import time
|
|
import traceback
|
|
|
|
# third-party
|
|
from flask import (Blueprint, Response, jsonify, redirect, render_template,
|
|
request, send_file)
|
|
from framework import F, app, celery, path_app_root, path_data
|
|
|
|
from .model import ModelSetting
|
|
# 패키지
|
|
from .plugin import logger, package_name
|
|
|
|
# sjva 공용
|
|
|
|
|
|
|
|
class SystemLogicEnv(object):
|
|
@staticmethod
|
|
def load_export():
|
|
try:
|
|
from support import SupportFile
|
|
f = os.path.join(path_app_root, 'export.sh')
|
|
if os.path.exists(f):
|
|
return SupportFile.read_file(f)
|
|
except Exception as exception:
|
|
logger.error('Exception:%s', exception)
|
|
logger.error(traceback.format_exc())
|
|
|
|
@staticmethod
|
|
def process_ajax(sub, req):
|
|
ret = False
|
|
try:
|
|
if sub == 'setting_save':
|
|
data = req.form['export']
|
|
#logger.debug(data)
|
|
data = data.replace("\r\n", "\n" ).replace( "\r", "\n" )
|
|
ret = False
|
|
if platform.system() != 'Windows':
|
|
f = os.path.join(path_app_root, 'export.sh')
|
|
with open(f, 'w') as f:
|
|
f.write(data)
|
|
#os.system("dos2unix export.sh")
|
|
ret = True
|
|
elif sub == 'ps':
|
|
def func():
|
|
import system
|
|
commands = [
|
|
['msg', u'잠시만 기다려주세요.'],
|
|
['ps', '-ef'],
|
|
['top', '-n1']
|
|
]
|
|
#commands.append(['msg', u'설치가 완료되었습니다.'])
|
|
system.SystemLogicCommand.start('ps', commands)
|
|
t = threading.Thread(target=func, args=())
|
|
t.setDaemon(True)
|
|
t.start()
|
|
elif sub == 'celery_test':
|
|
ret = SystemLogicEnv.celery_test()
|
|
elif sub == 'worker_start':
|
|
os.system('sh worker_start.sh &')
|
|
"""
|
|
def func():
|
|
import system
|
|
commands = [
|
|
['msg', u'잠시만 기다려주세요.'],
|
|
['sh', 'worker_start.sh'],
|
|
]
|
|
#commands.append(['msg', u'설치가 완료되었습니다.'])
|
|
system.SystemLogicCommand.start('ps', commands)
|
|
t = threading.Thread(target=func, args=())
|
|
t.setDaemon(True)
|
|
t.start()
|
|
"""
|
|
ret = True
|
|
except Exception as exception:
|
|
logger.error('Exception:%s', exception)
|
|
logger.error(traceback.format_exc())
|
|
return jsonify(ret)
|
|
|
|
|
|
|
|
@staticmethod
|
|
def celery_test():
|
|
if F.config['use_celery']:
|
|
from celery import Celery
|
|
from celery.exceptions import NotRegistered, TimeoutError
|
|
|
|
data = {}
|
|
try:
|
|
result = SystemLogicEnv.celery_test2.apply_async()
|
|
logger.debug(result)
|
|
try:
|
|
tmp = result.get(timeout=5, propagate=True)
|
|
except Exception as exception:
|
|
logger.error('Exception:%s', exception)
|
|
logger.error(traceback.format_exc())
|
|
#result = SystemLogicEnv.celery_test2.delay()
|
|
data['ret'] = 'success'
|
|
data['data'] = tmp
|
|
except TimeoutError:
|
|
data['ret'] = 'timeout'
|
|
data['data'] = u'celery가 동작중이 아니거나 모든 프로세스가 작업중입니다.'
|
|
except NotRegistered:
|
|
data['ret'] = 'not_registered'
|
|
data['data'] = u'Not Registered'
|
|
#logger.debug(data)
|
|
else:
|
|
data['ret'] = 'no_celery'
|
|
data['data'] = u'celery 실행환경이 아닙니다.'
|
|
return data
|
|
|
|
@staticmethod
|
|
@celery.task
|
|
def celery_test2():
|
|
try:
|
|
logger.debug('!!!! celery_test2222')
|
|
import time
|
|
time.sleep(1)
|
|
data = u'정상입니다. 이 메시지는 celery 에서 반환됩니다. '
|
|
return data
|
|
except Exception as exception:
|
|
logger.error('Exception:%s', exception)
|
|
logger.error(traceback.format_exc())
|