Check gets Ready and readme
Some checks are pending
continuous-integration/drone/push Build is running
Some checks are pending
continuous-integration/drone/push Build is running
This commit is contained in:
parent
45c92cefec
commit
7ed6294563
9
Makefile
9
Makefile
@ -22,3 +22,12 @@ test:
|
|||||||
tidy:
|
tidy:
|
||||||
go mod tidy
|
go mod tidy
|
||||||
go mod vendor
|
go mod vendor
|
||||||
|
|
||||||
|
.PHONY: readme
|
||||||
|
readme:
|
||||||
|
goreadme \
|
||||||
|
-title don \
|
||||||
|
-credit=false \
|
||||||
|
-functions \
|
||||||
|
-types \
|
||||||
|
> README.md
|
||||||
|
76
README.md
Normal file
76
README.md
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
# don
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
## Use as commandline tool
|
||||||
|
|
||||||
|
Download the tool from the [download page](https://git.xsfx.dev/xsteadfastx/don/releases).
|
||||||
|
|
||||||
|
```go
|
||||||
|
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
|
||||||
|
},
|
||||||
|
10*time.Minute,
|
||||||
|
30*time.Second,
|
||||||
|
); err != nil {
|
||||||
|
log.Error().Err(err).Msg("received error")
|
||||||
|
teardown(pool, resource, tmpState.Name())
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Functions
|
||||||
|
|
||||||
|
### func [Cmd](/don.go#L65)
|
||||||
|
|
||||||
|
`func Cmd(c string) func() bool`
|
||||||
|
|
||||||
|
Cmd returns a `func() bool` for working with don.Check. It executes a command and
|
||||||
|
returns a true if everything looks fine or a false if there was some kind of error.
|
||||||
|
|
||||||
|
### func [Ready](/don.go#L83)
|
||||||
|
|
||||||
|
`func Ready(f func() bool, timeout time.Duration, retry time.Duration) error`
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
## Sub Packages
|
||||||
|
|
||||||
|
* [cmd](./cmd)
|
@ -30,7 +30,7 @@ var (
|
|||||||
var rootCmd = &cobra.Command{
|
var rootCmd = &cobra.Command{
|
||||||
Use: "don [command]",
|
Use: "don [command]",
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
if err := don.Check(don.Cmd(command), timeout, retry); err != nil {
|
if err := don.Ready(don.Cmd(command), timeout, retry); err != nil {
|
||||||
log.Fatal().Err(err).Msg("received error")
|
log.Fatal().Err(err).Msg("received error")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
50
don.go
50
don.go
@ -1,6 +1,52 @@
|
|||||||
// Package don is a little helper if you need to check for the readiness of something.
|
// 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
|
// This could be a command to run (like ssh) or a `db.Ping()` for check of the readiness
|
||||||
// of a database container.
|
// of a database container.
|
||||||
|
//
|
||||||
|
// Use as commandline tool
|
||||||
|
//
|
||||||
|
// Download the tool from the (download page) https://git.xsfx.dev/xsteadfastx/don/releases.
|
||||||
|
//
|
||||||
|
// 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:
|
||||||
|
//
|
||||||
|
// import go.xsfx.dev/don
|
||||||
|
//
|
||||||
|
// Doing the readiness check like this:
|
||||||
|
//
|
||||||
|
// 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
|
||||||
|
// },
|
||||||
|
// 10*time.Minute,
|
||||||
|
// 30*time.Second,
|
||||||
|
// ); err != nil {
|
||||||
|
// log.Error().Err(err).Msg("received error")
|
||||||
|
// teardown(pool, resource, tmpState.Name())
|
||||||
|
// os.Exit(1)
|
||||||
|
// }
|
||||||
|
//
|
||||||
package don
|
package don
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@ -32,9 +78,9 @@ func Cmd(c string) func() bool {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check takes a function that executes something and returns a bool to indicate if
|
// 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.
|
// something is ready or not. It returns an error if it timeouts.
|
||||||
func Check(f func() bool, timeout time.Duration, retry time.Duration) error {
|
func Ready(f func() bool, timeout time.Duration, retry time.Duration) error {
|
||||||
chReady := make(chan struct{})
|
chReady := make(chan struct{})
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
|
Loading…
Reference in New Issue
Block a user