...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package app
17
18 import (
19 "flag"
20 "net/http"
21
22 "github.com/spf13/cobra"
23 "github.com/spf13/viper"
24 "sigs.k8s.io/release-utils/version"
25
26 "github.com/sigstore/timestamp-authority/pkg/log"
27 "github.com/sigstore/timestamp-authority/pkg/ntpmonitor"
28 "github.com/sigstore/timestamp-authority/pkg/server"
29 )
30
31
32 var serveCmd = &cobra.Command{
33 Use: "serve",
34 Short: "start http server with configured api",
35 Long: `Starts a http server and serves the configured api`,
36 Run: func(cmd *cobra.Command, args []string) {
37 if err := viper.BindPFlags(cmd.Flags()); err != nil {
38 log.Logger.Fatal(err)
39 }
40
41 log.ConfigureLogger(viper.GetString("log-type"))
42
43
44
45 _ = flag.CommandLine.Parse([]string{})
46
47 vi := version.GetVersionInfo()
48 viStr, err := vi.JSONString()
49 if err != nil {
50 viStr = vi.String()
51 }
52 log.Logger.Infof("starting timestamp-server @ %v", viStr)
53
54
55
56 readTimeout := viper.GetDuration("read-timeout")
57 writeTimeout := viper.GetDuration("write-timeout")
58
59 go func() {
60 promServer := server.NewPrometheusServer(readTimeout, writeTimeout)
61
62 if err := promServer.ListenAndServe(); err != nil && err != http.ErrServerClosed {
63 log.Logger.Fatalf("error when starting or running http server for metrics: %v", err)
64 }
65 }()
66
67 enablePprof := viper.GetBool("enable-pprof")
68 log.Logger.Debugf("pprof enabled: %v", enablePprof)
69
70 if enablePprof {
71 go func() {
72 pprofServer := server.NewPprofServer(readTimeout, writeTimeout)
73
74 if err := pprofServer.ListenAndServe(); err != nil && err != http.ErrServerClosed {
75 log.Logger.Fatalf("error when starting or running http server for pprof: %v", err)
76 }
77 }()
78 }
79
80 var ntpm *ntpmonitor.NTPMonitor
81 disableNTPMonitoring := viper.GetBool("disable-ntp-monitoring")
82 if disableNTPMonitoring {
83 log.Logger.Info("ntp monitoring disabled")
84 } else {
85 ntpMonitoring := viper.GetString("ntp-monitoring")
86 if ntpMonitoring != "" {
87 log.Logger.Infof("using custom ntp monitoring config: %s", ntpMonitoring)
88 }
89
90 go func() {
91 ntpm, err = ntpmonitor.New(ntpMonitoring)
92 if err != nil {
93 log.Logger.Fatalf("error initializing ntp monitor %s", err)
94 }
95
96 ntpm.Start()
97 }()
98 }
99
100 host := viper.GetString("host")
101 port := int(viper.GetUint("port"))
102 scheme := viper.GetStringSlice("scheme")
103 server := server.NewRestAPIServer(host, port, scheme, httpPingOnly, readTimeout, writeTimeout)
104 defer func() {
105 if err := server.Shutdown(); err != nil {
106 log.Logger.Error(err)
107 }
108 if ntpm != nil {
109 ntpm.Stop()
110 }
111 }()
112 if err := server.Serve(); err != nil {
113 log.Logger.Fatal(err)
114 }
115 },
116 }
117
118 func init() {
119 rootCmd.AddCommand(serveCmd)
120 rootCmd.AddCommand(version.Version())
121 }
122
View as plain text