From bae568178c5fecbea0620db0039f54fcb66820c5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 08:03:09 +0000 Subject: [PATCH 01/11] chore(deps): bump the minor-and-patch group with 2 updates Bumps the minor-and-patch group with 2 updates: [golang.org/x/crypto](https://github.com/golang/crypto) and [golang.org/x/text](https://github.com/golang/text). Updates `golang.org/x/crypto` from 0.43.0 to 0.44.0 - [Commits](https://github.com/golang/crypto/compare/v0.43.0...v0.44.0) Updates `golang.org/x/text` from 0.30.0 to 0.31.0 - [Release notes](https://github.com/golang/text/releases) - [Commits](https://github.com/golang/text/compare/v0.30.0...v0.31.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-version: 0.44.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-and-patch - dependency-name: golang.org/x/text dependency-version: 0.31.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-and-patch ... Signed-off-by: dependabot[bot] --- go.mod | 4 ++-- go.sum | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 1d902f0..d7a7549 100644 --- a/go.mod +++ b/go.mod @@ -20,9 +20,9 @@ require ( github.com/spf13/pflag v1.0.10 github.com/xuri/excelize/v2 v2.10.0 goftp.io/server v0.4.1 - golang.org/x/crypto v0.43.0 + golang.org/x/crypto v0.44.0 golang.org/x/sys v0.38.0 - golang.org/x/text v0.30.0 + golang.org/x/text v0.31.0 ) require ( diff --git a/go.sum b/go.sum index d9ec155..d89da73 100644 --- a/go.sum +++ b/go.sum @@ -77,8 +77,8 @@ goftp.io/server v0.4.1/go.mod h1:hFZeR656ErRt3ojMKt7H10vQ5nuWV1e0YeUTeorlR6k= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04= -golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0= +golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU= +golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc= golang.org/x/image v0.25.0 h1:Y6uW6rH1y5y/LK1J8BPWZtr6yZ7hrsy6hFrXjgsc2fQ= golang.org/x/image v0.25.0/go.mod h1:tCAmOEGthTtkalusGp1g3xa2gke8J6c2N565dTyl9Rs= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -96,12 +96,12 @@ golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q= -golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss= +golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= +golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= -golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM= +golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= +golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= From b8184e2407530a9b9c69b32febf80d2a297aebc7 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 17 Nov 2025 09:55:05 +0000 Subject: [PATCH 02/11] Add instance name option (--name/-n) Add a new command-line option --name/-n to set an instance name for the Ayd server. The instance name is: - Stored as a global variable in internal/meta/instance.go - Displayed in HTTP page titles and logo - Included in startup and shutdown logs as instance_name field This allows users to distinguish between multiple Ayd instances when running them concurrently or viewing their logs. --- cmd/ayd/help.txt | 1 + cmd/ayd/main.go | 23 +++++++++++++--------- cmd/ayd/server.go | 28 +++++++++++++++++---------- internal/endpoint/templates.go | 4 ++++ internal/endpoint/templates/base.html | 4 ++-- internal/meta/instance.go | 5 +++++ 6 files changed, 44 insertions(+), 21 deletions(-) create mode 100644 internal/meta/instance.go diff --git a/cmd/ayd/help.txt b/cmd/ayd/help.txt index 13be6bc..6da3852 100644 --- a/cmd/ayd/help.txt +++ b/cmd/ayd/help.txt @@ -18,6 +18,7 @@ Options: Ayd won't create log file if set "-" or empty. You can use time spec %Y, %y, %m, %d, %H, %M, in the file name. (default "ayd_%Y%m%d.log") + -n, --name=NAME Instance name. This will be shown in page titles and logs. -p, --port=PORT Listen port of status page. (default 9000) -u, --user=USER[:PASS] Username and password for HTTP basic auth. -c, --ssl-cert=FILE Path to certificate file for HTTPS. Please set also -k. diff --git a/cmd/ayd/main.go b/cmd/ayd/main.go index 292c256..467c906 100644 --- a/cmd/ayd/main.go +++ b/cmd/ayd/main.go @@ -24,15 +24,16 @@ type AydCommand struct { OutStream io.Writer ErrStream io.Writer - ListenPort int - StorePath string - OneshotMode bool - AlertURLs []string - UserInfo string - CertPath string - KeyPath string - ShowVersion bool - ShowHelp bool + ListenPort int + StorePath string + InstanceName string + OneshotMode bool + AlertURLs []string + UserInfo string + CertPath string + KeyPath string + ShowVersion bool + ShowHelp bool Tasks []Task StartedAt time.Time @@ -60,6 +61,7 @@ func (cmd *AydCommand) ParseArgs(args []string) (exitCode int) { flags.IntVarP(&cmd.ListenPort, "port", "p", 9000, "HTTP listen port") flags.StringVarP(&cmd.StorePath, "log-file", "f", "ayd_%Y%m%d.log", "Path to log file") + flags.StringVarP(&cmd.InstanceName, "name", "n", "", "Instance name") flags.BoolVarP(&cmd.OneshotMode, "oneshot", "1", false, "Check status only once and exit") flags.StringArrayVarP(&cmd.AlertURLs, "alert", "a", nil, "The alert URLs") flags.StringVarP(&cmd.UserInfo, "user", "u", "", "Username and password for HTTP endpoint") @@ -99,6 +101,9 @@ func (cmd *AydCommand) ParseArgs(args []string) (exitCode int) { cmd.StorePath = "" } + // Set the instance name globally + meta.InstanceName = cmd.InstanceName + var err error cmd.Tasks, err = ParseArgs(flags.Args()) if err != nil { diff --git a/cmd/ayd/server.go b/cmd/ayd/server.go index fc8e545..e356059 100644 --- a/cmd/ayd/server.go +++ b/cmd/ayd/server.go @@ -33,31 +33,39 @@ func (cmd *AydCommand) reportStartServer(s *store.Store, protocol, listen string cmd.StartedAt = time.Now() u := &api.URL{Scheme: "ayd", Opaque: "server"} + extra := map[string]interface{}{ + "url": fmt.Sprintf("%s://%s", protocol, listen), + "targets": tasks, + "version": fmt.Sprintf("%s (%s)", meta.Version, meta.Commit), + } + if meta.InstanceName != "" { + extra["instance_name"] = meta.InstanceName + } s.Report(u, api.Record{ Time: cmd.StartedAt, Status: api.StatusHealthy, Target: u, Message: "start Ayd server", - Extra: map[string]interface{}{ - "url": fmt.Sprintf("%s://%s", protocol, listen), - "targets": tasks, - "version": fmt.Sprintf("%s (%s)", meta.Version, meta.Commit), - }, + Extra: extra, }) } func (cmd *AydCommand) reportStopServer(s *store.Store, protocol, listen string) { u := &api.URL{Scheme: "ayd", Opaque: "server"} + extra := map[string]interface{}{ + "url": fmt.Sprintf("%s://%s", protocol, listen), + "version": fmt.Sprintf("%s (%s)", meta.Version, meta.Commit), + "since": cmd.StartedAt.Format(time.RFC3339), + } + if meta.InstanceName != "" { + extra["instance_name"] = meta.InstanceName + } s.Report(u, api.Record{ Time: time.Now(), Status: api.StatusHealthy, Target: u, Message: "stop Ayd server", - Extra: map[string]interface{}{ - "url": fmt.Sprintf("%s://%s", protocol, listen), - "version": fmt.Sprintf("%s (%s)", meta.Version, meta.Commit), - "since": cmd.StartedAt.Format(time.RFC3339), - }, + Extra: extra, }) } diff --git a/internal/endpoint/templates.go b/internal/endpoint/templates.go index ed41419..3d319a8 100644 --- a/internal/endpoint/templates.go +++ b/internal/endpoint/templates.go @@ -12,6 +12,7 @@ import ( "github.com/dustin/go-humanize" "github.com/goccy/go-json" "github.com/google/uuid" + "github.com/macrat/ayd/internal/meta" api "github.com/macrat/ayd/lib-ayd" "golang.org/x/text/width" ) @@ -29,6 +30,9 @@ func loadHTMLTemplate(s string) *template.Template { var ( templateFuncs = map[string]interface{}{ + "instance_name": func() string { + return meta.InstanceName + }, "sort_history": func(hm map[string]api.ProbeHistory) []api.ProbeHistory { hs := make([]api.ProbeHistory, 0, len(hm)) for _, h := range hm { diff --git a/internal/endpoint/templates/base.html b/internal/endpoint/templates/base.html index d0ec312..1d808f1 100644 --- a/internal/endpoint/templates/base.html +++ b/internal/endpoint/templates/base.html @@ -30,7 +30,7 @@

- Ayd {{ block "title" . }}{{ end }} + {{ if instance_name }}{{ instance_name }} - {{ end }}Ayd {{ block "title" . }}{{ end }}