Categorygithub.com/konfortes/go-server-utils

# README

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

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author