mirror of
https://github.com/TwiN/gatus.git
synced 2024-11-21 23:43:27 +01:00
feat(client): Add network config for ICMP endpoint client (#661)
* feat(client): Add network to config * feat(client): Use network client config for pinger * feat(client): Add client network configuration and demo to README * feat(client): Add tests for pinger using network config * feat(client): Drop integration tests * feat(client): Add comment to tests * feat(client): Add tests * Update README.md --------- Co-authored-by: TwiN <twin@linux.com>
This commit is contained in:
parent
6cbc59b0e8
commit
3d1b4e566d
@ -362,6 +362,7 @@ the client used to send the request.
|
|||||||
| `client.oauth2.scopes[]` | A list of `scopes` which should be used for the `Client credentials flow`. | required `[""]` |
|
| `client.oauth2.scopes[]` | A list of `scopes` which should be used for the `Client credentials flow`. | required `[""]` |
|
||||||
| `client.identity-aware-proxy` | Google Identity-Aware-Proxy client configuration. | `{}` |
|
| `client.identity-aware-proxy` | Google Identity-Aware-Proxy client configuration. | `{}` |
|
||||||
| `client.identity-aware-proxy.audience` | The Identity-Aware-Proxy audience. (client-id of the IAP oauth2 credential) | required `""` |
|
| `client.identity-aware-proxy.audience` | The Identity-Aware-Proxy audience. (client-id of the IAP oauth2 credential) | required `""` |
|
||||||
|
| `client.network` | The network to use for ICMP endpoint client (`ip`, `ip4` or `ip6`). | `"ip"` |
|
||||||
|
|
||||||
> 📝 Some of these parameters are ignored based on the type of endpoint. For instance, there's no certificate involved
|
> 📝 Some of these parameters are ignored based on the type of endpoint. For instance, there's no certificate involved
|
||||||
in ICMP requests (ping), therefore, setting `client.insecure` to `true` for an endpoint of that type will not do anything.
|
in ICMP requests (ping), therefore, setting `client.insecure` to `true` for an endpoint of that type will not do anything.
|
||||||
|
@ -235,10 +235,7 @@ func ExecuteSSHCommand(sshClient *ssh.Client, body string, config *Config) (bool
|
|||||||
//
|
//
|
||||||
// Note that this function takes at least 100ms, even if the address is 127.0.0.1
|
// Note that this function takes at least 100ms, even if the address is 127.0.0.1
|
||||||
func Ping(address string, config *Config) (bool, time.Duration) {
|
func Ping(address string, config *Config) (bool, time.Duration) {
|
||||||
pinger, err := ping.NewPinger(address)
|
pinger := ping.New(address)
|
||||||
if err != nil {
|
|
||||||
return false, 0
|
|
||||||
}
|
|
||||||
pinger.Count = 1
|
pinger.Count = 1
|
||||||
pinger.Timeout = config.Timeout
|
pinger.Timeout = config.Timeout
|
||||||
// Set the pinger's privileged mode to true for every GOOS except darwin
|
// Set the pinger's privileged mode to true for every GOOS except darwin
|
||||||
@ -247,7 +244,8 @@ func Ping(address string, config *Config) (bool, time.Duration) {
|
|||||||
// Note that for this to work on Linux, Gatus must run with sudo privileges.
|
// Note that for this to work on Linux, Gatus must run with sudo privileges.
|
||||||
// See https://github.com/prometheus-community/pro-bing#linux
|
// See https://github.com/prometheus-community/pro-bing#linux
|
||||||
pinger.SetPrivileged(runtime.GOOS != "darwin")
|
pinger.SetPrivileged(runtime.GOOS != "darwin")
|
||||||
err = pinger.Run()
|
pinger.SetNetwork(config.Network)
|
||||||
|
err := pinger.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, 0
|
return false, 0
|
||||||
}
|
}
|
||||||
|
@ -83,6 +83,32 @@ func TestPing(t *testing.T) {
|
|||||||
t.Error("Round-trip time returned on failure should've been 0")
|
t.Error("Round-trip time returned on failure should've been 0")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Can't perform integration tests (e.g. pinging public targets by single-stacked hostname) here,
|
||||||
|
// because ICMP is blocked in the network of GitHub-hosted runners.
|
||||||
|
if success, rtt := Ping("127.0.0.1", &Config{Timeout: 500 * time.Millisecond, Network: "ip"}); !success {
|
||||||
|
t.Error("expected true")
|
||||||
|
if rtt == 0 {
|
||||||
|
t.Error("Round-trip time returned on failure should've been 0")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if success, rtt := Ping("::1", &Config{Timeout: 500 * time.Millisecond, Network: "ip"}); !success {
|
||||||
|
t.Error("expected true")
|
||||||
|
if rtt == 0 {
|
||||||
|
t.Error("Round-trip time returned on failure should've been 0")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if success, rtt := Ping("::1", &Config{Timeout: 500 * time.Millisecond, Network: "ip4"}); success {
|
||||||
|
t.Error("expected false, because the IP isn't an IPv4 address")
|
||||||
|
if rtt != 0 {
|
||||||
|
t.Error("Round-trip time returned on failure should've been 0")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if success, rtt := Ping("127.0.0.1", &Config{Timeout: 500 * time.Millisecond, Network: "ip6"}); success {
|
||||||
|
t.Error("expected false, because the IP isn't an IPv6 address")
|
||||||
|
if rtt != 0 {
|
||||||
|
t.Error("Round-trip time returned on failure should've been 0")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCanPerformStartTLS(t *testing.T) {
|
func TestCanPerformStartTLS(t *testing.T) {
|
||||||
|
@ -30,6 +30,7 @@ var (
|
|||||||
Insecure: false,
|
Insecure: false,
|
||||||
IgnoreRedirect: false,
|
IgnoreRedirect: false,
|
||||||
Timeout: defaultTimeout,
|
Timeout: defaultTimeout,
|
||||||
|
Network: "ip",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -64,6 +65,9 @@ type Config struct {
|
|||||||
IAPConfig *IAPConfig `yaml:"identity-aware-proxy,omitempty"`
|
IAPConfig *IAPConfig `yaml:"identity-aware-proxy,omitempty"`
|
||||||
|
|
||||||
httpClient *http.Client
|
httpClient *http.Client
|
||||||
|
|
||||||
|
// Network (ip, ip4 or ip6) for the ICMP client
|
||||||
|
Network string `yaml:"network"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// DNSResolverConfig is the parsed configuration from the DNSResolver config string.
|
// DNSResolverConfig is the parsed configuration from the DNSResolver config string.
|
||||||
|
Loading…
Reference in New Issue
Block a user