Python APIの結果を次のAPIで読み込み結果をdataframeにすべて入れることができない

実現したいこと

ここに実現したいことを箇条書きで書いてください。

前提

デバイス一覧

devicelist

11.1.1.1 21.1.1.2 31.1.1.3 41.1.1.4

例として、2つ目のAPI結果では1デバイスに複数のTunnel結果が存在する

example

1deviceId debice loss latency 21.1.1.1 abc 999 999 31.1.1.1 edf 999 999 41.1.1.1 ghi 999 999 51.1.1.1 jkl 999 999

しかし実行結果は、末尾のデバイス結果しか帰ってこない

発生している問題・エラーメッセージ

log

1debug1 2debug2 3debug3 4device_url 5https://vmanage_ABC/dataservice/device 6filter_df 7deviceId system_ip・・・bdfSessionsUp bfdSessions 81.1.1.1 1.1.1.1 ・・・ 8 8 91.1.1.2 1.1.1.2 ・・・ 8 8 101.1.1.3 1.1.1.3 ・・・ 8 8 111.1.1.4 1.1.1.4 ・・・ 8 8 12 13query_data 14{'query':(略),{'value':['1.1.1.1'],(略). 'type':'sum'}]}} 15devide_url 16https://vmanage_ABC//dataservice/statistics/approute/fec/aggregation 17device_list 18<Response [200]> 19200 20df_json_data 21[{'loss_percentage': 99.99, (略), 'vqoe_score': 5}] 22df 23loss_percentage・・・・vqoe_score 2499.99・・・・5 2599.98・・・・5 2699.97・・・・5 2799.96・・・・5 28 29query_data 30{'query':(略),{'value':['1.1.1.2'],(略). 'type':'sum'}]}} 31devide_url 32https://vmanage_ABC//dataservice/statistics/approute/fec/aggregation 33device_list 34<Response [200]> 35200 36df_json_data 37[{'loss_percentage': 99.99, (略), 'vqoe_score': 5}] 38df 39loss_percentage・・・・vqoe_score 4099.99・・・・5 4199.98・・・・5 4299.97・・・・5 4399.96・・・・5 44 45query_data 46{'query':(略),{'value':['1.1.1.3'],(略). 'type':'sum'}]}} 47devide_url 48https://vmanage_ABC//dataservice/statistics/approute/fec/aggregation 49device_list 50<Response [200]> 51200 52df_json_data 53[{'loss_percentage': 99.99, (略), 'vqoe_score': 5}] 54df 55loss_percentage・・・・vqoe_score 5699.99・・・・5 5799.98・・・・5 5899.97・・・・5 5999.96・・・・5 60 61query_data 62{'query':(略),{'value':['1.1.1.1'],(略). 'type':'sum'}]}} 63devide_url 64https://vmanage_ABC//dataservice/statistics/approute/fec/aggregation 65device_list 66<Response [200]> 67200 68df_json_data 69[{'loss_percentage': 99.99, (略), 'vqoe_score': 5}] 70df 71loss_percentage・・・・vqoe_score 7299.99・・・・5 7399.98・・・・5 7499.97・・・・5 7599.96・・・・5 76 77System_ip loss_percentage ・・・・ vqoe_score dt 781.1.1.4 99.99・・・・5 2023/01/01 01:01:01 791.1.1.4 99.98・・・・5 2023/01/01 01:01:01 801.1.1.4 99.97・・・・5 2023/01/01 01:01:01 811.1.1.4 99.96・・・・5 2023/01/01 01:01:01

該当のソースコード

Python

