]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blame - vendor/github.com/aws/aws-sdk-go/aws/csm/enable.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 / enable.go
CommitLineData
15c0b25d
AP
1package csm
2
3import (
4 "fmt"
5 "sync"
6)
7
8var (
9 lock sync.Mutex
10)
11
12// Client side metric handler names
13const (
14 APICallMetricHandlerName = "awscsm.SendAPICallMetric"
15 APICallAttemptMetricHandlerName = "awscsm.SendAPICallAttemptMetric"
16)
17
18// Start will start the a long running go routine to capture
19// client side metrics. Calling start multiple time will only
20// start the metric listener once and will panic if a different
21// client ID or port is passed in.
22//
23// Example:
24// r, err := csm.Start("clientID", "127.0.0.1:8094")
25// if err != nil {
26// panic(fmt.Errorf("expected no error, but received %v", err))
27// }
28// sess := session.NewSession()
29// r.InjectHandlers(sess.Handlers)
30//
31// svc := s3.New(sess)
32// out, err := svc.GetObject(&s3.GetObjectInput{
33// Bucket: aws.String("bucket"),
34// Key: aws.String("key"),
35// })
36func Start(clientID string, url string) (*Reporter, error) {
37 lock.Lock()
38 defer lock.Unlock()
39
40 if sender == nil {
41 sender = newReporter(clientID, url)
42 } else {
43 if sender.clientID != clientID {
44 panic(fmt.Errorf("inconsistent client IDs. %q was expected, but received %q", sender.clientID, clientID))
45 }
46
47 if sender.url != url {
48 panic(fmt.Errorf("inconsistent URLs. %q was expected, but received %q", sender.url, url))
49 }
50 }
51
52 if err := connect(url); err != nil {
53 sender = nil
54 return nil, err
55 }
56
57 return sender, nil
58}
59
60// Get will return a reporter if one exists, if one does not exist, nil will
61// be returned.
62func Get() *Reporter {
63 lock.Lock()
64 defer lock.Unlock()
65
66 return sender
67}