Add diagnostics endpoint for flags (#7417)

To expose context flags through diagnostic endpoint
`/debug/metrics/flags`.

The current `/debug/metrics/cmdline` only provides the command run by
user. In the case when user runs Erigon using config file, `cmdline`’s
info does not truly reflect the ‘launch setting' and flags set that
Erigon is running on.

## Example

### Command
```
erigon --datadir /tmp/data --config test.yaml
```
### Pseudo config file (in yaml)
```
datadir : '/tmp/data'
chain : "sepolia"
http : true
metrics: true
private.api.addr : "localhost:9090"

http.api : ["eth","debug","net"]
```
### Output
```
SUCCESS
chain=sepolia
config=test.yaml
datadir=/tmp/data
http=true
http.api=eth,debug,net
metrics=true
private.api.addr=localhost:9090
```
This commit is contained in:
naviechan 2023-05-01 22:38:00 +08:00 committed by GitHub
parent 419cab55ba
commit d475bab15f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 52 additions and 1 deletions

View File

@ -46,6 +46,10 @@ func (s *DirectoryString) Set(value string) error {
return nil
}
func (s *DirectoryString) Get() any {
return s.String()
}
var (
_ cli.Flag = (*DirectoryFlag)(nil)
_ cli.RequiredFlag = (*DirectoryFlag)(nil)

23
diagnostics/CHANGELOG.md Normal file
View File

@ -0,0 +1,23 @@
# Changelog
All notable changes to `diagnostics` will be documented in this file.
## Version 2
### Added
- Introduce `flags` endpoint (#7417)
### Changed
- Increment diagnostic version to 2 in `version.go` (#7417)
## Version 1
### Added
- Introduce diagnostics versioning via `version` endpoint (#7300)
- Introduce `logs/list` and `logs/read` endpoint (#6930)
- Introduce `db/list`, `db/tables` and `db/read` endpoint (#6930)
- Introduce `cmdline` (#7271)
- Introduce `block_body_download` (#7373)

23
diagnostics/flags.go Normal file
View File

@ -0,0 +1,23 @@
package diagnostics
import (
"fmt"
"io"
"net/http"
"github.com/urfave/cli/v2"
)
func SetupFlagsAccess(ctx *cli.Context) {
http.HandleFunc("/debug/metrics/flags", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*")
writeFlags(w, ctx)
})
}
func writeFlags(w io.Writer, ctx *cli.Context) {
fmt.Fprintf(w, "SUCCESS\n")
for _, flagName := range ctx.FlagNames() {
fmt.Fprintf(w, "%s=%v\n", flagName, ctx.Value(flagName))
}
}

View File

@ -8,7 +8,7 @@ import (
"github.com/ledgerwatch/erigon/params"
)
const Version = 1
const Version = 2
func SetupVersionAccess() {
http.HandleFunc("/debug/metrics/version", func(w http.ResponseWriter, r *http.Request) {

View File

@ -192,6 +192,7 @@ func Setup(ctx *cli.Context) error {
diagnostics.SetupLogsAccess(ctx)
diagnostics.SetupDbAccess(ctx)
diagnostics.SetupCmdLineAccess()
diagnostics.SetupFlagsAccess(ctx)
diagnostics.SetupVersionAccess()
diagnostics.SetupBlockBodyDownload()
}