Files
whale-town/scripts/PerformanceMonitoringSystem.gd
2025-12-05 19:00:14 +08:00

85 lines
2.5 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
extends Node
class_name PerformanceMonitoringSystem
## 性能监控和报警系统
## 实时监控游戏性能并在出现问题时发出警报
# 性能指标类型
enum MetricType {
FPS, # 帧率
MEMORY_USAGE, # 内存使用
NETWORK_LATENCY, # 网络延迟
LOAD_TIME, # 加载时间
RENDER_TIME, # 渲染时间
SCRIPT_TIME, # 脚本执行时间
PHYSICS_TIME, # 物理计算时间
AUDIO_LATENCY, # 音频延迟
DISK_IO, # 磁盘IO
CPU_USAGE # CPU使用率
}
# 性能警报级别
enum AlertLevel {
INFO, # 信息
WARNING, # 警告
CRITICAL, # 严重
EMERGENCY # 紧急
}
# 性能指标数据结构
class PerformanceMetric:
var metric_type: MetricType
var value: float
var timestamp: float
var threshold_warning: float
var threshold_critical: float
var unit: String
func _init(type: MetricType, val: float, warn_threshold: float = 0.0, crit_threshold: float = 0.0, metric_unit: String = ""):
metric_type = type
value = val
timestamp = Time.get_unix_time_from_system()
threshold_warning = warn_threshold
threshold_critical = crit_threshold
unit = metric_unit
# 性能警报数据结构
class PerformanceAlert:
var alert_id: String
var metric_type: MetricType
var level: AlertLevel
var message: String
var value: float
var threshold: float
var timestamp: float
var resolved: bool = false
func _init(type: MetricType, alert_level: AlertLevel, msg: String, val: float, thresh: float):
alert_id = _generate_alert_id()
metric_type = type
level = alert_level
message = msg
value = val
threshold = thresh
timestamp = Time.get_unix_time_from_system()
func _generate_alert_id() -> String:
return "alert_%d_%d" % [Time.get_unix_time_from_system(), randi()]
# 数据存储
var performance_history: Dictionary = {} # MetricType -> Array[PerformanceMetric]
var active_alerts: Array[PerformanceAlert] = []
var resolved_alerts: Array[PerformanceAlert] = []
var monitoring_enabled: bool = true
# 监控配置
var monitoring_interval: float = 1.0 # 监控间隔(秒)
var history_retention_time: float = 3600.0 # 历史数据保留时间1小时
var max_history_entries: int = 1000
# 性能阈值配置
var performance_thresholds: Dictionary = {
MetricType.FPS: {"warning": 30.0, "critical": 15.0},
MetricType.MEMORY_USAGE: {"warning": 512.0, "critical": 1024.0}, # MB
MetricType.NETWORK_LATENCY: {"warning": 200.0, "critical": 500.0}, # ms
MetricType.LOAD_TIME: {"warning": 5.0, "critical": 10.0}, # seconds