Skip to content

Commit

Permalink
feat: update web app to use miniature-monkey lib
Browse files Browse the repository at this point in the history
  • Loading branch information
shipperizer committed Nov 29, 2021
1 parent 2d911fd commit 1b1ff62
Showing 1 changed file with 28 additions and 24 deletions.
52 changes: 28 additions & 24 deletions cmd/web/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,61 +2,63 @@ package main

import (
"context"
"encoding/json"
"fmt"
"net/http"
"os"
"os/signal"
"syscall"
"time"

"github.com/gorilla/mux"
"github.com/kelseyhightower/envconfig"
log "github.com/sirupsen/logrus"
"github.com/shipperizer/miniature-monkey/config"
"github.com/shipperizer/miniature-monkey/core"
"go.uber.org/zap"

"github.com/shipperizer/furry-train/check"
"github.com/shipperizer/furry-train/monitoring"
)

type EnvSpec struct {
Port string `envconfig:"http_port"`
LogLevel string `envconfig:"log_level"`
}

func Status(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(map[string]string{"message": "Purple Bro"})
}

func main() {
var specs EnvSpec
err := envconfig.Process("", &specs)
logger, err := zap.NewDevelopment()
defer logger.Sync()

if err != nil {
log.Fatal(err.Error())
panic(err.Error())
}

level, err := log.ParseLevel(specs.LogLevel)
var specs EnvSpec
err = envconfig.Process("", &specs)

if err != nil {
level = log.DebugLevel
logger.Sugar().Fatal(err.Error())
}

log.SetLevel(level)
apiCfg := config.NewAPIConfig(
"furry-train-web",
nil,
monitoring.NewPrometheusMonitor(monitoring.PrometheusConfig{Service: "furry-train-web", Logger: logger.Sugar()}),
logger.Sugar(),
)

api := core.NewAPI(apiCfg)

router := mux.NewRouter()
router.HandleFunc("/api/v0/status", Status).Methods(http.MethodGet, http.MethodOptions)
api.RegisterBlueprints(api.Router(), check.NewBlueprint(logger.Sugar()))

srv := &http.Server{
Addr: fmt.Sprintf("0.0.0.0:%v", specs.Port),
// Good practice to set timeouts to avoid Slowloris attacks.
Addr: "0.0.0.0:8000",
WriteTimeout: time.Second * 15,
ReadTimeout: time.Second * 15,
IdleTimeout: time.Second * 60,
Handler: router, // Pass our instance of gorilla/mux in.
Handler: api.Handler(),
}

go func() {
log.Infof("Starting up on %v", specs.Port)
if err := srv.ListenAndServe(); err != nil {
log.Fatal(err)
logger.Sugar().Fatal(err)
}
}()

Expand All @@ -72,7 +74,9 @@ func main() {
// Doesn't block if no connections, but will otherwise wait
// until the timeout deadline.
srv.Shutdown(ctx)

log.Println("Shutting down")
// Optionally, you could run srv.Shutdown in a goroutine and block on
// <-ctx.Done() if your application should wait for other services
// to finalize based on context cancellation.
logger.Sugar().Info("Shutting down")
os.Exit(0)
}

0 comments on commit 1b1ff62

Please sign in to comment.