| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- package csm
- import (
- "fmt"
- "sync"
- )
- var (
- lock sync.Mutex
- )
- // Client side metric handler names
- const (
- APICallMetricHandlerName = "awscsm.SendAPICallMetric"
- APICallAttemptMetricHandlerName = "awscsm.SendAPICallAttemptMetric"
- )
- // Start will start the a long running go routine to capture
- // client side metrics. Calling start multiple time will only
- // start the metric listener once and will panic if a different
- // client ID or port is passed in.
- //
- // Example:
- // r, err := csm.Start("clientID", "127.0.0.1:8094")
- // if err != nil {
- // panic(fmt.Errorf("expected no error, but received %v", err))
- // }
- // sess := session.NewSession()
- // r.InjectHandlers(sess.Handlers)
- //
- // svc := s3.New(sess)
- // out, err := svc.GetObject(&s3.GetObjectInput{
- // Bucket: aws.String("bucket"),
- // Key: aws.String("key"),
- // })
- func Start(clientID string, url string) (*Reporter, error) {
- lock.Lock()
- defer lock.Unlock()
- if sender == nil {
- sender = newReporter(clientID, url)
- } else {
- if sender.clientID != clientID {
- panic(fmt.Errorf("inconsistent client IDs. %q was expected, but received %q", sender.clientID, clientID))
- }
- if sender.url != url {
- panic(fmt.Errorf("inconsistent URLs. %q was expected, but received %q", sender.url, url))
- }
- }
- if err := connect(url); err != nil {
- sender = nil
- return nil, err
- }
- return sender, nil
- }
- // Get will return a reporter if one exists, if one does not exist, nil will
- // be returned.
- func Get() *Reporter {
- lock.Lock()
- defer lock.Unlock()
- return sender
- }
|