1import json 2import boto3 3import csv 4import numpy as np 5import pandas as pd 6import requests 7import os 8import urllib3 9urllib3.disable_warnings(urlib3.exceptions.InsecureRequests.InsecureRequestWarning)10from io import StringIO 11from datetime import datetime 12 13headers_post = ["accept": "application/json", "Content-Type": "application/json"]14 15print("debug1")16 17def lambda_handler(event, context):18 s3 = boto3.resource(`s3`)19 bucket_name _ os.environ.get(`S3_BUCKET`)20 21 vmanage_info = "tmp/vmanage_info.csv"22 bucket.download_file(os.environ.get(`CSV_VMANAGE_INFO`), vmanage_info)23 vmanage_info_df = pd.read.csv(vmanage_info)24 25 device_info = "/tmp/device_info.csv"26 bucket.download_file(os.environ.get(`CSV_DEVICE_INFO`), device_info)27 device_info_df = pd.read.csv(device_info)28 29 Tunnel_level_quality_analysis_df = get_request(vmanage_info_df)30 31 tmp_csv = "/tmp/Tunnel_level_quality_analysis.csv"32 Tunnel_level_quality_analysis_df.to_csv(tmp_csv, encoding='utf-8', index=False)33 34 s3 = boto3.resource('s3')35 s3.meta.client.upload_file(tmp_csvm 'utlink-vmanage-bucket', 'csv/Tunnel_level_quality_analysis.csv')36 37 print("debug2")38 39def get_request(vmanage_info_df):40 api_datalist = []41 for row in vmanage_info_df.itertuples():42 vmanage_host = row[1]43 vmanage_port = row[2]44 vmanage_username = row[3]45 vmanage_password = row[4]46 47 base_url = `https://%s:%s`%(vmanage_host, vmanage_port)48 49 login_action = `/j_security_check` 50 51 login_data = {`j_username` : vmanage_username, `j_password` : vmanage_password}52 53 login_url = base_url + login_action 54 55 session = requests.session()56 57 pring("debug3")58 59 login_response = session.post(url=login_url, data=login_data, verify=False)60 if b`<html>` in login_response.content:61 print("Login token Failed")62 exit(1)63 64 xsrf_token_url = base_url + '/dataservice/client/token'65 66 login_token = session.get(url=xsrf_token_url, verify=False)67 if login_token.status_code = 200:68 if b`<html>` in login_token.content:69 print("Login token Failed")70 exit(1)71 72 session.headers[`X-XSRF-TOKEN`] = login_token.content 73 74 75 device_url = base_url + `/dataservice/device` 76 print("device_url")77 print(device_url)78 79 device_list = session.get(url=device_url, verify=False)80 if device_list.status_code = 200:81 json_data = vdevice_list.json()82 else:83 print (device_list.status_code)84 85 df = pd.json_normalize(json_data["data"]86 df = df[(df["device-type"] == "vedge") & (df["reachability"] == "reachable")]87 88 print("filter_df")89 print(df)90 91 df = df[["deviceId", "system-ip", "host-name", "device-model", "bfdSessionsUp", "bfdSessions"]]92 93 for data in df.itertuples():94 System_ip = data[1]95 query_data = ["query":(),["value":[System_ip],()"type":"sum"}]}}96 print("query_data")97 print(query_data)98 99 device_url = base_url + '/dataservice/statistics/approute/fec/aggregation'100 print("device_url")101 print(device_url)102 103 device_list = session.post(url=device_url, json=query_data, headers=headers_post, verify=False)104 print("device_list")105 print(device_list)106 107 if device_list.status_code == 200:108 json_data = device_list.json()109 else:110 print(device_list.status_code)111 112 df = pd.json_normalize(json_data["data"])113 114 print("df_json_data")115 print(json_data["data"])116 117 print("df")118 print(df)119 120 df.insert(0, 'System_ip', data[1])121 df['df'] = datetime.now(),strftime('%Y%m%d% %H:%M:%S')122 c = df.pop('dt')123 df.insert(df.shape[1], c.name, c)124 125 print(df)126 return df

試したこと

forやdfなどの位置を組み替えてデバッグ中なのですが、
いずれも末尾のデバイス結果しか出力されず

理想 以下のdf結果において、デバイス分出力したい

DeviceList

1deviceId system_ip・・・bdfSessionsUp bfdSessions 21.1.1.1 1.1.1.1 ・・・ 8 8 31.1.1.2 1.1.1.2 ・・・ 8 8 41.1.1.3 1.1.1.3 ・・・ 8 8 51.1.1.4 1.1.1.4 ・・・ 8 8

想定結果

Result

1System_ip loss_percentage ・・・・ vqoe_score dt 21.1.1.1 99.99・・・・5 2023/01/01 01:01:01 31.1.1.1 99.98・・・・5 2023/01/01 01:01:01 41.1.1.1 99.97・・・・5 2023/01/01 01:01:01 51.1.1.1 99.96・・・・5 2023/01/01 01:01:01 6System_ip loss_percentage ・・・・ vqoe_score dt 71.1.1.2 99.99・・・・5 2023/01/01 01:01:01 81.1.1.2 99.98・・・・5 2023/01/01 01:01:01 91.1.1.2 99.97・・・・5 2023/01/01 01:01:01 101.1.1.2 99.96・・・・5 2023/01/01 01:01:01 11System_ip loss_percentage ・・・・ vqoe_score dt 121.1.1.3 99.99・・・・5 2023/01/01 01:01:01 131.1.1.3 99.98・・・・5 2023/01/01 01:01:01 141.1.1.3 99.97・・・・5 2023/01/01 01:01:01 151.1.1.3 99.96・・・・5 2023/01/01 01:01:01 16System_ip loss_percentage ・・・・ vqoe_score dt 171.1.1.4 99.99・・・・5 2023/01/01 01:01:01 181.1.1.4 99.98・・・・5 2023/01/01 01:01:01 191.1.1.4 99.97・・・・5 2023/01/01 01:01:01 201.1.1.4 99.96・・・・5 2023/01/01 01:01:01

補足情報(FW/ツールのバージョンなど)

Python3.9
ここにより詳細な情報を記載してください。

コメントを投稿

0 コメント