github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/examples/cis/cisv1/ratelimit/main.go (about)

     1  package main
     2  
     3  import (
     4  	"flag"
     5  	"log"
     6  	"os"
     7  
     8  	"github.com/IBM-Cloud/bluemix-go/api/cis/cisv1"
     9  	"github.com/IBM-Cloud/bluemix-go/session"
    10  	"github.com/IBM-Cloud/bluemix-go/trace"
    11  )
    12  
    13  func main() {
    14  
    15  	var cis_id string
    16  	flag.StringVar(&cis_id, "cis_id", "", "CRN of the CIS service instance")
    17  	var zone_id string
    18  	flag.StringVar(&zone_id, "zone_id", "", "zone_id for zone")
    19  
    20  	flag.Parse()
    21  	if zone_id == "" || cis_id == "" {
    22  		flag.Usage()
    23  		os.Exit(1)
    24  	}
    25  
    26  	trace.Logger = trace.NewLogger("true")
    27  	sess, err := session.New()
    28  	if err != nil {
    29  		log.Fatal(err)
    30  	}
    31  
    32  	cisClient, err := cisv1.New(sess)
    33  	if err != nil {
    34  		log.Fatal(err)
    35  	}
    36  	rateLimitAPI := cisClient.RateLimit()
    37  
    38  	log.Println(">>>>>>>>>  RateLimit create")
    39  
    40  	params := cisv1.RateLimitRecord{
    41  		Description: "test",
    42  		Threshold:   60,
    43  		Period:      600,
    44  		Correlate: &cisv1.RateLimitCorrelate{
    45  			By: "nat",
    46  		},
    47  		Action: cisv1.RateLimitAction{
    48  			Mode:    "simulate",
    49  			Timeout: 40000,
    50  			Response: &cisv1.ActionResponse{
    51  				ContentType: "text/plain",
    52  				Body:        "custom response body",
    53  			},
    54  		},
    55  		Match: cisv1.RateLimitMatch{
    56  			Request: cisv1.MatchRequest{
    57  				URL: "https",
    58  				Methods: []string{
    59  					"GET", "POST", "PUT", "DELETE",
    60  				},
    61  				Schemes: []string{
    62  					"HTTP", "HTTPS",
    63  				},
    64  			},
    65  			Response: cisv1.MatchResponse{
    66  				Statuses: []int{
    67  					200, 201, 202,
    68  				},
    69  			},
    70  		},
    71  	}
    72  
    73  	myRateLimitPtr, err := rateLimitAPI.CreateRateLimit(cis_id, zone_id, params)
    74  	if err != nil {
    75  		log.Fatal(err)
    76  	}
    77  
    78  	myRateLimit := *myRateLimitPtr
    79  	ruleID := myRateLimit.ID
    80  
    81  	log.Println(">>>>>>>>>  RateLimit Read")
    82  	myRateLimitPtr, err = rateLimitAPI.GetRateLimit(cis_id, zone_id, ruleID)
    83  	if err != nil {
    84  		log.Fatal(err)
    85  	}
    86  	myRateLimit = *myRateLimitPtr
    87  	log.Printf("My Rate Limit %v", myRateLimit)
    88  
    89  	log.Println(">>>>>>>>>  RateLimit Update")
    90  	_, err = rateLimitAPI.UpdateRateLimit(cis_id, zone_id, ruleID, params)
    91  	if err != nil {
    92  		log.Fatal(err)
    93  	}
    94  
    95  	log.Println(">>>>>>>>>  RateLimit Delete")
    96  	err = rateLimitAPI.DeleteRateLimit(cis_id, zone_id, ruleID)
    97  	if err != nil {
    98  		log.Fatal(err)
    99  	}
   100  }