59 lines
2.0 KiB
Python
59 lines
2.0 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
进度报告器
|
|
"""
|
|
|
|
from .types import ProgressInfo
|
|
from ..jsonrpc import create_progress_reporter
|
|
from ..logger import logger
|
|
|
|
class ProgressReporter:
|
|
"""进度报告器"""
|
|
|
|
def __init__(self, service_name: str):
|
|
self.service_name = service_name
|
|
self.rpc_progress_reporter = None
|
|
self._setup_progress_reporter()
|
|
|
|
def _setup_progress_reporter(self) -> None:
|
|
"""设置进度报告器"""
|
|
try:
|
|
self.rpc_progress_reporter = create_progress_reporter()
|
|
logger.debug(f"Progress reporter initialized for {self.service_name}")
|
|
except Exception as e:
|
|
logger.warning(f"Failed to initialize progress reporter: {e}")
|
|
self.rpc_progress_reporter = None
|
|
|
|
def report_progress(self, progress: ProgressInfo) -> None:
|
|
"""报告进度"""
|
|
if self.rpc_progress_reporter:
|
|
# JSON-RPC进度报告
|
|
self.rpc_progress_reporter.report(
|
|
step=self.service_name,
|
|
progress=progress.percentage / 100.0, # 转换为0-1范围
|
|
message=progress.message,
|
|
details={
|
|
"current": progress.current,
|
|
"total": progress.total,
|
|
"elapsed_time": progress.elapsed_time,
|
|
"estimated_remaining": progress.estimated_remaining
|
|
}
|
|
)
|
|
else:
|
|
# 简单的控制台输出
|
|
print(f"Progress: {progress.percentage:.1f}% - {progress.message}")
|
|
|
|
def report_step(self, step_name: str, message: str) -> None:
|
|
"""报告步骤"""
|
|
if self.rpc_progress_reporter:
|
|
self.rpc_progress_reporter.step(step_name, message)
|
|
else:
|
|
print(f"Step: {step_name} - {message}")
|
|
|
|
def report_complete(self, message: str = "完成") -> None:
|
|
"""报告完成"""
|
|
if self.rpc_progress_reporter:
|
|
self.rpc_progress_reporter.complete(message)
|
|
else:
|
|
print(f"Complete: {message}")
|