97 lines
2.3 KiB
Go
97 lines
2.3 KiB
Go
|
package influxql
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"io"
|
||
|
|
||
|
"github.com/influxdata/influxdb/v2/kit/check"
|
||
|
)
|
||
|
|
||
|
// ProxyQueryService performs InfluxQL queries and encodes the result into a writer.
|
||
|
// The results are opaque to a ProxyQueryService.
|
||
|
type ProxyQueryService interface {
|
||
|
check.Checker
|
||
|
Query(ctx context.Context, w io.Writer, req *QueryRequest) (Statistics, error)
|
||
|
}
|
||
|
|
||
|
// ProxyMode enumerates the possible ProxyQueryService operating modes used by a downstream client.
|
||
|
type ProxyMode byte
|
||
|
|
||
|
const (
|
||
|
// ProxyModeHTTP specifies a ProxyQueryService that forwards InfluxQL requests via HTTP to influxqld.
|
||
|
ProxyModeHTTP ProxyMode = iota
|
||
|
|
||
|
// ProxyModeQueue specifies a ProxyQueryService that pushes InfluxQL requests to a queue and influxqld issues a callback request to the initiating service.
|
||
|
ProxyModeQueue
|
||
|
)
|
||
|
|
||
|
var proxyModeString = [...]string{
|
||
|
ProxyModeHTTP: "http",
|
||
|
ProxyModeQueue: "queue",
|
||
|
}
|
||
|
|
||
|
func (i ProxyMode) String() string {
|
||
|
if int(i) > len(proxyModeString) {
|
||
|
return "invalid"
|
||
|
}
|
||
|
return proxyModeString[i]
|
||
|
}
|
||
|
|
||
|
func (i *ProxyMode) Set(v string) (err error) {
|
||
|
switch v {
|
||
|
case "http":
|
||
|
*i = ProxyModeHTTP
|
||
|
case "queue":
|
||
|
*i = ProxyModeQueue
|
||
|
default:
|
||
|
err = fmt.Errorf("unexpected %s type: %s", i.Type(), v)
|
||
|
}
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
func (i *ProxyMode) Type() string { return "proxy-mode" }
|
||
|
|
||
|
// RequestMode is enumerates the possible influxqld operating modes for receiving InfluxQL requests.
|
||
|
type RequestMode byte
|
||
|
|
||
|
const (
|
||
|
// RequestModeHTTP specifies the HTTP listener should be active.
|
||
|
RequestModeHTTP RequestMode = iota
|
||
|
|
||
|
// RequestModeQueue specifies the queue dispatcher should be active.
|
||
|
RequestModeQueue
|
||
|
|
||
|
// RequestModeAll specifies both the HTTP listener and queue dispatcher should be active.
|
||
|
RequestModeAll
|
||
|
)
|
||
|
|
||
|
var requestModeString = [...]string{
|
||
|
RequestModeHTTP: "http",
|
||
|
RequestModeQueue: "queue",
|
||
|
RequestModeAll: "all",
|
||
|
}
|
||
|
|
||
|
func (i RequestMode) String() string {
|
||
|
if int(i) > len(requestModeString) {
|
||
|
return "invalid"
|
||
|
}
|
||
|
return proxyModeString[i]
|
||
|
}
|
||
|
|
||
|
func (i *RequestMode) Set(v string) (err error) {
|
||
|
switch v {
|
||
|
case "http":
|
||
|
*i = RequestModeHTTP
|
||
|
case "queue":
|
||
|
*i = RequestModeQueue
|
||
|
case "all":
|
||
|
*i = RequestModeAll
|
||
|
default:
|
||
|
err = fmt.Errorf("unexpected %s type: %s", i.Type(), v)
|
||
|
}
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
func (i *RequestMode) Type() string { return "request-mode" }
|