77f6b20db0
Ensure nothing in the troubleshoot go module depends on consul's top level module. This is so we can import troubleshoot into consul-k8s and not import all of consul. * turns troubleshoot into a go module [authored by @curtbushko] * gets the envoy protos into the troubleshoot module [authored by @curtbushko] * adds a new go module `envoyextensions` which has xdscommon and extensioncommon folders that both the xds package and the troubleshoot package can import * adds testing and linting for the new go modules * moves the unit tests in `troubleshoot/validateupstream` that depend on proxycfg/xds into the xds package, with a comment describing why those tests cannot be in the troubleshoot package * fixes all the imports everywhere as a result of these changes Co-authored-by: Curt Bushko <cbushko@gmail.com>
48 lines
1 KiB
Go
48 lines
1 KiB
Go
package troubleshoot
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
envoy_admin_v3 "github.com/envoyproxy/go-control-plane/envoy/admin/v3"
|
|
)
|
|
|
|
type statsJson struct {
|
|
Stats []simpleMetric `json:"stats"`
|
|
}
|
|
|
|
type simpleMetric struct {
|
|
Value int64 `json:"value,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
}
|
|
|
|
func (t *Troubleshoot) getEnvoyStats(filter string) ([]*envoy_admin_v3.SimpleMetric, error) {
|
|
|
|
var resultErr error
|
|
|
|
jsonRaw, err := t.request(fmt.Sprintf("stats?format=json&filter=%s&type=Counters", filter))
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error in requesting envoy Admin API /stats endpoint: %w", err)
|
|
}
|
|
|
|
var rawStats statsJson
|
|
|
|
err = json.Unmarshal(jsonRaw, &rawStats)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("could not unmarshal /stats response: %w", err)
|
|
}
|
|
|
|
stats := []*envoy_admin_v3.SimpleMetric{}
|
|
|
|
for _, s := range rawStats.Stats {
|
|
stat := &envoy_admin_v3.SimpleMetric{
|
|
Value: uint64(s.Value),
|
|
Name: s.Name,
|
|
}
|
|
stats = append(stats, stat)
|
|
}
|
|
|
|
t.envoyStats = stats
|
|
return stats, resultErr
|
|
}
|