메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Highchart pandas oracle asm disksize 챠트

데브카페
  • highchart 와 pandas를 이용하여 오라클 asm의 디스크사이즈를 시각화 하려 한다
  • 진행순서
  1. SQL 작성
  2. pandas를 이용하여 DB 데이터 취합
  3. highchart 의 파이 차트 출력을 위한 데이터 포멧 처리
  4. 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 값을 적절히 배치한다.

Comments