feat(dashboard): The dashboard supports displaying real-time data

This commit is contained in:
wangjiahao
2026-02-28 16:02:08 +08:00
parent 9dccaf12d1
commit 82de276aad
4 changed files with 37 additions and 13 deletions
+17 -7
View File
@@ -1,5 +1,5 @@
import datetime
from typing import List, Optional, Union
from typing import List, Optional, Union, Dict, Any
import orjson
import sqlparse
@@ -18,7 +18,7 @@ from apps.system.crud.assistant import AssistantOutDs, AssistantOutDsFactory
from apps.system.schemas.system_schema import AssistantOutDsSchema
from common.core.deps import CurrentAssistant, SessionDep, CurrentUser, Trans
from common.utils.data_format import DataFormat
from common.utils.utils import extract_nested_json
from common.utils.utils import extract_nested_json, SQLBotLogUtil
def get_chat_record_by_id(session: SessionDep, record_id: int):
@@ -243,14 +243,24 @@ def get_chart_data_with_user_live(session: SessionDep, current_user: CurrentUser
return get_chart_data_ds(session,row.datasource, row.sql)
def get_chart_data_ds(session: SessionDep,ds_id,sql):
json_result: Dict[str, Any] = {'status': 'success','data':[],'message':''}
try:
datasource = get_ds(session,ds_id)
result = exec_sql(ds=datasource,sql=sql, origin_column=False)
_data = DataFormat.convert_large_numbers_in_object_array(result.get('data'))
return _data
except Exception:
if datasource is None:
json_result['status'] = 'failed'
json_result['message'] = 'Datasource not found'
return json_result
else:
result = exec_sql(ds=datasource,sql=sql, origin_column=False)
_data = DataFormat.convert_large_numbers_in_object_array(result.get('data'))
json_result['data'] = _data
return json_result
except Exception as e:
SQLBotLogUtil.error(f"Function failed: {e}")
json_result['status'] = 'failed'
json_result['message'] = f"{e}"
pass
return []
return json_result
def get_chat_chart_data(session: SessionDep, chat_record_id: int):
stmt = select(ChatRecord.data).where(and_(ChatRecord.id == chat_record_id))
@@ -49,11 +49,12 @@ def load_resource(session: SessionDep, dashboard: QueryDashboard):
result_dict = dict(result)
canvas_view_obj = orjson.loads(result_dict['canvas_view_info'])
for item in canvas_view_obj.values(): # 直接遍历值
# 检查必要字段是否存在
for item in canvas_view_obj.values():
if all(key in item for key in ['datasource', 'sql']) and item['datasource'] is not None:
item['data']['data'] = get_chart_data_ds(session, item['datasource'], item['sql'])
data_result = get_chart_data_ds(session, item['datasource'], item['sql'])
item['data']['data'] = data_result['data']
item['status'] = data_result['status']
item['message'] = data_result['message']
result_dict['canvas_view_info'] = orjson.dumps(canvas_view_obj)
return result_dict