Blame vendor/github.com/aws/aws-sdk-go/aws/csm/metric_chan.go

Packit 63bb0d
package csm
Packit 63bb0d
Packit 63bb0d
import (
Packit 63bb0d
	"sync/atomic"
Packit 63bb0d
)
Packit 63bb0d
Packit 63bb0d
const (
Packit 63bb0d
	runningEnum = iota
Packit 63bb0d
	pausedEnum
Packit 63bb0d
)
Packit 63bb0d
Packit 63bb0d
var (
Packit 63bb0d
	// MetricsChannelSize of metrics to hold in the channel
Packit 63bb0d
	MetricsChannelSize = 100
Packit 63bb0d
)
Packit 63bb0d
Packit 63bb0d
type metricChan struct {
Packit 63bb0d
	ch     chan metric
Packit 63bb0d
	paused *int64
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func newMetricChan(size int) metricChan {
Packit 63bb0d
	return metricChan{
Packit 63bb0d
		ch:     make(chan metric, size),
Packit 63bb0d
		paused: new(int64),
Packit 63bb0d
	}
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func (ch *metricChan) Pause() {
Packit 63bb0d
	atomic.StoreInt64(ch.paused, pausedEnum)
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func (ch *metricChan) Continue() {
Packit 63bb0d
	atomic.StoreInt64(ch.paused, runningEnum)
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
func (ch *metricChan) IsPaused() bool {
Packit 63bb0d
	v := atomic.LoadInt64(ch.paused)
Packit 63bb0d
	return v == pausedEnum
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Push will push metrics to the metric channel if the channel
Packit 63bb0d
// is not paused
Packit 63bb0d
func (ch *metricChan) Push(m metric) bool {
Packit 63bb0d
	if ch.IsPaused() {
Packit 63bb0d
		return false
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	select {
Packit 63bb0d
	case ch.ch <- m:
Packit 63bb0d
		return true
Packit 63bb0d
	default:
Packit 63bb0d
		return false
Packit 63bb0d
	}
Packit 63bb0d
}