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  }