pkg/remote/types.go (44 lines of code) (raw):
package remote
import (
"context"
"sync"
"github.com/Azure/adx-mon/pkg/prompb"
"go.uber.org/multierr"
)
type RemoteWriteClient interface {
Write(ctx context.Context, wr *prompb.WriteRequest) error
CloseIdleConnections()
}
type RequestWriter interface {
// Write writes the time series to the correct peer.
Write(ctx context.Context, wr *prompb.WriteRequest) error
}
func NopCloser(r RequestWriter) RemoteWriteClient {
return &nopCloser{r}
}
type nopCloser struct {
r RequestWriter
}
func (n *nopCloser) Write(ctx context.Context, wr *prompb.WriteRequest) error {
return n.r.Write(ctx, wr)
}
func (n *nopCloser) CloseIdleConnections() {}
func WriteRequest(ctx context.Context, clients []RemoteWriteClient, wr *prompb.WriteRequest) error {
var wg sync.WaitGroup
wg.Add(len(clients))
errs := make(chan error, len(clients))
for _, client := range clients {
go func(client RemoteWriteClient) {
defer wg.Done()
errs <- client.Write(ctx, wr)
}(client)
}
wg.Wait()
close(errs)
var err error
for e := range errs {
if e != nil {
err = multierr.Append(err, e)
}
}
return err
}