summaryrefslogtreecommitdiff
path: root/internal/server/server.go
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2025-07-17 18:45:43 +0300
committerKyren223 <Kyren223@proton.me>2025-07-19 18:32:12 +0300
commitf793203e043aaa2db38823c84500e82756348ac0 (patch)
tree88a8a7b78069427f11acb0f2040e9f1d391fab55 /internal/server/server.go
parentaaea258a21226a893025a65222e244c6b3f4454c (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.go18
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())
+ }
+}