diff --git a/lib/framework/static/js/ff_common1.js b/lib/framework/static/js/ff_common1.js index f96d97a..69759f9 100644 --- a/lib/framework/static/js/ff_common1.js +++ b/lib/framework/static/js/ff_common1.js @@ -32,7 +32,7 @@ $(window).on("load resize", function (event) { $.notify({ // options icon: 'glyphicon glyphicon-ok', - title: 'SJVA', + title: 'APP', message: '', url: '', target: '_blank' diff --git a/lib/framework/templates/macro.html b/lib/framework/templates/macro.html index 59a3ded..50d5f66 100644 --- a/lib/framework/templates/macro.html +++ b/lib/framework/templates/macro.html @@ -276,8 +276,17 @@ - - + +{% macro setting_select_empty(id, title, col='9', desc=None, value=None) %} + {{ setting_top(title) }} +
+
+
+ {{ setting_bottom(desc) }} +{% endmacro %} @@ -619,13 +628,7 @@ macros.setting_button_with_info([['toggle_btn', 'Toggle', [{'key':'category', 'v {{ setting_bottom(desc) }} {% endmacro %} -{% macro setting_select_empty(id, title, col='9', desc=None, value=None) %} - {{ setting_top(title) }} -
-
-
- {{ setting_bottom(desc) }} -{% endmacro %} + diff --git a/lib/framework/util.py b/lib/framework/util.py index e694686..53ae04a 100644 --- a/lib/framework/util.py +++ b/lib/framework/util.py @@ -6,17 +6,6 @@ from framework import F class Util(object): - - - @staticmethod - def db_list_to_dict(db_list): - """ - 세팅DB에서 사용, (key, value) dict로 변환 - """ - ret = {} - for item in db_list: - ret[item.key] = item.value - return ret @staticmethod def db_to_dict(db_list): diff --git a/lib/plugin/ffmpeg_queue.py b/lib/plugin/ffmpeg_queue.py index aef8aed..a1fdc2c 100644 --- a/lib/plugin/ffmpeg_queue.py +++ b/lib/plugin/ffmpeg_queue.py @@ -1,14 +1,11 @@ -# -*- coding: utf-8 -*- -######################################################### -# python -import os, sys, traceback -import threading, time -from datetime import datetime import abc +import os +import queue +import threading +import time +import traceback +from datetime import datetime -# third-party -# sjva 공용 -######################################################### class FfmpegQueueEntity(abc.ABCMeta('ABC', (object,), {'__slots__': ()})): @@ -78,12 +75,6 @@ class FfmpegQueueEntity(abc.ABCMeta('ABC', (object,), {'__slots__': ()})): class FfmpegQueue(object): - - - - - - def __init__(self, P, max_ffmpeg_count): self.P = P self.static_index = 1 @@ -136,6 +127,7 @@ class FfmpegQueue(object): continue import ffmpeg + #max_pf_count = 0 #save_path = ModelSetting.get('download_path') #if ModelSetting.get('auto_make_folder') == 'True': diff --git a/lib/plugin/logic.py b/lib/plugin/logic.py index c252692..17ccfcc 100644 --- a/lib/plugin/logic.py +++ b/lib/plugin/logic.py @@ -79,7 +79,7 @@ class Logic(object): except Exception as e: self.P.logger.error(f'Exception:{str(e)}') self.P.logger.error(traceback.format_exc()) - self.P.logger.debug('%s plugin_unload', self.P.package_name) + self.P.logger.debug(f'[{self.P.package_name}] plugin_unload end') except Exception as e: self.P.logger.error(f'Exception:{str(e)}') self.P.logger.error(traceback.format_exc()) diff --git a/lib/plugin/model_base.py b/lib/plugin/model_base.py index d06df42..3dad27f 100644 --- a/lib/plugin/model_base.py +++ b/lib/plugin/model_base.py @@ -1,17 +1,10 @@ -# -*- coding: utf-8 -*- -######################################################### -# python import traceback from datetime import datetime -# third-party +from framework import F -# sjva 공용 -from framework import db -from framework.util import Util -######################################################### -class ModelBase(db.Model): +class ModelBase(F.db.Model): __abstract__ = True __table_args__ = {'mysql_collate': 'utf8_general_ci'} model_setting = None @@ -26,8 +19,8 @@ class ModelBase(db.Model): def save(self): try: - db.session.add(self) - db.session.commit() + F.db.session.add(self) + F.db.session.commit() except Exception as e: self.logger.error(f'Exception:{str(e)}') self.logger.error(traceback.format_exc()) @@ -60,7 +53,7 @@ class ModelBase(db.Model): @classmethod def get_by_id(cls, id): try: - return db.session.query(cls).filter_by(id=id).first() + return F.db.session.query(cls).filter_by(id=id).first() except Exception as e: cls.logger.error(f'Exception:{str(e)}') cls.logger.error(traceback.format_exc()) @@ -69,7 +62,7 @@ class ModelBase(db.Model): @classmethod def get_list(cls, by_dict=False): try: - tmp = db.session.query(cls).all() + tmp = F.db.session.query(cls).all() if by_dict: tmp = [x.as_dict() for x in tmp] return tmp @@ -82,8 +75,8 @@ class ModelBase(db.Model): @classmethod def delete_by_id(cls, id): try: - db.session.query(cls).filter_by(id=id).delete() - db.session.commit() + F.db.session.query(cls).filter_by(id=id).delete() + F.db.session.commit() return True except Exception as e: cls.logger.error(f'Exception:{str(e)}') @@ -93,8 +86,8 @@ class ModelBase(db.Model): @classmethod def delete_all(cls): try: - db.session.query(cls).delete() - db.session.commit() + F.db.session.query(cls).delete() + F.db.session.commit() return True except Exception as e: cls.logger.error(f'Exception:{str(e)}') @@ -140,6 +133,6 @@ class ModelBase(db.Model): # 오버라이딩 @classmethod def make_query(cls, order='desc', search='', option1='all', option2='all'): - query = db.session.query(cls) + query = F.db.session.query(cls) return query \ No newline at end of file diff --git a/lib/plugin/model_setting.py b/lib/plugin/model_setting.py index e61dc7a..e72aca5 100644 --- a/lib/plugin/model_setting.py +++ b/lib/plugin/model_setting.py @@ -1,25 +1,18 @@ -# -*- coding: utf-8 -*- -######################################################### -# python -import os, traceback +import traceback -# third-party +from framework import F -# sjva 공용 -from framework import frame, db -from framework.util import Util -######################################################### def get_model_setting(package_name, logger, table_name=None): - class ModelSetting(db.Model): + class ModelSetting(F.db.Model): __tablename__ = '%s_setting' % package_name if table_name is None else table_name __table_args__ = {'mysql_collate': 'utf8_general_ci'} __bind_key__ = package_name - id = db.Column(db.Integer, primary_key=True) - key = db.Column(db.String, unique=True, nullable=False) - value = db.Column(db.String, nullable=False) + id = F.db.Column(F.db.Integer, primary_key=True) + key = F.db.Column(F.db.String, unique=True, nullable=False) + value = F.db.Column(F.db.String, nullable=False) def __init__(self, key, value): self.key = key @@ -34,7 +27,7 @@ def get_model_setting(package_name, logger, table_name=None): @staticmethod def get(key): try: - ret = db.session.query(ModelSetting).filter_by(key=key).first() + ret = F.db.session.query(ModelSetting).filter_by(key=key).first() if ret is not None: return ret.value.strip() return None @@ -44,7 +37,7 @@ def get_model_setting(package_name, logger, table_name=None): @staticmethod def has_key(key): - return (db.session.query(ModelSetting).filter_by(key=key).first() is not None) + return (F.db.session.query(ModelSetting).filter_by(key=key).first() is not None) @staticmethod def get_int(key): @@ -65,13 +58,13 @@ def get_model_setting(package_name, logger, table_name=None): @staticmethod def set(key, value): try: - item = db.session.query(ModelSetting).filter_by(key=key).with_for_update().first() + item = F.db.session.query(ModelSetting).filter_by(key=key).with_for_update().first() if item is not None: item.value = value.strip() if value is not None else value - db.session.commit() + F.db.session.commit() else: - db.session.add(ModelSetting(key, value.strip())) - db.session.commit() + F.db.session.add(ModelSetting(key, value.strip())) + F.db.session.commit() except Exception as exception: logger.error('Exception:%s %s', exception, key) logger.error(traceback.format_exc()) @@ -79,7 +72,7 @@ def get_model_setting(package_name, logger, table_name=None): @staticmethod def to_dict(): try: - ret = Util.db_list_to_dict(db.session.query(ModelSetting).all()) + ret = ModelSetting.db_list_to_dict(F.db.session.query(ModelSetting).all()) ret['package_name'] = package_name return ret except Exception as exception: @@ -99,9 +92,9 @@ def get_model_setting(package_name, logger, table_name=None): #logger.debug('Key:%s Value:%s', key, value) if ModelSetting.get(key) != value: change_list.append(key) - entity = db.session.query(ModelSetting).filter_by(key=key).with_for_update().first() + entity = F.db.session.query(ModelSetting).filter_by(key=key).with_for_update().first() entity.value = value - db.session.commit() + F.db.session.commit() return True, change_list except Exception as exception: logger.error('Exception:%s', exception) @@ -135,4 +128,11 @@ def get_model_setting(package_name, logger, table_name=None): tmp.append(_.strip()) return tmp - return ModelSetting \ No newline at end of file + @staticmethod + def db_list_to_dict(db_list): + ret = {} + for item in db_list: + ret[item.key] = item.value + return ret + + return ModelSetting diff --git a/lib/support/base/discord.py b/lib/support/base/discord.py index c9326b0..9b1e2f9 100644 --- a/lib/support/base/discord.py +++ b/lib/support/base/discord.py @@ -1,10 +1,18 @@ -import os, io, traceback, time, random, requests +import io +import os +import random +import time +import traceback + +import requests + try: - from discord_webhook import DiscordWebhook, DiscordEmbed + from discord_webhook import DiscordEmbed, DiscordWebhook except: os.system('pip3 install discord-webhook') -from discord_webhook import DiscordWebhook, DiscordEmbed +from discord_webhook import DiscordEmbed, DiscordWebhook + from . import logger webhook_list = [ @@ -176,7 +184,7 @@ class SupportDiscord(object): def discord_cdn(cls, byteio=None, filepath=None, filename=None, webhook_url=None, content='', retry=True): data = None if webhook_url is None: - webhook_url = webhook_list[random.randint(0,9)] # sjva 채널 + webhook_url = webhook_list[random.randint(0,9)] try: webhook = DiscordWebhook(url=webhook_url, content=content) diff --git a/lib/system/mod_log.py b/lib/system/mod_log.py new file mode 100644 index 0000000..4d4ec35 --- /dev/null +++ b/lib/system/mod_log.py @@ -0,0 +1,89 @@ +import shutil + +from support import SupportFile + +from .setup import * + +name = 'all_log' + +class ModuleLog(PluginModuleBase): + def __init__(self, P): + super(ModuleLog, self).__init__(P, name=name, first_menu='list') + + + def process_menu(self, page, req): + try: + arg = {} + log_files = os.listdir(os.path.join(F.config['path_data'], 'log')) + log_files.sort() + log_list = [] + for x in log_files: + if x.endswith('.log'): + log_list.append(x) + arg['log_list'] = '|'.join(log_list) + arg['all_list'] = '|'.join(log_files) + arg['filename'] = 'framework.log' + if 'filename' in request.form: + arg['filename'] = request.form['filename'] + return render_template(f'{__package__}_{name}.html', arg=arg) + except Exception as e: + P.logger.error(f'Exception:{str(e)}') + P.logger.error(traceback.format_exc()) + return render_template('sample.html', title=f"{__package__}/{name}/{page}") + + + def process_command(self, command, arg1, arg2, arg3, req): + ret = {'ret':'success'} + if command == 'plugin_install': + ret = F.PluginManager.plugin_install(arg1) + elif command == 'get_plugin_list': + data = [] + """ + for name, entity in F.PluginManager.plugin_list.items(): + if entity['version'] == '3': + data.append({'package_name':name}) + else: + data.append(entity['P'].plugin_info) + """ + for name, entity in F.PluginManager.all_package_list.items(): + try: + if entity.get('version') == '3': + #data.append(entity) + data.append({'package_name':name}) + else: + data.append(entity['P'].plugin_info) + data[-1]['loading'] = entity.get('loading') + data[-1]['status'] = entity.get('status') + data[-1]['log'] = entity.get('log') + except Exception as e: + data.append({'package_name':name}) + P.logger.error(f'Exception:{str(e)}') + P.logger.error(traceback.format_exc()) + ret['data'] = data + #P.logger.debug(data) + elif command == 'uninstall': + info = F.PluginManager.all_package_list[arg1] + if os.path.exists(info['path']): + try: + shutil.rmtree(info['path']) + ret['msg'] = '삭제하였습니다.
재시작시 적용됩니다.' + except Exception as e: + P.logger.error(f'Exception:{str(e)}') + P.logger.error(traceback.format_exc()) + ret['msg'] = info['path'] + "
삭제에 실패하였습니다.
" + str(e) + ret['ret'] = 'danger' + else: + ret['msg'] = info['path'] + "
폴더가 없습니다." + ret['ret'] = 'danger' + return jsonify(ret) + + + def plugin_load(self): + try: + pass + except Exception as e: + P.logger.error(f'Exception:{str(e)}') + P.logger.error(traceback.format_exc()) + + + \ No newline at end of file diff --git a/lib/system/mod_setting.py b/lib/system/mod_setting.py index 18bbd8c..71335f8 100644 --- a/lib/system/mod_setting.py +++ b/lib/system/mod_setting.py @@ -117,6 +117,7 @@ class ModuleSetting(PluginModuleBase): def plugin_load(self): try: + F.logger.info(f"arg_repeat : {F.config['arg_repeat']}") if F.config['arg_repeat'] == 0 or SystemModelSetting.get('system_start_time') == '': SystemModelSetting.set('system_start_time', datetime.now().strftime('%Y-%m-%d %H:%M:%S')) SystemModelSetting.set('repeat', str(F.config['arg_repeat'])) diff --git a/lib/system/setup.py b/lib/system/setup.py index 8001362..9b8fd57 100644 --- a/lib/system/setup.py +++ b/lib/system/setup.py @@ -28,16 +28,16 @@ __menu = { 'uri': 'tool', 'name': '시스템 툴', 'list': [ + {'uri': 'upload', 'name': '업로드'}, {'uri': 'celery', 'name': 'celery 테스트'}, {'uri': 'python', 'name': 'Python'}, {'uri': 'db', 'name': 'DB'}, {'uri': 'crypt', 'name': '암호화'}, - {'uri': 'upload', 'name': '업로드'}, ] }, { - 'uri': 'log', - 'name': '로그' + 'uri': 'all_log', + 'name': '전체 로그' } ] } @@ -72,11 +72,12 @@ try: SystemModelSetting = P.ModelSetting from .mod_home import ModuleHome + from .mod_log import ModuleLog from .mod_plugin import ModulePlugin from .mod_route import ModuleRoute from .mod_setting import ModuleSetting from .mod_tool import ModuleTool - P.set_module_list([ModuleHome, ModuleRoute, ModuleSetting, ModulePlugin, ModuleTool]) + P.set_module_list([ModuleHome, ModuleRoute, ModuleSetting, ModulePlugin, ModuleTool, ModuleLog]) except Exception as e: P.logger.error(f'Exception:{str(e)}') diff --git a/lib/system/templates/system_log.html b/lib/system/templates/system_all_log.html similarity index 82% rename from lib/system/templates/system_log.html rename to lib/system/templates/system_all_log.html index b765a0a..0d4b9ab 100644 --- a/lib/system/templates/system_log.html +++ b/lib/system/templates/system_all_log.html @@ -1,23 +1,9 @@ {% extends "base.html" %} {% block content %} -
- {{ macros.setting_top(left='로그 파일 선택') }} -
-
-
-
- {{ macros.setting_bottom() }} + {{ macros.setting_select_empty('log_select1', '로그 파일 선택 (.log)') }} + {{ macros.setting_select_empty('log_select2', '로그 파일 선택 (.logX)') }}
{{ macros.m_tab_content_end() }} - {{ macros.m_tab_content_start('실시간', false) }}
-
@@ -44,14 +28,10 @@
{{ macros.m_tab_content_end() }} - - -{% endblock %} diff --git a/lib/system/templates/system_setting_selenium.html b/lib/system/templates/system_setting_selenium.html deleted file mode 100644 index 09a5c0f..0000000 --- a/lib/system/templates/system_setting_selenium.html +++ /dev/null @@ -1,166 +0,0 @@ -{% extends "base.html" %} -{% block content %} - -
- {{ macros.m_button_group([['globalSettingSaveBtn', '설정 저장']])}} - {{ macros.m_row_start('5') }} - {{ macros.m_row_end() }} - - -
- - - - -{% endblock %} diff --git a/lib/system/templates/system_setting_site.html b/lib/system/templates/system_setting_site.html deleted file mode 100644 index 453c8a8..0000000 --- a/lib/system/templates/system_setting_site.html +++ /dev/null @@ -1,179 +0,0 @@ -{% extends "base.html" %} -{% block content %} - -
- {{ macros.m_button_group([['globalSettingSaveBtn', '설정 저장']])}} - {{ macros.m_row_start('5') }} - {{ macros.m_row_end() }} - -
- -
-
- - - -{% endblock %} diff --git a/lib/system/templates/system_setting_telegram_bot.html b/lib/system/templates/system_setting_telegram_bot.html deleted file mode 100644 index 5d5ce5b..0000000 --- a/lib/system/templates/system_setting_telegram_bot.html +++ /dev/null @@ -1,85 +0,0 @@ -{% extends "base.html" %} -{% block content %} - -
- {{ macros.m_button_group([['globalSettingSaveBtn', '설정 저장']])}} - {{ macros.m_row_start('5') }} - {{ macros.m_row_end() }} - -
- -
-
- - - - -{% endblock %} diff --git a/lib/system/templates/system_telegram_setting.html b/lib/system/templates/system_telegram_setting.html deleted file mode 100644 index 84f1eef..0000000 --- a/lib/system/templates/system_telegram_setting.html +++ /dev/null @@ -1,135 +0,0 @@ -{% extends "base.html" %} -{% block wide_menu %} - -{% endblock %} - -{% block content %} -
- {{ macros.setting_scheduler_button(arg['is_include'], arg['is_running']) }} -
- {{ macros.setting_checkbox('telegram_auto_start', '시작시 자동실행', value=arg['auto_start'], desc='On : 시작시 자동으로 스케쥴러에 등록됩니다.') }} - {{ macros.setting_checkbox('telegram_process_rss', '토렌트', value=arg['process_rss'], desc='On : 토렌트 데이터를 수신하여 저장') }} -
- {{ macros.setting_input_text('telegram_process_rss_type', '수신 타입', value=arg['process_rss_type'], desc=['all인 경우 모두 받음. 구분자 ,', 'TV : drama, ent, dacu, etc', '영화 : movie', 'AV : av_censored, av_uncensored, av_west', '기타 : music, user' ]) }} -
- {{ macros.setting_checkbox('telegram_send_notify', '수신정보 알림', value=arg['send_notify'], desc='On : On 상태인 데이터가 수신될 때 알림.') }} - {{ macros.setting_checkbox('telegram_disable_notification', '알람 Disable', value=arg['disable_notification'], desc='On : 알람 소리 없이 메시지를 수신합니다.') }} - {{ macros.m_hr() }} - {{ macros.setting_input_text('telegram_bot_token', 'Bot Token', value=arg['bot_token']) }} - {{ macros.setting_input_text_and_buttons('telegram_chat_id', 'My Chat ID', [['test_btn', '테스트']], value=arg['chat_id'], col='9', desc=['사용자가 먼저 봇과 대화를 시작하여야 합니다.', '(대화창이 있을 경우에만 알림 수신)']) }} - {{ macros.setting_button([['globalSettingSaveBtn', '저장']]) }} -
- {{ macros.m_hr() }} - {{ macros.setting_button([['open_url1_btn', 'BotFather'], ['open_url2_btn', 'SJVA Bot Channel'], ['open_url3_btn', 'SJVA Bot Channel 관리 봇']]) }} -
- - -{% endblock %} \ No newline at end of file diff --git a/lib/system/templates/system_tool_crypt.html b/lib/system/templates/system_tool_crypt.html index 610ae0b..71be10d 100644 --- a/lib/system/templates/system_tool_crypt.html +++ b/lib/system/templates/system_tool_crypt.html @@ -13,7 +13,7 @@