All Downloads are FREE. Search and download functionalities are using the official Maven repository.

templates.golang.main.go.template Maven / Gradle / Ivy

The newest version!
package main

import (
	proto @go_proto_path@
	"@code_url@@namespace@/@service_name@/zerotouch/golang/setup"
	"@code_url@@namespace@/@service_name@/core/golang/hook"
	"flag"
	"fmt"
	grpcPrometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
	"github.com/prometheus/client_golang/prometheus/promhttp"
	"go.uber.org/zap"
	"google.golang.org/grpc"
	"net"
	"net/http"
	@temporal_import@
)

func runMonitoring(grpcServer *grpc.Server) {
	// register prometheus
	grpcPrometheus.Register(grpcServer)
	http.Handle("/metrics", promhttp.Handler())
	err := http.ListenAndServe(fmt.Sprintf("%s:%d", "0.0.0.0", @prometheus_port@), nil)
	if err != nil {
		logger.Panic("Unable to start prometheus handler", zap.Error(err))
	}
}

@temporal_setup@

func main() {

	port := flag.Int("port", @server_port@, "Port for GRPC server to listen")
	flag.Parse()
	logger.Info("Starting Farm Service Service!")
	lis, err := net.Listen("tcp", fmt.Sprintf("0.0.0.0:%d", *port))
	if err != nil {
		logger.Fatal("Unable to listen on port", zap.Int("port", *port), zap.Error(err))
	}

	grpcServer := grpc.NewServer(
		grpc.StreamInterceptor(grpcPrometheus.StreamServerInterceptor),
		grpc.UnaryInterceptor(grpcPrometheus.UnaryServerInterceptor))
	proto.Register@service_name@Server(grpcServer, setup.@service_name@)
	logger.Info("Registered server",
		zap.Any("grpcServer", grpcServer), zap.Any("listener", lis), zap.Int("port", *port))

	// on GRPC services
	go runMonitoring(grpcServer)

	@temporal_startup@

	hook.PreStartUpHook()

	// Start server
	err = grpcServer.Serve(lis)
	if err != nil {
		logger.Fatal("Unable to listen on service", zap.Int("port", *port), zap.Error(err))
	}

	hook.PostStartUpHook()
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy