mirror of
https://gh-proxy.org/https://github.com/klinsmaya/SQLBot.git
synced 2026-11-08 01:06:59 +08:00
feat(dashboard): The dashboard supports displaying real-time data
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -32,7 +32,6 @@ defineProps({
|
||||
}
|
||||
:deep(.ed-empty__description) {
|
||||
margin-top: 8px;
|
||||
|
||||
color: var(--N600, #646a73);
|
||||
text-align: center;
|
||||
font-size: 14px;
|
||||
|
||||
@@ -156,8 +156,11 @@ defineExpose({
|
||||
</div>
|
||||
</div>
|
||||
<div class="chart-show-area">
|
||||
<div v-if="viewInfo.status === 'failed'" class="error-info">
|
||||
{{ viewInfo.message }}
|
||||
</div>
|
||||
<ChartComponent
|
||||
v-if="viewInfo.id"
|
||||
v-else-if="viewInfo.id"
|
||||
:id="outerId || viewInfo.id"
|
||||
ref="chartRef"
|
||||
:type="chartType"
|
||||
@@ -383,4 +386,15 @@ defineExpose({
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.error-info {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 12px;
|
||||
color: var(--N600, #646a73);
|
||||
}
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user