Ejemplo n.º 1
0
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)
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
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()