netramesh

Форк
0
/
main.go 
118 строк · 3.2 Кб
1
package main
2

3
import (
4
	"flag"
5
	"fmt"
6
	"net"
7
	"net/http"
8
	"net/http/pprof"
9
	"os"
10

11
	"github.com/opentracing/opentracing-go"
12
	"github.com/patrickmn/go-cache"
13
	"github.com/prometheus/client_golang/prometheus/promhttp"
14
	jaegercfg "github.com/uber/jaeger-client-go/config"
15
	"gopkg.in/alexcesaro/statsd.v2"
16

17
	"github.com/Lookyan/netramesh/internal/config"
18
	"github.com/Lookyan/netramesh/pkg/estabcache"
19
	"github.com/Lookyan/netramesh/pkg/log"
20
	"github.com/Lookyan/netramesh/pkg/protocol"
21
	"github.com/Lookyan/netramesh/pkg/transport"
22
)
23

24
func main() {
25
	logger, err := log.Init("NETRA", os.Getenv(log.EnvNetraLoggerLevel), os.Stderr)
26
	if err != nil {
27
		log.Fatal(err.Error())
28
	}
29
	serviceName := flag.String("service-name", "", "service name for jaeger")
30
	flag.Parse()
31
	if *serviceName == "" {
32
		logger.Fatal("service-name flag should be set")
33
	}
34
	config.SetServiceName(*serviceName)
35

36
	err = config.GlobalConfigFromENV(logger)
37
	if err != nil {
38
		logger.Fatal(err.Error())
39
	}
40

41
	// init statsd client
42
	statsdMetricsClient, err := statsd.New(statsd.Mute(!config.GetNetraConfig().StatsdEnabled),
43
		statsd.Address(config.GetNetraConfig().StatsdAddress),
44
		statsd.Prefix(config.GetNetraConfig().StatsdPrefix))
45
	if err != nil {
46
		logger.Errorf("Can not init statsd metrics: %s", err.Error())
47
	}
48

49
	go func() {
50
		mux := http.NewServeMux()
51
		mux.HandleFunc("/debug/pprof/", pprof.Index)
52
		mux.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
53
		mux.HandleFunc("/debug/pprof/profile", pprof.Profile)
54
		mux.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
55
		mux.HandleFunc("/debug/pprof/trace", pprof.Trace)
56
		logger.Error(
57
			http.ListenAndServe(
58
				fmt.Sprintf("0.0.0.0:%d", config.GetNetraConfig().PprofPort), mux))
59
	}()
60
	go func() {
61
		logger.Error(
62
			http.ListenAndServe(
63
				fmt.Sprintf("0.0.0.0:%d", config.GetNetraConfig().PrometheusPort), promhttp.Handler()))
64
	}()
65

66
	os.Setenv("JAEGER_SERVICE_NAME", *serviceName)
67
	cfg, err := jaegercfg.FromEnv()
68
	if err != nil {
69
		// parsing errors might happen here, such as when we get a string where we expect a number
70
		logger.Fatalf("Could not parse Jaeger env vars: %s", err.Error())
71
	}
72
	tracer, closer, err := cfg.NewTracer()
73
	if err != nil {
74
		logger.Fatalf("Could not initialize jaeger tracer: %s", err.Error())
75
	}
76
	defer closer.Close()
77
	opentracing.SetGlobalTracer(tracer)
78

79
	addr := fmt.Sprintf("0.0.0.0:%d", config.GetNetraConfig().Port)
80
	lAddr, err := net.ResolveTCPAddr("tcp", addr)
81
	if err != nil {
82
		logger.Fatal(err.Error())
83
	}
84

85
	ln, err := net.ListenTCP("tcp", lAddr)
86
	if err != nil {
87
		logger.Fatal(err.Error())
88
	}
89

90
	establishedCache := estabcache.NewEstablishedCache()
91

92
	tracingContextMapping := cache.New(
93
		config.GetNetraConfig().TracingContextExpiration,
94
		config.GetNetraConfig().TracingContextCleanupInterval,
95
	)
96

97
	routingInfoContextMapping := cache.New(
98
		config.GetNetraConfig().RoutingContextExpiration,
99
		config.GetNetraConfig().RoutingContextCleanupInterval,
100
	)
101

102
	protocol.InitHandlerRequest(logger, statsdMetricsClient, tracingContextMapping, routingInfoContextMapping)
103

104
	for {
105
		conn, err := ln.AcceptTCP()
106
		if err != nil {
107
			logger.Warning(err.Error())
108
			continue
109
		}
110
		go transport.HandleConnection(
111
			logger,
112
			conn,
113
			establishedCache,
114
			tracingContextMapping,
115
			routingInfoContextMapping,
116
			statsdMetricsClient)
117
	}
118
}
119

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.