Complete health API
- complete client implementation - add server part to gRPC server
This commit is contained in:
parent
191d352eee
commit
9a50ce522c
4 changed files with 41 additions and 12 deletions
|
@ -24,5 +24,10 @@ func init() {
|
||||||
cliCmd.AddCommand(endpointsCmd, handlerCmd, healthCmd)
|
cliCmd.AddCommand(endpointsCmd, handlerCmd, healthCmd)
|
||||||
endpointsCmd.AddCommand(getEndpoints)
|
endpointsCmd.AddCommand(getEndpoints)
|
||||||
handlerCmd.AddCommand(getHandlersCmd)
|
handlerCmd.AddCommand(getHandlersCmd)
|
||||||
|
healthCmd.AddCommand(generalHealthCmd)
|
||||||
healthCmd.AddCommand(containerHealthCmd)
|
healthCmd.AddCommand(containerHealthCmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ExecuteClientCommand() error {
|
||||||
|
return cliCmd.Execute()
|
||||||
|
}
|
||||||
|
|
|
@ -37,32 +37,58 @@ The output contains information about each component and it's health state.
|
||||||
)
|
)
|
||||||
|
|
||||||
type printableHealthInfo struct {
|
type printableHealthInfo struct {
|
||||||
|
Component string
|
||||||
|
State string
|
||||||
|
Message string
|
||||||
}
|
}
|
||||||
|
|
||||||
func runGeneralHealth(_ *cobra.Command, _ []string) {
|
func fromComponentsHealth(componentsHealth map[string]*rpc.ComponentHealth) (componentsInfo []printableHealthInfo) {
|
||||||
var err error
|
for componentName, component := range componentsHealth {
|
||||||
|
componentsInfo = append(componentsInfo, printableHealthInfo{
|
||||||
|
Component: componentName,
|
||||||
|
State: component.State.String(),
|
||||||
|
Message: component.Message,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func getHealthResult() (healthResp *rpc.HealthResponse, err error) {
|
||||||
var conn *grpc.ClientConn
|
var conn *grpc.ClientConn
|
||||||
|
|
||||||
if conn, err = grpc.Dial(inetMockSocketPath, grpc.WithInsecure()); err != nil {
|
if conn, err = grpc.Dial(inetMockSocketPath, grpc.WithInsecure()); err != nil {
|
||||||
fmt.Printf("Failed to connecto INetMock socket: %v\n", err)
|
return
|
||||||
os.Exit(10)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var healthClient = rpc.NewHealthClient(conn)
|
var healthClient = rpc.NewHealthClient(conn)
|
||||||
ctx, _ := context.WithTimeout(context.Background(), grpcTimeout)
|
ctx, _ := context.WithTimeout(context.Background(), grpcTimeout)
|
||||||
var healthResp *rpc.HealthResponse
|
healthResp, err = healthClient.GetHealth(ctx, &rpc.HealthRequest{})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if healthResp, err = healthClient.GetHealth(ctx, &rpc.HealthRequest{}); err != nil {
|
func runGeneralHealth(_ *cobra.Command, _ []string) {
|
||||||
|
var healthResp *rpc.HealthResponse
|
||||||
|
var err error
|
||||||
|
|
||||||
|
if healthResp, err = getHealthResult(); err != nil {
|
||||||
fmt.Printf("Failed to get health information: %v", err)
|
fmt.Printf("Failed to get health information: %v", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printable := fromComponentsHealth(healthResp.ComponentsHealth)
|
||||||
|
|
||||||
writer := format.Writer(outputFormat, os.Stdout)
|
writer := format.Writer(outputFormat, os.Stdout)
|
||||||
if err = writer.Write(healthResp); err != nil {
|
if err = writer.Write(printable); err != nil {
|
||||||
fmt.Printf("Error occurred during writing response values: %v\n", err)
|
fmt.Printf("Error occurred during writing response values: %v\n", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func runContainerHealth(_ *cobra.Command, _ []string) {
|
func runContainerHealth(_ *cobra.Command, _ []string) {
|
||||||
|
if healthResp, err := getHealthResult(); err != nil {
|
||||||
|
fmt.Printf("Failed to get health information: %v", err)
|
||||||
|
os.Exit(1)
|
||||||
|
} else if healthResp.OverallHealthState != rpc.HealthState_HEALTHY {
|
||||||
|
fmt.Println("Overall health state is not healthy")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,3 @@ func init() {
|
||||||
func ExecuteServerCommand() error {
|
func ExecuteServerCommand() error {
|
||||||
return serverCmd.Execute()
|
return serverCmd.Execute()
|
||||||
}
|
}
|
||||||
|
|
||||||
func ExecuteClientCommand() error {
|
|
||||||
return cliCmd.Execute()
|
|
||||||
}
|
|
||||||
|
|
|
@ -52,6 +52,8 @@ func (i *inetmockAPI) StartServer() (err error) {
|
||||||
endpointsManager: i.endpointManager,
|
endpointsManager: i.endpointManager,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
RegisterHealthServer(i.server, &healthServer{})
|
||||||
|
|
||||||
go i.startServerAsync(lis)
|
go i.startServerAsync(lis)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue