다른 명령
- highchart 와 pandas를 이용하여 오라클 asm의 디스크사이즈를 시각화 하려 한다
- 진행순서
- SQL 작성
- pandas를 이용하여 DB 데이터 취합
- highchart 의 파이 차트 출력을 위한 데이터 포멧 처리
- html(highchart)에 반영
SQL 쿼리
SELECT 'testdb' db_id, dg_name, total, used, free FROM v$disk_group;
pandas DataFrame으로 변환
import pandas as pd # 예제 데이터 (SQL 결과 시뮬레이션) data = [ {'db_id': 'db1', 'db_name': 'SDB1', 'dg_group': 'DATA1', 'total': 333, 'used': 111, 'free': 222}, {'db_id': 'db1', 'db_name': 'SDB1', 'dg_group': 'RECO1', 'total': 444, 'used': 222, 'free': 222}, {'db_id': 'db2', 'db_name': 'SDB2', 'dg_group': 'DATA2', 'total': 555, 'used': 333, 'free': 222}, {'db_id': 'db2', 'db_name': 'SDB2', 'dg_group': 'RECO2', 'total': 666, 'used': 444, 'free': 222}, {'db_id': 'db3', 'db_name': 'SDB3', 'dg_group': 'DATA3', 'total': 777, 'used': 555, 'free': 222}, {'db_id': 'db3', 'db_name': 'SDB3', 'dg_group': 'RECO3', 'total': 888, 'used': 666, 'free': 222}, ] # DataFrame 생성 df = pd.DataFrame(data) # 데이터 변환 result = [] for db_id, group in df.groupby('db_id'): title = group['db_name'].iloc[0] # 각 그룹에서 첫 번째 db_name 가져오기 data = [] for _, row in group.iterrows(): # 각 dg_group의 total, used, free 값을 변환 data.append({'name': f"{row['dg_group']}_ToTal", 'value': row['total']}) data.append({'name': f"{row['dg_group']}_Used", 'value': row['used']}) data.append({'name': f"{row['dg_group']}_Free", 'value': row['free']}) result.append({'id': db_id, 'title': title, 'data': data}) # 결과 출력 for item in result: print(item)
{'id': 'db1', 'title': 'SDB1', 'data': [{'name': 'DATA1_ToTal', 'value': 333}, {'name': 'DATA1_Used', 'value': 111}, {'name': 'DATA1_Free', 'value': 222}, {'name': 'RECO1_ToTal', 'value': 444}, {'name': 'RECO1_Used', 'value': 222}, {'name': 'RECO1_Free', 'value': 222}]} {'id': 'db2', 'title': 'SDB2', 'data': [{'name': 'DATA2_ToTal', 'value': 555}, {'name': 'DATA2_Used', 'value': 333}, {'name': 'DATA2_Free', 'value': 222}, {'name': 'RECO2_ToTal', 'value': 666}, {'name': 'RECO2_Used', 'value': 444}, {'name': 'RECO2_Free', 'value': 222}]} {'id': 'db3', 'title': 'SDB3', 'data': [{'name': 'DATA3_ToTal', 'value': 777}, {'name': 'DATA3_Used', 'value': 555}, {'name': 'DATA3_Free', 'value': 222}, {'name': 'RECO3_ToTal', 'value': 888}, {'name': 'RECO3_Used', 'value': 666}, {'name': 'RECO3_Free', 'value': 222}]}
html(highchart)에 반영
위에서 하이차트 포맷에 맞게 뱐경된 result 값을 적절히 배치한다.