mirror of
https://github.com/csunny/DB-GPT.git
synced 2025-10-30 06:08:57 +00:00
62 lines
2.4 KiB
Python
62 lines
2.4 KiB
Python
from typing import List
|
|
from decimal import Decimal
|
|
import logging
|
|
|
|
from pilot.configs.config import Config
|
|
from pilot.scene.chat_dashboard.data_preparation.report_schma import ValueItem
|
|
|
|
CFG = Config()
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class DashboardDataLoader:
|
|
def get_sql_value(self, db_conn, chart_sql: str):
|
|
return db_conn.query_ex(chart_sql)
|
|
|
|
def get_chart_values_by_conn(self, db_conn, chart_sql: str):
|
|
field_names, datas = db_conn.query_ex(chart_sql)
|
|
return self.get_chart_values_by_data(field_names, datas, chart_sql)
|
|
|
|
def get_chart_values_by_data(self, field_names, datas, chart_sql: str):
|
|
logger.info(f"get_chart_values_by_conn:{chart_sql}")
|
|
try:
|
|
values: List[ValueItem] = []
|
|
data_map = {}
|
|
field_map = {}
|
|
index = 0
|
|
for field_name in field_names:
|
|
data_map.update({f"{field_name}": [row[index] for row in datas]})
|
|
index += 1
|
|
if not data_map[field_name]:
|
|
field_map.update({f"{field_name}": False})
|
|
else:
|
|
field_map.update(
|
|
{
|
|
f"{field_name}": all(
|
|
isinstance(item, (int, float, Decimal))
|
|
for item in data_map[field_name]
|
|
)
|
|
}
|
|
)
|
|
|
|
for field_name in field_names[1:]:
|
|
if not field_map[field_name]:
|
|
logger.info("More than 2 non-numeric column:" + field_name)
|
|
else:
|
|
for data in datas:
|
|
value_item = ValueItem(
|
|
name=data[0],
|
|
type=field_name,
|
|
value=data[field_names.index(field_name)],
|
|
)
|
|
values.append(value_item)
|
|
return field_names, values
|
|
except Exception as e:
|
|
logger.debug("Prepare Chart Data Failed!" + str(e))
|
|
raise ValueError("Prepare Chart Data Failed!")
|
|
|
|
def get_chart_values_by_db(self, db_name: str, chart_sql: str):
|
|
logger.info(f"get_chart_values_by_db:{db_name},{chart_sql}")
|
|
db_conn = CFG.LOCAL_DB_MANAGE.get_connect(db_name)
|
|
return self.get_chart_values_by_conn(db_conn, chart_sql)
|