mirror of https://github.com/status-im/consul.git
129 lines
3.8 KiB
Go
129 lines
3.8 KiB
Go
package api
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
)
|
|
|
|
// CheckBundleConfig configuration specific to check type
|
|
type CheckBundleConfig struct {
|
|
AsyncMetrics bool `json:"async_metrics"`
|
|
Secret string `json:"secret"`
|
|
SubmissionURL string `json:"submission_url"`
|
|
}
|
|
|
|
// CheckBundleMetric individual metric configuration
|
|
type CheckBundleMetric struct {
|
|
Name string `json:"name"`
|
|
Type string `json:"type"`
|
|
Units string `json:"units"`
|
|
Status string `json:"status"`
|
|
}
|
|
|
|
// CheckBundle definition
|
|
type CheckBundle struct {
|
|
CheckUUIDs []string `json:"_check_uuids,omitempty"`
|
|
Checks []string `json:"_checks,omitempty"`
|
|
Cid string `json:"_cid,omitempty"`
|
|
Created int `json:"_created,omitempty"`
|
|
LastModified int `json:"_last_modified,omitempty"`
|
|
LastModifedBy string `json:"_last_modifed_by,omitempty"`
|
|
ReverseConnectUrls []string `json:"_reverse_connection_urls,omitempty"`
|
|
Brokers []string `json:"brokers"`
|
|
Config CheckBundleConfig `json:"config"`
|
|
DisplayName string `json:"display_name"`
|
|
Metrics []CheckBundleMetric `json:"metrics"`
|
|
MetricLimit int `json:"metric_limit"`
|
|
Notes string `json:"notes"`
|
|
Period int `json:"period"`
|
|
Status string `json:"status"`
|
|
Tags []string `json:"tags"`
|
|
Target string `json:"target"`
|
|
Timeout int `json:"timeout"`
|
|
Type string `json:"type"`
|
|
}
|
|
|
|
// FetchCheckBundleByID fetch a check bundle configuration by id
|
|
func (a *API) FetchCheckBundleByID(id IDType) (*CheckBundle, error) {
|
|
cid := CIDType(fmt.Sprintf("/check_bundle/%d", id))
|
|
return a.FetchCheckBundleByCID(cid)
|
|
}
|
|
|
|
// FetchCheckBundleByCID fetch a check bundle configuration by id
|
|
func (a *API) FetchCheckBundleByCID(cid CIDType) (*CheckBundle, error) {
|
|
result, err := a.Get(string(cid))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
checkBundle := &CheckBundle{}
|
|
json.Unmarshal(result, checkBundle)
|
|
|
|
return checkBundle, nil
|
|
}
|
|
|
|
// CheckBundleSearch returns list of check bundles matching a search query
|
|
// - a search query not a filter (see: https://login.circonus.com/resources/api#searching)
|
|
func (a *API) CheckBundleSearch(searchCriteria SearchQueryType) ([]CheckBundle, error) {
|
|
apiPath := fmt.Sprintf("/check_bundle?search=%s", searchCriteria)
|
|
|
|
response, err := a.Get(apiPath)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("[ERROR] API call error %+v", err)
|
|
}
|
|
|
|
var results []CheckBundle
|
|
err = json.Unmarshal(response, &results)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("[ERROR] Parsing JSON response %+v", err)
|
|
}
|
|
|
|
return results, nil
|
|
}
|
|
|
|
// CreateCheckBundle create a new check bundle (check)
|
|
func (a *API) CreateCheckBundle(config CheckBundle) (*CheckBundle, error) {
|
|
cfgJSON, err := json.Marshal(config)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
response, err := a.Post("/check_bundle", cfgJSON)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
checkBundle := &CheckBundle{}
|
|
err = json.Unmarshal(response, checkBundle)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return checkBundle, nil
|
|
}
|
|
|
|
// UpdateCheckBundle updates a check bundle configuration
|
|
func (a *API) UpdateCheckBundle(config *CheckBundle) (*CheckBundle, error) {
|
|
if a.Debug {
|
|
a.Log.Printf("[DEBUG] Updating check bundle with new metrics.")
|
|
}
|
|
|
|
cfgJSON, err := json.Marshal(config)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
response, err := a.Put(config.Cid, cfgJSON)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
checkBundle := &CheckBundle{}
|
|
err = json.Unmarshal(response, checkBundle)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return checkBundle, nil
|
|
}
|