def workspace_status_delete(workspace_id, id): """ワークスペース状態情報削除 worksapce status info. delete Args: workspace_id (int): ワークスペースID id (int): ワークスペース状態情報ID Returns: response: HTTP Respose """ globals.logger.debug( "CALL workspace_status_delete:workspace_id:{}".format(workspace_id)) try: with dbconnector() as db, dbcursor(db) as cursor: # ワークスペース状態情報 delete実行 worksapce status info. delete upd_cnt = da_workspace_status.delete_workspace_status( cursor, workspace_id) globals.logger.debug("workspace_status:ret:{}".format(upd_cnt)) if upd_cnt == 0: # データがないときは404応答 db.rollback() return jsonify({"result": "404"}), 404 return jsonify({"result": "200"}), 200 except Exception as e: return common.serverError(e)
def list_workspace(): """ワークスペース一覧取得 Returns: response: HTTP Respose """ globals.logger.debug('CALL list_workspace') try: # Requestからorganization_id項目を抽出する organization_id = request.json['common']['organization_id'] with dbconnector() as db, dbcursor(db) as cursor: # select実行 fetch_rows = da_workspace.select_workspace(cursor, organization_id) # Response用のjsonに変換 response_rows = convert_workspace_response(fetch_rows) return jsonify({ "result": "200", "rows": response_rows, "time": str(datetime.now(globals.TZ)) }), 200 except Exception as e: return common.serverError(e)
def get_workspace_before(workspace_id): """更新前のワークスペース履歴 - Workspace history before update Args: workspace_id (int): workspace id Returns: response: HTTP Respose """ globals.logger.debug('CALL get_workspace_before:{}'.format(workspace_id)) try: with dbconnector() as db, dbcursor(db) as cursor: # get workspace history - workspace履歴取得 fetch_rows = da_workspace.select_history(cursor, workspace_id) if len(fetch_rows) > 0: # Convert to json for Response - Response用のjsonに変換 response_rows = convert_workspace_response(fetch_rows) return jsonify({ "result": "200", "rows": response_rows, "time": str(datetime.now(globals.TZ)) }), 200 else: # 404 response when 0 - 0件のときは404応答 return jsonify({"result": "404"}), 404 except Exception as e: return common.serverError(e)
def get_organization(organization_id): """オーガナイゼーション詳細 Args: organization_id (int): organization ID Returns: response: HTTP Respose """ globals.logger.debug('CALL get_organization:{}'.format(organization_id)) try: with dbconnector() as db, dbcursor(db) as cursor: # organization情報データ取得 fetch_rows = da_organization.select_organization_id( cursor, organization_id) if len(fetch_rows) > 0: # Response用のjsonに変換 response_rows = fetch_rows return jsonify({ "result": "200", "rows": response_rows, "time": str(datetime.now(globals.TZ)) }), 200 else: # 0件のときは404応答 return jsonify({"result": "404"}), 404 except Exception as e: return common.serverError(e, "organization db get row error")
def manifest_file_delete(workspace_id, manifest_id): """マニフェストテンプレートファイル削除 Args: workspace_id (int): ワークスペースID file_id (int): ファイルID Returns: response: HTTP Respose """ globals.logger.debug( "CALL manifest_file_delete:workspace_id:{}, manifest_id:{}".format( workspace_id, manifest_id)) try: with dbconnector() as db, dbcursor(db) as cursor: # manifests情報 delete実行 upd_cnt = da_manifest.delete_manifest(cursor, workspace_id, manifest_id) globals.logger.debug("delete_manifest:ret:{}".format(upd_cnt)) if upd_cnt == 0: # データがないときは404応答 db.rollback() return jsonify({"result": "404"}), 404 return jsonify({"result": "200"}) except Exception as e: return common.serverError(e)
def cd_result_insert(workspace_id, cd_result_id, username): """CD結果登録 cd result insert Args: workspace_id (int): workspace id cd_result_id (int): cd-result id username (str): username Returns: response: HTTP Respose """ try: globals.logger.debug( 'CALL {}:from[{}] workspace_id[{}] member[{}]'.format( inspect.currentframe().f_code.co_name, request.method, workspace_id, username)) with dbconnector() as db, dbcursor(db) as cursor: # Requestからcontentsを設定 Set contents from Request contents = request.json.copy() # cd-result insert実行 lastrowid = da_cd_result.insert_cd_result(cursor, workspace_id, cd_result_id, username, contents) globals.logger.debug('insert lastrowid:{}'.format(lastrowid)) return jsonify({"result": "200", "lastrowid": lastrowid}), 200 except Exception as e: return common.server_error( e, "{} error".format(inspect.currentframe().f_code.co_name))
def get_workspace(workspace_id): """ワークスペース詳細 Args: workspace_id (int): ワークスペースID Returns: response: HTTP Respose """ globals.logger.debug('CALL get_workspace:{}'.format(workspace_id)) try: with dbconnector() as db, dbcursor(db) as cursor: # workspace情報データ取得 fetch_rows = da_workspace.select_workspace_id(cursor, workspace_id) if len(fetch_rows) > 0: # Response用のjsonに変換 response_rows = convert_workspace_response(fetch_rows) return jsonify({ "result": "200", "rows": response_rows, "time": str(datetime.now(globals.TZ)) }), 200 else: # 0件のときは404応答 return jsonify({"result": "404"}), 404 except Exception as e: return common.serverError(e)
def getPublicationInfo(self, results): ids = [] contents = [] gscholarinfo = {} outputinfo = [] #get ids for result in results: ids.append((result["title"].replace("",""))) contents.append((result["content"].replace("",""))) if len(ids) == 0: return outputinfo #retrieve publication info db = dbconnector().getNewCon() cur = db.cursor() query = ("SELECT id, company, pmid, journal, IF_score, year, pmc FROM publications where id in (" + ','.join(ids) + ") order by IF_score desc") cur.execute(query) for (id, company, pmid, journal, IF_score, year, pmc ) in cur : gscholarinfo[str(id)] = {"company" : company, "pmid" : pmid , "journal" : journal, "citations" : IF_score, "year" : year, "pmcid" : pmc} for result in results: gscholar = gscholarinfo[str(result["title"])] gscholar['content_parsed'] = result["content"] outputinfo.append(gscholar) cur.close() db.close() return outputinfo
def logs_insert(workspace_id=None, username=None, log_kind=None): """ログ出力 Log output Args: workspace_id (int): workspace id username (str): username log_kind (str): log_kind Returns: response: HTTP Respose """ try: globals.logger.debug( 'CALL {}:from[{}] workspace_id[{}] member[{}] log_kind[{}]'.format( inspect.currentframe().f_code.co_name, request.method, workspace_id, username, log_kind)) with dbconnector() as db, dbcursor(db) as cursor: # Requestからcontentsを設定 Set contents from Request contents = request.json.copy() # logs insert実行 log_id = da_logs.insert_logs(cursor, workspace_id, username, log_kind, contents) globals.logger.debug('insert log_id:{}'.format(log_id)) return jsonify({"result": "200"}), 200 except Exception as e: return common.serverError( e, "{} error".format(inspect.currentframe().f_code.co_name))
def getGscholarInfo(self, results): ids = [] contents = [] gscholarinfo = {} outputinfo = [] #get ids for result in results: ids.append((result["title"].replace("",""))) contents.append((result["content"].replace("",""))) if len(ids) == 0: return outputinfo #retrieve gsholar info db = dbconnector().getNewCon() cur = db.cursor() query = ("SELECT id, company, title, authors, content_parsed, pmid, journal, citations, year, pmcid FROM gscholar where id in (" + ','.join(ids) + ") order by citations desc") cur.execute(query) for (id, company, title, authors, content_parsed, pmid, journal, citations, year, pmcid ) in cur : gscholarinfo[str(id)] = {"company" : company, "title" : title , "authors" : authors , "content_parsed1" : content_parsed, "pmid" : pmid , "journal" : journal, "citations" : citations, "year" : year, "pmcid" : pmcid} for result in results: gscholar = gscholarinfo[str(result["title"])] gscholar['content_parsed'] = result["content"] outputinfo.append(gscholar) cur.close() db.close() return outputinfo
def patch_tekton_task(workspace_id, task_id): """CI結果情報更新 Args: workspace_id (int): ワークスペース ID task_id (int): task ID Returns: response: HTTP Respose """ globals.logger.debug('CALL patch_tekton_task:{}_{}'.format( workspace_id, task_id)) try: # Requestからinfo項目を生成する info = request.json with dbconnector() as db, dbcursor(db) as cursor: # CI結果情報更新 upd_cnt = da_ci_result.update_tekton_pipeline_task( cursor, info, task_id) if upd_cnt == 0: # データがないときは404応答 db.rollback() return jsonify({"result": "404"}), 404 # 正常終了 return jsonify({"result": "200"}), 200 except Exception as e: return common.serverError(e, "tekton_pipeline_task db update error")
def workspace_status_get(workspace_id): """ワークスペース状態情報取得 worksapce status info. get Args: workspace_id (int): ワークスペースID Returns: response: HTTP Respose """ globals.logger.debug("CALL workspace_status_get:{}".format(workspace_id)) try: # 登録内容は基本的に、引数のJsonの値を使用する(追加項目があればここで記載) with dbconnector() as db, dbcursor(db) as cursor: # ワークスペース状態情報 select実行 worksapce status info. select fetch_rows = da_workspace_status.select_workspace_status( cursor, workspace_id) if len(fetch_rows) == 0: # データがないときは404応答 db.rollback() return jsonify({"result": "404"}), 404 # Response用のjsonに変換[変換が必要な場合は関数化する] response_row = json.loads(fetch_rows[0]["info"]) return jsonify(response_row), 200 except Exception as e: return common.serverError(e)
def manifest_file_get(workspace_id, file_id): """マニフェストテンプレートファイル取得 Args: workspace_id (int): ワークスペースID file_id (int): ファイルID Returns: response: HTTP Respose """ globals.logger.debug( "CALL manifest_file_get: [ workspace_id: {}, manifest_id: {} ]".format( workspace_id, file_id)) try: with dbconnector() as db, dbcursor(db) as cursor: # manifest情報の取得 fetch_rows = da_manifest.select_manifest_id( cursor, workspace_id, file_id) if len(fetch_rows) == 0: # データがないときは404応答 db.rollback() return jsonify({"result": "404"}), 404 # Response用のjsonに変換 response_rows = fetch_rows return jsonify({"result": "200", "rows": response_rows}) except Exception as e: return common.serverError(e)
def workspace_status_update(workspace_id): """ワークスペース状態情報更新 worksapce status info. update Args: workspace_id (int): ワークスペースID Returns: response: HTTP Respose """ globals.logger.debug( "CALL workspace_status_update:{}".format(workspace_id)) try: # 更新対象のJson値をパラメータとして受け取る Receive the Json value to be updated as a parameter info_upadate_colums = request.json with dbconnector() as db, dbcursor(db) as cursor: # ワークスペース状態情報 update実行 worksapce status info. update upd_cnt = da_workspace_status.update_workspace_status( cursor, workspace_id, info_upadate_colums) globals.logger.debug('update workspace_id:{}'.format(workspace_id)) if upd_cnt == 0: # データがないときは404応答 db.rollback() return jsonify({"result": "404"}), 404 return jsonify({"result": "200"}), 200 except Exception as e: return common.serverError(e)
def workspace_status_registration(workspace_id): """ワークスペース状態状態登録 workspace status registration Args: workspace_id (int): ワークスペースID worksapce id Returns: response: HTTP Respose """ globals.logger.debug( "CALL workspace_access_registration:{}".format(workspace_id)) try: # 登録内容は基本的に、引数のJsonの値を使用する(追加項目があればここで記載) info = request.json with dbconnector() as db, dbcursor(db) as cursor: # ワークスペース状態情報 insert実行 worksapce status info. insert da_workspace_status.insert_workspace_status( cursor, workspace_id, info) globals.logger.debug('insert workspace_id:{}'.format(workspace_id)) return jsonify({"result": "200"}), 200 except Exception as e: return common.serverError(e)
def workspace_access_update(workspace_id): """ワークスペースアクセス情報更新 Args: workspace_id (int): ワークスペースID Returns: response: HTTP Respose """ globals.logger.debug( "CALL workspace_access_update:{}".format(workspace_id)) try: # 登録内容は基本的に、引数のJsonの値を使用する(追加項目があればここで記載) info = request.json with dbconnector() as db, dbcursor(db) as cursor: # ワークスペースアクセス情報 update実行 upd_cnt = da_workspace_access.update_workspace_access( cursor, workspace_id, info) globals.logger.debug('update workspace_id:{}'.format(workspace_id)) if upd_cnt == 0: # データがないときは404応答 db.rollback() return jsonify({"result": "404"}), 404 return jsonify({"result": "200"}), 200 except Exception as e: return common.serverError(e)
def get_tekton_task(workspace_id): """CI結果情報取得 Returns: response: HTTP Respose """ try: globals.logger.debug('CALL {}:from[{}] workspace_id[{}]'.format( inspect.currentframe().f_code.co_name, request.method, workspace_id)) with dbconnector() as db, dbcursor(db) as cursor: # CI result information select execution - CI結果情報 select実行 fetch_rows = da_ci_result.select_tekton_pipeline_task( cursor, workspace_id) # Successful completion - 正常終了 res_status = 200 return jsonify({"result": res_status, "rows": fetch_rows}), res_status except Exception as e: return common.serverError( e, "tekton_pipeline_task db registration error")
def delete_workspace_pipeline(workspace_id, kind): """tekton pipelineの削除 tekton_pipeline_yamlテーブルから適用済みのyamlを取得し削除する Args: workspace_id (int): ワークスペースID kind (str): 区分 "namespace"/"pipeline" """ globals.logger.debug( 'start delete_workspace_pipeline_files workspace_id:{} kind:{}'.format( workspace_id, kind)) with dbconnector() as db, dbcursor(db) as cursor: # 適用済みのyaml取得 fetch_rows = da_tekton.select_tekton_pipeline_yaml_id( cursor, workspace_id, kind) with tempfile.TemporaryDirectory() as tempdir, dbconnector( ) as db, dbcursor(db) as cursor: for fetch_row in fetch_rows: globals.logger.debug( 'tekton pipeline delete workspace_id:{} template:{}'.format( workspace_id, fetch_row['filename'])) # yaml一時ファイル生成 path_yamlfile = '{}/{}'.format(tempdir, fetch_row['filename']) with open(path_yamlfile, mode='w') as fp: fp.write(fetch_row['yamltext']) # kubectl実行 try: result_kubectl = subprocess.check_output( ['kubectl', 'delete', '-f', path_yamlfile], stderr=subprocess.STDOUT) globals.logger.debug( 'COMMAAND SUCCEED: kubectl delete -f {}\n{}'.format( path_yamlfile, result_kubectl.decode('utf-8'))) except subprocess.CalledProcessError as e: globals.logger.error('COMMAND ERROR RETURN:{}\n{}'.format( e.returncode, e.output.decode('utf-8'))) # 削除失敗は無視 # リソースを削除したら適用済みのyaml情報を削除する da_tekton.delete_tekton_pipeline_yaml(cursor, fetch_row['yaml_id']) db.commit()
def update_manifestParameter(workspace_id): """ワークスペース変更 Args: workspace_id (int): ワークスペースID Returns: response: HTTP Respose """ globals.logger.debug( "CALL update_manifestParameter:{}".format(workspace_id)) try: request_json = request.json.copy() update_at = request_json["update_at"] update_at = parser.parse(update_at) # Requestからspecification項目を生成する specification = request_json with dbconnector() as db, dbcursor(db) as cursor: # workspace情報取得 workspaceInfo = da_workspace.select_workspace_id( cursor, workspace_id) # workspace情報のmanifestParameter部を差し替え db_specification = json.loads(workspaceInfo[0]["specification"]) # 登録する配列用のindex i = 0 for db_env in db_specification["ci_config"]["environments"]: for in_env in specification["ci_config"]["environments"]: if db_env["environment_id"] == in_env["environment_id"]: db_specification["ci_config"]["environments"][i][ "manifests"] = in_env["manifests"] break i += 1 # manifestパラメータの項目説明も更新に含める db_specification["parameter-info"] = specification[ "parameter-info"] # workspace情報 update実行 upd_cnt = da_workspace.update_workspace(cursor, db_specification, workspace_id, update_at) if upd_cnt == 0: # データがないときは404応答 db.rollback() return jsonify({"result": "404"}), 404 # Response用のjsonに変換 response_rows = workspaceInfo return jsonify({"result": "200", "rows": response_rows}) except Exception as e: return common.serverError(e)
def storeQuery(query): db = dbconnector().getNewCon() cur = db.cursor() insert_query = ("insert into user_queries(query, query_date) values(%s, %s)") data_query = (query, datetime.datetime.now()) cur.execute(insert_query, data_query) cur.close() db.commit() db.close()
def getCompanyNames(): output = [] db = dbconnector().getNewCon() cur = db.cursor() cur.execute("select name from company") for (name) in cur : output.append(str(name)) cur.close() db.close() return output
def getCompanyConcepts(company): output = [] db = dbconnector().getNewCon() cur = db.cursor() cur.execute("select concept, sum(relevance) as score, count(*) from gscholar_concept a join gscholar b on a.gscholar_id = b.id where company = '%s' and relevance > 0.9 and type = 'keyword' group by concept having count(*)>1 order by score desc limit 20" % company) for (concept, score, count) in cur : if not __isNoisy__(concept, company): output.append({"concept" : concept, "score" : score, "count" : count}) cur.close() db.close() return output
def put_workspace(workspace_id): """ワークスペース更新 Args: workspace_id (int): ワークスペースID Returns: response: HTTP Respose """ globals.logger.debug("CALL put_workspace:{}".format(workspace_id)) app_name = "ワークスペース情報更新:" exec_stat = "初期化" exec_detail = "" try: request_json = request.json.copy() update_at = request_json["update_at"] update_at = parser.parse(update_at) globals.logger.debug(f"update_at:{update_at}") # Requestからspecification項目を生成する specification = convert_workspace_specification(request_json) exec_stat = "DB接続" with dbconnector() as db, dbcursor(db) as cursor: # workspace情報 update実行 exec_stat = "更新実行" upd_cnt = da_workspace.update_workspace(cursor, specification, workspace_id, update_at) if upd_cnt == 0: # データがないときは404応答 db.rollback() return jsonify({ "result": "404", "errorStatement": app_name + exec_stat, "errorDetail": "更新するデータがありません" }), 404 # workspace履歴追加 exec_stat = "登録実行(履歴)" da_workspace.insert_history(cursor, workspace_id) # workspace情報の再取得 exec_stat = "登録データ確認" fetch_rows = da_workspace.select_workspace_id(cursor, workspace_id) # Response用のjsonに変換 response_rows = fetch_rows return jsonify({"result": "200", "rows": response_rows}) except Exception as e: return common.serverError(e, app_name + exec_stat, exec_detail)
def getCompanies(): output = [] db = dbconnector().getNewCon() cur = db.cursor() cur.execute("select company, sum(citations) as HIndex , count(*) as publications from gscholar where pmid != 'None' and pmid !='0' group by company order by HIndex desc limit 50") for (company, HIndex, publications) in cur : concepts = getCompanyConcepts(company) output.append({"company" : company, "HIndex" : HIndex, "publications" : publications, "concepts" : concepts}) cur.close() db.close() return output
def getConcepts(): output = [] db = dbconnector().getNewCon() cur = db.cursor() cur.execute("select concept, sum(relevance) as score, count(*) as count from gscholar_concept a join gscholar b on a.gscholar_id = b.id where relevance > 0.9 and type = 'keyword' group by concept having count(*)>1 order by count desc limit 200" ) for (concept, score, count) in cur : if __concept__(concept): output.append({"concept" : concept, "score" : score, "count" : count}) cur.close() db.close() return output
def cd_result_list(workspace_id=None, cd_result_id=None, username=None, latest=False): """CD結果取得 cd result list Args: workspace_id (int): workspace id cd_result_id (string): cd-result id username (str): username latest (Bool): latest True or False Returns: response: HTTP Respose """ try: globals.logger.debug( 'CALL {}:from[{}] workspace_id[{}] cd_result_id[{}] username[{}] latest[{}]' .format(inspect.currentframe().f_code.co_name, request.method, workspace_id, cd_result_id, username, latest)) globals.logger.debug('CALL {}:args[{}]'.format( inspect.currentframe().f_code.co_name, request.args)) # latest (bool): 最新のみ if request.args.get('latest') is not None: latest = request.args.get('latest') == "True" else: latest = False # cd_status_in (str): 最新のみ if request.args.get('cd_status_in') is not None: cd_status_in = request.args.get('cd_status_in').split(".") else: cd_status_in = [] with dbconnector() as db, dbcursor(db) as cursor: # CD結果履歴の取得 Get CD result history fetch_rows = da_cd_result.select_cd_result(cursor, workspace_id, cd_result_id, cd_status_in, username, latest) return jsonify({"result": "200", "rows": fetch_rows}) except Exception as e: return common.server_error( e, "{} error".format(inspect.currentframe().f_code.co_name))
def getCompanyInfo2(self, results, pub_per_comp= 1000): ids = [] outputinfo = [] #get ids for result in results: ids.append((result["title"].replace(": ",""))) if len(ids) == 0: return outputinfo #retrieve publication info publications = self.getPublicationInfo(results) #group company and rank company companyScore = self.scoreCompany(results) #retrieve info db = dbconnector().getNewCon() cur = db.cursor() query = ("SELECT name, url, comp_id FROM companies where comp_id in (" + ','.join(map(str, companyScore.keys())) + ")") cur.execute(query) #get all companies companies = self.__getCompanyNames__() for (name, url, comp_id ) in cur : companyScholars = [] for publication in publications: if publication["company"] == comp_id: # and self.__isKeywordMatchCompany__(publication["company_name"], companies, publication["content_parsed"]): companyScholars.append(publication) companyScholars = sorted(companyScholars, key= itemgetter("score"), reverse=True ) hits = len(companyScholars) if hits > pub_per_comp: companyScholars = companyScholars[0:pub_per_comp] if hits > 0: outputinfo.append({"company": comp_id, "company_name": name, "score": companyScore[comp_id], "hits" : hits, "url": url, "publication": companyScholars}) # cur.close() db.close() outputinfo = sorted(outputinfo, key= itemgetter("score"), reverse=True) return outputinfo
def getCompanyInfo(self, results): ids = [] outputinfo = [] #get ids for result in results: ids.append((result["title"].replace(": ",""))) if len(ids) == 0: return outputinfo #retrieve info db = dbconnector().getNewCon() cur = db.cursor() query = ("SELECT company, b.url, b.search_url, count(*) as hits FROM publications a join company b on a.company=b.name where id in (" + ','.join(ids) + ") group by company, b.url order by hits desc") cur.execute(query) #gscholars = self.getGscholarInfo(results) gscholars = self.getPublicationInfo(results) #get companies companies = self.__getCompanyNames__() for (company, url, search_url, hits ) in cur : companyScholars = [] for gscholar in gscholars: if gscholar["company"] == company and self.__isKeywordMatchCompany__(company, companies, gscholar["content_parsed"]): companyScholars.append(gscholar) companyScholars = sorted(companyScholars, key= itemgetter("citations"), reverse=True ) hits = len(companyScholars) if hits > 2: companyScholars = companyScholars[0:2] if hits > 0: outputinfo.append({"company": company, "hits" : hits, "url": url, "search_url": search_url, "price": self.getPrice(), "availability": self.getAvailability(), "gscholar": companyScholars}) # cur.close() db.close() outputinfo = sorted(outputinfo, key= itemgetter("hits"), reverse=True) return outputinfo
def getCompanyInfo(self, results, pub_per_comp= 1000): ids = [] outputinfo = [] #get ids for result in results: ids.append((result["title"].replace(": ",""))) if len(ids) == 0: return outputinfo #group company and rank company companyScore = self.scoreCompany(results) #only show results for top 10 company companyScore = dict(sorted(companyScore.items(), key=lambda x: x[1],reverse=True)[:9]) #Counter(companyScore).most_common(10) #sorted(companyScore.iteritems(), key= itemgetter(1), reverse=True ) #print companyScore # print results # print companyScore #retrieve info db = dbconnector().getNewCon() cur = db.cursor() query = ("SELECT name, url, comp_id FROM companies where comp_id in (" + ','.join(map(str, companyScore.keys())) + ")") cur.execute(query) for (name, url, comp_id ) in cur: companyScholars = [] for result in results: if result['company'] == comp_id: companyScholars.append(result) #print result companyScholars = sorted(companyScholars, key= itemgetter("reverse_score"), reverse=True ) hits = len(companyScholars) if hits > pub_per_comp: companyScholars = companyScholars[0:pub_per_comp] if hits > 0: outputinfo.append({"company": comp_id, "company_name": name, "score": companyScore[comp_id], "hits" : hits, "url": url, "publication": companyScholars}) # cur.close() db.close() outputinfo = sorted(outputinfo, key= itemgetter("score"), reverse=True) return outputinfo
def create_workspace(): """ワークスペース生成 Returns: response: HTTP Respose """ globals.logger.debug('CALL create_workspace') app_name = "ワークスペース情報登録:" exec_stat = "初期化" exec_detail = "" globals.logger.debug(request.json) try: # Requestからorganization_id項目を抽出する organization_id = request.json['common']['organization_id'] # Requestからspecification項目を生成する specification = convert_workspace_specification(request.json) exec_stat = "DB接続" with dbconnector() as db, dbcursor(db) as cursor: # workspace情報 insert実行(戻り値:追加したワークスペースID) exec_stat = "登録実行" workspace_id = da_workspace.insert_workspace( cursor, organization_id, specification) globals.logger.debug('insert workspaced_id:{}'.format( str(workspace_id))) # workspace履歴追加 exec_stat = "登録実行(履歴)" da_workspace.insert_history(cursor, workspace_id) # workspace情報 データ再取得 exec_stat = "登録データ確認" fetch_rows = da_workspace.select_workspace_id(cursor, workspace_id) # Response用のjsonに変換 response_rows = fetch_rows globals.logger.info('CREATED workspace:{} , organization:{}'.format( str(workspace_id), str(organization_id))) return jsonify({"result": "200", "rows": response_rows}) except Exception as e: return common.serverError(e, app_name + exec_stat, exec_detail)
def getPublicationInfo(self, results): ids = [] gscholarinfo = {} outputinfo = [] #get ids for result in results: ids.append((result["title"].replace("",""))) if len(ids) == 0: return outputinfo #retrieve publication info db = dbconnector().getNewCon() cur = db.cursor() query = ("SELECT id, company, pmid, journal, IF_score, year, pmc, comp_id, title, authors FROM publications where id in (" + ','.join(ids) + ") order by IF_score desc") cur.execute(query) pubmed = pubmed_utilities() for (id, company, pmid, journal, IF_score, year, pmc , comp_id, title, authors ) in cur : #some publication, the title and authors are not uploaded, so retrieve from the API if title: try: paper_meta = pubmed.get_paper_meta_summary(pmid)[0]['summary'] except: paper_meta = "\t\t\t\t" title = paper_meta.split("\t")[1] authors = paper_meta.split("\t")[0] gscholarinfo[str(id)] = {"company_name" : company, "pmid" : pmid , "journal" : journal, "citations" : IF_score, "year" : year, "pmcid" : pmc, "company": comp_id, "authors": authors, "title": title } for result in results: gscholar = gscholarinfo[str(result["title"])] gscholar['content_parsed'] = result["content"] gscholar['score'] = result['score'] outputinfo.append(gscholar) cur.close() db.close() return outputinfo
def updateProduct(): test_searcher = searcher(settings.FULLTEXT_DIR) csvfile = csv.writer(open('product_hits.csv', 'wb') ) db = dbconnector().getNewCon("product") cur = db.cursor() cur.execute("select product from products ") count = 0 for (product, ) in cur : count = count + 1 print count hits = getHits(test_searcher, product) csvfile.writerow([product, "; ".join(hits), len(hits)]) '''cur1 = db.cursor() insert_query = ("update products set hits = %s , num_hits = %s where product = %s") data_query = ("; ".join(hits), len(hits), product) cur1.execute(insert_query, data_query) cur1.close() db.commit()''' cur.close() db.close()
def cd_result_update(workspace_id, cd_result_id): """CD結果更新 cd result update Args: workspace_id (int): workspace id cd_result_id (int): cd-result id Returns: response: HTTP Respose """ try: globals.logger.debug( 'CALL {}:from[{}] workspace_id[{}] cd_result_id[{}]'.format( inspect.currentframe().f_code.co_name, request.method, workspace_id, cd_result_id)) with dbconnector() as db, dbcursor(db) as cursor: # Requestからcontentsを設定 Set contents from Request update_contents_items = request.json.copy() # cd-result update実行 upd_cnt = da_cd_result.update_cd_result(cursor, workspace_id, cd_result_id, update_contents_items) if upd_cnt == 0: # データがないときは404応答 db.rollback() return jsonify({"result": "404"}), 404 globals.logger.debug('update cd_result_id:{}'.format(cd_result_id)) return jsonify({"result": "200"}), 200 except Exception as e: return common.server_error( e, "{} error".format(inspect.currentframe().f_code.co_name))
def post_tekton_task(workspace_id): """tekton_pipeline_task生成 Args: workspace_id (int): ワークスペースID Returns: Response: HTTP Respose """ globals.logger.debug('CALL post_tekton_task:{}'.format(workspace_id)) try: # image tagの生成 image_tag = '{}.{}'.format( re.sub(r'.*/', '', request.json['git_branch']), datetime.now(globals.TZ).strftime("%Y%m%d-%H%M%S")) with dbconnector() as db, dbcursor(db) as cursor: info = request.json info['workspace_id'] = workspace_id info['status'] = TASK_STATUS_RUNNING info['container_registry_image_tag'] = image_tag # tekton_pipeline_task情報の登録(戻り値:task_id) task_id = da_tekton.insert_tekton_pipeline_task(cursor, info) # こちらはDBCloseに纏めてコミットされることを考慮しているため単一コミットはしない return jsonify({ "result": "200", "param": { "task_id": task_id, "container_registry_image_tag": image_tag } }), 200 except Exception as e: return common.serverError(e)
def post_tekton_task(workspace_id): """CI結果情報登録 Returns: response: HTTP Respose """ globals.logger.debug('CALL post_tekton_task:{}'.format(workspace_id)) try: # image tagの生成 image_tag = '{}.{}'.format( re.sub(r'.*/', '', request.json['git_branch']), datetime.now(globals.TZ).strftime("%Y%m%d-%H%M%S")) with dbconnector() as db, dbcursor(db) as cursor: # Requestからinfo項目を生成する info = request.json info['workspace_id'] = workspace_id info['status'] = TASK_STATUS_RUNNING info['container_registry_image_tag'] = image_tag # CI結果情報 insert実行(戻り値:追加したtask_id) task_id = da_ci_result.insert_tekton_pipeline_task(cursor, info) globals.logger.debug('insert task_id:{}'.format(str(task_id))) return jsonify({ "result": "200", "param": { "task_id": task_id, "container_registry_image_tag": image_tag } }), 200 except Exception as e: return common.serverError( e, "tekton_pipeline_task db registration error")
def patch_tekton_task(workspace_id, task_id): """tekton_pipeline_task更新 Args: workspace_id (int): ワークスペースID task_id (int): タスクID Returns: Response: HTTP Respose """ globals.logger.debug('CALL patch_tekton_task:{},{}'.format( workspace_id, task_id)) try: # # SQL生成 # sqlstmt = ( 'UPDATE tekton_pipeline_task SET ' # + ','.join(map(lambda x: '{} = %({})s'.format(x,x), request.json.keys())) # + ' WHERE task_id = %(task_id)s' ) # # 更新パラメータ # update_param = request.json.copy() # update_param['task_id'] = task_id # 更新実行 with dbconnector() as db, dbcursor(db) as cursor: upd_cnt = da_tekton.update_tekton_pipeline_task( cursor, request.json, task_id) if upd_cnt == 0: # データがないときは404応答 db.rollback() return jsonify({"result": "404"}), 404 # 正常応答 return jsonify({"result": "200"}), 200 except Exception as e: return common.serverError(e)
def manifest_file_update(workspace_id, file_id): """マニフェストテンプレートファイル更新 Args: workspace_id (int): ワークスペースID file_id (int): ファイルID Returns: response: HTTP Respose """ globals.logger.debug("CALL manifest_file_update:{}".format(file_id)) try: # 登録内容は基本的に、引数のJsonの値を使用する(追加項目があればここで記載) specification = request.json with dbconnector() as db, dbcursor(db) as cursor: # workspace情報 update実行 upd_cnt = da_manifest.update_manifest(cursor, workspace_id, specification, file_id) if upd_cnt == 0: # データがないときは404応答 db.rollback() return jsonify({"result": "404"}), 404 # manifest情報の再取得 fetch_rows = da_manifest.select_manifest_id( cursor, workspace_id, file_id) # Response用のjsonに変換 response_rows = fetch_rows return jsonify({"result": "200", "rows": response_rows}) except Exception as e: return common.serverError(e)
def manifest_file_registration(workspace_id): """マニフェストテンプレートファイル登録 Args: workspace_id (int): ワークスペースID Returns: response: HTTP Respose """ globals.logger.debug( "CALL manifest_file_registration:{}".format(workspace_id)) try: # 登録内容は基本的に、引数のJsonの値を使用する(追加項目があればここで記載) specification = request.json response_rows = [] with dbconnector() as db, dbcursor(db) as cursor: for spec in specification['manifests']: # manifest情報 insert実行 manifest_id = da_manifest.insert_manifest( cursor, workspace_id, spec) globals.logger.debug('insert manifest_id:{}'.format( str(manifest_id))) # manifest情報の再取得 fetch_rows = da_manifest.select_manifest_id( cursor, workspace_id, manifest_id) # 戻り値に内容を追加 response_rows.append(fetch_rows[0]) return jsonify({"result": "200", "rows": response_rows}) except Exception as e: return common.serverError(e)
def list_organization(): """オーガナイゼーション一覧取得 Returns: response: HTTP Respose """ globals.logger.debug('CALL list_organization') try: with dbconnector() as db, dbcursor(db) as cursor: # select実行 fetch_rows = da_organization.select_organization(cursor) # Response用のjsonに変換 response_rows = fetch_rows return jsonify({ "result": "200", "rows": response_rows, "time": str(datetime.now(globals.TZ)) }), 200 except Exception as e: return common.serverError(e, "organization db get list error")
def create_organization(): """オーガナイゼーション登録 Returns: response: HTTP Respose """ globals.logger.debug('CALL create_organization') try: # Requestからinfo項目を生成する info = request.json with dbconnector() as db, dbcursor(db) as cursor: # organization情報 insert実行(戻り値:追加したorganizationID) organization_id = da_organization.insert_organization(cursor, info) globals.logger.debug('insert organization_id:{}'.format( str(organization_id))) # organization履歴追加 da_organization.insert_history(cursor, organization_id) # organization情報 データ再取得 fetch_rows = da_organization.select_organization_id( cursor, organization_id) # Response用のjsonに変換 response_rows = fetch_rows globals.logger.info('CREATED organization:{}'.format( str(organization_id))) return jsonify({"result": "200", "rows": response_rows}), 200 except Exception as e: return common.serverError(e, "organization db registration error")
def manifest_file_get_list(workspace_id): """マニフェストテンプレートファイル取得(全件) Args: workspace_id (int): ワークスペースID Returns: response: HTTP Respose """ globals.logger.debug("CALL manifest_file_get:{}".format(workspace_id)) try: with dbconnector() as db, dbcursor(db) as cursor: # manifest情報の取得 fetch_rows = da_manifest.select_manifest(cursor, workspace_id) # Response用のjsonに変換 response_rows = fetch_rows return jsonify({"result": "200", "rows": response_rows}) except Exception as e: return common.serverError(e)
def apply_tekton_pipeline(workspace_id, kind, param): """tekton pipelineの適用 templateにパラメータを埋込、適用する Args: workspace_id (int): ワークスペースID kind (str): 区分 "namespace"/"pipeline" param (dict): ワークスペースパラメータ """ globals.logger.debug( 'start apply_tekton_pipeline_files workspace_id:{} kind:{}'.format( workspace_id, kind)) with dbconnector() as db, dbcursor(db) as cursor: for template in templates[kind]: globals.logger.debug( '* tekton pipeline apply start workspace_id:{} template:{}'. format(workspace_id, template)) try: # templateの展開 yamltext = render_template('tekton/{}/{}'.format( kind, template), param=param, workspace_id=workspace_id) globals.logger.debug(' render_template finish') # ディレクトリ作成 os.makedirs(dest_folder, exist_ok=True) # yaml一時ファイル生成 path_yamlfile = '{}/{}'.format(dest_folder, template) with open(path_yamlfile, mode='w') as fp: fp.write(yamltext) globals.logger.debug(' yamlfile output finish') except Exception as e: globals.logger.error( 'tekton pipeline yamlfile create workspace_id:{} template:{}' .format(workspace_id, template)) raise # yaml情報の変数設定 info = { "workspace_id": workspace_id, "kind": kind, "template": template, "yamltext": yamltext, } # 適用yaml情報の書き込み da_tekton.insert_tekton_pipeline_yaml(cursor, info) db.commit() # kubectl実行 try: result_kubectl = subprocess.check_output( ['kubectl', 'apply', '-f', path_yamlfile], stderr=subprocess.STDOUT) globals.logger.debug( 'COMMAAND SUCCEED: kubectl apply -f {}\n{}'.format( path_yamlfile, result_kubectl.decode('utf-8'))) except subprocess.CalledProcessError as e: globals.logger.error('COMMAND ERROR RETURN:{}\n{}'.format( e.returncode, e.output.decode('utf-8'))) raise # 再スロー