terraform/vendor/github.com/1and1/oneandone-cloudserver-sdk-go/monitoringcenter.go

159 lines
4.7 KiB
Go

package oneandone
import (
"errors"
"net/http"
"time"
)
type MonServerUsageSummary struct {
Identity
Agent *monitoringAgent `json:"agent,omitempty"`
Alerts *monitoringAlerts `json:"alerts,omitempty"`
Status *monitoringStatus `json:"status,omitempty"`
ApiPtr
}
type MonServerUsageDetails struct {
Identity
Status *statusState `json:"status,omitempty"`
Agent *monitoringAgent `json:"agent,omitempty"`
Alerts *monitoringAlerts `json:"alerts,omitempty"`
CpuStatus *utilizationStatus `json:"cpu,omitempty"`
DiskStatus *utilizationStatus `json:"disk,omitempty"`
RamStatus *utilizationStatus `json:"ram,omitempty"`
PingStatus *pingStatus `json:"internal_ping,omitempty"`
TransferStatus *transferStatus `json:"transfer,omitempty"`
ApiPtr
}
type monitoringStatus struct {
State string `json:"state,omitempty"`
Cpu *statusState `json:"cpu,omitempty"`
Disk *statusState `json:"disk,omitempty"`
InternalPing *statusState `json:"internal_ping,omitempty"`
Ram *statusState `json:"ram,omitempty"`
Transfer *statusState `json:"transfer,omitempty"`
}
type utilizationStatus struct {
CriticalThreshold int `json:"critical,omitempty"`
WarningThreshold int `json:"warning,omitempty"`
Status string `json:"status,omitempty"`
Data []usageData `json:"data,omitempty"`
Unit *usageUnit `json:"unit,omitempty"`
}
type pingStatus struct {
CriticalThreshold int `json:"critical,omitempty"`
WarningThreshold int `json:"warning,omitempty"`
Status string `json:"status,omitempty"`
Data []pingData `json:"data,omitempty"`
Unit *pingUnit `json:"unit,omitempty"`
}
type transferStatus struct {
CriticalThreshold int `json:"critical,omitempty"`
WarningThreshold int `json:"warning,omitempty"`
Status string `json:"status,omitempty"`
Data []transferData `json:"data,omitempty"`
Unit *transferUnit `json:"unit,omitempty"`
}
type monitoringAgent struct {
AgentInstalled bool `json:"agent_installed"`
MissingAgentAlert bool `json:"missing_agent_alert"`
MonitoringNeedsAgent bool `json:"monitoring_needs_agent"`
}
type monitoringAlerts struct {
Ports *monitoringAlertInfo `json:"ports,omitempty"`
Process *monitoringAlertInfo `json:"process,omitempty"`
Resources *monitoringAlertInfo `json:"resources,omitempty"`
}
type monitoringAlertInfo struct {
Ok int `json:"ok"`
Warning int `json:"warning"`
Critical int `json:"critical"`
}
type usageData struct {
Date string `json:"date,omitempty"`
UsedPercent float32 `json:"used_percent"`
}
type usageUnit struct {
UsedPercent string `json:"used_percent,omitempty"`
}
type pingUnit struct {
PackagesLost string `json:"pl,omitempty"`
AccessTime string `json:"rta,omitempty"`
}
type pingData struct {
Date string `json:"date,omitempty"`
PackagesLost int `json:"pl"`
AccessTime float32 `json:"rta"`
}
type transferUnit struct {
Downstream string `json:"downstream,omitempty"`
Upstream string `json:"upstream,omitempty"`
}
type transferData struct {
Date string `json:"date,omitempty"`
Downstream int `json:"downstream"`
Upstream int `json:"upstream"`
}
// GET /monitoring_center
func (api *API) ListMonitoringServersUsages(args ...interface{}) ([]MonServerUsageSummary, error) {
url, err := processQueryParams(createUrl(api, monitorCenterPathSegment), args...)
if err != nil {
return nil, err
}
result := []MonServerUsageSummary{}
err = api.Client.Get(url, &result, http.StatusOK)
if err != nil {
return nil, err
}
for index, _ := range result {
result[index].api = api
}
return result, nil
}
// GET /monitoring_center/{server_id}
func (api *API) GetMonitoringServerUsage(ser_id string, period string, dates ...time.Time) (*MonServerUsageDetails, error) {
if period == "" {
return nil, errors.New("Time period must be provided.")
}
params := make(map[string]interface{}, len(dates)+1)
params["period"] = period
if len(dates) == 2 {
if dates[0].After(dates[1]) {
return nil, errors.New("Start date cannot be after end date.")
}
params["start_date"] = dates[0].Format(time.RFC3339)
params["end_date"] = dates[1].Format(time.RFC3339)
} else if len(dates) > 0 {
return nil, errors.New("Start and end dates must be provided.")
}
url := createUrl(api, monitorCenterPathSegment, ser_id)
url = appendQueryParams(url, params)
result := new(MonServerUsageDetails)
err := api.Client.Get(url, &result, http.StatusOK)
if err != nil {
return nil, err
}
result.api = api
return result, nil
}