]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blob - vendor/github.com/aws/aws-sdk-go/aws/csm/metric_chan.go
Merge pull request #34 from jcalonso/fix/contact-group-backwards-compatible
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / aws / aws-sdk-go / aws / csm / metric_chan.go
1 package csm
2
3 import (
4 "sync/atomic"
5 )
6
7 const (
8 runningEnum = iota
9 pausedEnum
10 )
11
12 var (
13 // MetricsChannelSize of metrics to hold in the channel
14 MetricsChannelSize = 100
15 )
16
17 type metricChan struct {
18 ch chan metric
19 paused int64
20 }
21
22 func newMetricChan(size int) metricChan {
23 return metricChan{
24 ch: make(chan metric, size),
25 }
26 }
27
28 func (ch *metricChan) Pause() {
29 atomic.StoreInt64(&ch.paused, pausedEnum)
30 }
31
32 func (ch *metricChan) Continue() {
33 atomic.StoreInt64(&ch.paused, runningEnum)
34 }
35
36 func (ch *metricChan) IsPaused() bool {
37 v := atomic.LoadInt64(&ch.paused)
38 return v == pausedEnum
39 }
40
41 // Push will push metrics to the metric channel if the channel
42 // is not paused
43 func (ch *metricChan) Push(m metric) bool {
44 if ch.IsPaused() {
45 return false
46 }
47
48 select {
49 case ch.ch <- m:
50 return true
51 default:
52 return false
53 }
54 }