diff options
| author | Kyren223 <Kyren223@proton.me> | 2025-07-17 18:45:43 +0300 |
|---|---|---|
| committer | Kyren223 <Kyren223@proton.me> | 2025-07-19 18:32:12 +0300 |
| commit | f793203e043aaa2db38823c84500e82756348ac0 (patch) | |
| tree | 88a8a7b78069427f11acb0f2040e9f1d391fab55 /internal/server/server.go | |
| parent | aaea258a21226a893025a65222e244c6b3f4454c (diff) | |
Added session duration metrics with device analytics along with device
analytics metrics in the DB to aggregate and DeviceID abuse prevention
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()) + } +} |
