mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-29 05:56:38 +08:00
f0e234df1f
Agent 仅上报 host_metrics/edge_health/access_logs;业务流量与 UV 由 Server 侧访问日志聚合。新增 of_node_edge_health 与 of_access_log_hourly, 删除 request_reports/openresty 吞吐路径;API 不再暴露 traffic_reports 与 openresty_rx|tx。心跳/离线默认阈值与回填迁移一并入库。
66 lines
1.9 KiB
Go
66 lines
1.9 KiB
Go
// Copyright 2026 Arctel.net
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package relay
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/Rain-kl/Wavelet/internal/apps/openflare/agent"
|
|
"github.com/Rain-kl/Wavelet/internal/db"
|
|
"github.com/Rain-kl/Wavelet/internal/model"
|
|
"go.uber.org/zap"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
const relayFrpsUnhealthyEventType = "frps_unhealthy"
|
|
|
|
func reconcileRelayHealthEvents(ctx context.Context, nodeID string, relayStatus string, reportedAt time.Time) error {
|
|
if relayStatus == "unknown" {
|
|
return nil
|
|
}
|
|
managedTypes := map[string]struct{}{
|
|
relayFrpsUnhealthyEventType: {},
|
|
}
|
|
events := []agent.NodeHealthEvent{}
|
|
if relayStatus == relayStatusUnhealthy {
|
|
events = append(events, agent.NodeHealthEvent{
|
|
EventType: relayFrpsUnhealthyEventType,
|
|
Severity: "critical",
|
|
Message: "frps runtime is not healthy",
|
|
TriggeredAtUnix: reportedAt.Unix(),
|
|
Metadata: map[string]string{
|
|
"relay_status": relayStatus,
|
|
},
|
|
})
|
|
}
|
|
conn := db.DB(ctx)
|
|
if conn == nil {
|
|
return nil
|
|
}
|
|
return conn.Transaction(func(tx *gorm.DB) error {
|
|
return agent.ReconcileScopedNodeHealthEvents(tx, nodeID, events, reportedAt, managedTypes)
|
|
})
|
|
}
|
|
|
|
func persistRelayHeartbeatObservability(ctx context.Context, nodeID string, payload HeartbeatPayload, reportedAt time.Time) {
|
|
agent.PersistHeartbeatObservability(ctx, nodeID, agent.NodePayload{
|
|
Profile: payload.Profile,
|
|
HostMetrics: payload.Snapshot,
|
|
HealthEvents: payload.HealthEvents,
|
|
}, reportedAt)
|
|
|
|
frpsObs := &model.OpenFlareNodeObservationFrps{
|
|
NodeID: nodeID,
|
|
CapturedAt: reportedAt,
|
|
FrpsConnections: payload.FrpsConnCount,
|
|
FrpsProxyCount: payload.FrpsProxyCount,
|
|
FrpsClientCount: payload.FrpsClientCount,
|
|
FrpsProxies: agent.MarshalJSON(payload.FrpsProxies),
|
|
}
|
|
if err := model.InsertOpenFlareNodeObservationFrps(ctx, frpsObs); err != nil {
|
|
zap.L().Error("persist relay frps observation failed", zap.String("node_id", nodeID), zap.Error(err))
|
|
}
|
|
}
|