mxivideo/python_core/utils/progress/reporter.py

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}")