in tracker/cmd/cmd.go [85:163]
func Run(flags *Flags, opts ...Option) {
var overrides options
for _, o := range opts {
o(&overrides)
}
var config Config
if overrides.config != nil {
config = *overrides.config
} else {
if err := configutil.Load(flags.ConfigFile, &config); err != nil {
panic(err)
}
if flags.SecretsFile != "" {
if err := configutil.Load(flags.SecretsFile, &config); err != nil {
panic(err)
}
}
}
if overrides.logger != nil {
log.SetGlobalLogger(overrides.logger.Sugar())
} else {
zlog := log.ConfigureLogger(config.ZapLogging)
defer zlog.Sync()
}
stats := overrides.metrics
if stats == nil {
s, closer, err := metrics.New(config.Metrics, flags.KrakenCluster)
if err != nil {
log.Fatalf("Failed to init metrics: %s", err)
}
stats = s
defer closer.Close()
}
go metrics.EmitVersion(stats)
peerStore, err := peerstore.New(config.PeerStore)
if err != nil {
log.Fatalf("Could not create PeerStore: %s", err)
}
defer peerStore.Close()
tls, err := config.TLS.BuildClient()
if err != nil {
log.Fatalf("Error building client tls config: %s", err)
}
origins, err := config.Origin.Build(upstream.WithHealthCheck(healthcheck.Default(tls)))
if err != nil {
log.Fatalf("Error building origin host list: %s", err)
}
originStore := originstore.New(
config.OriginStore, clock.New(), origins, blobclient.NewProvider(blobclient.WithTLS(tls)))
policy, err := peerhandoutpolicy.NewPriorityPolicy(stats, config.PeerHandoutPolicy.Priority)
if err != nil {
log.Fatalf("Could not load peer handout policy: %s", err)
}
r := blobclient.NewClientResolver(blobclient.NewProvider(blobclient.WithTLS(tls)), origins)
originCluster := blobclient.NewClusterClient(r)
server := trackerserver.New(
config.TrackerServer, stats, policy, peerStore, originStore, originCluster)
go func() {
log.Fatal(server.ListenAndServe())
}()
log.Info("Starting nginx...")
log.Fatal(nginx.Run(config.Nginx, map[string]interface{}{
"port": flags.Port,
"server": nginx.GetServer(
config.TrackerServer.Listener.Net, config.TrackerServer.Listener.Addr)},
nginx.WithTLS(config.TLS)))
}