MM-34878: Add metrics for websocket reconnects (#17522)
* MM-34878: Add metrics for websocket reconnects Added two new metrics to track successful websocket drain and dead queue misses. ```release-note NONE ``` https://mattermost.atlassian.net/browse/MM-34878 * remove TODO line
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
fc0dbe0ace
Коммит
21776870d6
@@ -34,6 +34,12 @@ const (
|
|||||||
deadQueueSize = 128 // Approximated from /proc/sys/net/core/wmem_default / 2048 (avg msg size)
|
deadQueueSize = 128 // Approximated from /proc/sys/net/core/wmem_default / 2048 (avg msg size)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
reconnectFound = "success"
|
||||||
|
reconnectNotFound = "failure"
|
||||||
|
reconnectLossless = "lossless"
|
||||||
|
)
|
||||||
|
|
||||||
type WebConnConfig struct {
|
type WebConnConfig struct {
|
||||||
WebSocket *websocket.Conn
|
WebSocket *websocket.Conn
|
||||||
Session model.Session
|
Session model.Session
|
||||||
@@ -304,11 +310,13 @@ func (wc *WebConn) writePump() {
|
|||||||
wc.logSocketErr("websocket.drainDeadQueue", err)
|
wc.logSocketErr("websocket.drainDeadQueue", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if m := wc.App.Metrics(); m != nil {
|
||||||
|
m.IncrementWebsocketReconnectEvent(reconnectFound)
|
||||||
|
}
|
||||||
} else if wc.hasMsgLoss() {
|
} else if wc.hasMsgLoss() {
|
||||||
// If the seq number is not in dead queue, but it was supposed to be,
|
// If the seq number is not in dead queue, but it was supposed to be,
|
||||||
// then generate a different connection ID,
|
// then generate a different connection ID,
|
||||||
// and set sequence to 0, and clear dead queue.
|
// and set sequence to 0, and clear dead queue.
|
||||||
// TODO: Add metrics for this. (both true and false cases)
|
|
||||||
wc.clearDeadQueue()
|
wc.clearDeadQueue()
|
||||||
wc.SetConnectionID(model.NewId())
|
wc.SetConnectionID(model.NewId())
|
||||||
wc.Sequence = 0
|
wc.Sequence = 0
|
||||||
@@ -320,6 +328,13 @@ func (wc *WebConn) writePump() {
|
|||||||
wc.logSocketErr("websocket.sendHello", err)
|
wc.logSocketErr("websocket.sendHello", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if m := wc.App.Metrics(); m != nil {
|
||||||
|
m.IncrementWebsocketReconnectEvent(reconnectNotFound)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if m := wc.App.Metrics(); m != nil {
|
||||||
|
m.IncrementWebsocketReconnectEvent(reconnectLossless)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ type MetricsInterface interface {
|
|||||||
DecrementWebSocketBroadcastBufferSize(hub string, amount float64)
|
DecrementWebSocketBroadcastBufferSize(hub string, amount float64)
|
||||||
IncrementWebSocketBroadcastUsersRegistered(hub string, amount float64)
|
IncrementWebSocketBroadcastUsersRegistered(hub string, amount float64)
|
||||||
DecrementWebSocketBroadcastUsersRegistered(hub string, amount float64)
|
DecrementWebSocketBroadcastUsersRegistered(hub string, amount float64)
|
||||||
|
IncrementWebsocketReconnectEvent(eventType string)
|
||||||
|
|
||||||
AddMemCacheHitCounter(cacheName string, amount float64)
|
AddMemCacheHitCounter(cacheName string, amount float64)
|
||||||
AddMemCacheMissCounter(cacheName string, amount float64)
|
AddMemCacheMissCounter(cacheName string, amount float64)
|
||||||
|
|||||||
@@ -230,6 +230,11 @@ func (_m *MetricsInterface) IncrementWebsocketEvent(eventType string) {
|
|||||||
_m.Called(eventType)
|
_m.Called(eventType)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IncrementWebsocketReconnectEvent provides a mock function with given fields: eventType
|
||||||
|
func (_m *MetricsInterface) IncrementWebsocketReconnectEvent(eventType string) {
|
||||||
|
_m.Called(eventType)
|
||||||
|
}
|
||||||
|
|
||||||
// ObserveApiEndpointDuration provides a mock function with given fields: endpoint, method, statusCode, elapsed
|
// ObserveApiEndpointDuration provides a mock function with given fields: endpoint, method, statusCode, elapsed
|
||||||
func (_m *MetricsInterface) ObserveApiEndpointDuration(endpoint string, method string, statusCode string, elapsed float64) {
|
func (_m *MetricsInterface) ObserveApiEndpointDuration(endpoint string, method string, statusCode string, elapsed float64) {
|
||||||
_m.Called(endpoint, method, statusCode, elapsed)
|
_m.Called(endpoint, method, statusCode, elapsed)
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user