1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
package ccu
import (
"errors"
fmt "fmt"
"github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1"
)
type PurgeTypeValue string
type NetworkValue string
var (
PurgeByUrl PurgeTypeValue = "url"
PurgeByCpCode PurgeTypeValue = "cpcode"
PurgeByCacheTag PurgeTypeValue = "tag"
NetworkStaging NetworkValue = "staging"
NetworkProduction NetworkValue = "production"
)
type Purge struct {
Objects []string `json:"objects""`
}
func NewPurge(objects []string) *Purge {
return &Purge{
Objects: objects,
}
}
func (p *Purge) Invalidate(purgeByType PurgeTypeValue, network NetworkValue) (*PurgeResponse, error) {
return p.purge("invalidate", purgeByType, network)
}
func (p *Purge) Delete(purgeByType PurgeTypeValue, network NetworkValue) (*PurgeResponse, error) {
return p.purge("delete", purgeByType, network)
}
func (p *Purge) purge(purgeMethod string, purgeByType PurgeTypeValue, network NetworkValue) (*PurgeResponse, error) {
if len(p.Objects) == 0 {
return nil, errors.New("one of more purge objects must be defined")
}
url := fmt.Sprintf(
"/ccu/v3/%s/%s/%s",
purgeMethod,
purgeByType,
network,
)
req, err := client.NewJSONRequest(Config, "POST", url, p)
if err != nil {
return nil, err
}
res, err := client.Do(Config, req)
if err != nil {
return nil, err
}
if client.IsError(res) {
return nil, client.NewAPIError(res)
}
purge := &PurgeResponse{}
if err = client.BodyJSON(res, purge); err != nil {
return nil, err
}
return purge, nil
}
type PurgeResponse struct {
PurgeID string `json:"purgeId"`
EstimatedSeconds int `json:"estimatedSeconds"`
HTTPStatus int `json:"httpStatus"`
Detail string `json:"detail"`
SupportID string `json:"supportId"`
}
|