def prediction_copy(prediction, hostname, token=None): ''' 予測モデル複製 コピー元、コピー先サイトが同じ場合はこちらを使用する。違う場合は、prediction_updateを使用する。 ''' new_prediction = prediction_add_model_type_code(prediction, version=6) if token is None: uid, token = openam_operator.miLogin(hostname, "予測モデルを複製する側のログイン情報入力") if token is None: print("認証に失敗しました。") sys.exit(1) app_format = 'application/json' headers = {'Authorization': 'Bearer ' + token, 'Content-Type': app_format, 'Accept': app_format} session = requests.Session() url = "https://%s:50443/inventory-update-api/v6/prediction-models"%hostname #print(url) ret = session.post(url, headers=headers, json=new_prediction) if ret.status_code != 500: print(ret.json()) srcId = prediction["prediction_model_id"].split("/")[-1] newId = ret.json()["prediction_model_id"].split("/")[-1] # 元IDと複製した先IDをリスト保存 writeNewSrcDstList(srcId, newId)
def descriptor_get(hostname, d_ids, token=None): ''' 記述子の詳細を取得する @param hostname (string) @param d_ids (list) @retval jsonのlist と トークン ''' if token is None: uid, token = openam_operator.miLogin( hostname, "記述子取得する側(%s)のログイン情報入力" % hostname) if uid is None: print("認証に失敗しました。") sys.exit(1) session = requests.Session() app_format = 'application/json' headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': app_format, 'Accept': app_format } descriptors = [] for d_id in d_ids: url = "https://%s:50443/inventory-api/v6/descriptors/%s" % (hostname, d_id) ret = session.get(url, headers=headers) if ret.status_code == 200 or ret.status_code == 201: print("ID(%s) の記述子の詳細情報を取得しました" % d_id) #print(json.dumps(ret.json(), indent=2)) pass else: print("ID(%s) の記述子の詳細情報取得に失敗しました" % d_id) print("url = %s" % url) print(ret.text) #sys.exit(1) continue if ret.status_code == 200 or ret.status_code == 201: descriptor = ret.json() outfile = open("descriptor-%s.json" % d_id, "w") json.dump(ret.json(), outfile, indent=2, ensure_ascii=False) outfile.close() descriptors.append(descriptor) else: print(ret.text) sys.exit(1) return descriptors, token
def descriptor_update(descriptor, update_descriptor_id, hostname, token=None): ''' 記述子更新 ''' if token is None: uid, token = openam_operator.miLogin(hostname, "記述子を更新する側のログイン情報入力") session = requests.Session() app_format = 'application/json' headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': app_format, 'Accept': app_format } # 更新される側の詳細取得 url = "https://%s:50443/inventory-api/v6/descriptors/%s" % ( hostname, update_descriptor_id) ret = session.get(url, headers=headers, json=descriptor) if ret.status_code == 200 or ret.status_code == 201: #print(ret.json()) pass else: print(url) print(ret.text) sys.exit(1) d_dict = ret.json() for item in d_dict: if (item in descriptor) is True: d_dict[item] = descriptor[item] url = "https://%s:50443/inventory-update-api/v6/descriptors/%s" % ( hostname, update_descriptor_id) ret = session.put(url, headers=headers, json=descriptor) if ret.status_code == 200 or ret.status_code == 201: print("記述子(%s) を更新しました。" % update_descriptor_id) pass else: print(url) print(ret.text) sys.exit(1)
def prediction_get(hostname, p_id, token=None): ''' 予測モデルの詳細を取得する @param hostname (string) @param p_id (string) @retval (json), token(string) ''' if token is None: uid, token = openam_operator.miLogin(hostname, "予測モデルを取得する側(%s)のログイン情報入力"%hostname) if token is None: print("認証に失敗しました。") sys.exit(1) session = requests.Session() url = "https://%s:50443/inventory-api/v6/prediction-models/%s"%(hostname, p_id) app_format = 'application/json' headers = {'Authorization': 'Bearer ' + token, 'Content-Type': app_format, 'Accept': app_format} ret = session.get(url, headers=headers) if ret.status_code != 500: print("%s の予測モデル(%s)の詳細情報を取得しました"%(p_id, ret.json()["preferred_name"])) #print(json.dumps(ret.json(), indent=2)) pass else: print(ret.text) sys.exit(1) prediction = ret.json() outfile = open("prediction-%s.json"%p_id, "w") json.dump(ret.json(), outfile, indent=2, ensure_ascii=False) outfile.close() return prediction, token
def prediction_add_discriptor(prediction, p_id, hostname, token=None, d_ids=[]): ''' 記述子追加 @param prediction(dict) 予測モデル辞書 @param p_id(string) 予測モデルID @param hostname(string) MIntシステムホスト名 @param token(string) API token @param d_ids(list) 連続投入用記述子IDのリスト ''' if token is None: uid, token = openam_operator.miLogin(hostname, "予測モデルを編集する側(%s)のログイン情報入力"%hostname) if token is None: print("認証に失敗しました。") sys.exit(1) app_format = 'application/json' headers = {'Authorization': 'Bearer ' + token, 'Content-Type': app_format, 'Accept': app_format} session = requests.Session() count = 0 d_id_list = True if len(d_ids) == 0: d_id_list = False while True: if d_id_list is False: print("追加する記述子IDの入力") if sys.version_info[0] <= 2: d_id = raw_input("記述子ID: ") else: d_id = input("記述子ID: ") else: if count == len(d_ids): d_ids = "end" else: d_id = d_ids[count] count += 1 if d_id == "": print("予測モデルを変更して終了します。") break if d_id == "end": print("予測モデルを変更せずに終了します。") return if d_id.startswith("D") is False: print("記述子のフォーマットが違います。Dxxxxxyyyyyyyyyy(%s)"%d_id) continue url = "https://%s:50443/inventory-api/v6/descriptors/%s"%(hostname, d_id) ret = session.get(url, headers=headers) if ret.status_code != 200: print("記述子取得失敗") print(ret.text) continue print("記述子名(%s):%s"%(d_id, ret.json()["preferred_name"])) if sys.version_info[0] <= 2: io = raw_input("to input(1) / to output(2): ") else: io = input("to input(1) / to output(2): ") if io != "1" and io != "2": continue new_port = {} new_port["port_name"] = ret.json()["preferred_name"] new_port["required"] = "true" new_port["descriptor_id"] = ret.json()["descriptor_id"] new_port["description"] = ret.json()["description"] new_port["tag_list"] = [] new_port["metadata_list"] = [] if io == "1": is_same = False for item in prediction["input_ports"]: if item["port_name"] == ret.json()["preferred_name"]: is_same = True if is_same is True: print("ポート名(%s) はすでに入力ポートに登録があります。"%ret.json()["preferred_name"]) continue prediction["input_ports"].append(new_port) else: is_same = False for item in prediction["output_ports"]: if item["port_name"] == ret.json()["preferred_name"]: is_same = True if is_same is True: print("ポート名(%s) はすでに出力ポートに登録があります。"%ret.json()["preferred_name"]) continue prediction["output_ports"].append(new_port) url = "https://%s:50443/inventory-update-api/v6/prediction-models/%s"%(hostname, p_id) ret = session.put(url, headers=headers, json=prediction) outfile = open("prediction-%s.json"%p_id, "w") json.dump(prediction, outfile, indent=2, ensure_ascii=False) outfile.close() if ret.status_code != 200 and ret.status_code != 201: print("変更に失敗しました。") print(ret.text) return else: print(ret.text)
def prediction_update(p1_dict, p2_dict, url_from, url_to, history, token=None, mode="update"): ''' 予測モデル更新 予測モデル更新の他、違うサイトへの複製もこちらを使用する。 @param p1_dict : 更新元の予測モデル詳細辞書 @param p2_dict : 更新先の予測モデル詳細辞書 ''' if token is None: uid, token = openam_operator.miLogin(url_to, "予測モデルを更新する側のログイン情報入力") if token is None: print("認証に失敗しました。") sys.exit(1) app_format = 'application/json' headers = {'Authorization': 'Bearer ' + token, 'Content-Type': app_format, 'Accept': app_format} # 更新先予測モデルID dst_p_id = p2_dict["prediction_model_id"].split("/")[-1] # 更新元予測モデルID src_p_id = p1_dict["prediction_model_id"].split("/")[-1] # 更新先のキーと同じ更新元のキーの内容を更新先へコピー for key in p2_dict: if (key in p1_dict) is True: p2_dict[key] = p1_dict[key] p2_dict = io_port_transform(p2_dict, url_from, url_to, history) session = requests.Session() if mode == "copy": url = "https://%s:50443/inventory-update-api/v6/prediction-models"%url_to #print(url) ret = session.post(url, headers=headers, json=p2_dict) else: url = "https://%s:50443/inventory-update-api/v6/prediction-models/%s"%(url_to, dst_p_id) #print(url) ret = session.put(url, headers=headers, json=p2_dict) if ret.status_code == 200 or ret.status_code == 201: if mode == "copy": new_id = ret.json()["prediction_model_id"].split("/")[-1] print("予測モデル(%s)を複製しました。"%new_id) else: print("予測モデル(%s)を更新しました。"%dst_p_id) else: if mode == "copy": print("予測モデル(%s)の複製に失敗しました"%src_p_id) else: print(str(p2_dict)) print("予測モデル(%s)の更新に失敗しました"%dst_p_id) print(url) print(ret.json()) sys.exit(1) # 元IDと複製した先IDをリスト保存 #writeNewSrcDstList(src_p_id, dst_p_id) history_db_package.addInventoryData(url_from, url_to, {src_p_id: dst_p_id}, "prediction_model")
def descriptor_copy(descriptors, hostname, token=None, history=None): ''' 記述子複製 @param descriptors(list) @param hostname(string) @param token(string) @param history(string) @retval なし ''' if token is None: uid, token = openam_operator.miLogin( hostname, "記述子を複製する側(%s)のログイン情報入力" % hostname) if token is None: print("認証に失敗しました。") sys.exit(1) session = requests.Session() app_format = 'application/json' headers = { 'Authorization': 'Bearer ' + token, 'Content-Type': app_format, 'Accept': app_format } url = "https://%s:50443/inventory-update-api/v6/descriptors" % hostname #print(url) for descriptor in descriptors: # metadata ID の変換 if len(descriptor["metadata_list"]) != 0: for item in descriptor["metadata_list"]: if item["meta_id"] is None: continue metaid = int(item["meta_id"][7:]) item["meta_id"] = "MD%05d%010d" % (site_id[hostname], metaid) ret = session.post(url, headers=headers, json=descriptor) if ret.status_code == 200 or ret.status_code == 201: print("ID(%s/%s) の記述子複製しました" % (descriptor["descriptor_id"].split("/")[-1], descriptor["preferred_name"])) print(ret.json()) else: print("ID(%s/%s) の記述子複製に失敗しました" % (descriptor["descriptor_id"].split("/")[-1], descriptor["preferred_name"])) print(ret.text) #sys.exit(1) continue descriptor_id_before = descriptor["descriptor_id"].split("/")[-1] descriptor_id_after = ret.json()["descriptor_id"].split("/")[-1] if history is None: if os.path.exists("descriptors.ids") is True: infile = open("descriptors.ids") d = json.load(infile) infile.close() else: d = {} outfile = open("descriptors.ids", "w") else: if os.path.exists(history) is True: infile = open(history) d = json.load(infile) infile.close() else: d = {} outfile = open(history, "w") d[descriptor_id_before] = descriptor_id_after json.dump(d, outfile, indent=4) outfile.close()