summaryrefslogtreecommitdiff
path: root/internal/server/server.go
diff options
context:
space:
mode:
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())
+ }
+}