feat: auto-trunk creation, SIP gateway in metrics, gateway WS broadcast
- SIPGateway field in NodeMetric model - HasNode() engine method - OnNewNode callback in NATS subscriber - Auto-create balance trunk from new node metric - BroadcastGatewayEvent on WS hub - Gateway status indicators in trunks UI (green/red/gray) - SPA fallback for frontend routing
This commit is contained in:
@@ -18,11 +18,12 @@ const subject = "pulse.metrics.>"
|
||||
|
||||
// Subscriber подписывается на NATS и обновляет engine + пишет лог.
|
||||
type Subscriber struct {
|
||||
nc *natsgo.Conn
|
||||
sub *natsgo.Subscription
|
||||
engine *engine.Engine
|
||||
logger *filelog.Logger
|
||||
wg sync.WaitGroup
|
||||
nc *natsgo.Conn
|
||||
sub *natsgo.Subscription
|
||||
engine *engine.Engine
|
||||
logger *filelog.Logger
|
||||
onNewNode func(nodeID, sipGateway string) // вызывается при первой метрике от новой ноды
|
||||
wg sync.WaitGroup
|
||||
}
|
||||
|
||||
// NewSubscriber подключается к NATS и запускает подписку.
|
||||
@@ -57,6 +58,11 @@ func NewSubscriber(natsURL, user, password string, eng *engine.Engine, l *filelo
|
||||
return s, nil
|
||||
}
|
||||
|
||||
// SetOnNewNode устанавливает callback, вызываемый при первой метрике от новой ноды.
|
||||
func (s *Subscriber) SetOnNewNode(fn func(nodeID, sipGateway string)) {
|
||||
s.onNewNode = fn
|
||||
}
|
||||
|
||||
// handleMetric — обработчик входящих сообщений NATS.
|
||||
func (s *Subscriber) handleMetric(msg *natsgo.Msg) {
|
||||
var metric models.NodeMetric
|
||||
@@ -74,8 +80,16 @@ func (s *Subscriber) handleMetric(msg *natsgo.Msg) {
|
||||
metric.MaxCalls = 250 // разумное значение по умолчанию
|
||||
}
|
||||
|
||||
// Проверка: это новая нода с sip_gateway?
|
||||
isNew := !s.engine.HasNode(metric.NodeID)
|
||||
|
||||
ns := s.engine.UpdateMetric(&metric)
|
||||
s.logger.Log(ns)
|
||||
|
||||
// Авто-создание balance-транка для новой ноды
|
||||
if isNew && metric.SIPGateway != "" && s.onNewNode != nil {
|
||||
s.onNewNode(metric.NodeID, metric.SIPGateway)
|
||||
}
|
||||
}
|
||||
|
||||
// IsConnected возвращает true, если NATS-соединение активно.
|
||||
|
||||
Reference in New Issue
Block a user