Update output for /v1/agent/health/service/(id|name)/ endpoints

This commit is contained in:
Blake Covarrubias 2021-07-19 21:29:13 -07:00
parent 963981bc11
commit a0fb38ad48
1 changed files with 206 additions and 128 deletions

View File

@ -292,7 +292,7 @@ Those endpoints might be useful for the following use-cases:
##### Note ##### Note
If you know the ID of service you want to target, it is recommended to use If you know the ID of service you want to target, it is recommended to use
[`/v1/agent/health/service/id/:service_id`](/api/agent/service#get-local-service-health-by-its-id) [`/v1/agent/health/service/id/:service_id`](/api/agent/service#get-local-service-health-by-id)
so you have the result for the service only. When requesting so you have the result for the service only. When requesting
`/v1/agent/health/service/name/:service_name`, the caller will receive the `/v1/agent/health/service/name/:service_name`, the caller will receive the
worst state of all services having the given name. worst state of all services having the given name.
@ -301,77 +301,214 @@ worst state of all services having the given name.
Given 2 services with name `web`, with web2 critical and web1 passing: Given 2 services with name `web`, with web2 critical and web1 passing:
#### List worst statuses of all instances of web-demo services (HTTP 503) #### List the worst status across all instances of the `web` service (HTTP 503)
##### By Name, Text ##### By Name, Text
```shell ```shell
curl http://localhost:8500/v1/agent/health/service/name/web?format=text $ curl http://localhost:8500/v1/agent/health/service/name/web?format=text
critical critical
``` ```
##### By Name, JSON ##### By Name, JSON
In JSON, the detail of passing/warning/critical services is present in output, For the JSON output, the response is an array containing the details of each
in a array. passing, warning, or critical service.
```shell ```shell
curl localhost:8500/v1/agent/health/service/name/web curl localhost:8500/v1/agent/health/service/name/web
``` ```
```json ```json
{ [
"critical": [ {
{ "AggregatedStatus": "passing",
"ID": "web2", "Service": {
"Service": "web",
"Tags": ["rails"],
"Address": "",
"TaggedAddresses": {
"lan": {
"address": "127.0.0.1",
"port": 8000
},
"wan": {
"address": "198.18.0.53",
"port": 80
}
},
"Meta": null,
"Port": 80,
"EnableTagOverride": false,
"Datacenter": "dc1",
"Connect": {
"Native": false,
"Proxy": null
},
"CreateIndex": 0,
"ModifyIndex": 0
}
],
"passing": [
{
"ID": "web1", "ID": "web1",
"Service": "web", "Service": "web",
"Tags": ["rails"], "Tags": [
"rails"
],
"Meta": {},
"Port": 80,
"Address": "", "Address": "",
"SocketPath": "",
"TaggedAddresses": { "TaggedAddresses": {
"lan": { "lan": {
"address": "127.0.0.1", "Address": "127.0.0.1",
"port": 8000 "Port": 8000
}, },
"wan": { "wan": {
"address": "198.18.0.53", "Address": "198.51.100.53",
"port": 80 "Port": 80
} }
}, },
"Meta": null, "Weights": {
"Port": 80, "Passing": 1,
"Warning": 1
},
"EnableTagOverride": false, "EnableTagOverride": false,
"Datacenter": "dc1", "Namespace": "default",
"Connect": { "Datacenter": "dc1"
"Native": false, },
"Proxy": null "Checks": []
},
{
"AggregatedStatus": "critical",
"Service": {
"ID": "web2",
"Service": "web",
"Tags": [
"rails"
],
"Meta": {},
"Port": 80,
"Address": "",
"SocketPath": "",
"TaggedAddresses": {
"lan": {
"Address": "127.0.0.1",
"Port": 8000
},
"wan": {
"Address": "198.51.100.54",
"Port": 80
}
},
"Weights": {
"Passing": 1,
"Warning": 1
},
"EnableTagOverride": false,
"Namespace": "default",
"Datacenter": "dc1"
},
"Checks": [
{
"Node": "server1",
"CheckID": "service:web2",
"Name": "Service 'web' check",
"Status": "critical",
"Notes": "",
"Output": "Get \"http://localhost/health\": dial tcp [::1]:80: connect: connection refused",
"ServiceID": "web2",
"ServiceName": "web",
"ServiceTags": [
"rails"
],
"Type": "",
"Namespace": "default",
"Definition": {
"Interval": "0s",
"Timeout": "0s",
"DeregisterCriticalServiceAfter": "0s",
"HTTP": "",
"Header": null,
"Method": "",
"Body": "",
"TLSServerName": "",
"TLSSkipVerify": false,
"TCP": ""
},
"CreateIndex": 0,
"ModifyIndex": 0
}
]
}
]
```
## Get local service health by ID ((#get-local-service-health-by-its-id))
Retrieve the health state of a specific service on the local agent by ID.
| Method | Path | Produces |
| ------ | -------------------------------------------------- | ------------------ |
| `GET` | `/agent/health/service/id/:service_id` | `application/json` |
| `GET` | `/agent/health/service/id/:service_id?format=text` | `text/plain` |
The supported request parameters are the same as
[`/v1/agent/health/service/name/:service_name`](/api/agent/service#get-local-service-health).
### Sample Requests
Query the health status of the service with ID `web2`.
#### List status of web2 (HTTP 503)
##### Failure By ID, Text
```shell
$ curl http://localhost:8500/v1/agent/health/service/id/web2?format=text
critical
```
##### Failure By ID, JSON
In JSON, the output for a query by ID is an object containing only the details
for that service.
```shell
curl localhost:8500/v1/agent/health/service/id/web2
```
```json
{
"AggregatedStatus": "critical",
"Service": {
"ID": "web2",
"Service": "web",
"Tags": [
"rails"
],
"Meta": {},
"Port": 80,
"Address": "",
"SocketPath": "",
"TaggedAddresses": {
"lan": {
"Address": "127.0.0.1",
"Port": 8000
},
"wan": {
"Address": "198.51.100.54",
"Port": 80
}
},
"Weights": {
"Passing": 1,
"Warning": 1
},
"EnableTagOverride": false,
"Namespace": "default",
"Datacenter": "dc1"
},
"Checks": [
{
"Node": "server1",
"CheckID": "service:web2",
"Name": "Service 'web' check",
"Status": "critical",
"Notes": "",
"Output": "Get \"http://localhost/health\": dial tcp [::1]:80: connect: connection refused",
"ServiceID": "web2",
"ServiceName": "web",
"ServiceTags": [
"rails"
],
"Type": "",
"Namespace": "default",
"Definition": {
"Interval": "0s",
"Timeout": "0s",
"DeregisterCriticalServiceAfter": "0s",
"HTTP": "",
"Header": null,
"Method": "",
"Body": "",
"TLSServerName": "",
"TLSSkipVerify": false,
"TCP": ""
}, },
"CreateIndex": 0, "CreateIndex": 0,
"ModifyIndex": 0 "ModifyIndex": 0
@ -380,61 +517,12 @@ curl localhost:8500/v1/agent/health/service/name/web
} }
``` ```
#### List status of web2 (HTTP 503) #### List status of web1 (HTTP 200)
##### Failure By ID, Text
```shell
curl http://localhost:8500/v1/agent/health/service/id/web2?format=text
critical
```
##### Failure By ID, JSON
In JSON, the output per ID is not an array, but only contains the value
of service.
```shell
curl localhost:8500/v1/agent/health/service/id/web2
```
```json
{
"critical": {
"ID": "web2",
"Service": "web",
"Tags": ["rails"],
"Address": "",
"TaggedAddresses": {
"lan": {
"address": "127.0.0.1",
"port": 8000
},
"wan": {
"address": "198.18.0.53",
"port": 80
}
},
"Meta": null,
"Port": 80,
"EnableTagOverride": false,
"Datacenter": "dc1",
"Connect": {
"Native": false,
"Proxy": null
},
"CreateIndex": 0,
"ModifyIndex": 0
}
}
```
#### List status of web2 (HTTP 200)
##### Success By ID, Text ##### Success By ID, Text
```shell ```shell
curl localhost:8500/v1/agent/health/service/id/web1?format=text $ curl localhost:8500/v1/agent/health/service/id/web1?format=text
passing passing
``` ```
@ -446,49 +534,39 @@ curl localhost:8500/v1/agent/health/service/id/web1
```json ```json
{ {
"passing": { "AggregatedStatus": "passing",
"Service": {
"ID": "web1", "ID": "web1",
"Service": "web", "Service": "web",
"Tags": ["rails"], "Tags": [
"rails"
],
"Meta": {},
"Port": 80,
"Address": "", "Address": "",
"SocketPath": "",
"TaggedAddresses": { "TaggedAddresses": {
"lan": { "lan": {
"address": "127.0.0.1", "Address": "127.0.0.1",
"port": 8000 "Port": 8000
}, },
"wan": { "wan": {
"address": "198.18.0.53", "Address": "198.51.100.53",
"port": 80 "Port": 80
} }
}, },
"Meta": null, "Weights": {
"Port": 80, "Passing": 1,
"EnableTagOverride": false, "Warning": 1
"Datacenter": "dc1",
"Connect": {
"Native": false,
"Proxy": null
}, },
"CreateIndex": 0, "EnableTagOverride": false,
"ModifyIndex": 0 "Namespace": "default",
} "Datacenter": "dc1"
},
"Checks": []
} }
``` ```
## Get local service health by its ID
Retrieve an aggregated state of service(s) on the local agent by ID.
See:
| Method | Path | Produces |
| ------ | -------------------------------------------------- | ------------------ |
| `GET` | `/agent/health/service/id/:service_id` | `application/json` |
| `GET` | `/agent/health/service/id/:service_id?format=text` | `text/plain` |
Parameters and response format are the same as
[`/v1/agent/health/service/name/:service_name`](/api/agent/service#get-local-service-health).
## Register Service ## Register Service
This endpoint adds a new service, with optional health checks, to the local This endpoint adds a new service, with optional health checks, to the local