influxdb/http/client.go

93 lines
1.8 KiB
Go

package http
import (
"net/http"
"net/url"
"github.com/influxdata/influxdb/kit/tracing"
)
// Service connects to an InfluxDB via HTTP.
type Service struct {
Addr string
Token string
InsecureSkipVerify bool
*AuthorizationService
*OrganizationService
*UserService
*BucketService
*VariableService
*DashboardService
}
// NewService returns a service that is an HTTP
// client to a remote
func NewService(addr, token string) *Service {
return &Service{
Addr: addr,
Token: token,
AuthorizationService: &AuthorizationService{
Addr: addr,
Token: token,
},
OrganizationService: &OrganizationService{
Addr: addr,
Token: token,
},
UserService: &UserService{
Addr: addr,
Token: token,
},
BucketService: &BucketService{
Addr: addr,
Token: token,
},
DashboardService: &DashboardService{
Addr: addr,
Token: token,
},
VariableService: &VariableService{
Addr: addr,
Token: token,
},
}
}
// NewURL concats addr and path.
func NewURL(addr, path string) (*url.URL, error) {
u, err := url.Parse(addr)
if err != nil {
return nil, err
}
u.Path = path
return u, nil
}
// NewClient returns an http.Client that pools connections and injects a span.
func NewClient(scheme string, insecure bool) *traceClient {
hc := &traceClient{
Client: http.Client{
Transport: defaultTransport,
},
}
if scheme == "https" && insecure {
hc.Transport = skipVerifyTransport
}
return hc
}
// traceClient always injects any opentracing trace into the client requests.
type traceClient struct {
http.Client
}
// Do injects the trace and then performs the request.
func (c *traceClient) Do(r *http.Request) (*http.Response, error) {
span, _ := tracing.StartSpanFromContext(r.Context())
defer span.Finish()
tracing.InjectToHTTPRequest(span, r)
return c.Client.Do(r)
}