mirror of
https://github.com/makeplane/plane.git
synced 2026-07-12 21:40:18 +02:00
111 lines
3.5 KiB
Markdown
111 lines
3.5 KiB
Markdown
|
|
# Prime Healthcheck
|
||
|
|
Prime Healthcheck is a service that take care of checking for all the running
|
||
|
|
services in the user's system. Internally the Prime Healthcheck makes network
|
||
|
|
calls to each of the services that are provided in the environment variables.
|
||
|
|
|
||
|
|
## Usage
|
||
|
|
### `PerformHealthCheck`
|
||
|
|
|
||
|
|
`PerformHealthCheck` is the primary method that is responsible for perfoming the
|
||
|
|
health check over the services provided. Essentially PerformHealthCheck looks up
|
||
|
|
for environment variables provided with prefix `SERVICE_`, the format is along
|
||
|
|
the lines of `SERVICE_TESTMETHOD_NAME` where name is the name of the service,
|
||
|
|
the corresponding value to this would contain, the exact url to be called for
|
||
|
|
that service, without the protocol. The function returns two channel, which can
|
||
|
|
be used to recieve updates for healthchecks.
|
||
|
|
|
||
|
|
***Function Signature***
|
||
|
|
```go
|
||
|
|
func (h *HealthCheckHandler) PerformHealthCheck(ctx context.Context, options HealthCheckOptions) (chan *HealthCheckStatus, chan *error)
|
||
|
|
```
|
||
|
|
|
||
|
|
```go
|
||
|
|
package main
|
||
|
|
|
||
|
|
func main() {
|
||
|
|
// If you have to pass custom test methods
|
||
|
|
handler := HealthCheckHandler{
|
||
|
|
TestIdMethodMap: T_TestIdMethodMap,
|
||
|
|
TestIdStringMap: T_TestIdStringMap,
|
||
|
|
}
|
||
|
|
// If you want to use default test methods
|
||
|
|
handler := NewHealthCheckHandler()
|
||
|
|
|
||
|
|
t.Setenv(tt.ServiceName, tt.ServiceValue)
|
||
|
|
options := HealthCheckOptions{
|
||
|
|
ConfirmTries: 3,
|
||
|
|
MaxRetries: 1,
|
||
|
|
TimeoutDuration: 5 * time.Second,
|
||
|
|
RetryDuration: 1 * time.Second,
|
||
|
|
}
|
||
|
|
statusChannel, errorChannel := handler.PerformHealthCheck(ctx, options)
|
||
|
|
statuses := make([]HealthCheckStatus, 0)
|
||
|
|
errors := make([]error, 0)
|
||
|
|
for {
|
||
|
|
select {
|
||
|
|
case status, ok := <-statusChannel:
|
||
|
|
if !ok {
|
||
|
|
statusChannel = nil
|
||
|
|
} else {
|
||
|
|
statuses = append(statuses, *status)
|
||
|
|
}
|
||
|
|
case err, ok := <-errorChannel:
|
||
|
|
if !ok {
|
||
|
|
errorChannel = nil
|
||
|
|
} else {
|
||
|
|
errors = append(errors, *err)
|
||
|
|
cancel()
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if statusChannel == nil && errorChannel == nil {
|
||
|
|
break
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### `ExecuteHealthCheckWithRetries`
|
||
|
|
|
||
|
|
`ExecuteHealthCheckWithRetries` is a method that performs the health check with retries.
|
||
|
|
It uses the provided test method and options to repeatedly check the health of a service
|
||
|
|
until it either succeeds or exhausts the retry attempts.
|
||
|
|
|
||
|
|
***Function Signature***
|
||
|
|
```go
|
||
|
|
func (h *HealthCheckHandler) ExecuteHealthCheckWithRetries(ctx context.Context, testMethod HealthCheckMethod, options HealthCheckMethodOptions, wg *sync.WaitGroup, statusChannel chan *HealthCheckStatus, errorChannel chan *error)
|
||
|
|
```
|
||
|
|
|
||
|
|
### `GetServiceFromEnvironment`
|
||
|
|
|
||
|
|
`GetServiceFromEnvironment` retrieves a map of services from the environment variables.
|
||
|
|
It filters the environment variables to only include those with the prefix `SERVICE_` and
|
||
|
|
parses them into a map of service names to `ServiceData`.
|
||
|
|
|
||
|
|
***Function Signature***
|
||
|
|
```go
|
||
|
|
func (h *HealthCheckHandler) GetServiceFromEnvironment() (map[string]*ServiceData, error)
|
||
|
|
```
|
||
|
|
|
||
|
|
### `ParseKeyValue`
|
||
|
|
|
||
|
|
`ParseKeyValue` parses a key-value pair from the environment variables into a service
|
||
|
|
name and `ServiceData`. It splits the key and value into their respective components
|
||
|
|
and validates them.
|
||
|
|
|
||
|
|
***Function Signature***
|
||
|
|
```go
|
||
|
|
func (h *HealthCheckHandler) ParseKeyValue(key string, value string) (string, *ServiceData, error)
|
||
|
|
```
|
||
|
|
|
||
|
|
### `GetEnvironmentVarMap`
|
||
|
|
|
||
|
|
`GetEnvironmentVarMap` retrieves all environment variables and returns them as a map
|
||
|
|
of key-value pairs. It filters out any empty or commented-out variables.
|
||
|
|
|
||
|
|
***Function Signature***
|
||
|
|
```go
|
||
|
|
func GetEnvironmentVarMap() map[string]string
|
||
|
|
```
|
||
|
|
|
||
|
|
... For understanding more, please read healthcheck.go and healthcheck_method.go
|