Files
pika/internal/handler/agent_handler.go
T
yumusb 35becefe1e Support metric bundles and enable WS compression
Add support for bundling metrics and enable WebSocket compression. Introduces protocol.BundlePayload and MessageTypeBundle, and handles bundled messages on the server side (handleBundleMessage) by iterating items and forwarding each to metricService.HandleMetricData. On the agent side, add bundleWriter to collect outgoing MetricsPayloads, switch collectors to write into the bundle writer, and send a single bundle message when items exist. Also enable compression on the WebSocket upgrader and create a custom websocket.Dialer (with Proxy, HandshakeTimeout and EnableCompression). Minor logging/messages and import adjustments included.
2026-04-08 11:26:00 +08:00

57 lines
1.8 KiB
Go

package handler
import (
"github.com/dushixiang/pika/internal/service"
ws "github.com/dushixiang/pika/internal/websocket"
"github.com/gorilla/websocket"
"go.uber.org/zap"
)
type AgentHandler struct {
logger *zap.Logger
agentService *service.AgentService
trafficService *service.TrafficService
metricService *service.MetricService
monitorSvc *service.MonitorService
tamperService *service.TamperService
ddnsService *service.DDNSService
sshLoginService *service.SSHLoginService
apiKeyService *service.ApiKeyService
propertyService *service.PropertyService
wsManager *ws.Manager
upgrader websocket.Upgrader
}
func NewAgentHandler(logger *zap.Logger, agentService *service.AgentService, trafficService *service.TrafficService,
metricService *service.MetricService, monitorService *service.MonitorService, tamperService *service.TamperService,
ddnsService *service.DDNSService, sshLoginService *service.SSHLoginService, apiKeyService *service.ApiKeyService,
propertyService *service.PropertyService, wsManager *ws.Manager) *AgentHandler {
h := &AgentHandler{
logger: logger,
agentService: agentService,
trafficService: trafficService,
metricService: metricService,
monitorSvc: monitorService,
tamperService: tamperService,
ddnsService: ddnsService,
sshLoginService: sshLoginService,
apiKeyService: apiKeyService,
propertyService: propertyService,
wsManager: wsManager,
}
// 初始化upgrader,需要在创建handler之后因为需要引用h.checkOrigin
h.upgrader = websocket.Upgrader{
ReadBufferSize: 1024 * 32,
WriteBufferSize: 1024 * 32,
EnableCompression: true,
}
// 设置WebSocket消息处理器
wsManager.SetMessageHandler(h.handleWebSocketMessage)
wsManager.SetPongHandler(h.handleWebSocketPong)
return h
}