influxdb/influxql/query_request.go

88 lines
2.6 KiB
Go
Raw Normal View History

package influxql
import (
"encoding/json"
"github.com/influxdata/influxdb/v2"
"github.com/influxdata/influxdb/v2/kit/platform"
"github.com/influxdata/influxdb/v2/kit/platform/errors"
)
type EncodingFormat int
func (f *EncodingFormat) UnmarshalJSON(bytes []byte) error {
var s string
if err := json.Unmarshal(bytes, &s); err != nil {
return err
}
*f = EncodingFormatFromMimeType(s)
return nil
}
func (f EncodingFormat) MarshalJSON() ([]byte, error) {
return json.Marshal(f.ContentType())
}
const (
EncodingFormatJSON EncodingFormat = iota
EncodingFormatTextCSV
EncodingFormatAppCSV
EncodingFormatMessagePack
)
// Returns closed encoding format from the specified mime type.
// The default is JSON if no exact match is found.
func EncodingFormatFromMimeType(s string) EncodingFormat {
switch s {
case "application/csv":
return EncodingFormatAppCSV
case "text/csv":
return EncodingFormatTextCSV
case "application/x-msgpack":
return EncodingFormatMessagePack
default:
return EncodingFormatJSON
}
}
func (f EncodingFormat) ContentType() string {
switch f {
case EncodingFormatAppCSV:
return "application/csv"
case EncodingFormatTextCSV:
return "text/csv"
case EncodingFormatMessagePack:
return "application/x-msgpack"
default:
return "application/json"
}
}
type QueryRequest struct {
Authorization *influxdb.Authorization `json:"authorization,omitempty"`
OrganizationID platform.ID `json:"organization_id"`
DB string `json:"db"`
RP string `json:"rp"`
Epoch string `json:"epoch"`
EncodingFormat EncodingFormat `json:"encoding_format"`
ContentType string `json:"content_type"` // Content type is the desired response format.
Chunked bool `json:"chunked"` // Chunked indicates responses should be chunked using ChunkSize
ChunkSize int `json:"chunk_size"` // ChunkSize is the number of points to be encoded per batch. 0 indicates no chunking.
Query string `json:"query"` // Query contains the InfluxQL.
Params map[string]interface{} `json:"params,omitempty"`
Source string `json:"source"` // Source represents the ultimate source of the request.
}
// The HTTP query requests represented the body expected by the QueryHandler
func (r *QueryRequest) Valid() error {
if !r.OrganizationID.Valid() {
return &errors.Error{
Msg: "organization_id is not valid",
Code: errors.EInvalid,
}
}
return r.Authorization.Valid()
}