runutil

package
v1.0.0-rc.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 27, 2022 License: Apache-2.0 Imports: 1 Imported by: 3

Documentation

Overview

Initially copied from Thanos

Copyright (c) The Thanos Authors. Licensed under the Apache License 2.0.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Repeat

func Repeat(interval time.Duration, stopc <-chan struct{}, f func() error) error

Repeat executes f every interval seconds until stopc is closed or f returns an error. It executes f once right after being called.

Example
package main

import (
	"context"
	"fmt"
	"log"
	"time"

	"github.com/efficientgo/core/runutil"
)

func main() {
	// It will stop Repeat 10 seconds later.
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()

	// It will print out "Repeat" every 5 seconds.
	err := runutil.Repeat(5*time.Second, ctx.Done(), func() error {
		fmt.Println("Repeat")
		return nil
	})
	if err != nil {
		log.Fatal(err)
	}
}

func Retry

func Retry(interval time.Duration, stopc <-chan struct{}, f func() error) error

Retry executes f every interval seconds until timeout or no error is returned from f.

Example
package main

import (
	"context"
	"fmt"
	"log"
	"time"

	"github.com/efficientgo/core/errors"
	"github.com/efficientgo/core/runutil"
)

func main() {
	// It will stop Retry 10 seconds later.
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()

	// It will print out "Retry" every 5 seconds.
	err := runutil.Retry(5*time.Second, ctx.Done(), func() error {
		fmt.Println("Retry")
		return errors.New("Try to retry")
	})
	if err != nil {
		log.Fatal(err)
	}
}

func RetryWithLog

func RetryWithLog(logger Logger, interval time.Duration, stopc <-chan struct{}, f func() error) error

RetryWithLog executes f every interval seconds until timeout or no error is returned from f. It logs an error on each f error.

Types

type Logger

type Logger interface {
	Log(keyvals ...interface{}) error
}

Logger interface compatible with go-kit/logger.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL