Files

38 lines
766 B
Go

package workspaceruntime
import (
"fmt"
"net"
"strings"
"time"
)
type endpointProbe struct {
attempts int
dialTimeout time.Duration
retryDelay time.Duration
}
func newEndpointProbe() *endpointProbe {
return &endpointProbe{
attempts: 20,
dialTimeout: 500 * time.Millisecond,
retryDelay: 250 * time.Millisecond,
}
}
func (p *endpointProbe) wait(endpoint string) error {
address := strings.TrimPrefix(endpoint, "http://")
var lastErr error
for attempt := 0; attempt < p.attempts; attempt++ {
conn, err := net.DialTimeout("tcp", address, p.dialTimeout)
if err == nil {
_ = conn.Close()
return nil
}
lastErr = err
time.Sleep(p.retryDelay)
}
return fmt.Errorf("runner endpoint %s is not reachable: %w", endpoint, lastErr)
}