in src/app/backend/dashboard.go [74:188]
func main() {
// Set logging output to standard console out
log.SetOutput(os.Stdout)
pflag.CommandLine.AddGoFlagSet(flag.CommandLine)
pflag.Parse()
_ = flag.CommandLine.Parse(make([]string, 0)) // Init for glog calls in kubernetes packages
// Initializes dashboard arguments holder so we can read them in other packages
initArgHolder()
if args.Holder.GetApiServerHost() != "" {
log.Printf("Using apiserver-host location: %s", args.Holder.GetApiServerHost())
}
if args.Holder.GetKubeConfigFile() != "" {
log.Printf("Using kubeconfig file: %s", args.Holder.GetKubeConfigFile())
}
if args.Holder.GetNamespace() != "" {
log.Printf("Using namespace: %s", args.Holder.GetNamespace())
}
clientManager := client.NewClientManager(args.Holder.GetKubeConfigFile(), args.Holder.GetApiServerHost())
versionInfo, err := clientManager.InsecureClient().Discovery().ServerVersion()
if err != nil {
handleFatalInitError(err)
}
log.Printf("Successful initial request to the apiserver, version: %s", versionInfo.String())
// Init auth manager
authManager := initAuthManager(clientManager)
// Init settings manager
settingsManager := settings.NewSettingsManager()
// Init system banner manager
systemBannerManager := systembanner.NewSystemBannerManager(args.Holder.GetSystemBanner(),
args.Holder.GetSystemBannerSeverity())
// Init integrations
integrationManager := integration.NewIntegrationManager(clientManager)
switch metricsProvider := args.Holder.GetMetricsProvider(); metricsProvider {
case "sidecar":
integrationManager.Metric().ConfigureSidecar(args.Holder.GetSidecarHost()).
EnableWithRetry(integrationapi.SidecarIntegrationID, time.Duration(args.Holder.GetMetricClientCheckPeriod()))
case "heapster":
integrationManager.Metric().ConfigureHeapster(args.Holder.GetHeapsterHost()).
EnableWithRetry(integrationapi.HeapsterIntegrationID, time.Duration(args.Holder.GetMetricClientCheckPeriod()))
case "none":
log.Print("no metrics provider selected, will not check metrics.")
default:
log.Printf("Invalid metrics provider selected: %s", metricsProvider)
log.Print("Defaulting to use the Sidecar provider.")
integrationManager.Metric().ConfigureSidecar(args.Holder.GetSidecarHost()).
EnableWithRetry(integrationapi.SidecarIntegrationID, time.Duration(args.Holder.GetMetricClientCheckPeriod()))
}
apiHandler, err := handler.CreateHTTPAPIHandler(
integrationManager,
clientManager,
authManager,
settingsManager,
systemBannerManager)
if err != nil {
handleFatalInitError(err)
}
var servingCerts []tls.Certificate
if args.Holder.GetAutoGenerateCertificates() {
log.Println("Auto-generating certificates")
certCreator := ecdsa.NewECDSACreator(args.Holder.GetKeyFile(), args.Holder.GetCertFile(), elliptic.P256())
certManager := cert.NewCertManager(certCreator, args.Holder.GetDefaultCertDir())
servingCert, err := certManager.GetCertificates()
if err != nil {
handleFatalInitServingCertError(err)
}
servingCerts = []tls.Certificate{servingCert}
} else if args.Holder.GetCertFile() != "" && args.Holder.GetKeyFile() != "" {
certFilePath := args.Holder.GetDefaultCertDir() + string(os.PathSeparator) + args.Holder.GetCertFile()
keyFilePath := args.Holder.GetDefaultCertDir() + string(os.PathSeparator) + args.Holder.GetKeyFile()
servingCert, err := tls.LoadX509KeyPair(certFilePath, keyFilePath)
if err != nil {
handleFatalInitServingCertError(err)
}
servingCerts = []tls.Certificate{servingCert}
}
// Run a HTTP server that serves static public files from './public' and handles API calls.
http.Handle("/", handler.MakeGzipHandler(handler.CreateLocaleHandler()))
http.Handle("/api/", apiHandler)
http.Handle("/config", handler.AppHandler(handler.ConfigHandler))
http.Handle("/api/sockjs/", handler.CreateAttachHandler("/api/sockjs"))
http.Handle("/metrics", promhttp.Handler())
// Listen for http or https
if servingCerts != nil {
log.Printf("Serving securely on HTTPS port: %d", args.Holder.GetPort())
secureAddr := fmt.Sprintf("%s:%d", args.Holder.GetBindAddress(), args.Holder.GetPort())
server := &http.Server{
Addr: secureAddr,
Handler: http.DefaultServeMux,
TLSConfig: &tls.Config{
Certificates: servingCerts,
MinVersion: tls.VersionTLS12,
},
}
go func() { log.Fatal(server.ListenAndServeTLS("", "")) }()
} else {
log.Printf("Serving insecurely on HTTP port: %d", args.Holder.GetInsecurePort())
addr := fmt.Sprintf("%s:%d", args.Holder.GetInsecureBindAddress(), args.Holder.GetInsecurePort())
go func() { log.Fatal(http.ListenAndServe(addr, nil)) }()
}
select {}
}