1// Copyright 2016 Circonus, Inc. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5// CheckBundleMetrics API support - Fetch, Create*, Update, and Delete** 6// See: https://login.circonus.com/resources/api/calls/check_bundle_metrics 7// * : create metrics by adding to array with a status of 'active' 8// ** : delete (distable collection of) metrics by changing status from 'active' to 'available' 9 10package api 11 12import ( 13 "encoding/json" 14 "fmt" 15 "regexp" 16 17 "github.com/circonus-labs/circonus-gometrics/api/config" 18) 19 20// CheckBundleMetrics defines metrics for a specific check bundle. See https://login.circonus.com/resources/api/calls/check_bundle_metrics for more information. 21type CheckBundleMetrics struct { 22 CID string `json:"_cid,omitempty"` // string 23 Metrics []CheckBundleMetric `json:"metrics"` // See check_bundle.go for CheckBundleMetric definition 24} 25 26// FetchCheckBundleMetrics retrieves metrics for the check bundle with passed cid. 27func (a *API) FetchCheckBundleMetrics(cid CIDType) (*CheckBundleMetrics, error) { 28 if cid == nil || *cid == "" { 29 return nil, fmt.Errorf("Invalid check bundle metrics CID [none]") 30 } 31 32 metricsCID := string(*cid) 33 34 matched, err := regexp.MatchString(config.CheckBundleMetricsCIDRegex, metricsCID) 35 if err != nil { 36 return nil, err 37 } 38 if !matched { 39 return nil, fmt.Errorf("Invalid check bundle metrics CID [%s]", metricsCID) 40 } 41 42 result, err := a.Get(metricsCID) 43 if err != nil { 44 return nil, err 45 } 46 47 if a.Debug { 48 a.Log.Printf("[DEBUG] fetch check bundle metrics, received JSON: %s", string(result)) 49 } 50 51 metrics := &CheckBundleMetrics{} 52 if err := json.Unmarshal(result, metrics); err != nil { 53 return nil, err 54 } 55 56 return metrics, nil 57} 58 59// UpdateCheckBundleMetrics updates passed metrics. 60func (a *API) UpdateCheckBundleMetrics(cfg *CheckBundleMetrics) (*CheckBundleMetrics, error) { 61 if cfg == nil { 62 return nil, fmt.Errorf("Invalid check bundle metrics config [nil]") 63 } 64 65 metricsCID := string(cfg.CID) 66 67 matched, err := regexp.MatchString(config.CheckBundleMetricsCIDRegex, metricsCID) 68 if err != nil { 69 return nil, err 70 } 71 if !matched { 72 return nil, fmt.Errorf("Invalid check bundle metrics CID [%s]", metricsCID) 73 } 74 75 jsonCfg, err := json.Marshal(cfg) 76 if err != nil { 77 return nil, err 78 } 79 80 if a.Debug { 81 a.Log.Printf("[DEBUG] update check bundle metrics, sending JSON: %s", string(jsonCfg)) 82 } 83 84 result, err := a.Put(metricsCID, jsonCfg) 85 if err != nil { 86 return nil, err 87 } 88 89 metrics := &CheckBundleMetrics{} 90 if err := json.Unmarshal(result, metrics); err != nil { 91 return nil, err 92 } 93 94 return metrics, nil 95} 96