Skip to content

konfortes/go-server-utils

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

go-server-utils

Enhancement of gin server management.
It has some best practices for observability - logging monitoring and tracing.
It is as easy as:

package main

import (
	"log"
	"net/http"

	"github.com/konfortes/go-server-utils/server"
	"github.com/konfortes/go-server-utils/utils"
)

const (
	appName = "my-app-name"
)

func main() {
	serverConfig := server.Config{
		AppName:     "my-app-name",
		Port:        utils.GetEnvOr("PORT", "3000"),
		Env:         utils.GetEnvOr("ENV", "development"),
        Handlers:    handlers(),
        ShutdownHooks: []func(){func() { log.Println("bye bye") }},
		WithTracing: utils.GetEnvOr("TRACING_ENABLED", "false") == "true",
	}

	srv := server.Initialize(serverConfig)

	go func() {
		log.Println("listening on " + srv.Addr)
		if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
			log.Fatalf("listen: %s\n", err)
		}
	}()

	server.GracefulShutdown(srv)
}

server

  • Initialize() initialize a full-blown gin server instrumented with prometheus monitoring and Jaeger tracing.
  • GracefulShutdown() gracefully shut down of a server

logging

  • JSONLogMiddleware() returns a json logging middleware.

monitoring

  • Instrument() instruments a gin app with prometheus monitoring and exposes the /metrics endpoint

tracing

  • Instrument() instruments a gin app with Jaeger tracing (and adds the JaegerMiddleware).
  • JaegerMiddleware() A Jaeger middleware to extract span from headers and set it in context if exist

utils

  • GetEnvOr(): get env variable or fallback value