pomerium/internal/zero/telemetry/sessions/sessions.go
Caleb Doxsey 3961098681
core/grpc: add IterateAll method (#5227)
* core/grpc: add IterateAll method

* Update pkg/grpc/databroker/generic.go

Co-authored-by: Denis Mishin <dmishin@pomerium.com>

---------

Co-authored-by: Denis Mishin <dmishin@pomerium.com>
2024-08-20 09:34:26 -06:00

40 lines
980 B
Go

package sessions
import (
"context"
"fmt"
"time"
"github.com/pomerium/pomerium/internal/sets"
"github.com/pomerium/pomerium/pkg/grpc/databroker"
"github.com/pomerium/pomerium/pkg/grpc/session"
)
// CurrentUsers returns a list of users active within the current UTC day
func CurrentUsers(
ctx context.Context,
client databroker.DataBrokerServiceClient,
) ([]string, error) {
users := sets.NewHash[string]()
utcNow := time.Now().UTC()
threshold := time.Date(utcNow.Year(), utcNow.Month(), utcNow.Day(), 0, 0, 0, 0, time.UTC)
for s, err := range databroker.IterateAll[session.Session](ctx, client) {
if err != nil {
return nil, fmt.Errorf("error fetching sessions: %w", err)
}
if s.Object.GetUserId() == "" { // session creation is in progress
continue
}
if s.Object.GetAccessedAt() == nil {
continue
}
if s.Object.GetAccessedAt().AsTime().Before(threshold) {
continue
}
users.Add(s.Object.GetUserId())
}
return users.Items(), nil
}