def get(self, id=None, action=None): # action by id if action is not None: if not hasattr(self, action): return { 'status': 'ok', 'code': 400, 'error': 'action "%s" invalid' % action }, 400 return getattr(self, action)(id) # get one node elif id is not None: return jsonify(db_manager.get('spiders', id=id)) # get a list of items else: items = [] dirs = os.listdir(PROJECT_SOURCE_FILE_FOLDER) for _dir in dirs: if _dir in IGNORE_DIRS: continue dir_path = os.path.join(PROJECT_SOURCE_FILE_FOLDER, _dir) dir_name = _dir spider = db_manager.get_one_by_key('spiders', key='src', value=dir_path) # new spider if spider is None: stats = get_file_suffix_stats(dir_path) lang = get_lang_by_stats(stats) db_manager.save('spiders', { 'name': dir_name, 'src': dir_path, 'lang': lang, 'suffix_stats': stats, }) # existing spider else: stats = get_file_suffix_stats(dir_path) lang = get_lang_by_stats(stats) db_manager.update_one('spiders', id=str(spider['_id']), values={ 'lang': lang, 'suffix_stats': stats, }) # append spider items.append(spider) return jsonify({ 'status': 'ok', 'items': items })
def get(self, id=None, action=None): """ GET method of SpiderAPI. :param id: spider_id :param action: action """ # action by id if action is not None: if not hasattr(self, action): return { 'status': 'ok', 'code': 400, 'error': 'action "%s" invalid' % action }, 400 return getattr(self, action)(id) # get one node elif id is not None: spider = db_manager.get('spiders', id=id) # get deploy last_deploy = db_manager.get_last_deploy(spider_id=spider['_id']) if last_deploy is not None: spider['deploy_ts'] = last_deploy['finish_ts'] return jsonify(spider) # get a list of items else: items = [] # get customized spiders dirs = os.listdir(PROJECT_SOURCE_FILE_FOLDER) for _dir in dirs: if _dir in IGNORE_DIRS: continue dir_path = os.path.join(PROJECT_SOURCE_FILE_FOLDER, _dir) dir_name = _dir spider = db_manager.get_one_by_key('spiders', key='src', value=dir_path) # new spider if spider is None: stats = get_file_suffix_stats(dir_path) lang = get_lang_by_stats(stats) spider = db_manager.save( 'spiders', { 'name': dir_name, 'src': dir_path, 'lang': lang, 'suffix_stats': stats, 'type': SpiderType.CUSTOMIZED }) # existing spider else: # get last deploy last_deploy = db_manager.get_last_deploy( spider_id=spider['_id']) if last_deploy is not None: spider['deploy_ts'] = last_deploy['finish_ts'] # file stats stats = get_file_suffix_stats(dir_path) # language lang = get_lang_by_stats(stats) # spider type type_ = SpiderType.CUSTOMIZED # update spider data db_manager.update_one('spiders', id=str(spider['_id']), values={ 'lang': lang, 'type': type_, 'suffix_stats': stats, }) # append spider items.append(spider) # get configurable spiders for spider in db_manager.list('spiders', {'type': SpiderType.CONFIGURABLE}): # append spider items.append(spider) # get other info for i in range(len(items)): spider = items[i] # get site if spider.get('site') is not None: site = db_manager.get('sites', spider['site']) if site is not None: items[i]['site_name'] = site['name'] # get last task last_task = db_manager.get_last_task(spider_id=spider['_id']) if last_task is not None: items[i]['task_ts'] = last_task['create_ts'] # --------- # stats # --------- # last 5-run errors items[i]['last_5_errors'] = get_last_n_run_errors_count( spider_id=spider['_id'], n=5) items[i]['last_7d_tasks'] = get_last_n_day_tasks_count( spider_id=spider['_id'], n=5) return {'status': 'ok', 'items': jsonify(items)}