github.com/akamai/AkamaiOPEN-edgegrid-golang@v1.2.2/reportsgtm-v1/datacenter.go (about) 1 package reportsgtm 2 3 import ( 4 "strconv" 5 6 "github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1" 7 "github.com/akamai/AkamaiOPEN-edgegrid-golang/configgtm-v1_3" 8 9 "fmt" 10 ) 11 12 // 13 // Support gtm reports thru Edgegrid 14 // Based on 1.0 Schema 15 // 16 17 // Datacenter Traffic Report Structs 18 type DCTMeta struct { 19 Uri string `json:uri"` 20 Domain string `json:"domain"` 21 Interval string `json:"interval,omitempty"` 22 DatacenterId int `json:"datacenterId"` 23 DatacenterNickname string `json:"datacenterNickname"` 24 Start string `json:"start"` 25 End string `json:"end"` 26 } 27 28 type DCTDRow struct { 29 Name string `json:"name"` 30 Requests int64 `json:"requests"` 31 Status string `json:"status"` 32 } 33 34 type DCTData struct { 35 Timestamp string `json:"timestamp"` 36 Properties []*DCTDRow `json:"properties"` 37 } 38 39 // Response structure returned by the Datacenter Traffic API 40 type DcTrafficResponse struct { 41 Metadata *DCTMeta `json:"metadata"` 42 DataRows []*DCTData `json:"dataRows"` 43 DataSummary interface{} `json:"dataSummary"` 44 Links []*configgtm.Link `json:"links"` 45 } 46 47 // GetTrafficPerDatacenter retrieves Report Traffic per datacenter. Opt args - start, end. 48 func GetTrafficPerDatacenter(domainName string, datacenterID int, optArgs map[string]string) (*DcTrafficResponse, error) { 49 stat := &DcTrafficResponse{} 50 hostURL := fmt.Sprintf("/gtm-api/v1/reports/traffic/domains/%s/datacenters/%s", domainName, strconv.Itoa(datacenterID)) 51 52 req, err := client.NewRequest( 53 Config, 54 "GET", 55 hostURL, 56 nil, 57 ) 58 if err != nil { 59 return nil, err 60 } 61 62 // Look for and process optional query params 63 q := req.URL.Query() 64 for k, v := range optArgs { 65 switch k { 66 case "start": 67 fallthrough 68 case "end": 69 q.Add(k, v) 70 } 71 } 72 if optArgs != nil { 73 // time stamps require urlencoded content header 74 setEncodedHeader(req) 75 req.URL.RawQuery = q.Encode() 76 } 77 78 // print/log the request if warranted 79 printHttpRequest(req, true) 80 81 res, err := client.Do(Config, req) 82 if err != nil { 83 return nil, err 84 } 85 86 // print/log the response if warranted 87 printHttpResponse(res, true) 88 89 if client.IsError(res) && res.StatusCode != 404 { 90 return nil, client.NewAPIError(res) 91 } else if res.StatusCode == 404 { 92 cErr := configgtm.CommonError{} 93 cErr.SetItem("entityName", "Datacenter") 94 cErr.SetItem("name", strconv.Itoa(datacenterID)) 95 return nil, cErr 96 } else { 97 err = client.BodyJSON(res, stat) 98 if err != nil { 99 return nil, err 100 } 101 102 return stat, nil 103 } 104 }