File: httprc.go

package info (click to toggle)
golang-github-lestrrat-go-httprc 3.0.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 288 kB
  • sloc: perl: 60; makefile: 2
file content (90 lines) | stat: -rw-r--r-- 2,645 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package httprc

import (
	"context"
	"net/http"
	"time"

	"github.com/lestrrat-go/httprc/v3/errsink"
	"github.com/lestrrat-go/httprc/v3/tracesink"
)

// Buffer size constants
const (
	// ReadBufferSize is the default buffer size for reading HTTP responses (10MB)
	ReadBufferSize = 1024 * 1024 * 10
	// MaxBufferSize is the maximum allowed buffer size (1GB)
	MaxBufferSize = 1024 * 1024 * 1000
)

// Client worker constants
const (
	// DefaultWorkers is the default number of worker goroutines
	DefaultWorkers = 5
)

// Interval constants
const (
	// DefaultMaxInterval is the default maximum interval between fetches (30 days)
	DefaultMaxInterval = 24 * time.Hour * 30
	// DefaultMinInterval is the default minimum interval between fetches (15 minutes)
	DefaultMinInterval = 15 * time.Minute
	// oneDay is used internally for time calculations
	oneDay = 24 * time.Hour
)

// utility to round up intervals to the nearest second
func roundupToSeconds(d time.Duration) time.Duration {
	if diff := d % time.Second; diff > 0 {
		return d + time.Second - diff
	}
	return d
}

// ErrorSink is an interface that abstracts a sink for errors.
type ErrorSink = errsink.Interface

type TraceSink = tracesink.Interface

// HTTPClient is an interface that abstracts a "net/http".Client, so that
// users can provide their own implementation of the HTTP client, if need be.
type HTTPClient interface {
	Do(*http.Request) (*http.Response, error)
}

// Transformer is used to convert the body of an HTTP response into an appropriate
// object of type T.
type Transformer[T any] interface {
	Transform(context.Context, *http.Response) (T, error)
}

// TransformFunc is a function type that implements the Transformer interface.
type TransformFunc[T any] func(context.Context, *http.Response) (T, error)

func (f TransformFunc[T]) Transform(ctx context.Context, res *http.Response) (T, error) {
	return f(ctx, res)
}

// Resource is a single resource that can be retrieved via HTTP, and (possibly) transformed
// into an arbitrary object type.
//
// Realistically, there is no need for third-parties to implement this interface. This exists
// to provide a way to aggregate `httprc.ResourceBase` objects with different specialized types
// into a single collection.
//
// See ResourceBase for details
type Resource interface { //nolint:interfacebloat
	Get(any) error
	Next() time.Time
	SetNext(time.Time)
	URL() string
	Sync(context.Context) error
	ConstantInterval() time.Duration
	MaxInterval() time.Duration
	SetMaxInterval(time.Duration)
	MinInterval() time.Duration
	SetMinInterval(time.Duration)
	IsBusy() bool
	SetBusy(bool)
	Ready(context.Context) error
}