erigon-pulse/diagnostics/flags.go
naviechan d475bab15f
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
```
2023-05-01 15:38:00 +01:00

24 lines
484 B
Go

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))
}
}