api/client.go (90 lines of code) (raw):
package api
import (
"context"
"fmt"
"net"
"net/http"
"time"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
"github.com/aliyun/alibaba-cloud-sdk-go/services/pairecservice"
)
var (
defaultTransport = &http.Transport{
DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) {
d := net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
}
return d.DialContext(ctx, "tcp4", addr)
},
MaxIdleConns: 200,
MaxIdleConnsPerHost: 200,
MaxConnsPerHost: 200,
IdleConnTimeout: 90 * time.Second,
TLSHandshakeTimeout: 10 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
}
)
// APIClient manages communication with the Pairec Experiment Restful Api API v1.0.0
// In most cases there should be only one, shared, APIClient.
type APIClient struct {
*pairecservice.Client
common service // Reuse a single struct instead of allocating one for each service on the heap.
region string
domain string
// API Services
ExperimentApi *ExperimentApiService
ExperimentGroupApi *ExperimentGroupApiService
ExperimentRoomApi *ExperimentRoomApiService
LayerApi *LayerApiService
SceneApi *SceneApiService
ParamApi *ParamApiService
CrowdApi *CrowdApiService
TrafficControlApi *TrafficControlApiService
FeatureConsistencyCheckApi *FeatureConsistencyCheckService
}
type service struct {
client *APIClient
instanceId string
}
// NewAPIClient creates a new API client. Requires a userAgent string describing your application.
// optionally a custom http.Client to allow for advanced features such as caching.
func NewAPIClient(instanceId, region, accessId, accessKey string) (*APIClient, error) {
var (
client *pairecservice.Client
err error
)
if accessId == "" || accessKey == "" {
defaultProvider := credentials.NewDefaultCredentialsProvider()
sdkConfig := sdk.NewConfig()
sdkConfig.Scheme = "https"
client, err = pairecservice.NewClientWithOptions(region, sdkConfig, defaultProvider)
} else {
client, err = pairecservice.NewClientWithAccessKey(region, accessId, accessKey)
}
if err != nil {
return nil, err
}
client.SetTransport(defaultTransport)
c := &APIClient{
Client: client,
region: region,
}
c.common.client = c
c.common.instanceId = instanceId
// API Services
c.ExperimentApi = (*ExperimentApiService)(&c.common)
c.ExperimentGroupApi = (*ExperimentGroupApiService)(&c.common)
c.ExperimentRoomApi = (*ExperimentRoomApiService)(&c.common)
c.LayerApi = (*LayerApiService)(&c.common)
c.SceneApi = (*SceneApiService)(&c.common)
c.ParamApi = (*ParamApiService)(&c.common)
c.CrowdApi = (*CrowdApiService)(&c.common)
c.TrafficControlApi = (*TrafficControlApiService)(&c.common)
c.FeatureConsistencyCheckApi = (*FeatureConsistencyCheckService)(&c.common)
return c, nil
}
func (c *APIClient) GetDomain() string {
if c.domain == "" {
c.domain = fmt.Sprintf("pairecservice-vpc.%s.aliyuncs.com", c.region)
}
return c.domain
}
func (c *APIClient) SetDomain(domain string) {
c.domain = domain
}
/**
func (c *APIClient) Init(accessId, accessKey string) error {
endpoint := c.GetDomain()
protol := "http"
config := &openapi.Config{
AccessKeyId: &accessId,
AccessKeySecret: &accessKey,
Endpoint: &endpoint,
Protocol: &protol,
}
client, err := pairecserviceV2.NewClient(config)
if err != nil {
return err
}
c.v2Client = client
return nil
}
**/