Merge pull request #2167 from hotlcc/develop-20240524-插件支持多仪表板组件
This commit is contained in:
commit
355dad9205
@ -150,12 +150,12 @@ def plugin_page(plugin_id: str, _: schemas.TokenPayload = Depends(verify_token))
|
|||||||
return PluginManager().get_plugin_page(plugin_id)
|
return PluginManager().get_plugin_page(plugin_id)
|
||||||
|
|
||||||
|
|
||||||
@router.get("/dashboards", summary="获取有仪表板的插件清单")
|
@router.get("/dashboard/meta", summary="获取所有插件仪表板元信息")
|
||||||
def dashboard_plugins(_: schemas.TokenPayload = Depends(verify_token)) -> List[dict]:
|
def plugin_dashboard_meta(_: schemas.TokenPayload = Depends(verify_token)) -> List[dict]:
|
||||||
"""
|
"""
|
||||||
获取所有插件仪表板
|
获取所有插件仪表板元信息
|
||||||
"""
|
"""
|
||||||
return PluginManager().get_dashboard_plugins()
|
return PluginManager().get_plugin_dashboard_meta()
|
||||||
|
|
||||||
|
|
||||||
@router.get("/dashboard/{plugin_id}", summary="获取插件仪表板配置")
|
@router.get("/dashboard/{plugin_id}", summary="获取插件仪表板配置")
|
||||||
@ -164,7 +164,16 @@ def plugin_dashboard(plugin_id: str, user_agent: Annotated[str | None, Header()]
|
|||||||
"""
|
"""
|
||||||
根据插件ID获取插件仪表板
|
根据插件ID获取插件仪表板
|
||||||
"""
|
"""
|
||||||
return PluginManager().get_plugin_dashboard(plugin_id, user_agent=user_agent)
|
return PluginManager().get_plugin_dashboard(plugin_id, key=None, user_agent=user_agent)
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/dashboard/{plugin_id}/{key}", summary="获取插件仪表板配置")
|
||||||
|
def plugin_dashboard(plugin_id: str, key: str, user_agent: Annotated[str | None, Header()] = None,
|
||||||
|
_: schemas.TokenPayload = Depends(verify_token)) -> schemas.PluginDashboard:
|
||||||
|
"""
|
||||||
|
根据插件ID获取插件仪表板
|
||||||
|
"""
|
||||||
|
return PluginManager().get_plugin_dashboard(plugin_id, key=key, user_agent=user_agent)
|
||||||
|
|
||||||
|
|
||||||
@router.get("/reset/{plugin_id}", summary="重置插件配置", response_model=schemas.Response)
|
@router.get("/reset/{plugin_id}", summary="重置插件配置", response_model=schemas.Response)
|
||||||
|
@ -344,10 +344,11 @@ class PluginManager(metaclass=Singleton):
|
|||||||
return plugin.get_page() or []
|
return plugin.get_page() or []
|
||||||
return []
|
return []
|
||||||
|
|
||||||
def get_plugin_dashboard(self, pid: str, **kwargs) -> Optional[schemas.PluginDashboard]:
|
def get_plugin_dashboard(self, pid: str, key: str, **kwargs) -> Optional[schemas.PluginDashboard]:
|
||||||
"""
|
"""
|
||||||
获取插件仪表盘
|
获取插件仪表盘
|
||||||
:param pid: 插件ID
|
:param pid: 插件ID
|
||||||
|
:param key: 仪表盘key
|
||||||
"""
|
"""
|
||||||
def __get_params_count(func: Callable):
|
def __get_params_count(func: Callable):
|
||||||
"""
|
"""
|
||||||
@ -361,7 +362,10 @@ class PluginManager(metaclass=Singleton):
|
|||||||
return None
|
return None
|
||||||
if hasattr(plugin, "get_dashboard"):
|
if hasattr(plugin, "get_dashboard"):
|
||||||
# 检查方法的参数个数
|
# 检查方法的参数个数
|
||||||
if __get_params_count(plugin.get_dashboard) > 0:
|
params_count = __get_params_count(plugin.get_dashboard)
|
||||||
|
if params_count > 1:
|
||||||
|
dashboard: Tuple = plugin.get_dashboard(key=key, **kwargs)
|
||||||
|
elif params_count > 0:
|
||||||
dashboard: Tuple = plugin.get_dashboard(**kwargs)
|
dashboard: Tuple = plugin.get_dashboard(**kwargs)
|
||||||
else:
|
else:
|
||||||
dashboard: Tuple = plugin.get_dashboard()
|
dashboard: Tuple = plugin.get_dashboard()
|
||||||
@ -370,6 +374,7 @@ class PluginManager(metaclass=Singleton):
|
|||||||
return schemas.PluginDashboard(
|
return schemas.PluginDashboard(
|
||||||
id=pid,
|
id=pid,
|
||||||
name=plugin.plugin_name,
|
name=plugin.plugin_name,
|
||||||
|
key=key or "",
|
||||||
cols=cols or {},
|
cols=cols or {},
|
||||||
elements=elements,
|
elements=elements,
|
||||||
attrs=attrs or {}
|
attrs=attrs or {}
|
||||||
@ -445,24 +450,35 @@ class PluginManager(metaclass=Singleton):
|
|||||||
logger.error(f"获取插件 {pid} 服务出错:{str(e)}")
|
logger.error(f"获取插件 {pid} 服务出错:{str(e)}")
|
||||||
return ret_services
|
return ret_services
|
||||||
|
|
||||||
def get_dashboard_plugins(self) -> List[dict]:
|
def get_plugin_dashboard_meta(self):
|
||||||
"""
|
"""
|
||||||
获取有仪表盘的插件列表
|
获取所有插件仪表盘元信息
|
||||||
"""
|
"""
|
||||||
dashboards = []
|
dashboard_meta = []
|
||||||
for pid, plugin in self._running_plugins.items():
|
for plugin_id, plugin in self._running_plugins.items():
|
||||||
if hasattr(plugin, "get_dashboard") \
|
if not hasattr(plugin, "get_dashboard") or not ObjectUtils.check_method(plugin.get_dashboard):
|
||||||
and ObjectUtils.check_method(plugin.get_dashboard):
|
continue
|
||||||
try:
|
try:
|
||||||
if not plugin.get_state():
|
if not plugin.get_state():
|
||||||
continue
|
continue
|
||||||
dashboards.append({
|
# 如果是多仪表盘实现
|
||||||
"id": pid,
|
if hasattr(plugin, "get_dashboard_meta") and ObjectUtils.check_method(plugin.get_dashboard_meta):
|
||||||
"name": plugin.plugin_name
|
meta = plugin.get_dashboard_meta()
|
||||||
|
if meta:
|
||||||
|
dashboard_meta.extend([{
|
||||||
|
"id": plugin_id,
|
||||||
|
"name": m.get("name"),
|
||||||
|
"key": m.get("key"),
|
||||||
|
} for m in meta if m])
|
||||||
|
else:
|
||||||
|
dashboard_meta.append({
|
||||||
|
"id": plugin_id,
|
||||||
|
"name": plugin.plugin_name,
|
||||||
|
"key": "",
|
||||||
})
|
})
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"获取有仪表盘的插件出错:{str(e)}")
|
logger.error(f"获取插件[{plugin_id}]仪表盘元数据出错:{str(e)}")
|
||||||
return dashboards
|
return dashboard_meta
|
||||||
|
|
||||||
def get_plugin_attr(self, pid: str, attr: str) -> Any:
|
def get_plugin_attr(self, pid: str, attr: str) -> Any:
|
||||||
"""
|
"""
|
||||||
|
@ -120,7 +120,7 @@ class _PluginBase(metaclass=ABCMeta):
|
|||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def get_dashboard(self, **kwargs) -> Optional[Tuple[Dict[str, Any], Dict[str, Any], List[dict]]]:
|
def get_dashboard(self, key: str, **kwargs) -> Optional[Tuple[Dict[str, Any], Dict[str, Any], List[dict]]]:
|
||||||
"""
|
"""
|
||||||
获取插件仪表盘页面,需要返回:1、仪表板col配置字典;2、全局配置(自动刷新等);3、仪表板页面元素配置json(含数据)
|
获取插件仪表盘页面,需要返回:1、仪表板col配置字典;2、全局配置(自动刷新等);3、仪表板页面元素配置json(含数据)
|
||||||
1、col配置参考:
|
1、col配置参考:
|
||||||
@ -137,6 +137,22 @@ class _PluginBase(metaclass=ABCMeta):
|
|||||||
3、页面配置使用Vuetify组件拼装,参考:https://vuetifyjs.com/
|
3、页面配置使用Vuetify组件拼装,参考:https://vuetifyjs.com/
|
||||||
|
|
||||||
kwargs参数可获取的值:1、user_agent:浏览器UA
|
kwargs参数可获取的值:1、user_agent:浏览器UA
|
||||||
|
|
||||||
|
:param key: 仪表盘key,根据指定的key返回相应的仪表盘数据,缺省时返回一个固定的仪表盘数据(兼容旧版)
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get_dashboard_meta(self) -> Optional[List[Dict[str, str]]]:
|
||||||
|
"""
|
||||||
|
获取插件仪表盘元信息
|
||||||
|
返回示例:
|
||||||
|
[{
|
||||||
|
"key": "dashboard1", // 仪表盘的key,在当前插件范围唯一
|
||||||
|
"name": "仪表盘1" // 仪表盘的名称
|
||||||
|
}, {
|
||||||
|
"key": "dashboard2",
|
||||||
|
"name": "仪表盘2"
|
||||||
|
}]
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -55,6 +55,8 @@ class PluginDashboard(Plugin):
|
|||||||
id: Optional[str] = None
|
id: Optional[str] = None
|
||||||
# 名称
|
# 名称
|
||||||
name: Optional[str] = None
|
name: Optional[str] = None
|
||||||
|
# 仪表板key
|
||||||
|
key: Optional[str] = None
|
||||||
# 全局配置
|
# 全局配置
|
||||||
attrs: Optional[dict] = {}
|
attrs: Optional[dict] = {}
|
||||||
# col列数
|
# col列数
|
||||||
|
Loading…
x
Reference in New Issue
Block a user