新增简易的8080面板😊
This commit is contained in:
30
store/@{FutureOSS}/lifecycle.disabled/README.md
Normal file
30
store/@{FutureOSS}/lifecycle.disabled/README.md
Normal file
@@ -0,0 +1,30 @@
|
||||
# lifecycle 生命周期管理
|
||||
|
||||
管理插件的状态转换和钩子函数。
|
||||
|
||||
## 功能
|
||||
|
||||
- 状态机:`pending` → `running` → `stopped`
|
||||
- 支持状态转换验证
|
||||
- 提供生命周期钩子:
|
||||
- `before_start`
|
||||
- `after_start`
|
||||
- `before_stop`
|
||||
- `after_stop`
|
||||
- 支持扩展能力注入
|
||||
|
||||
## 状态转换
|
||||
|
||||
```
|
||||
pending → running → stopped
|
||||
↕
|
||||
(可重启)
|
||||
```
|
||||
|
||||
## 使用
|
||||
|
||||
```python
|
||||
lc = lifecycle_plugin.create("my-plugin")
|
||||
lc.on("after_start", lambda: print("started"))
|
||||
lc.start()
|
||||
```
|
||||
8
store/@{FutureOSS}/lifecycle.disabled/SIGNATURE
Normal file
8
store/@{FutureOSS}/lifecycle.disabled/SIGNATURE
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"signature": "nfM9Sj7VvV+L85zCvVcmIQY4qZ9FDdsk8MZf0LrO/ys1o6FCQ96Ixt1aB+2j6crOvXUBavnSRPk/LNaDs9r3eh49+Zfy5rEK+M0UyGjcawvEY4e/lO20UWy4iLw3JdSBo9nnFQC9eE8D6C9F2oM7YcqmT/sH0wYuyjCsa8tk6P/jy5/IdCwR6bo6AIQSpCnvyNcS9JPU19f603f0nl/siafXVozQxMS3wCLQ5EAoDz7atLevvQK7xAZCIIcCsre/sHTZ3a6O+BFlYYQ5w/giWlrl4aF7W7JJntOwpain39B0ktDRV96msbW744a1BFkcUw91W/2sRU7T9xplARjmhlRPGkdMTlj4PGyy394oaLwhx+uusx28C9+gWxp7pQZNo08LQ6dKmzog4fpUFD3EEyZBtPY2XYsILqKnGQVn3TLAaMmdoHdwoR6moLtR6BfD3ToRFV6vcNRTig8hTiS9GTzZeQtEtVkoSeAZphzxWfB7FunimDRpPxndDmvhervPUJ/uAVLcdorbDFB0RfvR3znUZrQkaw5YQZjP8mhUNyA6avyOBvGdt1i0bhZsc6CUMN4BrC+vOULiykyVGnk3B07XrMHNB8AGuqR8Ai/2DFglomfs/l07mz01HeUotRg3MezqF8aSkofpPTpRieeD9IeQgH03sOGdvXHDgDJB3Xc=",
|
||||
"signer": "FutureOSS",
|
||||
"algorithm": "RSA-SHA256",
|
||||
"timestamp": 1775960646.0212853,
|
||||
"plugin_hash": "a7d6c6e01a8dc5df868e34777233e33d984d01adedb8adcee24d6892600928a8",
|
||||
"author": "FutureOSS"
|
||||
}
|
||||
Binary file not shown.
150
store/@{FutureOSS}/lifecycle.disabled/main.py
Normal file
150
store/@{FutureOSS}/lifecycle.disabled/main.py
Normal file
@@ -0,0 +1,150 @@
|
||||
"""生命周期插件 - 管理插件生命周期状态"""
|
||||
from enum import Enum
|
||||
from typing import Optional, Callable, Any
|
||||
|
||||
from oss.plugin.types import Plugin, register_plugin_type
|
||||
|
||||
|
||||
class LifecycleState(str, Enum):
|
||||
"""生命周期状态"""
|
||||
PENDING = "pending"
|
||||
RUNNING = "running"
|
||||
STOPPED = "stopped"
|
||||
|
||||
|
||||
class LifecycleError(Exception):
|
||||
"""生命周期错误"""
|
||||
pass
|
||||
|
||||
|
||||
class Lifecycle:
|
||||
"""生命周期管理器"""
|
||||
|
||||
VALID_TRANSITIONS = {
|
||||
LifecycleState.PENDING: [LifecycleState.RUNNING],
|
||||
LifecycleState.RUNNING: [LifecycleState.STOPPED],
|
||||
LifecycleState.STOPPED: [LifecycleState.RUNNING],
|
||||
}
|
||||
|
||||
def __init__(self, name: str):
|
||||
self.name = name
|
||||
self.state = LifecycleState.PENDING
|
||||
self._hooks: dict[str, list[Callable]] = {
|
||||
"before_start": [],
|
||||
"after_start": [],
|
||||
"before_stop": [],
|
||||
"after_stop": [],
|
||||
}
|
||||
self._extensions: dict[str, Any] = {} # 扩展能力
|
||||
|
||||
def add_extension(self, name: str, extension: Any):
|
||||
"""添加扩展能力"""
|
||||
self._extensions[name] = extension
|
||||
|
||||
def get_extension(self, name: str) -> Optional[Any]:
|
||||
"""获取扩展能力"""
|
||||
return self._extensions.get(name)
|
||||
|
||||
def transition(self, target_state: LifecycleState):
|
||||
"""状态转换"""
|
||||
if target_state not in self.VALID_TRANSITIONS.get(self.state, []):
|
||||
raise LifecycleError(
|
||||
f"插件 '{self.name}' 无法从 {self.state.value} 转换到 {target_state.value}"
|
||||
)
|
||||
|
||||
old_state = self.state
|
||||
self.state = target_state
|
||||
|
||||
def start(self):
|
||||
"""启动"""
|
||||
for hook in self._hooks["before_start"]:
|
||||
hook(self)
|
||||
self.transition(LifecycleState.RUNNING)
|
||||
for hook in self._hooks["after_start"]:
|
||||
hook(self)
|
||||
|
||||
def stop(self):
|
||||
"""停止"""
|
||||
for hook in self._hooks["before_stop"]:
|
||||
hook(self)
|
||||
self.transition(LifecycleState.STOPPED)
|
||||
for hook in self._hooks["after_stop"]:
|
||||
hook(self)
|
||||
|
||||
def restart(self):
|
||||
"""重启"""
|
||||
if self.state == LifecycleState.RUNNING:
|
||||
self.stop()
|
||||
self.start()
|
||||
|
||||
def on(self, event: str, hook: Callable):
|
||||
"""注册钩子"""
|
||||
if event in self._hooks:
|
||||
self._hooks[event].append(hook)
|
||||
|
||||
def is_running(self) -> bool:
|
||||
return self.state == LifecycleState.RUNNING
|
||||
|
||||
def is_stopped(self) -> bool:
|
||||
return self.state == LifecycleState.STOPPED
|
||||
|
||||
def is_pending(self) -> bool:
|
||||
return self.state == LifecycleState.PENDING
|
||||
|
||||
def __repr__(self):
|
||||
return f"Lifecycle({self.name}, state={self.state.value})"
|
||||
|
||||
|
||||
class LifecyclePlugin(Plugin):
|
||||
"""生命周期插件"""
|
||||
|
||||
def __init__(self):
|
||||
self.lifecycles: dict[str, Lifecycle] = {}
|
||||
|
||||
def init(self, deps: dict = None):
|
||||
"""初始化"""
|
||||
pass
|
||||
|
||||
def start(self):
|
||||
"""启动"""
|
||||
pass
|
||||
|
||||
def stop(self):
|
||||
"""停止"""
|
||||
pass
|
||||
|
||||
def create(self, name: str) -> Lifecycle:
|
||||
"""创建生命周期"""
|
||||
lifecycle = Lifecycle(name)
|
||||
self.lifecycles[name] = lifecycle
|
||||
return lifecycle
|
||||
|
||||
def get(self, name: str) -> Optional[Lifecycle]:
|
||||
"""获取生命周期"""
|
||||
return self.lifecycles.get(name)
|
||||
|
||||
def start_all(self):
|
||||
"""启动所有"""
|
||||
for lc in self.lifecycles.values():
|
||||
try:
|
||||
lc.start()
|
||||
except LifecycleError:
|
||||
pass
|
||||
|
||||
def stop_all(self):
|
||||
"""停止所有"""
|
||||
for lc in self.lifecycles.values():
|
||||
try:
|
||||
lc.stop()
|
||||
except LifecycleError:
|
||||
pass
|
||||
|
||||
|
||||
# 注册类型
|
||||
register_plugin_type("Lifecycle", Lifecycle)
|
||||
register_plugin_type("LifecycleState", LifecycleState)
|
||||
register_plugin_type("LifecycleError", LifecycleError)
|
||||
|
||||
|
||||
def New():
|
||||
return LifecyclePlugin()
|
||||
15
store/@{FutureOSS}/lifecycle.disabled/manifest.json
Normal file
15
store/@{FutureOSS}/lifecycle.disabled/manifest.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"metadata": {
|
||||
"name": "lifecycle",
|
||||
"version": "1.0.0",
|
||||
"author": "FutureOSS",
|
||||
"description": "生命周期管理 - 管理插件的状态转换和钩子",
|
||||
"type": "core"
|
||||
},
|
||||
"config": {
|
||||
"enabled": true,
|
||||
"args": {}
|
||||
},
|
||||
"dependencies": [],
|
||||
"permissions": []
|
||||
}
|
||||
Reference in New Issue
Block a user