github.com/1and1/oneandone-cloudserver-sdk-go@v1.4.1/monitoringcenter.go (about) 1 package oneandone 2 3 import ( 4 "errors" 5 "net/http" 6 "time" 7 ) 8 9 type MonServerUsageSummary struct { 10 Identity 11 Agent *monitoringAgent `json:"agent,omitempty"` 12 Alerts *monitoringAlerts `json:"alerts,omitempty"` 13 Status *monitoringStatus `json:"status,omitempty"` 14 ApiPtr 15 } 16 17 type MonServerUsageDetails struct { 18 Identity 19 Status *statusState `json:"status,omitempty"` 20 Agent *monitoringAgent `json:"agent,omitempty"` 21 Alerts *monitoringAlerts `json:"alerts,omitempty"` 22 CpuStatus *utilizationStatus `json:"cpu,omitempty"` 23 DiskStatus *utilizationStatus `json:"disk,omitempty"` 24 RamStatus *utilizationStatus `json:"ram,omitempty"` 25 PingStatus *pingStatus `json:"internal_ping,omitempty"` 26 TransferStatus *transferStatus `json:"transfer,omitempty"` 27 ApiPtr 28 } 29 30 type monitoringStatus struct { 31 State string `json:"state,omitempty"` 32 Cpu *statusState `json:"cpu,omitempty"` 33 Disk *statusState `json:"disk,omitempty"` 34 InternalPing *statusState `json:"internal_ping,omitempty"` 35 Ram *statusState `json:"ram,omitempty"` 36 Transfer *statusState `json:"transfer,omitempty"` 37 } 38 39 type utilizationStatus struct { 40 CriticalThreshold int `json:"critical,omitempty"` 41 WarningThreshold int `json:"warning,omitempty"` 42 Status string `json:"status,omitempty"` 43 Data []usageData `json:"data,omitempty"` 44 Unit *usageUnit `json:"unit,omitempty"` 45 } 46 47 type pingStatus struct { 48 CriticalThreshold int `json:"critical,omitempty"` 49 WarningThreshold int `json:"warning,omitempty"` 50 Status string `json:"status,omitempty"` 51 Data []pingData `json:"data,omitempty"` 52 Unit *pingUnit `json:"unit,omitempty"` 53 } 54 55 type transferStatus struct { 56 CriticalThreshold int `json:"critical,omitempty"` 57 WarningThreshold int `json:"warning,omitempty"` 58 Status string `json:"status,omitempty"` 59 Data []transferData `json:"data,omitempty"` 60 Unit *transferUnit `json:"unit,omitempty"` 61 } 62 63 type monitoringAgent struct { 64 AgentInstalled bool `json:"agent_installed"` 65 MissingAgentAlert bool `json:"missing_agent_alert"` 66 MonitoringNeedsAgent bool `json:"monitoring_needs_agent"` 67 } 68 69 type monitoringAlerts struct { 70 Ports *monitoringAlertInfo `json:"ports,omitempty"` 71 Process *monitoringAlertInfo `json:"process,omitempty"` 72 Resources *monitoringAlertInfo `json:"resources,omitempty"` 73 } 74 75 type monitoringAlertInfo struct { 76 Ok int `json:"ok"` 77 Warning int `json:"warning"` 78 Critical int `json:"critical"` 79 } 80 81 type usageData struct { 82 Date string `json:"date,omitempty"` 83 UsedPercent float32 `json:"used_percent"` 84 } 85 86 type usageUnit struct { 87 UsedPercent string `json:"used_percent,omitempty"` 88 } 89 90 type pingUnit struct { 91 PackagesLost string `json:"pl,omitempty"` 92 AccessTime string `json:"rta,omitempty"` 93 } 94 95 type pingData struct { 96 Date string `json:"date,omitempty"` 97 PackagesLost int `json:"pl"` 98 AccessTime float32 `json:"rta"` 99 } 100 101 type transferUnit struct { 102 Downstream string `json:"downstream,omitempty"` 103 Upstream string `json:"upstream,omitempty"` 104 } 105 106 type transferData struct { 107 Date string `json:"date,omitempty"` 108 Downstream int `json:"downstream"` 109 Upstream int `json:"upstream"` 110 } 111 112 // GET /monitoring_center 113 func (api *API) ListMonitoringServersUsages(args ...interface{}) ([]MonServerUsageSummary, error) { 114 url, err := processQueryParams(createUrl(api, monitorCenterPathSegment), args...) 115 if err != nil { 116 return nil, err 117 } 118 result := []MonServerUsageSummary{} 119 err = api.Client.Get(url, &result, http.StatusOK) 120 if err != nil { 121 return nil, err 122 } 123 for index, _ := range result { 124 result[index].api = api 125 } 126 return result, nil 127 } 128 129 // GET /monitoring_center/{server_id} 130 func (api *API) GetMonitoringServerUsage(ser_id string, period string, dates ...time.Time) (*MonServerUsageDetails, error) { 131 if period == "" { 132 return nil, errors.New("Time period must be provided.") 133 } 134 135 params := make(map[string]interface{}, len(dates)+1) 136 params["period"] = period 137 138 if len(dates) == 2 { 139 if dates[0].After(dates[1]) { 140 return nil, errors.New("Start date cannot be after end date.") 141 } 142 143 params["start_date"] = dates[0].Format(time.RFC3339) 144 params["end_date"] = dates[1].Format(time.RFC3339) 145 146 } else if len(dates) > 0 { 147 return nil, errors.New("Start and end dates must be provided.") 148 } 149 url := createUrl(api, monitorCenterPathSegment, ser_id) 150 url = appendQueryParams(url, params) 151 result := new(MonServerUsageDetails) 152 err := api.Client.Get(url, &result, http.StatusOK) 153 if err != nil { 154 return nil, err 155 } 156 result.api = api 157 return result, nil 158 }