Skip to content

Commit

Permalink
Add health provider
Browse files Browse the repository at this point in the history
  • Loading branch information
ZakShearman committed Sep 19, 2023
1 parent c8b409a commit 1fb4dfd
Show file tree
Hide file tree
Showing 6 changed files with 95 additions and 12 deletions.
9 changes: 9 additions & 0 deletions internal/config/static.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package config

const (
MongoServiceName = "mongodb"
)

var AllServices = []string{MongoServiceName}


63 changes: 63 additions & 0 deletions internal/healthprovider/health.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package healthprovider

import (
"context"
"google.golang.org/grpc/health"
healthpb "google.golang.org/grpc/health/grpc_health_v1"
"mc-player-service/internal/config"
"mc-player-service/internal/repository"
"time"
)

type checker struct {
srv *health.Server

repo repository.Repository
}

func Create(ctx context.Context, repo repository.Repository) *health.Server {
srv := health.NewServer()

for _, service := range config.AllServices {
srv.SetServingStatus(service, healthpb.HealthCheckResponse_UNKNOWN)
}

go func() {
<-ctx.Done()
srv.Shutdown()
}()

c := &checker{
srv: srv,
repo: repo,
}

c.startHealthChecks(ctx)

return srv
}

func (c *checker) startHealthChecks(ctx context.Context) {
go func() {
t := time.NewTicker(5 * time.Second)
defer t.Stop()

for {
select {
case <-t.C:
c.performHealthCheck(ctx)
case <-ctx.Done():
return
}
}
}()
}

func (c *checker) performHealthCheck(ctx context.Context) {
// MongoDB
if err := c.repo.Ping(ctx); err != nil {
c.srv.SetServingStatus(config.MongoServiceName, healthpb.HealthCheckResponse_NOT_SERVING)
} else {
c.srv.SetServingStatus(config.MongoServiceName, healthpb.HealthCheckResponse_SERVING)
}
}
4 changes: 4 additions & 0 deletions internal/repository/mongo.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,10 @@ func (m *mongoRepository) createCollIndexes(ctx context.Context, coll *mongo.Col
return len(result), nil
}

func (m *mongoRepository) Ping(ctx context.Context) error {
return m.database.Client().Ping(ctx, nil)
}

func createCodecRegistry() *bsoncodec.Registry {
r := bson.NewRegistry()

Expand Down
2 changes: 2 additions & 0 deletions internal/repository/public.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import (
)

type Repository interface {
Ping(ctx context.Context) error

GetPlayer(ctx context.Context, id uuid.UUID) (*model.Player, error)
GetPlayers(ctx context.Context, ids []uuid.UUID) ([]*model.Player, error)
SavePlayer(ctx context.Context, player *model.Player, upsert bool) error
Expand Down
5 changes: 5 additions & 0 deletions internal/service/public.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@ import (
"go.uber.org/zap/zapcore"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/health/grpc_health_v1"
"google.golang.org/grpc/reflection"
badgeh "mc-player-service/internal/badge"
"mc-player-service/internal/config"
"mc-player-service/internal/healthprovider"
"mc-player-service/internal/repository"
"net"
"sync"
Expand Down Expand Up @@ -40,6 +42,9 @@ func RunServices(ctx context.Context, logger *zap.SugaredLogger, wg *sync.WaitGr
reflection.Register(s)
}

healthSrv := healthprovider.Create(ctx, repo)

grpc_health_v1.RegisterHealthServer(s, healthSrv)
mcplayer.RegisterMcPlayerServer(s, newMcPlayerService(repo))
badge.RegisterBadgeManagerServer(s, newBadgeService(repo, badgeH, badgeCfg))
mcplayer.RegisterPlayerTrackerServer(s, newPlayerTrackerService(repo))
Expand Down
24 changes: 12 additions & 12 deletions tests/publish_connection_message/publish_conn_message.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,21 +24,21 @@ func main() {
PlayerUsername: "Expectational",
ServerId: "test-proxy-0000",
}

switchMsg := &common.PlayerSwitchServerMessage{
PlayerId: pIdStr,
ServerId: "test-server-1111",
}

logoutMsg := &common.PlayerDisconnectMessage{
PlayerId: pIdStr,
PlayerUsername: "Expectational",
}
//
//switchMsg := &common.PlayerSwitchServerMessage{
// PlayerId: pIdStr,
// ServerId: "test-server-1111",
//}
//
//logoutMsg := &common.PlayerDisconnectMessage{
// PlayerId: pIdStr,
// PlayerUsername: "Expectational",
//}

err := w.WriteMessages(context.Background(),
createKafkaMessage(connMsg),
createKafkaMessage(switchMsg),
createKafkaMessage(logoutMsg),
//createKafkaMessage(switchMsg),
//createKafkaMessage(logoutMsg),
)
if err != nil {
panic(err)
Expand Down

0 comments on commit 1fb4dfd

Please sign in to comment.