mirror of
https://github.com/argoproj/argo-cd
synced 2026-05-24 09:50:08 +00:00
* Update CLI, server for wait request * Update generated code * Remove generated code * Add timeout function, and use it * Get first working prototype * Properly fail and print success/fail messages * Add missing reference pointer * Remove unreachable code * Show current state of all checks * Print atypical health output status now * Update short command description, thanks @jessesuen * Use server-side watch command * Use watch API * Clean up wait function to use new API better * Rm unused const, satisfy linter on caps names * Rename channel and set direction * Add infinite timeout by default
39 lines
862 B
Go
39 lines
862 B
Go
package util
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
type Closer interface {
|
|
Close() error
|
|
}
|
|
|
|
// Close is a convenience function to close a object that has a Close() method, ignoring any errors
|
|
// Used to satisfy errcheck lint
|
|
func Close(c Closer) {
|
|
_ = c.Close()
|
|
}
|
|
|
|
// Wait takes a check interval and timeout and waits for a function to return `true`.
|
|
// Wait will return `true` on success and `false` on timeout.
|
|
// The passed function, in turn, should pass `true` (or anything, really) to the channel when it's done.
|
|
// Pass `0` as the timeout to run infinitely until completion.
|
|
func Wait(timeout uint, f func(chan<- bool)) bool {
|
|
done := make(chan bool)
|
|
go f(done)
|
|
|
|
// infinite
|
|
if timeout == 0 {
|
|
return <-done
|
|
}
|
|
|
|
timedOut := time.After(time.Duration(timeout) * time.Second)
|
|
for {
|
|
select {
|
|
case <-done:
|
|
return true
|
|
case <-timedOut:
|
|
return false
|
|
}
|
|
}
|
|
}
|