def second_menu(sub, sub2): try: arg = ModelSetting.to_dict() arg['sub'] = sub job_id = '%s_%s' % (package_name, sub) if sub == 'download': if sub2 == 'setting': arg['scheduler'] = str(scheduler.is_include(job_id)) arg['is_running'] = str(scheduler.is_running(job_id)) return render_template('{package_name}_{sub}_{sub2}.html'.format(package_name=package_name, sub=sub, sub2=sub2), arg=arg) elif sub2 == 'list': return render_template('{package_name}_{sub}_{sub2}.html'.format(package_name=package_name, sub=sub, sub2=sub2), arg=arg) elif sub == 'subcat': logger.debug('SUB %s %s %s', package_name, sub, sub2) if sub2 == 'setting': arg['scheduler'] = str(scheduler.is_include(job_id)) arg['is_running'] = str(scheduler.is_running(job_id)) return render_template('{package_name}_{sub}_{sub2}.html'.format(package_name=package_name, sub=sub, sub2=sub2), arg=arg) elif sub2 == 'list': logger.debug('SUB %s %s %s', package_name, sub, sub2) return render_template('%s_%s_%s.html' % (package_name, sub, sub2), arg=arg) return render_template('sample.html', title='%s - %s' % (package_name, sub)) except Exception as e: logger.error('Exception:%s', e) logger.error(traceback.format_exc())
def process_ajax(self, sub, req): try: if sub == 'web_list': return jsonify(ModelPeriodicItem.web_list(request)) elif sub == 'command': ret = {} command = req.form['command'] if command == 'kill': ret = self.kill(req.form['arg1']) elif command == 'remove_no_append_data': ret = ModelPeriodicItem.remove_no_append_data() elif command == 'get_tasks': section_list = PlexDBHandle.library_sections() #logger.debug(d(section_list)) tasks = self.get_jobs() for idx, task in enumerate(tasks): for section in section_list: if str(task['섹션ID']) == str(section['id']): task['section_title'] = section['name'] break ret = {'data' : tasks} elif command == 'task_sched': idx = int(req.form['arg1']) flag = (req.form['arg2'] == 'true') job_id = f'{self.P.package_name}_periodic_{idx}' ret = {'ret':'success'} if flag and scheduler.is_include(job_id): ret['msg'] = '이미 스케쥴러에 등록되어 있습니다.' elif flag and scheduler.is_include(job_id) == False: result = self.sched_add(idx) elif flag == False and scheduler.is_include(job_id): result = scheduler.remove_job(job_id) ret['msg'] = '스케쥴링 취소' elif flag == False and scheduler.is_include(job_id) == False: ret['msg'] = '등록되어 있지 않습니다.' elif command == 'all_sched_add': tasks = self.get_jobs() for idx, item in enumerate(tasks): if item.get('스케쥴링', '등록') == '등록': self.sched_add(idx, item=item) ret = {'ret' : 'success', 'msg' : 'Success'} elif command == 'all_sched_remove': tasks = self.get_jobs() for idx, item in enumerate(tasks): if scheduler.is_include(item['job_id']): scheduler.remove_job(item['job_id']) ret = {'ret' : 'success', 'msg' : 'Success'} elif command == 'task_execute': result = self.one_execute(int(req.form['arg1'])) ret = {'ret' : 'success', 'data':result} return jsonify(ret) except Exception as e: P.logger.error(f'Exception:{str(e)}') P.logger.error(traceback.format_exc()) return jsonify({'ret':'danger', 'msg':str(e)})
def process_menu(self, sub, req): arg = P.ModelSetting.to_dict() arg['sub'] = self.name arg['sub2'] = sub try: if sub == 'movie': arg['library_list'] = PlexDBHandle.library_sections( section_type=1) elif sub == 'show': arg['library_list'] = PlexDBHandle.library_sections( section_type=2) elif sub == 'music': arg['library_list'] = PlexDBHandle.library_sections( section_type=8) elif sub == 'cache': arg['scheduler'] = str( scheduler.is_include( self.sub_list[sub].get_scheduler_name())) arg['is_running'] = str( scheduler.is_running( self.sub_list[sub].get_scheduler_name())) return render_template(f'{package_name}_{name}_{sub}.html', arg=arg) except Exception as e: logger.error(f'Exception:{str(e)}') logger.error(traceback.format_exc()) return render_template('sample.html', title=f"{package_name}/{name}/{sub}")
def first_menu(sub): logger.debug('DETAIL %s %s', package_name, sub) if sub == 'setting': arg = ModelSetting.to_dict() arg['package_name'] = package_name arg['scheduler'] = str(scheduler.is_include(package_name)) arg['is_running'] = str(scheduler.is_running(package_name)) from system.model import ModelSetting as SystemModelSetting ddns = SystemModelSetting.get('ddns') arg['rss_api'] = '%s/%s/api/rss' % (ddns, package_name) if SystemModelSetting.get_bool('auth_use_apikey'): arg['rss_api'] += '?apikey=%s' % SystemModelSetting.get( 'auth_apikey') return render_template('%s_setting.html' % package_name, sub=sub, arg=arg) elif sub == 'list': arg = {'package_name': package_name} arg['is_torrent_info_installed'] = False try: import torrent_info arg['is_torrent_info_installed'] = True except Exception as e: pass return render_template('%s_list.html' % package_name, arg=arg) elif sub == 'log': return render_template('log.html', package=package_name) return render_template('sample.html', title='%s - %s' % (package_name, sub))
def process_menu(self, sub, req): arg = P.ModelSetting.to_dict() arg['sub'] = self.name if sub == 'setting': arg['scheduler'] = str( scheduler.is_include(self.get_scheduler_name())) arg['is_running'] = str( scheduler.is_running(self.get_scheduler_name())) arg['rss_api'] = '%s/%s/api/%s/rss' % ( SystemModelSetting.get('ddns'), package_name, self.name) arg['rss_api'] = Util.make_apikey(arg['rss_api']) return render_template( '{package_name}_{module_name}_{sub}.html'.format( package_name=package_name, module_name=self.name, sub=sub), arg=arg) elif sub == 'list': arg['is_torrent_info_installed'] = False try: import torrent_info arg['is_torrent_info_installed'] = True except: pass arg['ddns'] = SystemModelSetting.get('ddns') arg['show_log'] = ModelSetting.get_bool('show_log') arg['show_poster'] = ModelSetting.get('show_poster') return render_template( '{package_name}_{module_name}_{sub}.html'.format( package_name=package_name, module_name=self.name, sub=sub), arg=arg) return render_template('sample.html', title='%s - %s' % (package_name, sub))
def one_execute(): try: if scheduler.is_include(package_name): if scheduler.is_running(package_name): ret = 'is_running' else: scheduler.execute_job(package_name) ret = 'scheduler' else: def func(): time.sleep(2) Logic.scheduler_function() Logic.job_thread = None if Logic.job_thread is None: Logic.job_thread = threading.Thread(target=func, args=()) Logic.job_thread.start() ret = 'thread' else: ret = 'is_running' except Exception as e: logger.error('Exception:%s', e) logger.error(traceback.format_exc()) ret = 'fail' return ret
def detail(sub): logger.debug('DETAIL %s %s', package_name, sub) if sub == 'setting': setting_list = db.session.query(ModelSetting).all() arg = Util.db_list_to_dict(setting_list) arg['scheduler'] = str(scheduler.is_include(package_name)) arg['is_running'] = str(scheduler.is_running(package_name)) arg['path_rclone'] = Logic.path_rclone arg['default_rclone_setting'] = Logic.default_rclone_setting return render_template('rclone_setting.html', sub=sub, arg=arg) elif sub == 'status': return render_template('rclone_status.html') elif sub == 'list': return render_template('rclone_list.html') elif sub == 'log': return render_template('log.html', package=package_name) elif sub == 'mount': return redirect('/%s/mount_setting' % package_name) elif sub == 'mount_setting': arg = {} arg['option'] = '--allow-other --fast-list --drive-skip-gdocs --poll-interval=1m --buffer-size=32M --vfs-read-chunk-size=32M --vfs-read-chunk-size-limit 2048M --vfs-cache-mode writes --dir-cache-time=1m --log-level INFO' #if platform.system() != 'Windows': # arg['option'] += ' --daemon' return render_template('%s_%s.html' % (package_name, sub), arg=arg) elif sub == 'serve_setting': arg = {} arg['option'] = '--user sjva --pass sjva --fast-list --drive-skip-gdocs --poll-interval=1m --buffer-size=32M --vfs-read-chunk-size=32M --vfs-read-chunk-size-limit 2048M --vfs-cache-mode writes --dir-cache-time=1m --log-level INFO' return render_template('%s_%s.html' % (package_name, sub), arg=arg) else: return blueprint.send_static_file(sub) return render_template('sample.html', title='%s - %s' % (package_name, sub))
def process_menu(self, sub, req): arg = P.ModelSetting.to_dict() arg['sub'] = self.name for key, value in list(arg.items()): if key.startswith(self.name): arg[key.replace(self.name + '_', '')] = value del arg[key] if sub in ['setting', 'request', 'queue', 'list']: if sub == 'setting': job_id = '%s_%s' % (self.P.package_name, self.name) arg['scheduler'] = str(scheduler.is_include(job_id)) arg['is_running'] = str(scheduler.is_running(job_id)) elif sub == 'request': if sub == 'request' and req.args.get( 'content_code') is not None: arg['current_code'] = req.args.get('content_code') return render_template( '{package_name}_{module_name}_{sub}.html'.format( package_name=P.package_name, module_name='toki', sub=sub), arg=arg) return render_template('sample.html', title='%s - %s' % (P.package_name, sub))
def job_function(self): try: #if self.count > 1: # logger.debug(hm.check('JOB START %s' % self.job_id)) # logger.debug(hm.getHeap()) self.is_running = True self.start_time = datetime.now(timezone('Asia/Seoul')) #import gipc #from multiprocessing import Process if self.args is None: self.thread = threading.Thread(target=self.target_function, args=()) #self.thread = Process(target=multiprocessing_target, args=(self.job_id,)) #self.thread = gipc.start_process(target=multiprocessing_target, args=(self.job_id,), daemon=True) #self.target_function() else: self.thread = threading.Thread(target=self.target_function, args=(self.args,)) #self.thread = Process(target=multiprocessing_target, args=(self.job_id,)) #self.thread = gipc.start_process(target=multiprocessing_target, args=(self.job_id,), daemon=True) #self.target_function(self.args) self.thread.daemon = True self.thread.start() self.thread.join() self.end_time = datetime.now(timezone('Asia/Seoul')) self.running_timedelta = self.end_time - self.start_time self.status = 'success' if not scheduler.is_include(self.job_id): scheduler.remove_job_instance(self.job_id) self.count += 1 except Exception as exception: self.status = 'exception' logger.error('Exception:%s', exception) logger.error(traceback.format_exc()) finally: self.is_running = False
def get_jobs(cls): config = LogicPMBase.load_config() data = config.get('라이브러리 주기적 스캔 목록', None) if data is None or type(data) != type([]): return [] for idx, item in enumerate(data): item['job_id'] = f'{package_name}_periodic_{idx}' item['설명'] = item.get('설명', f"섹션: {item['섹션ID']}") item['is_include_scheduler'] = str(scheduler.is_include(item['job_id'])) return data
def process_menu(self, sub, req): arg = P.ModelSetting.to_dict() arg['sub'] = self.name if sub == 'setting': job_id = '%s_%s' % (self.P.package_name, self.name) arg['scheduler'] = str(scheduler.is_include(job_id)) arg['is_running'] = str(scheduler.is_running(job_id)) return render_template( '{package_name}_{module_name}_{sub}.html'.format( package_name=P.package_name, module_name=self.name, sub=sub), arg=arg)
def detail(sub): if sub == 'setting': setting_list = db.session.query(ModelSetting).all() arg = Util.db_list_to_dict(setting_list) arg['scheduler'] = str(scheduler.is_include(package_name)) arg['is_running'] = str(scheduler.is_running(package_name)) return render_template('%s_%s.html' % (package_name, sub), arg=arg) elif sub == 'log': return render_template('log.html', package=package_name) return render_template('sample.html', title='%s - %s' % (package_name, sub))
def set_restart_scheduler(): name = '%s_restart' % (package_name) if scheduler.is_include(name): scheduler.remove_job(name) interval = ModelSetting.get('auto_restart_hour') if interval != '0': if len(interval.split(' ')) == 1: interval = '%s' % (int(interval) * 60) job_instance = Job(package_name, name, interval, SystemLogic.restart, u"자동 재시작", True) scheduler.add_job_instance(job_instance, run=False)
def scheduler_start(): try: if not scheduler.is_include(package_name): interval = 60 * 24 job = Job(package_name, package_name, interval, Logic.scheduler_function, [u'Telegram Receiver'], False) scheduler.add_job_instance(job) except Exception as e: logger.error('Exception:%s', e) logger.error(traceback.format_exc())
def process_menu(self, sub, req): arg = P.ModelSetting.to_dict() arg['sub'] = self.name if sub in ['setting', 'queue', 'list', 'request']: if sub == 'request' and req.args.get('content_code') is not None: arg['ani365_current_code'] = req.args.get('content_code') if sub == 'setting': job_id = '%s_%s' % (self.P.package_name, self.name) arg['scheduler'] = str(scheduler.is_include(job_id)) arg['is_running'] = str(scheduler.is_running(job_id)) return render_template('{package_name}_{module_name}_{sub}.html'.format(package_name=P.package_name, module_name=self.name, sub=sub), arg=arg) return render_template('sample.html', title='%s - %s' % (P.package_name, sub))
def process_menu(self, sub, req): try: arg = P.ModelSetting.to_dict() arg['sub'] = self.name if sub == 'setting': arg['scheduler'] = str(scheduler.is_include(self.get_scheduler_name())) arg['is_running'] = str(scheduler.is_running(self.get_scheduler_name())) arg['path_app_root'] = path_app_root return render_template(f'{package_name}_{name}_{sub}.html', arg=arg) except Exception as e: logger.error('Exception:%s', e) logger.error(traceback.format_exc()) return render_template('sample.html', title=f"{package_name}/{name}/{sub}")
def job_list(): try: db_list = db.session.query(ModelCommand).filter().all() db_list = [x.as_dict() for x in db_list] from .logic_normal import LogicNormal for item in db_list: item['is_include'] = str(scheduler.is_include('command_%s' % item['id'])) item['is_running'] = str(scheduler.is_running('command_%s' % item['id'])) item['process_id'] = LogicNormal.process_list[item['id']].pid if item['id'] in LogicNormal.process_list and LogicNormal.process_list[item['id']] is not None else None return db_list except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc())
def first_menu(sub): if sub == 'setting': arg = ModelSetting.to_dict() arg['scheduler'] = str(scheduler.is_include(package_name)) arg['is_running'] = str(scheduler.is_running(package_name)) return render_template('%s_setting.html' % package_name, arg=arg) elif sub == 'list': arg = ModelSetting.to_dict() return render_template('%s_list.html' % package_name, arg=arg) elif sub == 'log': return render_template('log.html', package=package_name) return render_template('sample.html', title='%s - %s' % (package_name, sub))
def process_menu(self, sub, req): # 각 메뉴들이 호출될때 필요한 값들을 arg에 넘겨주어야함 arg = P.ModelSetting.to_dict() arg['sub'] = self.name P.logger.debug('sub:%s', sub) if sub == 'setting': # 설정페이지의 경우 스케쥴러 포함여부와 실행상태 전달 job_id = '%s_%s' % (self.P.package_name, self.name) arg['scheduler'] = str(scheduler.is_include(job_id)) arg['is_running'] = str(scheduler.is_running(job_id)) return render_template( '{package_name}_{module_name}_{sub}.html'.format( package_name=P.package_name, module_name=self.name, sub=sub), arg=arg)
def first_menu(sub): logger.debug('DETAIL %s %s', package_name, sub) if sub == 'setting': arg = ModelSetting.to_dict() arg['package_name'] = package_name arg['scheduler'] = str(scheduler.is_include(package_name)) arg['is_running'] = str(scheduler.is_running(package_name)) return render_template('{package_name}_{sub}.html'.format( package_name=package_name, sub=sub), arg=arg) elif sub == 'log': return render_template('log.html', package=package_name) return render_template('sample.html', title='%s - %s' % (package_name, sub))
def set_scheduler_check_scheduler(): try: name = 'scheduler_check' if scheduler.is_include(name): scheduler.remove_job(name) job_instance = Job(package_name, name, 2, scheduler.first_run_check_thread_function, u"Scheduler Check", True) scheduler.add_job_instance(job_instance, run=False) except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc()) return False
def sched_add(self, idx, item=None): try: if item is None: item = self.get_jobs()[idx] if scheduler.is_include(item['job_id']): logger.debug(f"{item['섹션ID']} include scheduler!") return job = Job(self.P.package_name, item['job_id'], item['주기'], self.job_function, item['설명'], False, args=idx) scheduler.add_job_instance(job) return True except Exception as e: P.logger.error(f'Exception:{str(e)}') P.logger.error(traceback.format_exc()) return False
def schedule_running(): try: job_id_list = [ 'gallery-dl_normal', 'gallery-dl_data', 'gallery-dl_hitomi' ] for job_id in job_id_list: if scheduler.is_include(job_id): if scheduler.is_running(job_id): return True return False except Exception as e: logger.error('[gallery-dl] Exception:%s', e) logger.error(traceback.format_exc()) ret = 'fail'
def scheduler_function(): try: logger.debug('rclone scheduler_function') if not scheduler.is_include(package_name): logger.debug('not in scheduler') return if Logic.running_status: logger.debug('Logic.running_status is TRUE!!!!') return else: logger.debug('Logic.running_status is FALSE!!!!') job_list = db.session.query(ModelRcloneJob).filter_by(is_scheduling=True).with_for_update().all() Logic.running_status = True for job in job_list: Logic.execute(job) if not scheduler.is_include(package_name): logger.debug('scheduler is stopped by user button') break Logic.current_process = None except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc()) finally: Logic.running_status = False
def detail(sub): if sub == 'setting': setting_list = db.session.query(ModelSetting).all() arg = Util.db_list_to_dict(setting_list) arg['scheduler'] = str(scheduler.is_include(package_name)) arg['is_running'] = str(scheduler.is_running(package_name)) return render_template('%s_%s.html' % (package_name, sub), arg=arg) elif sub in ['request', 'queue', 'list']: setting_list = db.session.query(ModelSetting).all() arg = Util.db_list_to_dict(setting_list) arg['current_code'] = LogicAni24.current_data['code'] if LogicAni24.current_data is not None else None return render_template('%s_%s.html' % (package_name, sub), arg=arg) elif sub == 'log': return render_template('log.html', package=package_name) return render_template('sample.html', title='%s - %s' % (package_name, sub))
def scheduler_switch(id, switch): try: job = ModelCommand.get_job_by_id(id) s_id = 'command_%s' % id if switch: job_instance = Job(package_name, s_id, job.schedule_info, LogicNormal.execute_thread_function_by_scheduler, u"%s %s : %s" % (package_name, job.id, job.description), True, args=job.id) scheduler.add_job_instance(job_instance) else: if scheduler.is_include(s_id): scheduler.remove_job(s_id) return 'success' except Exception as exception: logger.error('Exception:%s', exception) logger.error(traceback.format_exc()) return 'fail'
def first_menu(sub): arg = ModelSetting.to_dict() arg['package_name'] = package_name if sub == 'setting': arg['scheduler'] = str(scheduler.is_include(package_name)) arg['is_running'] = str(scheduler.is_running(package_name)) return render_template('%s_%s.html' % (package_name, sub), arg=arg) elif sub == 'view': return render_template('%s_%s.html' % (package_name, sub), arg=arg) elif sub == 'manage': return render_template('/manage/%s_%s.html' % (package_name, sub), arg=arg) elif sub == 'log': return render_template('log.html', package=package_name) return render_template('sample.html', title='%s - %s' % (package_name, sub))
def second_menu(sub, sub2): try: arg = ModelSetting.to_dict() arg['package_name'] = package_name if sub == 'direct': if sub2 == 'setting': return render_template('%s_%s_%s.html' % (package_name, sub, sub2), arg=arg) elif sub2 in ['request']: return render_template('%s_%s_%s.html' % (package_name, sub, sub2), arg=arg) elif sub == 'rss': if sub2 == 'setting': arg['sub'] = sub arg['scheduler'] = str(scheduler.is_include('%s_%s' % (package_name, sub))) arg['is_running'] = str(scheduler.is_running('%s_%s' % (package_name, sub))) from system.model import ModelSetting as SystemModelSetting ddns = SystemModelSetting.get('ddns') arg['rss_api'] = '%s/%s/api/%s' % (ddns, package_name, sub) if SystemModelSetting.get_bool('auth_use_apikey'): arg['rss_api'] += '?apikey=%s' % SystemModelSetting.get('auth_apikey') return render_template('%s_%s_%s.html' % (package_name, sub, sub2), arg=arg) elif sub2 in ['job', 'list']: arg['is_available_normal_download'] = False try: import downloader arg['is_available_normal_download'] = downloader.Logic.is_available_normal_download() except: pass if sub2 == 'list': arg['jobs'] = ModelOffcloud2Job.get_list(by_dict=True) return render_template('%s_%s_%s.html' % (package_name, sub, sub2), arg=arg) elif sub == 'cache': if sub2 == 'setting': arg['sub'] = sub from system.model import ModelSetting as SystemModelSetting ddns = SystemModelSetting.get('ddns') arg['rss_api'] = '%s/%s/api/%s' % (ddns, package_name, sub) if SystemModelSetting.get_bool('auth_use_apikey'): arg['rss_api'] += '?apikey=%s' % SystemModelSetting.get('auth_apikey') return render_template('%s_%s_%s.html' % (package_name, sub, sub2), arg=arg) elif sub2 == 'list': arg['type'] = ['KTV', 'KTV_ETC', 'MOVIE', 'MOVIE_ETC', 'MUSIC', 'SHOW', 'ANI', 'PROGRAM', 'JAV_CENSORED_DMM', 'JAV_CENSORED_JAVDB', 'JAV_CENSORED_ETC', 'JAV_UNCENSORED', 'AV_WEST', 'AV_EAST', 'ETC'] return render_template('%s_%s_%s.html' % (package_name, sub, sub2), arg=arg) return render_template('sample.html', title='%s - %s - %s' % (package_name, sub, sub2)) except Exception as e: logger.error('Exception:%s', e) logger.error(traceback.format_exc())
def first_menu(sub): logger.debug('DETAIL %s %s', package_name, sub) if sub == 'setting': arg = ModelSetting.to_dict() arg['scheduler'] = str(scheduler.is_include(package_name)) arg['is_running'] = str(scheduler.is_running(package_name)) arg['tracker_list'] = ModelSetting.get('tracker_list').replace('\n', ', ') return render_template('%s_%s.html' % (package_name, sub), arg=arg) elif sub in ['transmission', 'downloadstation', 'qbittorrent', 'aria2']: return redirect('/%s/%s/status' % (package_name, sub)) elif sub in ['request', 'list', 'watch']: arg = ModelSetting.to_dict() arg['sub'] = sub return render_template('%s_%s.html' % (package_name, sub), arg=arg) elif sub == 'log': return render_template('log.html', package=package_name) return render_template('sample.html', title='%s - %s' % (package_name, sub))
def first_menu(sub): arg = ModelSetting.to_dict() arg['package_name'] = package_name if sub == 'setting': arg['scheduler'] = str(scheduler.is_include(package_name)) arg['is_running'] = str(scheduler.is_running(package_name)) return render_template('%s_%s.html' % (package_name, sub), arg=arg) elif sub == 'rss': try: import downloader arg['default_download_program'], arg[ 'default_download_path'] = downloader.Logic.get_default_value( ) arg['default_download_path'] = arg[ 'default_download_path'].replace('\\', '\\\\') except: arg['default_download_program'] = '0' arg['default_download_path'] = '' return render_template('%s_%s.html' % (package_name, sub), arg=arg) elif sub == 'list': arg['is_torrent_info_installed'] = False try: import torrent_info arg['is_torrent_info_installed'] = True except Exception as e: pass arg['is_offcloud_installed'] = False try: import offcloud2 arg['is_offcloud_installed'] = True except Exception as e: pass try: arg['rss_id'] = request.args.get('rss_id') except Exception as e: pass if arg['rss_id'] is None: arg['rss_id'] = 'all' arg['rss_list'] = ModelRss.get_list(by_dict=True) return render_template('%s_%s.html' % (package_name, sub), arg=arg) elif sub == 'log': return render_template('log.html', package=package_name) return render_template('sample.html', title='%s - %s' % (package_name, sub))