2021-06-15 10:48:12 +02:00
|
|
|
# don
|
|
|
|
|
2021-06-21 10:06:12 +02:00
|
|
|
[![GoDoc](https://img.shields.io/badge/pkg.go.dev-doc-blue)](http://pkg.go.dev/go.xsfx.dev/don)
|
|
|
|
[![Go Report Card](https://goreportcard.com/badge/go.xsfx.dev/don)](https://goreportcard.com/report/go.xsfx.dev/don)
|
|
|
|
|
2021-06-15 10:48:12 +02:00
|
|
|
Package don is a little helper if you need to check for the readiness of something.
|
|
|
|
This could be a command to run (like ssh) or a `db.Ping()` for check of the readiness
|
|
|
|
of a database container.
|
|
|
|
|
2021-09-01 13:43:50 +02:00
|
|
|
![readme](./README.gif)
|
|
|
|
|
2021-06-15 10:48:12 +02:00
|
|
|
## Use as commandline tool
|
|
|
|
|
2021-06-22 12:34:15 +02:00
|
|
|
Download the tool from the [download page](https://github.com/xsteadfastx/don/releases) or
|
|
|
|
install via brew:
|
2021-06-15 10:48:12 +02:00
|
|
|
|
|
|
|
```go
|
2021-06-22 12:34:15 +02:00
|
|
|
brew tap xsteadfastx/tap [https://github.com/xsteadfastx/homebrew-tap](https://github.com/xsteadfastx/homebrew-tap)
|
|
|
|
brew install don
|
2021-06-15 10:48:12 +02:00
|
|
|
don -t 15m -r 15s -c "ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 root@container"
|
|
|
|
```
|
|
|
|
|
|
|
|
This example checks every 15 seconds if the ssh container is ready. It would timeout with an
|
|
|
|
error after 15 minutes.
|
|
|
|
|
|
|
|
## Use as a library
|
|
|
|
|
|
|
|
If you want to use don as a library, it just takes a `func() bool` in `don.Ready()`
|
|
|
|
have a function that runs the readiness check and returns `true` or `false` if its
|
|
|
|
ready or not. The second argument is the overall timeout and
|
|
|
|
the third argument is the check interval. Import it like this:
|
|
|
|
|
|
|
|
```go
|
|
|
|
import go.xsfx.dev/don
|
|
|
|
```
|
|
|
|
|
|
|
|
Doing the readiness check like this:
|
|
|
|
|
|
|
|
```go
|
|
|
|
if err := don.Ready(
|
|
|
|
func() bool {
|
|
|
|
db, err := sql.Open("oracle", dbConn)
|
|
|
|
if err != nil {
|
|
|
|
log.Warn().Err(err).Str("dbConn", dbConn).Msg("could not open connection")
|
|
|
|
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := db.Ping(); err != nil {
|
|
|
|
log.Warn().Err(err).Str("dbConn", dbConn).Msg("could not ping")
|
|
|
|
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
return true
|
|
|
|
},
|
2021-09-01 13:43:50 +02:00
|
|
|
10*time.Minute, // When to timeout completly.
|
|
|
|
30*time.Second, // Whats the time between retries.
|
|
|
|
false, // If you want a progressbar.
|
2021-06-15 10:48:12 +02:00
|
|
|
); err != nil {
|
|
|
|
log.Error().Err(err).Msg("received error")
|
|
|
|
teardown(pool, resource, tmpState.Name())
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
## Functions
|
|
|
|
|
2021-09-01 13:43:50 +02:00
|
|
|
### func [Cmd](/don.go#L72)
|
2021-06-15 10:48:12 +02:00
|
|
|
|
|
|
|
`func Cmd(c string) func() bool`
|
|
|
|
|
2021-06-15 11:04:43 +02:00
|
|
|
Cmd returns a `func() bool` for working with `don.Ready()`. It executes a command and
|
2021-06-15 10:48:12 +02:00
|
|
|
returns a true if everything looks fine or a false if there was some kind of error.
|
|
|
|
|
2021-09-01 13:43:50 +02:00
|
|
|
### func [Ready](/don.go#L90)
|
2021-06-15 10:48:12 +02:00
|
|
|
|
2021-09-01 13:08:04 +02:00
|
|
|
`func Ready(f func() bool, timeout time.Duration, retry time.Duration, bar bool) error`
|
2021-06-15 10:48:12 +02:00
|
|
|
|
|
|
|
Ready takes a function that executes something and returns a bool to indicate if
|
|
|
|
something is ready or not. It returns an error if it timeouts.
|