Skip to content

Commit

Permalink
Merge pull request #465 from uselagoon/fix-metrics
Browse files Browse the repository at this point in the history
fix: move NATS message definitions into separate package
  • Loading branch information
smlx authored Aug 16, 2024
2 parents 3807745 + 39bed82 commit 40051bf
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 35 deletions.
29 changes: 29 additions & 0 deletions internal/bus/ssh.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// Package bus contains the definitions of the messages passed across NATS.
package bus

import "log/slog"

const (
// SubjectSSHAccessQuery defines the NATS subject for SSH access queries.
SubjectSSHAccessQuery = "lagoon.sshportal.api"
)

// SSHAccessQuery defines the structure of an SSH access query.
type SSHAccessQuery struct {
SSHFingerprint string
NamespaceName string
ProjectID int
EnvironmentID int
SessionID string
}

// LogValue implements the slog.LogValuer interface.
func (q SSHAccessQuery) LogValue() slog.Value {
return slog.GroupValue(
slog.String("sshFingerprint", q.SSHFingerprint),
slog.String("namespaceName", q.NamespaceName),
slog.Int("projectID", q.ProjectID),
slog.Int("environmentID", q.EnvironmentID),
slog.String("sessionID", q.SessionID),
)
}
14 changes: 11 additions & 3 deletions internal/sshportalapi/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (

"github.com/google/uuid"
"github.com/nats-io/nats.go"
"github.com/uselagoon/ssh-portal/internal/bus"
"github.com/uselagoon/ssh-portal/internal/lagoon"
"github.com/uselagoon/ssh-portal/internal/lagoondb"
"github.com/uselagoon/ssh-portal/internal/rbac"
Expand All @@ -36,8 +37,15 @@ type KeycloakService interface {
}

// ServeNATS sshportalapi NATS requests.
func ServeNATS(ctx context.Context, stop context.CancelFunc, log *slog.Logger,
p *rbac.Permission, l LagoonDBService, k KeycloakService, natsURL string) error {
func ServeNATS(
ctx context.Context,
stop context.CancelFunc,
log *slog.Logger,
p *rbac.Permission,
l LagoonDBService,
k KeycloakService,
natsURL string,
) error {
// setup synchronisation
wg := sync.WaitGroup{}
wg.Add(1)
Expand Down Expand Up @@ -65,7 +73,7 @@ func ServeNATS(ctx context.Context, stop context.CancelFunc, log *slog.Logger,
}
defer nc.Close()
// set up request/response callback for sshportal
_, err = nc.QueueSubscribe(SubjectSSHAccessQuery, queue,
_, err = nc.QueueSubscribe(bus.SubjectSSHAccessQuery, queue,
sshportal(ctx, log, nc, p, l, k))
if err != nil {
return fmt.Errorf("couldn't subscribe to queue: %v", err)
Expand Down
30 changes: 3 additions & 27 deletions internal/sshportalapi/sshportal.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,37 +9,13 @@ import (
"github.com/nats-io/nats.go"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
"github.com/uselagoon/ssh-portal/internal/bus"
"github.com/uselagoon/ssh-portal/internal/lagoon"
"github.com/uselagoon/ssh-portal/internal/lagoondb"
"github.com/uselagoon/ssh-portal/internal/rbac"
"go.opentelemetry.io/otel"
)

const (
// SubjectSSHAccessQuery defines the NATS subject for SSH access queries.
SubjectSSHAccessQuery = "lagoon.sshportal.api"
)

// SSHAccessQuery defines the structure of an SSH access query.
type SSHAccessQuery struct {
SSHFingerprint string
NamespaceName string
ProjectID int
EnvironmentID int
SessionID string
}

// LogValue implements the slog.LogValuer interface.
func (q SSHAccessQuery) LogValue() slog.Value {
return slog.GroupValue(
slog.String("sshFingerprint", q.SSHFingerprint),
slog.String("namespaceName", q.NamespaceName),
slog.Int("projectID", q.ProjectID),
slog.Int("environmentID", q.EnvironmentID),
slog.String("sessionID", q.SessionID),
)
}

var (
requestsCounter = promauto.NewCounter(prometheus.CounterOpts{
Name: "sshportalapi_requests_total",
Expand All @@ -55,10 +31,10 @@ func sshportal(
l LagoonDBService,
k KeycloakService,
) nats.Handler {
return func(_, replySubject string, query *SSHAccessQuery) {
return func(_, replySubject string, query *bus.SSHAccessQuery) {
var realmRoles, userGroups []string
// set up tracing and update metrics
ctx, span := otel.Tracer(pkgName).Start(ctx, SubjectSSHAccessQuery)
ctx, span := otel.Tracer(pkgName).Start(ctx, bus.SubjectSSHAccessQuery)
defer span.End()
requestsCounter.Inc()
log := log.With(slog.Any("query", query))
Expand Down
6 changes: 3 additions & 3 deletions internal/sshserver/authhandler.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import (
"github.com/nats-io/nats.go"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
"github.com/uselagoon/ssh-portal/internal/bus"
"github.com/uselagoon/ssh-portal/internal/k8s"
"github.com/uselagoon/ssh-portal/internal/sshportalapi"
gossh "golang.org/x/crypto/ssh"
)

Expand Down Expand Up @@ -60,7 +60,7 @@ func pubKeyAuth(log *slog.Logger, nc *nats.EncodedConn,
}
// construct ssh access query
fingerprint := gossh.FingerprintSHA256(pubKey)
q := sshportalapi.SSHAccessQuery{
q := bus.SSHAccessQuery{
SSHFingerprint: fingerprint,
NamespaceName: ctx.User(),
ProjectID: pid,
Expand All @@ -69,7 +69,7 @@ func pubKeyAuth(log *slog.Logger, nc *nats.EncodedConn,
}
// send query
var ok bool
err = nc.Request(sshportalapi.SubjectSSHAccessQuery, q, &ok, natsTimeout)
err = nc.Request(bus.SubjectSSHAccessQuery, q, &ok, natsTimeout)
if err != nil {
log.Warn("couldn't make NATS request", slog.Any("error", err))
return false
Expand Down
2 changes: 1 addition & 1 deletion internal/sshserver/serve.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ func Serve(
log.Warn("couldn't shutdown cleanly", slog.Any("error", err))
}
}()
if err := srv.Serve(l); !errors.Is(ssh.ErrServerClosed, err) {
if err := srv.Serve(l); !errors.Is(err, ssh.ErrServerClosed) {
return err
}
return nil
Expand Down
2 changes: 1 addition & 1 deletion internal/sshtoken/serve.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ func Serve(
log.Warn("couldn't shutdown cleanly", slog.Any("error", err))
}
}()
if err := srv.Serve(l); !errors.Is(ssh.ErrServerClosed, err) {
if err := srv.Serve(l); !errors.Is(err, ssh.ErrServerClosed) {
return err
}
return nil
Expand Down

0 comments on commit 40051bf

Please sign in to comment.