mirror of
https://github.com/coder/coder.git
synced 2026-11-03 22:25:31 +08:00
Phase 1 of the Scalable Approach for Adding New IDE Session Types RFC, tracked in #27410. Gives agent session accounting one canonical vocabulary for app names, so later work can report a count per app without the agent and the server disagreeing about what an app is called. - Adds codersdk/appname.go: NormalizeAppName for storage and lookup, and AppFamilyName for the places that need a bounded value, such as a Prometheus label or the Connection_Type enum. - agentssh.Server keeps session counters in a map keyed by normalized name instead of three fixed atomics, dropping entries at zero. - Drops MagicSessionType. Sessions carry plain app names, and unrecognized ones flow through as themselves rather than collapsing to unknown. Wire behavior is unchanged: the agent still reports the four session_count_* fields over Agent API 2.10.
78 lines
2.2 KiB
Go
78 lines
2.2 KiB
Go
package agentssh
|
|
|
|
import (
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
|
|
"github.com/coder/coder/v2/codersdk"
|
|
)
|
|
|
|
type sshServerMetrics struct {
|
|
failedConnectionsTotal prometheus.Counter
|
|
sftpConnectionsTotal prometheus.Counter
|
|
sftpServerErrors prometheus.Counter
|
|
x11HandlerErrors *prometheus.CounterVec
|
|
sessionsTotal *prometheus.CounterVec
|
|
sessionErrors *prometheus.CounterVec
|
|
}
|
|
|
|
func newSSHServerMetrics(registerer prometheus.Registerer) *sshServerMetrics {
|
|
failedConnectionsTotal := prometheus.NewCounter(prometheus.CounterOpts{
|
|
Namespace: "agent", Subsystem: "ssh_server", Name: "failed_connections_total",
|
|
})
|
|
registerer.MustRegister(failedConnectionsTotal)
|
|
|
|
sftpConnectionsTotal := prometheus.NewCounter(prometheus.CounterOpts{
|
|
Namespace: "agent", Subsystem: "ssh_server", Name: "sftp_connections_total",
|
|
})
|
|
registerer.MustRegister(sftpConnectionsTotal)
|
|
|
|
sftpServerErrors := prometheus.NewCounter(prometheus.CounterOpts{
|
|
Namespace: "agent", Subsystem: "ssh_server", Name: "sftp_server_errors_total",
|
|
})
|
|
registerer.MustRegister(sftpServerErrors)
|
|
|
|
x11HandlerErrors := prometheus.NewCounterVec(
|
|
prometheus.CounterOpts{
|
|
Namespace: "agent",
|
|
Subsystem: "x11_handler",
|
|
Name: "errors_total",
|
|
},
|
|
[]string{"error_type"},
|
|
)
|
|
registerer.MustRegister(x11HandlerErrors)
|
|
|
|
sessionsTotal := prometheus.NewCounterVec(
|
|
prometheus.CounterOpts{
|
|
Namespace: "agent",
|
|
Subsystem: "sessions",
|
|
Name: "total",
|
|
},
|
|
[]string{"magic_type", "pty"},
|
|
)
|
|
registerer.MustRegister(sessionsTotal)
|
|
|
|
sessionErrors := prometheus.NewCounterVec(
|
|
prometheus.CounterOpts{
|
|
Namespace: "agent",
|
|
Subsystem: "sessions",
|
|
Name: "errors_total",
|
|
},
|
|
[]string{"magic_type", "pty", "error_type"},
|
|
)
|
|
registerer.MustRegister(sessionErrors)
|
|
|
|
return &sshServerMetrics{
|
|
failedConnectionsTotal: failedConnectionsTotal,
|
|
sftpConnectionsTotal: sftpConnectionsTotal,
|
|
sftpServerErrors: sftpServerErrors,
|
|
x11HandlerErrors: x11HandlerErrors,
|
|
sessionsTotal: sessionsTotal,
|
|
sessionErrors: sessionErrors,
|
|
}
|
|
}
|
|
|
|
func appNameMetricLabel(appName string) string {
|
|
// Family, not raw name, so cardinality stays bounded.
|
|
return string(codersdk.AppNameFamily(appName))
|
|
}
|