diff options
Diffstat (limited to 'internal/server/server.go')
| -rw-r--r-- | internal/server/server.go | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/internal/server/server.go b/internal/server/server.go index ecb5234..d94dca6 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -276,8 +276,10 @@ func (server *server) handleConnection(conn net.Conn) { sess := session.NewSession(server, addr, cancel, &writerWg) go func() { <-ctx.Done() - // Remove session after cancellation if sess.IsAuthenticated() { + server.handleSessionMetrics(ctx, sess) + + // Remove session after cancellation sameAddress := addr.String() == server.Session(sess.ID()).Addr().String() // false if the user signed in from a different connection if sameAddress { @@ -680,3 +682,17 @@ func formatIPv4(ip uint32) string { n = strconv.AppendUint(n, uint64(ip&0xFF), 10) return string(n) } + +func (s *server) handleSessionMetrics(ctx context.Context, sess *session.Session) { + duration := sess.Duration() + analytics := sess.Analytics() + if api.IsValidAnalytics(ctx, analytics) { + metrics.SessionDuration.WithLabelValues( + analytics.OS, analytics.Arch, analytics.Term, analytics.Colorterm, + ).Observe(duration.Seconds()) + } else { + metrics.SessionDuration.WithLabelValues( + "", "", "", "", + ).Observe(duration.Seconds()) + } +} |
