summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakob Borg <jakob@kastelo.net>2024-06-03 07:17:32 +0200
committerJakob Borg <jakob@kastelo.net>2024-06-03 19:50:28 +0200
commit2bb5b2244ba38c279d1bac6afaea463f67fce2b0 (patch)
tree6b7561f41dc11afa218fa2359590c986410a50ae
parent2f281799c16ac9f32563e6fba513e3a0b846bad6 (diff)
cmd/stupgrades: Basic process metricsinfrastructure
-rw-r--r--cmd/stupgrades/main.go36
1 files changed, 29 insertions, 7 deletions
diff --git a/cmd/stupgrades/main.go b/cmd/stupgrades/main.go
index 7f0b3beff3..e3b118fa6a 100644
--- a/cmd/stupgrades/main.go
+++ b/cmd/stupgrades/main.go
@@ -19,16 +19,18 @@ import (
"time"
"github.com/alecthomas/kong"
+ "github.com/prometheus/client_golang/prometheus/promhttp"
_ "github.com/syncthing/syncthing/lib/automaxprocs"
"github.com/syncthing/syncthing/lib/httpcache"
"github.com/syncthing/syncthing/lib/upgrade"
)
type cli struct {
- Listen string `default:":8080" help:"Listen address"`
- URL string `short:"u" default:"https://api.github.com/repos/syncthing/syncthing/releases?per_page=25" help:"GitHub releases url"`
- Forward []string `short:"f" help:"Forwarded pages, format: /path->https://example/com/url"`
- CacheTime time.Duration `default:"15m" help:"Cache time"`
+ Listen string `default:":8080" help:"Listen address"`
+ MetricsListen string `default:":8081" help:"Listen address for metrics"`
+ URL string `short:"u" default:"https://api.github.com/repos/syncthing/syncthing/releases?per_page=25" help:"GitHub releases url"`
+ Forward []string `short:"f" help:"Forwarded pages, format: /path->https://example/com/url"`
+ CacheTime time.Duration `default:"15m" help:"Cache time"`
}
func main() {
@@ -41,17 +43,37 @@ func main() {
}
func server(params *cli) error {
- http.Handle("/meta.json", httpcache.SinglePath(&githubReleases{url: params.URL}, params.CacheTime))
+ if params.MetricsListen != "" {
+ mux := http.NewServeMux()
+ mux.Handle("/metrics", promhttp.Handler())
+ go func() {
+ log.Println("Listening for metrics on", params.MetricsListen)
+ if err := http.ListenAndServe(params.MetricsListen, mux); err != nil {
+ log.Fatalf("Failed to start metrics server: %v", err)
+ }
+ }()
+ }
+
+ mux := http.NewServeMux()
+ mux.Handle("/meta.json", httpcache.SinglePath(&githubReleases{url: params.URL}, params.CacheTime))
for _, fwd := range params.Forward {
path, url, ok := strings.Cut(fwd, "->")
if !ok {
return fmt.Errorf("invalid forward: %q", fwd)
}
- http.Handle(path, httpcache.SinglePath(&proxy{url: url}, params.CacheTime))
+ log.Println("Forwarding", path, "to", url)
+ mux.Handle(path, httpcache.SinglePath(&proxy{url: url}, params.CacheTime))
}
- return http.ListenAndServe(params.Listen, nil)
+ srv := &http.Server{
+ Addr: params.Listen,
+ Handler: mux,
+ ReadTimeout: 5 * time.Second,
+ WriteTimeout: 10 * time.Second,
+ }
+ srv.SetKeepAlivesEnabled(false)
+ return srv.ListenAndServe()
}
type githubReleases struct {