Skip to content

Commit

Permalink
feat(graphql): auto start server
Browse files Browse the repository at this point in the history
  • Loading branch information
amimart committed Nov 17, 2022
1 parent a36dbc1 commit e99ed69
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 38 deletions.
37 changes: 17 additions & 20 deletions app/actor/graphql/actor.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,48 +4,45 @@ import (
"context"
"time"

"okp4/nemeton-leaderboard/app/message"

"github.com/asynkron/protoactor-go/actor"
"github.com/rs/zerolog/log"
)

type Actor struct {
srv *server
addr string
srv *server
}

func NewActor() *Actor {
return &Actor{}
func NewActor(addr string) *Actor {
return &Actor{
addr: addr,
srv: makeHTTPServer(
addr,
makeRouter(),
),
}
}

func (a *Actor) Receive(ctx actor.Context) {
switch msg := ctx.Message().(type) {
case *message.Start:
a.handleStart(msg)
switch ctx.Message().(type) {
case *actor.Started:
a.handleStart()
case *actor.Stopping:
a.handleStop()
}
}

func (a *Actor) handleStart(msg *message.Start) {
if a.srv != nil {
log.Warn().Msg("GraphQL server already started.")
return
}
a.srv = makeHTTPServer(
msg.ListenAddr,
makeRouter(),
)
func (a *Actor) handleStart() {
a.srv.start()
log.Info().Str("addr", msg.ListenAddr).Msg("GraphQL server started")
log.Info().Str("addr", a.addr).Msg("🔥 GraphQL server started")
}

func (a *Actor) handleStop() {
ctx, cancelFn := context.WithTimeout(context.Background(), 1*time.Second)
defer cancelFn()

log.Info().Msg("Stopping GraphQL server...")
log.Info().Msg("\U0001F9EF Stopping GraphQL server...")
if err := a.srv.stop(ctx); err != nil {
log.Err(err).Msg("Couldn't stop GraphQL server")
log.Err(err).Msg("Couldn't stop GraphQL server")
}
}
2 changes: 1 addition & 1 deletion app/actor/graphql/http.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ func (s *server) start() {
defer s.wg.Done()

if err := s.srv.ListenAndServe(); err != http.ErrServerClosed {
log.Fatal().Err(err).Msg("HTTP server stopped unexpectedly")
log.Fatal().Err(err).Msg("HTTP server stopped unexpectedly")
}
}()
}
Expand Down
5 changes: 0 additions & 5 deletions app/message/graphql.go

This file was deleted.

14 changes: 4 additions & 10 deletions app/system/bootstrap.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package system

import (
"okp4/nemeton-leaderboard/app/actor/graphql"
"okp4/nemeton-leaderboard/app/message"

"github.com/asynkron/protoactor-go/actor"
"github.com/rs/zerolog/log"
Expand All @@ -23,7 +22,7 @@ func Bootstrap(listenAddr string) *App {
ctx := actor.NewActorSystem().Root
initPID, err := ctx.SpawnNamed(initProps, "init")
if err != nil {
log.Panic().Err(err).Msg("Could not create init actor")
log.Panic().Err(err).Msg("Could not create init actor")
}

return &App{
Expand All @@ -38,15 +37,10 @@ func (app *App) Stop() error {

func boot(ctx actor.Context, listenAddr string) {
graphqlProps := actor.PropsFromProducer(func() actor.Actor {
return graphql.NewActor()
return graphql.NewActor(listenAddr)
})

graphqlPID, err := ctx.SpawnNamed(graphqlProps, "graphql")
if err != nil {
log.Panic().Err(err).Msg("Could not create graphql actor")
if _, err := ctx.SpawnNamed(graphqlProps, "graphql"); err != nil {
log.Panic().Err(err).Msg("❌Could not create graphql actor")
}

ctx.Send(graphqlPID, &message.Start{
ListenAddr: listenAddr,
})
}
4 changes: 2 additions & 2 deletions cmd/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ var (
signal.Notify(kill, syscall.SIGINT, syscall.SIGTERM)
<-kill

log.Info().Msg("Stopping app")
log.Info().Msg("\U0001F9EF Stopping app")
if err := app.Stop(); err != nil {
log.Fatal().Err(err).Msg("Unexpected error when stopping app")
log.Fatal().Err(err).Msg("Unexpected error when stopping app")
}
},
}
Expand Down

0 comments on commit e99ed69

Please sign in to comment.