159 lines
4.7 KiB
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
|
|
}
|