feat: add back the InfluxQL REPL (#386)

* add v1-compatible query path and refactor other paths to de-duplicate "/query"

* add initial influxQL repl

* add ping endpoint to schema

* improve prompt UX, implement some commands

* fix json column type in schema and improve completion

* feat: add table formatter and move to forked go-prompt

* improve formatting and add table pagination

* implement more REPL commands, including insert and history

* implement "INSERT INTO"

* move repl command to "v1 repl"

* refactor and improve documentation

* clean up v1_repl cmd

* update to latest openapi, use some openapi paths instead of overrides

* remove additional files that were moved to openapi

* compute historyFilePath at REPL start

* clean up REPL use command logic flow

* clean up comments for TODOs now in issues

* move gopher (chonky boi)

* remove autocompletion for separate PR

* run go mod tidy

* add rfc3339 precision option

* allow left and right column scrolling to display whole table

* add error to JSON query response

* add tags and partial to JSON response series schema

* fix csv formatting and add column formatting

* remove table format for separate PR

* fix getDatabases

* move from write to legacy write endpoint for INSERT

* remove history vestiges

* allow multiple spaces in INSERT commands

* add precision comment

* remove auth for separate PR

* separate parseInsert and add unit test

* add additional test case and improve error messages

* fix missing errors import

* print rfc3339 precision

* add rfc3339 to help output
This commit is contained in:
Andrew Lee 2022-06-10 08:54:07 -06:00 committed by GitHub
parent 51ca97ee29
commit fc529745a5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
44 changed files with 2959 additions and 305 deletions

View File

@ -208,7 +208,7 @@ func (a *AuthorizationsApiService) DeleteAuthorizationsIDExecuteWithHttpInfo(r A
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/authorizations/{authID}"
localVarPath := localBasePath + "/api/v2/authorizations/{authID}"
localVarPath = strings.Replace(localVarPath, "{"+"authID"+"}", _neturl.PathEscape(parameterToString(r.authID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -378,7 +378,7 @@ func (a *AuthorizationsApiService) GetAuthorizationsExecuteWithHttpInfo(r ApiGet
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/authorizations"
localVarPath := localBasePath + "/api/v2/authorizations"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -553,7 +553,7 @@ func (a *AuthorizationsApiService) GetAuthorizationsIDExecuteWithHttpInfo(r ApiG
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/authorizations/{authID}"
localVarPath := localBasePath + "/api/v2/authorizations/{authID}"
localVarPath = strings.Replace(localVarPath, "{"+"authID"+"}", _neturl.PathEscape(parameterToString(r.authID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -726,7 +726,7 @@ func (a *AuthorizationsApiService) PatchAuthorizationsIDExecuteWithHttpInfo(r Ap
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/authorizations/{authID}"
localVarPath := localBasePath + "/api/v2/authorizations/{authID}"
localVarPath = strings.Replace(localVarPath, "{"+"authID"+"}", _neturl.PathEscape(parameterToString(r.authID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -893,7 +893,7 @@ func (a *AuthorizationsApiService) PostAuthorizationsExecuteWithHttpInfo(r ApiPo
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/authorizations"
localVarPath := localBasePath + "/api/v2/authorizations"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}

View File

@ -159,7 +159,7 @@ func (a *BackupApiService) GetBackupKVExecuteWithHttpInfo(r ApiGetBackupKVReques
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/backup/kv"
localVarPath := localBasePath + "/api/v2/backup/kv"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -303,7 +303,7 @@ func (a *BackupApiService) GetBackupMetadataExecuteWithHttpInfo(r ApiGetBackupMe
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/backup/metadata"
localVarPath := localBasePath + "/api/v2/backup/metadata"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -470,7 +470,7 @@ func (a *BackupApiService) GetBackupShardIdExecuteWithHttpInfo(r ApiGetBackupSha
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/backup/shards/{shardID}"
localVarPath := localBasePath + "/api/v2/backup/shards/{shardID}"
localVarPath = strings.Replace(localVarPath, "{"+"shardID"+"}", _neturl.PathEscape(parameterToString(r.shardID, "")), -1)
localVarHeaderParams := make(map[string]string)

View File

@ -213,7 +213,7 @@ func (a *BucketSchemasApiService) CreateMeasurementSchemaExecuteWithHttpInfo(r A
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/buckets/{bucketID}/schema/measurements"
localVarPath := localBasePath + "/api/v2/buckets/{bucketID}/schema/measurements"
localVarPath = strings.Replace(localVarPath, "{"+"bucketID"+"}", _neturl.PathEscape(parameterToString(r.bucketID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -404,7 +404,7 @@ func (a *BucketSchemasApiService) GetMeasurementSchemaExecuteWithHttpInfo(r ApiG
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/buckets/{bucketID}/schema/measurements/{measurementID}"
localVarPath := localBasePath + "/api/v2/buckets/{bucketID}/schema/measurements/{measurementID}"
localVarPath = strings.Replace(localVarPath, "{"+"bucketID"+"}", _neturl.PathEscape(parameterToString(r.bucketID, "")), -1)
localVarPath = strings.Replace(localVarPath, "{"+"measurementID"+"}", _neturl.PathEscape(parameterToString(r.measurementID, "")), -1)
@ -582,7 +582,7 @@ func (a *BucketSchemasApiService) GetMeasurementSchemasExecuteWithHttpInfo(r Api
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/buckets/{bucketID}/schema/measurements"
localVarPath := localBasePath + "/api/v2/buckets/{bucketID}/schema/measurements"
localVarPath = strings.Replace(localVarPath, "{"+"bucketID"+"}", _neturl.PathEscape(parameterToString(r.bucketID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -783,7 +783,7 @@ func (a *BucketSchemasApiService) UpdateMeasurementSchemaExecuteWithHttpInfo(r A
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/buckets/{bucketID}/schema/measurements/{measurementID}"
localVarPath := localBasePath + "/api/v2/buckets/{bucketID}/schema/measurements/{measurementID}"
localVarPath = strings.Replace(localVarPath, "{"+"bucketID"+"}", _neturl.PathEscape(parameterToString(r.bucketID, "")), -1)
localVarPath = strings.Replace(localVarPath, "{"+"measurementID"+"}", _neturl.PathEscape(parameterToString(r.measurementID, "")), -1)

View File

@ -208,7 +208,7 @@ func (a *BucketsApiService) DeleteBucketsIDExecuteWithHttpInfo(r ApiDeleteBucket
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/buckets/{bucketID}"
localVarPath := localBasePath + "/api/v2/buckets/{bucketID}"
localVarPath = strings.Replace(localVarPath, "{"+"bucketID"+"}", _neturl.PathEscape(parameterToString(r.bucketID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -416,7 +416,7 @@ func (a *BucketsApiService) GetBucketsExecuteWithHttpInfo(r ApiGetBucketsRequest
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/buckets"
localVarPath := localBasePath + "/api/v2/buckets"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -600,7 +600,7 @@ func (a *BucketsApiService) GetBucketsIDExecuteWithHttpInfo(r ApiGetBucketsIDReq
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/buckets/{bucketID}"
localVarPath := localBasePath + "/api/v2/buckets/{bucketID}"
localVarPath = strings.Replace(localVarPath, "{"+"bucketID"+"}", _neturl.PathEscape(parameterToString(r.bucketID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -773,7 +773,7 @@ func (a *BucketsApiService) PatchBucketsIDExecuteWithHttpInfo(r ApiPatchBucketsI
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/buckets/{bucketID}"
localVarPath := localBasePath + "/api/v2/buckets/{bucketID}"
localVarPath = strings.Replace(localVarPath, "{"+"bucketID"+"}", _neturl.PathEscape(parameterToString(r.bucketID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -940,7 +940,7 @@ func (a *BucketsApiService) PostBucketsExecuteWithHttpInfo(r ApiPostBucketsReque
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/buckets"
localVarPath := localBasePath + "/api/v2/buckets"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}

View File

@ -26,10 +26,19 @@ var (
type ConfigApi interface {
/*
* GetConfig Get the run-time configuration of the instance
* @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @return ApiGetConfigRequest
*/
* GetConfig Retrieve runtime configuration
* Returns the active runtime configuration of the InfluxDB instance.
In InfluxDB v2.2+, use this endpoint to view your active runtime configuration,
including flags and environment variables.
#### Related guides
- [View your runtime server configuration]({{% INFLUXDB_DOCS_URL %}}/reference/config-options/#view-your-runtime-server-configuration)
* @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @return ApiGetConfigRequest
*/
GetConfig(ctx _context.Context) ApiGetConfigRequest
/*
@ -73,10 +82,19 @@ func (r ApiGetConfigRequest) ExecuteWithHttpInfo() (Config, *_nethttp.Response,
}
/*
* GetConfig Get the run-time configuration of the instance
* GetConfig Retrieve runtime configuration
* Returns the active runtime configuration of the InfluxDB instance.
In InfluxDB v2.2+, use this endpoint to view your active runtime configuration,
including flags and environment variables.
#### Related guides
- [View your runtime server configuration]({{% INFLUXDB_DOCS_URL %}}/reference/config-options/#view-your-runtime-server-configuration)
* @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @return ApiGetConfigRequest
*/
*/
func (a *ConfigApiService) GetConfig(ctx _context.Context) ApiGetConfigRequest {
return ApiGetConfigRequest{
ApiService: a,
@ -114,7 +132,7 @@ func (a *ConfigApiService) GetConfigExecuteWithHttpInfo(r ApiGetConfigRequest) (
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/config"
localVarPath := localBasePath + "/api/v2/config"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}

View File

@ -187,7 +187,7 @@ func (a *DashboardsApiService) GetDashboardsExecuteWithHttpInfo(r ApiGetDashboar
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/dashboards"
localVarPath := localBasePath + "/api/v2/dashboards"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}

View File

@ -226,7 +226,7 @@ func (a *DBRPsApiService) DeleteDBRPIDExecuteWithHttpInfo(r ApiDeleteDBRPIDReque
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/dbrps/{dbrpID}"
localVarPath := localBasePath + "/api/v2/dbrps/{dbrpID}"
localVarPath = strings.Replace(localVarPath, "{"+"dbrpID"+"}", _neturl.PathEscape(parameterToString(r.dbrpID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -440,7 +440,7 @@ func (a *DBRPsApiService) GetDBRPsExecuteWithHttpInfo(r ApiGetDBRPsRequest) (DBR
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/dbrps"
localVarPath := localBasePath + "/api/v2/dbrps"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -653,7 +653,7 @@ func (a *DBRPsApiService) GetDBRPsIDExecuteWithHttpInfo(r ApiGetDBRPsIDRequest)
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/dbrps/{dbrpID}"
localVarPath := localBasePath + "/api/v2/dbrps/{dbrpID}"
localVarPath = strings.Replace(localVarPath, "{"+"dbrpID"+"}", _neturl.PathEscape(parameterToString(r.dbrpID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -861,7 +861,7 @@ func (a *DBRPsApiService) PatchDBRPIDExecuteWithHttpInfo(r ApiPatchDBRPIDRequest
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/dbrps/{dbrpID}"
localVarPath := localBasePath + "/api/v2/dbrps/{dbrpID}"
localVarPath = strings.Replace(localVarPath, "{"+"dbrpID"+"}", _neturl.PathEscape(parameterToString(r.dbrpID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -1056,7 +1056,7 @@ func (a *DBRPsApiService) PostDBRPExecuteWithHttpInfo(r ApiPostDBRPRequest) (DBR
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/dbrps"
localVarPath := localBasePath + "/api/v2/dbrps"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}

View File

@ -26,10 +26,45 @@ var (
type DeleteApi interface {
/*
* PostDelete Delete data
* @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @return ApiPostDeleteRequest
*/
* PostDelete Delete data
* Deletes data from a bucket.
Use this endpoint to delete points from a bucket in a specified time range.
#### InfluxDB Cloud
- Does the following when you send a delete request:
1. Validates the request and queues the delete.
2. Returns _success_ if queued; _error_ otherwise.
3. Handles the delete asynchronously.
#### InfluxDB OSS
- Validates the request, handles the delete synchronously,
and then responds with success or failure.
#### Required permissions
- `write-buckets` or `write-bucket BUCKET_ID`.
`BUCKET_ID` is the ID of the destination bucket.
#### Rate limits (with InfluxDB Cloud)
`write` rate limits apply.
For more information, see [limits and adjustable quotas](https://docs.influxdata.com/influxdb/cloud/account-management/limits/).
#### Related guides
- [Delete data]({{% INFLUXDB_DOCS_URL %}}/write-data/delete-data/).
- Learn how to use [delete predicate syntax]({{% INFLUXDB_DOCS_URL %}}/reference/syntax/delete-predicate/).
- Learn how InfluxDB handles [deleted tags](https://docs.influxdata.com/flux/v0.x/stdlib/influxdata/influxdb/schema/measurementtagkeys/)
and [deleted fields](https://docs.influxdata.com/flux/v0.x/stdlib/influxdata/influxdb/schema/measurementfieldkeys/).
* @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @return ApiPostDeleteRequest
*/
PostDelete(ctx _context.Context) ApiPostDeleteRequest
/*
@ -117,9 +152,44 @@ func (r ApiPostDeleteRequest) ExecuteWithHttpInfo() (*_nethttp.Response, error)
/*
* PostDelete Delete data
* Deletes data from a bucket.
Use this endpoint to delete points from a bucket in a specified time range.
#### InfluxDB Cloud
- Does the following when you send a delete request:
1. Validates the request and queues the delete.
2. Returns _success_ if queued; _error_ otherwise.
3. Handles the delete asynchronously.
#### InfluxDB OSS
- Validates the request, handles the delete synchronously,
and then responds with success or failure.
#### Required permissions
- `write-buckets` or `write-bucket BUCKET_ID`.
`BUCKET_ID` is the ID of the destination bucket.
#### Rate limits (with InfluxDB Cloud)
`write` rate limits apply.
For more information, see [limits and adjustable quotas](https://docs.influxdata.com/influxdb/cloud/account-management/limits/).
#### Related guides
- [Delete data]({{% INFLUXDB_DOCS_URL %}}/write-data/delete-data/).
- Learn how to use [delete predicate syntax]({{% INFLUXDB_DOCS_URL %}}/reference/syntax/delete-predicate/).
- Learn how InfluxDB handles [deleted tags](https://docs.influxdata.com/flux/v0.x/stdlib/influxdata/influxdb/schema/measurementtagkeys/)
and [deleted fields](https://docs.influxdata.com/flux/v0.x/stdlib/influxdata/influxdb/schema/measurementfieldkeys/).
* @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @return ApiPostDeleteRequest
*/
*/
func (a *DeleteApiService) PostDelete(ctx _context.Context) ApiPostDeleteRequest {
return ApiPostDeleteRequest{
ApiService: a,
@ -154,7 +224,7 @@ func (a *DeleteApiService) PostDeleteExecuteWithHttpInfo(r ApiPostDeleteRequest)
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/delete"
localVarPath := localBasePath + "/api/v2/delete"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -237,28 +307,6 @@ func (a *DeleteApiService) PostDeleteExecuteWithHttpInfo(r ApiPostDeleteRequest)
newErr.model = &v
return localVarHTTPResponse, newErr
}
if localVarHTTPResponse.StatusCode == 403 {
var v Error
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
if err != nil {
newErr.error = _fmt.Sprintf("%s: %s", newErr.Error(), err.Error())
return localVarHTTPResponse, newErr
}
v.SetMessage(_fmt.Sprintf("%s: %s", newErr.Error(), v.GetMessage()))
newErr.model = &v
return localVarHTTPResponse, newErr
}
if localVarHTTPResponse.StatusCode == 404 {
var v Error
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
if err != nil {
newErr.error = _fmt.Sprintf("%s: %s", newErr.Error(), err.Error())
return localVarHTTPResponse, newErr
}
v.SetMessage(_fmt.Sprintf("%s: %s", newErr.Error(), v.GetMessage()))
newErr.model = &v
return localVarHTTPResponse, newErr
}
var v Error
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
if err != nil {

View File

@ -26,7 +26,8 @@ var (
type HealthApi interface {
/*
* GetHealth Get the health of an instance
* GetHealth Retrieve the health of the instance
* Returns the health of the instance.
* @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @return ApiGetHealthRequest
*/
@ -73,7 +74,8 @@ func (r ApiGetHealthRequest) ExecuteWithHttpInfo() (HealthCheck, *_nethttp.Respo
}
/*
* GetHealth Get the health of an instance
* GetHealth Retrieve the health of the instance
* Returns the health of the instance.
* @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @return ApiGetHealthRequest
*/

View File

@ -228,7 +228,7 @@ func (a *LegacyAuthorizationsApiService) DeleteLegacyAuthorizationsIDExecuteWith
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/legacy/authorizations/{authID}"
localVarPath := localBasePath + "/private/legacy/authorizations/{authID}"
localVarPath = strings.Replace(localVarPath, "{"+"authID"+"}", _neturl.PathEscape(parameterToString(r.authID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -416,7 +416,7 @@ func (a *LegacyAuthorizationsApiService) GetLegacyAuthorizationsExecuteWithHttpI
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/legacy/authorizations"
localVarPath := localBasePath + "/private/legacy/authorizations"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -597,7 +597,7 @@ func (a *LegacyAuthorizationsApiService) GetLegacyAuthorizationsIDExecuteWithHtt
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/legacy/authorizations/{authID}"
localVarPath := localBasePath + "/private/legacy/authorizations/{authID}"
localVarPath = strings.Replace(localVarPath, "{"+"authID"+"}", _neturl.PathEscape(parameterToString(r.authID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -770,7 +770,7 @@ func (a *LegacyAuthorizationsApiService) PatchLegacyAuthorizationsIDExecuteWithH
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/legacy/authorizations/{authID}"
localVarPath := localBasePath + "/private/legacy/authorizations/{authID}"
localVarPath = strings.Replace(localVarPath, "{"+"authID"+"}", _neturl.PathEscape(parameterToString(r.authID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -937,7 +937,7 @@ func (a *LegacyAuthorizationsApiService) PostLegacyAuthorizationsExecuteWithHttp
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/legacy/authorizations"
localVarPath := localBasePath + "/private/legacy/authorizations"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -1122,7 +1122,7 @@ func (a *LegacyAuthorizationsApiService) PostLegacyAuthorizationsIDPasswordExecu
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/legacy/authorizations/{authID}/password"
localVarPath := localBasePath + "/private/legacy/authorizations/{authID}/password"
localVarPath = strings.Replace(localVarPath, "{"+"authID"+"}", _neturl.PathEscape(parameterToString(r.authID, "")), -1)
localVarHeaderParams := make(map[string]string)

315
api/api_legacy_query.gen.go Normal file
View File

@ -0,0 +1,315 @@
/*
* Subset of Influx API covered by Influx CLI
*
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
*
* API version: 2.0.0
*/
// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
package api
import (
_context "context"
_fmt "fmt"
_io "io"
_nethttp "net/http"
_neturl "net/url"
)
// Linger please
var (
_ _context.Context
)
type LegacyQueryApi interface {
/*
* GetLegacyQuery Query with the 1.x compatibility API
* Queries InfluxDB using InfluxQL.
* @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @return ApiGetLegacyQueryRequest
*/
GetLegacyQuery(ctx _context.Context) ApiGetLegacyQueryRequest
/*
* GetLegacyQueryExecute executes the request
* @return string
*/
GetLegacyQueryExecute(r ApiGetLegacyQueryRequest) (string, error)
/*
* GetLegacyQueryExecuteWithHttpInfo executes the request with HTTP response info returned. The response body is not
* available on the returned HTTP response as it will have already been read and closed; access to the response body
* content should be achieved through the returned response model if applicable.
* @return string
*/
GetLegacyQueryExecuteWithHttpInfo(r ApiGetLegacyQueryRequest) (string, *_nethttp.Response, error)
}
// LegacyQueryApiService LegacyQueryApi service
type LegacyQueryApiService service
type ApiGetLegacyQueryRequest struct {
ctx _context.Context
ApiService LegacyQueryApi
db *string
q *string
zapTraceSpan *string
accept *string
acceptEncoding *string
contentType *string
u *string
p *string
rp *string
epoch *string
}
func (r ApiGetLegacyQueryRequest) Db(db string) ApiGetLegacyQueryRequest {
r.db = &db
return r
}
func (r ApiGetLegacyQueryRequest) GetDb() *string {
return r.db
}
func (r ApiGetLegacyQueryRequest) Q(q string) ApiGetLegacyQueryRequest {
r.q = &q
return r
}
func (r ApiGetLegacyQueryRequest) GetQ() *string {
return r.q
}
func (r ApiGetLegacyQueryRequest) ZapTraceSpan(zapTraceSpan string) ApiGetLegacyQueryRequest {
r.zapTraceSpan = &zapTraceSpan
return r
}
func (r ApiGetLegacyQueryRequest) GetZapTraceSpan() *string {
return r.zapTraceSpan
}
func (r ApiGetLegacyQueryRequest) Accept(accept string) ApiGetLegacyQueryRequest {
r.accept = &accept
return r
}
func (r ApiGetLegacyQueryRequest) GetAccept() *string {
return r.accept
}
func (r ApiGetLegacyQueryRequest) AcceptEncoding(acceptEncoding string) ApiGetLegacyQueryRequest {
r.acceptEncoding = &acceptEncoding
return r
}
func (r ApiGetLegacyQueryRequest) GetAcceptEncoding() *string {
return r.acceptEncoding
}
func (r ApiGetLegacyQueryRequest) ContentType(contentType string) ApiGetLegacyQueryRequest {
r.contentType = &contentType
return r
}
func (r ApiGetLegacyQueryRequest) GetContentType() *string {
return r.contentType
}
func (r ApiGetLegacyQueryRequest) U(u string) ApiGetLegacyQueryRequest {
r.u = &u
return r
}
func (r ApiGetLegacyQueryRequest) GetU() *string {
return r.u
}
func (r ApiGetLegacyQueryRequest) P(p string) ApiGetLegacyQueryRequest {
r.p = &p
return r
}
func (r ApiGetLegacyQueryRequest) GetP() *string {
return r.p
}
func (r ApiGetLegacyQueryRequest) Rp(rp string) ApiGetLegacyQueryRequest {
r.rp = &rp
return r
}
func (r ApiGetLegacyQueryRequest) GetRp() *string {
return r.rp
}
func (r ApiGetLegacyQueryRequest) Epoch(epoch string) ApiGetLegacyQueryRequest {
r.epoch = &epoch
return r
}
func (r ApiGetLegacyQueryRequest) GetEpoch() *string {
return r.epoch
}
func (r ApiGetLegacyQueryRequest) Execute() (string, error) {
return r.ApiService.GetLegacyQueryExecute(r)
}
func (r ApiGetLegacyQueryRequest) ExecuteWithHttpInfo() (string, *_nethttp.Response, error) {
return r.ApiService.GetLegacyQueryExecuteWithHttpInfo(r)
}
/*
* GetLegacyQuery Query with the 1.x compatibility API
* Queries InfluxDB using InfluxQL.
* @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @return ApiGetLegacyQueryRequest
*/
func (a *LegacyQueryApiService) GetLegacyQuery(ctx _context.Context) ApiGetLegacyQueryRequest {
return ApiGetLegacyQueryRequest{
ApiService: a,
ctx: ctx,
}
}
/*
* Execute executes the request
* @return string
*/
func (a *LegacyQueryApiService) GetLegacyQueryExecute(r ApiGetLegacyQueryRequest) (string, error) {
returnVal, _, err := a.GetLegacyQueryExecuteWithHttpInfo(r)
return returnVal, err
}
/*
* ExecuteWithHttpInfo executes the request with HTTP response info returned. The response body is not available on the
* returned HTTP response as it will have already been read and closed; access to the response body content should be
* achieved through the returned response model if applicable.
* @return string
*/
func (a *LegacyQueryApiService) GetLegacyQueryExecuteWithHttpInfo(r ApiGetLegacyQueryRequest) (string, *_nethttp.Response, error) {
var (
localVarHTTPMethod = _nethttp.MethodGet
localVarPostBody interface{}
localVarFormFileName string
localVarFileName string
localVarFileBytes []byte
localVarReturnValue string
)
localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "LegacyQueryApiService.GetLegacyQuery")
if err != nil {
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/query"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
localVarFormParams := _neturl.Values{}
if r.db == nil {
return localVarReturnValue, nil, reportError("db is required and must be specified")
}
if r.q == nil {
return localVarReturnValue, nil, reportError("q is required and must be specified")
}
if r.u != nil {
localVarQueryParams.Add("u", parameterToString(*r.u, ""))
}
if r.p != nil {
localVarQueryParams.Add("p", parameterToString(*r.p, ""))
}
localVarQueryParams.Add("db", parameterToString(*r.db, ""))
if r.rp != nil {
localVarQueryParams.Add("rp", parameterToString(*r.rp, ""))
}
localVarQueryParams.Add("q", parameterToString(*r.q, ""))
if r.epoch != nil {
localVarQueryParams.Add("epoch", parameterToString(*r.epoch, ""))
}
// to determine the Content-Type header
localVarHTTPContentTypes := []string{}
// set Content-Type header
localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
if localVarHTTPContentType != "" {
localVarHeaderParams["Content-Type"] = localVarHTTPContentType
}
// to determine the Accept header
localVarHTTPHeaderAccepts := []string{"text/csv", "application/csv", "application/json", "application/x-msgpack"}
// set Accept header
localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
if localVarHTTPHeaderAccept != "" {
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
}
if r.zapTraceSpan != nil {
localVarHeaderParams["Zap-Trace-Span"] = parameterToString(*r.zapTraceSpan, "")
}
if r.accept != nil {
localVarHeaderParams["Accept"] = parameterToString(*r.accept, "")
}
if r.acceptEncoding != nil {
localVarHeaderParams["Accept-Encoding"] = parameterToString(*r.acceptEncoding, "")
}
if r.contentType != nil {
localVarHeaderParams["Content-Type"] = parameterToString(*r.contentType, "")
}
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFormFileName, localVarFileName, localVarFileBytes)
if err != nil {
return localVarReturnValue, nil, err
}
localVarHTTPResponse, err := a.client.callAPI(req)
if err != nil || localVarHTTPResponse == nil {
return localVarReturnValue, localVarHTTPResponse, err
}
newErr := GenericOpenAPIError{
buildHeader: localVarHTTPResponse.Header.Get("X-Influxdb-Build"),
}
if localVarHTTPResponse.StatusCode >= 300 {
body, err := GunzipIfNeeded(localVarHTTPResponse)
if err != nil {
body.Close()
newErr.error = err.Error()
return localVarReturnValue, localVarHTTPResponse, newErr
}
localVarBody, err := _io.ReadAll(body)
body.Close()
if err != nil {
newErr.error = err.Error()
return localVarReturnValue, localVarHTTPResponse, newErr
}
newErr.body = localVarBody
newErr.error = localVarHTTPResponse.Status
var v Error
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
if err != nil {
newErr.error = _fmt.Sprintf("%s: %s", newErr.Error(), err.Error())
return localVarReturnValue, localVarHTTPResponse, newErr
}
v.SetMessage(_fmt.Sprintf("%s: %s", newErr.Error(), v.GetMessage()))
newErr.model = &v
return localVarReturnValue, localVarHTTPResponse, newErr
}
body, err := GunzipIfNeeded(localVarHTTPResponse)
if err != nil {
body.Close()
newErr.error = err.Error()
return localVarReturnValue, localVarHTTPResponse, newErr
}
localVarBody, err := _io.ReadAll(body)
body.Close()
if err != nil {
newErr.error = err.Error()
return localVarReturnValue, localVarHTTPResponse, newErr
}
newErr.body = localVarBody
err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
if err != nil {
newErr.error = err.Error()
return localVarReturnValue, localVarHTTPResponse, newErr
}
return localVarReturnValue, localVarHTTPResponse, nil
}

310
api/api_legacy_write.gen.go Normal file
View File

@ -0,0 +1,310 @@
/*
* Subset of Influx API covered by Influx CLI
*
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
*
* API version: 2.0.0
*/
// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
package api
import (
_context "context"
_fmt "fmt"
_io "io"
_nethttp "net/http"
_neturl "net/url"
)
// Linger please
var (
_ _context.Context
)
type LegacyWriteApi interface {
/*
* PostLegacyWrite Write time series data into InfluxDB in a V1-compatible format
* @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @return ApiPostLegacyWriteRequest
*/
PostLegacyWrite(ctx _context.Context) ApiPostLegacyWriteRequest
/*
* PostLegacyWriteExecute executes the request
*/
PostLegacyWriteExecute(r ApiPostLegacyWriteRequest) error
/*
* PostLegacyWriteExecuteWithHttpInfo executes the request with HTTP response info returned. The response body is not
* available on the returned HTTP response as it will have already been read and closed; access to the response body
* content should be achieved through the returned response model if applicable.
*/
PostLegacyWriteExecuteWithHttpInfo(r ApiPostLegacyWriteRequest) (*_nethttp.Response, error)
}
// LegacyWriteApiService LegacyWriteApi service
type LegacyWriteApiService service
type ApiPostLegacyWriteRequest struct {
ctx _context.Context
ApiService LegacyWriteApi
db *string
body *string
zapTraceSpan *string
u *string
p *string
rp *string
precision *string
contentEncoding *string
}
func (r ApiPostLegacyWriteRequest) Db(db string) ApiPostLegacyWriteRequest {
r.db = &db
return r
}
func (r ApiPostLegacyWriteRequest) GetDb() *string {
return r.db
}
func (r ApiPostLegacyWriteRequest) Body(body string) ApiPostLegacyWriteRequest {
r.body = &body
return r
}
func (r ApiPostLegacyWriteRequest) GetBody() *string {
return r.body
}
func (r ApiPostLegacyWriteRequest) ZapTraceSpan(zapTraceSpan string) ApiPostLegacyWriteRequest {
r.zapTraceSpan = &zapTraceSpan
return r
}
func (r ApiPostLegacyWriteRequest) GetZapTraceSpan() *string {
return r.zapTraceSpan
}
func (r ApiPostLegacyWriteRequest) U(u string) ApiPostLegacyWriteRequest {
r.u = &u
return r
}
func (r ApiPostLegacyWriteRequest) GetU() *string {
return r.u
}
func (r ApiPostLegacyWriteRequest) P(p string) ApiPostLegacyWriteRequest {
r.p = &p
return r
}
func (r ApiPostLegacyWriteRequest) GetP() *string {
return r.p
}
func (r ApiPostLegacyWriteRequest) Rp(rp string) ApiPostLegacyWriteRequest {
r.rp = &rp
return r
}
func (r ApiPostLegacyWriteRequest) GetRp() *string {
return r.rp
}
func (r ApiPostLegacyWriteRequest) Precision(precision string) ApiPostLegacyWriteRequest {
r.precision = &precision
return r
}
func (r ApiPostLegacyWriteRequest) GetPrecision() *string {
return r.precision
}
func (r ApiPostLegacyWriteRequest) ContentEncoding(contentEncoding string) ApiPostLegacyWriteRequest {
r.contentEncoding = &contentEncoding
return r
}
func (r ApiPostLegacyWriteRequest) GetContentEncoding() *string {
return r.contentEncoding
}
func (r ApiPostLegacyWriteRequest) Execute() error {
return r.ApiService.PostLegacyWriteExecute(r)
}
func (r ApiPostLegacyWriteRequest) ExecuteWithHttpInfo() (*_nethttp.Response, error) {
return r.ApiService.PostLegacyWriteExecuteWithHttpInfo(r)
}
/*
* PostLegacyWrite Write time series data into InfluxDB in a V1-compatible format
* @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @return ApiPostLegacyWriteRequest
*/
func (a *LegacyWriteApiService) PostLegacyWrite(ctx _context.Context) ApiPostLegacyWriteRequest {
return ApiPostLegacyWriteRequest{
ApiService: a,
ctx: ctx,
}
}
/*
* Execute executes the request
*/
func (a *LegacyWriteApiService) PostLegacyWriteExecute(r ApiPostLegacyWriteRequest) error {
_, err := a.PostLegacyWriteExecuteWithHttpInfo(r)
return err
}
/*
* ExecuteWithHttpInfo executes the request with HTTP response info returned. The response body is not available on the
* returned HTTP response as it will have already been read and closed; access to the response body content should be
* achieved through the returned response model if applicable.
*/
func (a *LegacyWriteApiService) PostLegacyWriteExecuteWithHttpInfo(r ApiPostLegacyWriteRequest) (*_nethttp.Response, error) {
var (
localVarHTTPMethod = _nethttp.MethodPost
localVarPostBody interface{}
localVarFormFileName string
localVarFileName string
localVarFileBytes []byte
)
localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "LegacyWriteApiService.PostLegacyWrite")
if err != nil {
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/write"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
localVarFormParams := _neturl.Values{}
if r.db == nil {
return nil, reportError("db is required and must be specified")
}
if r.body == nil {
return nil, reportError("body is required and must be specified")
}
if r.u != nil {
localVarQueryParams.Add("u", parameterToString(*r.u, ""))
}
if r.p != nil {
localVarQueryParams.Add("p", parameterToString(*r.p, ""))
}
localVarQueryParams.Add("db", parameterToString(*r.db, ""))
if r.rp != nil {
localVarQueryParams.Add("rp", parameterToString(*r.rp, ""))
}
if r.precision != nil {
localVarQueryParams.Add("precision", parameterToString(*r.precision, ""))
}
// to determine the Content-Type header
localVarHTTPContentTypes := []string{"text/plain"}
// set Content-Type header
localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
if localVarHTTPContentType != "" {
localVarHeaderParams["Content-Type"] = localVarHTTPContentType
}
// to determine the Accept header
localVarHTTPHeaderAccepts := []string{"application/json"}
// set Accept header
localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
if localVarHTTPHeaderAccept != "" {
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
}
if r.zapTraceSpan != nil {
localVarHeaderParams["Zap-Trace-Span"] = parameterToString(*r.zapTraceSpan, "")
}
if r.contentEncoding != nil {
localVarHeaderParams["Content-Encoding"] = parameterToString(*r.contentEncoding, "")
}
// body params
localVarPostBody = r.body
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFormFileName, localVarFileName, localVarFileBytes)
if err != nil {
return nil, err
}
localVarHTTPResponse, err := a.client.callAPI(req)
if err != nil || localVarHTTPResponse == nil {
return localVarHTTPResponse, err
}
newErr := GenericOpenAPIError{
buildHeader: localVarHTTPResponse.Header.Get("X-Influxdb-Build"),
}
if localVarHTTPResponse.StatusCode >= 300 {
body, err := GunzipIfNeeded(localVarHTTPResponse)
if err != nil {
body.Close()
newErr.error = err.Error()
return localVarHTTPResponse, newErr
}
localVarBody, err := _io.ReadAll(body)
body.Close()
if err != nil {
newErr.error = err.Error()
return localVarHTTPResponse, newErr
}
newErr.body = localVarBody
newErr.error = localVarHTTPResponse.Status
if localVarHTTPResponse.StatusCode == 400 {
var v LineProtocolError
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
if err != nil {
newErr.error = _fmt.Sprintf("%s: %s", newErr.Error(), err.Error())
return localVarHTTPResponse, newErr
}
v.SetMessage(_fmt.Sprintf("%s: %s", newErr.Error(), v.GetMessage()))
newErr.model = &v
return localVarHTTPResponse, newErr
}
if localVarHTTPResponse.StatusCode == 401 {
var v Error
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
if err != nil {
newErr.error = _fmt.Sprintf("%s: %s", newErr.Error(), err.Error())
return localVarHTTPResponse, newErr
}
v.SetMessage(_fmt.Sprintf("%s: %s", newErr.Error(), v.GetMessage()))
newErr.model = &v
return localVarHTTPResponse, newErr
}
if localVarHTTPResponse.StatusCode == 403 {
var v Error
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
if err != nil {
newErr.error = _fmt.Sprintf("%s: %s", newErr.Error(), err.Error())
return localVarHTTPResponse, newErr
}
v.SetMessage(_fmt.Sprintf("%s: %s", newErr.Error(), v.GetMessage()))
newErr.model = &v
return localVarHTTPResponse, newErr
}
if localVarHTTPResponse.StatusCode == 413 {
var v LineProtocolLengthError
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
if err != nil {
newErr.error = _fmt.Sprintf("%s: %s", newErr.Error(), err.Error())
return localVarHTTPResponse, newErr
}
v.SetMessage(_fmt.Sprintf("%s: %s", newErr.Error(), v.GetMessage()))
newErr.model = &v
return localVarHTTPResponse, newErr
}
var v Error
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
if err != nil {
newErr.error = _fmt.Sprintf("%s: %s", newErr.Error(), err.Error())
return localVarHTTPResponse, newErr
}
v.SetMessage(_fmt.Sprintf("%s: %s", newErr.Error(), v.GetMessage()))
newErr.model = &v
return localVarHTTPResponse, newErr
}
return localVarHTTPResponse, nil
}

View File

@ -273,7 +273,7 @@ func (a *OrganizationsApiService) DeleteOrgsIDExecuteWithHttpInfo(r ApiDeleteOrg
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/orgs/{orgID}"
localVarPath := localBasePath + "/api/v2/orgs/{orgID}"
localVarPath = strings.Replace(localVarPath, "{"+"orgID"+"}", _neturl.PathEscape(parameterToString(r.orgID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -437,7 +437,7 @@ func (a *OrganizationsApiService) DeleteOrgsIDMembersIDExecuteWithHttpInfo(r Api
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/orgs/{orgID}/members/{userID}"
localVarPath := localBasePath + "/api/v2/orgs/{orgID}/members/{userID}"
localVarPath = strings.Replace(localVarPath, "{"+"userID"+"}", _neturl.PathEscape(parameterToString(r.userID, "")), -1)
localVarPath = strings.Replace(localVarPath, "{"+"orgID"+"}", _neturl.PathEscape(parameterToString(r.orgID, "")), -1)
@ -626,7 +626,7 @@ func (a *OrganizationsApiService) GetOrgsExecuteWithHttpInfo(r ApiGetOrgsRequest
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/orgs"
localVarPath := localBasePath + "/api/v2/orgs"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -807,7 +807,7 @@ func (a *OrganizationsApiService) GetOrgsIDExecuteWithHttpInfo(r ApiGetOrgsIDReq
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/orgs/{orgID}"
localVarPath := localBasePath + "/api/v2/orgs/{orgID}"
localVarPath = strings.Replace(localVarPath, "{"+"orgID"+"}", _neturl.PathEscape(parameterToString(r.orgID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -971,7 +971,7 @@ func (a *OrganizationsApiService) GetOrgsIDMembersExecuteWithHttpInfo(r ApiGetOr
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/orgs/{orgID}/members"
localVarPath := localBasePath + "/api/v2/orgs/{orgID}/members"
localVarPath = strings.Replace(localVarPath, "{"+"orgID"+"}", _neturl.PathEscape(parameterToString(r.orgID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -1155,7 +1155,7 @@ func (a *OrganizationsApiService) PatchOrgsIDExecuteWithHttpInfo(r ApiPatchOrgsI
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/orgs/{orgID}"
localVarPath := localBasePath + "/api/v2/orgs/{orgID}"
localVarPath = strings.Replace(localVarPath, "{"+"orgID"+"}", _neturl.PathEscape(parameterToString(r.orgID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -1322,7 +1322,7 @@ func (a *OrganizationsApiService) PostOrgsExecuteWithHttpInfo(r ApiPostOrgsReque
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/orgs"
localVarPath := localBasePath + "/api/v2/orgs"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -1499,7 +1499,7 @@ func (a *OrganizationsApiService) PostOrgsIDMembersExecuteWithHttpInfo(r ApiPost
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/orgs/{orgID}/members"
localVarPath := localBasePath + "/api/v2/orgs/{orgID}/members"
localVarPath = strings.Replace(localVarPath, "{"+"orgID"+"}", _neturl.PathEscape(parameterToString(r.orgID, "")), -1)
localVarHeaderParams := make(map[string]string)

291
api/api_ping.gen.go Normal file
View File

@ -0,0 +1,291 @@
/*
* Subset of Influx API covered by Influx CLI
*
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
*
* API version: 2.0.0
*/
// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
package api
import (
_context "context"
_io "io"
_nethttp "net/http"
_neturl "net/url"
)
// Linger please
var (
_ _context.Context
)
type PingApi interface {
/*
* GetPing Get the status and version of the instance
* Returns the status and InfluxDB version of the instance.
* @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @return ApiGetPingRequest
*/
GetPing(ctx _context.Context) ApiGetPingRequest
/*
* GetPingExecute executes the request
*/
GetPingExecute(r ApiGetPingRequest) error
/*
* GetPingExecuteWithHttpInfo executes the request with HTTP response info returned. The response body is not
* available on the returned HTTP response as it will have already been read and closed; access to the response body
* content should be achieved through the returned response model if applicable.
*/
GetPingExecuteWithHttpInfo(r ApiGetPingRequest) (*_nethttp.Response, error)
/*
* HeadPing Get the status and version of the instance
* Returns the status and InfluxDB version of the instance.
* @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @return ApiHeadPingRequest
*/
HeadPing(ctx _context.Context) ApiHeadPingRequest
/*
* HeadPingExecute executes the request
*/
HeadPingExecute(r ApiHeadPingRequest) error
/*
* HeadPingExecuteWithHttpInfo executes the request with HTTP response info returned. The response body is not
* available on the returned HTTP response as it will have already been read and closed; access to the response body
* content should be achieved through the returned response model if applicable.
*/
HeadPingExecuteWithHttpInfo(r ApiHeadPingRequest) (*_nethttp.Response, error)
}
// PingApiService PingApi service
type PingApiService service
type ApiGetPingRequest struct {
ctx _context.Context
ApiService PingApi
}
func (r ApiGetPingRequest) Execute() error {
return r.ApiService.GetPingExecute(r)
}
func (r ApiGetPingRequest) ExecuteWithHttpInfo() (*_nethttp.Response, error) {
return r.ApiService.GetPingExecuteWithHttpInfo(r)
}
/*
* GetPing Get the status and version of the instance
* Returns the status and InfluxDB version of the instance.
* @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @return ApiGetPingRequest
*/
func (a *PingApiService) GetPing(ctx _context.Context) ApiGetPingRequest {
return ApiGetPingRequest{
ApiService: a,
ctx: ctx,
}
}
/*
* Execute executes the request
*/
func (a *PingApiService) GetPingExecute(r ApiGetPingRequest) error {
_, err := a.GetPingExecuteWithHttpInfo(r)
return err
}
/*
* ExecuteWithHttpInfo executes the request with HTTP response info returned. The response body is not available on the
* returned HTTP response as it will have already been read and closed; access to the response body content should be
* achieved through the returned response model if applicable.
*/
func (a *PingApiService) GetPingExecuteWithHttpInfo(r ApiGetPingRequest) (*_nethttp.Response, error) {
var (
localVarHTTPMethod = _nethttp.MethodGet
localVarPostBody interface{}
localVarFormFileName string
localVarFileName string
localVarFileBytes []byte
)
localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "PingApiService.GetPing")
if err != nil {
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/ping"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
localVarFormParams := _neturl.Values{}
// to determine the Content-Type header
localVarHTTPContentTypes := []string{}
// set Content-Type header
localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
if localVarHTTPContentType != "" {
localVarHeaderParams["Content-Type"] = localVarHTTPContentType
}
// to determine the Accept header
localVarHTTPHeaderAccepts := []string{}
// set Accept header
localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
if localVarHTTPHeaderAccept != "" {
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
}
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFormFileName, localVarFileName, localVarFileBytes)
if err != nil {
return nil, err
}
localVarHTTPResponse, err := a.client.callAPI(req)
if err != nil || localVarHTTPResponse == nil {
return localVarHTTPResponse, err
}
newErr := GenericOpenAPIError{
buildHeader: localVarHTTPResponse.Header.Get("X-Influxdb-Build"),
}
if localVarHTTPResponse.StatusCode >= 300 {
body, err := GunzipIfNeeded(localVarHTTPResponse)
if err != nil {
body.Close()
newErr.error = err.Error()
return localVarHTTPResponse, newErr
}
localVarBody, err := _io.ReadAll(body)
body.Close()
if err != nil {
newErr.error = err.Error()
return localVarHTTPResponse, newErr
}
newErr.body = localVarBody
newErr.error = localVarHTTPResponse.Status
return localVarHTTPResponse, newErr
}
return localVarHTTPResponse, nil
}
type ApiHeadPingRequest struct {
ctx _context.Context
ApiService PingApi
}
func (r ApiHeadPingRequest) Execute() error {
return r.ApiService.HeadPingExecute(r)
}
func (r ApiHeadPingRequest) ExecuteWithHttpInfo() (*_nethttp.Response, error) {
return r.ApiService.HeadPingExecuteWithHttpInfo(r)
}
/*
* HeadPing Get the status and version of the instance
* Returns the status and InfluxDB version of the instance.
* @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @return ApiHeadPingRequest
*/
func (a *PingApiService) HeadPing(ctx _context.Context) ApiHeadPingRequest {
return ApiHeadPingRequest{
ApiService: a,
ctx: ctx,
}
}
/*
* Execute executes the request
*/
func (a *PingApiService) HeadPingExecute(r ApiHeadPingRequest) error {
_, err := a.HeadPingExecuteWithHttpInfo(r)
return err
}
/*
* ExecuteWithHttpInfo executes the request with HTTP response info returned. The response body is not available on the
* returned HTTP response as it will have already been read and closed; access to the response body content should be
* achieved through the returned response model if applicable.
*/
func (a *PingApiService) HeadPingExecuteWithHttpInfo(r ApiHeadPingRequest) (*_nethttp.Response, error) {
var (
localVarHTTPMethod = _nethttp.MethodHead
localVarPostBody interface{}
localVarFormFileName string
localVarFileName string
localVarFileBytes []byte
)
localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "PingApiService.HeadPing")
if err != nil {
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/ping"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
localVarFormParams := _neturl.Values{}
// to determine the Content-Type header
localVarHTTPContentTypes := []string{}
// set Content-Type header
localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
if localVarHTTPContentType != "" {
localVarHeaderParams["Content-Type"] = localVarHTTPContentType
}
// to determine the Accept header
localVarHTTPHeaderAccepts := []string{}
// set Accept header
localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
if localVarHTTPHeaderAccept != "" {
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
}
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFormFileName, localVarFileName, localVarFileBytes)
if err != nil {
return nil, err
}
localVarHTTPResponse, err := a.client.callAPI(req)
if err != nil || localVarHTTPResponse == nil {
return localVarHTTPResponse, err
}
newErr := GenericOpenAPIError{
buildHeader: localVarHTTPResponse.Header.Get("X-Influxdb-Build"),
}
if localVarHTTPResponse.StatusCode >= 300 {
body, err := GunzipIfNeeded(localVarHTTPResponse)
if err != nil {
body.Close()
newErr.error = err.Error()
return localVarHTTPResponse, newErr
}
localVarBody, err := _io.ReadAll(body)
body.Close()
if err != nil {
newErr.error = err.Error()
return localVarHTTPResponse, newErr
}
newErr.body = localVarBody
newErr.error = localVarHTTPResponse.Status
return localVarHTTPResponse, newErr
}
return localVarHTTPResponse, nil
}

View File

@ -159,7 +159,7 @@ func (a *QueryApiService) PostQueryExecuteWithHttpInfo(r ApiPostQueryRequest) (*
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/query"
localVarPath := localBasePath + "/api/v2/query"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}

View File

@ -208,7 +208,7 @@ func (a *RemoteConnectionsApiService) DeleteRemoteConnectionByIDExecuteWithHttpI
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/remotes/{remoteID}"
localVarPath := localBasePath + "/api/v2/remotes/{remoteID}"
localVarPath = strings.Replace(localVarPath, "{"+"remoteID"+"}", _neturl.PathEscape(parameterToString(r.remoteID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -364,7 +364,7 @@ func (a *RemoteConnectionsApiService) GetRemoteConnectionByIDExecuteWithHttpInfo
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/remotes/{remoteID}"
localVarPath := localBasePath + "/api/v2/remotes/{remoteID}"
localVarPath = strings.Replace(localVarPath, "{"+"remoteID"+"}", _neturl.PathEscape(parameterToString(r.remoteID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -555,7 +555,7 @@ func (a *RemoteConnectionsApiService) GetRemoteConnectionsExecuteWithHttpInfo(r
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/remotes"
localVarPath := localBasePath + "/api/v2/remotes"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -748,7 +748,7 @@ func (a *RemoteConnectionsApiService) PatchRemoteConnectionByIDExecuteWithHttpIn
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/remotes/{remoteID}"
localVarPath := localBasePath + "/api/v2/remotes/{remoteID}"
localVarPath = strings.Replace(localVarPath, "{"+"remoteID"+"}", _neturl.PathEscape(parameterToString(r.remoteID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -928,7 +928,7 @@ func (a *RemoteConnectionsApiService) PostRemoteConnectionExecuteWithHttpInfo(r
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/remotes"
localVarPath := localBasePath + "/api/v2/remotes"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}

View File

@ -228,7 +228,7 @@ func (a *ReplicationsApiService) DeleteReplicationByIDExecuteWithHttpInfo(r ApiD
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/replications/{replicationID}"
localVarPath := localBasePath + "/api/v2/replications/{replicationID}"
localVarPath = strings.Replace(localVarPath, "{"+"replicationID"+"}", _neturl.PathEscape(parameterToString(r.replicationID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -384,7 +384,7 @@ func (a *ReplicationsApiService) GetReplicationByIDExecuteWithHttpInfo(r ApiGetR
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/replications/{replicationID}"
localVarPath := localBasePath + "/api/v2/replications/{replicationID}"
localVarPath = strings.Replace(localVarPath, "{"+"replicationID"+"}", _neturl.PathEscape(parameterToString(r.replicationID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -584,7 +584,7 @@ func (a *ReplicationsApiService) GetReplicationsExecuteWithHttpInfo(r ApiGetRepl
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/replications"
localVarPath := localBasePath + "/api/v2/replications"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -789,7 +789,7 @@ func (a *ReplicationsApiService) PatchReplicationByIDExecuteWithHttpInfo(r ApiPa
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/replications/{replicationID}"
localVarPath := localBasePath + "/api/v2/replications/{replicationID}"
localVarPath = strings.Replace(localVarPath, "{"+"replicationID"+"}", _neturl.PathEscape(parameterToString(r.replicationID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -990,7 +990,7 @@ func (a *ReplicationsApiService) PostReplicationExecuteWithHttpInfo(r ApiPostRep
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/replications"
localVarPath := localBasePath + "/api/v2/replications"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -1169,7 +1169,7 @@ func (a *ReplicationsApiService) PostValidateReplicationByIDExecuteWithHttpInfo(
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/replications/{replicationID}/validate"
localVarPath := localBasePath + "/api/v2/replications/{replicationID}/validate"
localVarPath = strings.Replace(localVarPath, "{"+"replicationID"+"}", _neturl.PathEscape(parameterToString(r.replicationID, "")), -1)
localVarHeaderParams := make(map[string]string)

View File

@ -114,7 +114,7 @@ func (a *ResourcesApiService) GetResourcesExecuteWithHttpInfo(r ApiGetResourcesR
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/resources"
localVarPath := localBasePath + "/api/v2/resources"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}

View File

@ -226,7 +226,7 @@ func (a *RestoreApiService) PostRestoreBucketIDExecuteWithHttpInfo(r ApiPostRest
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/restore/buckets/{bucketID}"
localVarPath := localBasePath + "/api/v2/restore/buckets/{bucketID}"
localVarPath = strings.Replace(localVarPath, "{"+"bucketID"+"}", _neturl.PathEscape(parameterToString(r.bucketID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -396,7 +396,7 @@ func (a *RestoreApiService) PostRestoreBucketMetadataExecuteWithHttpInfo(r ApiPo
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/restore/bucketMetadata"
localVarPath := localBasePath + "/api/v2/restore/bucketMetadata"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -580,7 +580,7 @@ func (a *RestoreApiService) PostRestoreKVExecuteWithHttpInfo(r ApiPostRestoreKVR
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/restore/kv"
localVarPath := localBasePath + "/api/v2/restore/kv"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -767,7 +767,7 @@ func (a *RestoreApiService) PostRestoreSQLExecuteWithHttpInfo(r ApiPostRestoreSQ
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/restore/sql"
localVarPath := localBasePath + "/api/v2/restore/sql"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -946,7 +946,7 @@ func (a *RestoreApiService) PostRestoreShardIdExecuteWithHttpInfo(r ApiPostResto
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/restore/shards/{shardID}"
localVarPath := localBasePath + "/api/v2/restore/shards/{shardID}"
localVarPath = strings.Replace(localVarPath, "{"+"shardID"+"}", _neturl.PathEscape(parameterToString(r.shardID, "")), -1)
localVarHeaderParams := make(map[string]string)

View File

@ -167,7 +167,7 @@ func (a *SecretsApiService) GetOrgsIDSecretsExecuteWithHttpInfo(r ApiGetOrgsIDSe
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/orgs/{orgID}/secrets"
localVarPath := localBasePath + "/api/v2/orgs/{orgID}/secrets"
localVarPath = strings.Replace(localVarPath, "{"+"orgID"+"}", _neturl.PathEscape(parameterToString(r.orgID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -337,7 +337,7 @@ func (a *SecretsApiService) PatchOrgsIDSecretsExecuteWithHttpInfo(r ApiPatchOrgs
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/orgs/{orgID}/secrets"
localVarPath := localBasePath + "/api/v2/orgs/{orgID}/secrets"
localVarPath = strings.Replace(localVarPath, "{"+"orgID"+"}", _neturl.PathEscape(parameterToString(r.orgID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -493,7 +493,7 @@ func (a *SecretsApiService) PostOrgsIDSecretsExecuteWithHttpInfo(r ApiPostOrgsID
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/orgs/{orgID}/secrets/{delete}"
localVarPath := localBasePath + "/api/v2/orgs/{orgID}/secrets/{delete}"
localVarPath = strings.Replace(localVarPath, "{"+"orgID"+"}", _neturl.PathEscape(parameterToString(r.orgID, "")), -1)
localVarHeaderParams := make(map[string]string)

View File

@ -138,7 +138,7 @@ func (a *SetupApiService) GetSetupExecuteWithHttpInfo(r ApiGetSetupRequest) (Inl
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/setup"
localVarPath := localBasePath + "/api/v2/setup"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -292,7 +292,7 @@ func (a *SetupApiService) PostSetupExecuteWithHttpInfo(r ApiPostSetupRequest) (O
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/setup"
localVarPath := localBasePath + "/api/v2/setup"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}

View File

@ -201,7 +201,7 @@ func (a *StacksApiService) CreateStackExecuteWithHttpInfo(r ApiCreateStackReques
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/stacks"
localVarPath := localBasePath + "/api/v2/stacks"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -363,7 +363,7 @@ func (a *StacksApiService) DeleteStackExecuteWithHttpInfo(r ApiDeleteStackReques
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/stacks/{stack_id}"
localVarPath := localBasePath + "/api/v2/stacks/{stack_id}"
localVarPath = strings.Replace(localVarPath, "{"+"stack_id"+"}", _neturl.PathEscape(parameterToString(r.stackId, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -516,7 +516,7 @@ func (a *StacksApiService) ListStacksExecuteWithHttpInfo(r ApiListStacksRequest)
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/stacks"
localVarPath := localBasePath + "/api/v2/stacks"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -693,7 +693,7 @@ func (a *StacksApiService) ReadStackExecuteWithHttpInfo(r ApiReadStackRequest) (
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/stacks/{stack_id}"
localVarPath := localBasePath + "/api/v2/stacks/{stack_id}"
localVarPath = strings.Replace(localVarPath, "{"+"stack_id"+"}", _neturl.PathEscape(parameterToString(r.stackId, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -854,7 +854,7 @@ func (a *StacksApiService) UpdateStackExecuteWithHttpInfo(r ApiUpdateStackReques
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/stacks/{stack_id}"
localVarPath := localBasePath + "/api/v2/stacks/{stack_id}"
localVarPath = strings.Replace(localVarPath, "{"+"stack_id"+"}", _neturl.PathEscape(parameterToString(r.stackId, "")), -1)
localVarHeaderParams := make(map[string]string)

View File

@ -49,7 +49,7 @@ type TasksApi interface {
DeleteTasksIDExecuteWithHttpInfo(r ApiDeleteTasksIDRequest) (*_nethttp.Response, error)
/*
* DeleteTasksIDRunsID Cancel a running task
* DeleteTasksIDRunsID Cancel a running task. #### InfluxDB Cloud - Doesn't support this operation.
* @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @param taskID The task ID.
* @param runID The run ID.
@ -157,7 +157,7 @@ type TasksApi interface {
GetTasksIDRunsExecuteWithHttpInfo(r ApiGetTasksIDRunsRequest) (Runs, *_nethttp.Response, error)
/*
* GetTasksIDRunsID Retrieve a single run for a task
* GetTasksIDRunsID Retrieve a single run for a task.
* @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @param taskID The task ID.
* @param runID The run ID.
@ -368,7 +368,7 @@ func (a *TasksApiService) DeleteTasksIDExecuteWithHttpInfo(r ApiDeleteTasksIDReq
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/tasks/{taskID}"
localVarPath := localBasePath + "/api/v2/tasks/{taskID}"
localVarPath = strings.Replace(localVarPath, "{"+"taskID"+"}", _neturl.PathEscape(parameterToString(r.taskID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -479,7 +479,7 @@ func (r ApiDeleteTasksIDRunsIDRequest) ExecuteWithHttpInfo() (*_nethttp.Response
}
/*
* DeleteTasksIDRunsID Cancel a running task
* DeleteTasksIDRunsID Cancel a running task. #### InfluxDB Cloud - Doesn't support this operation.
* @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @param taskID The task ID.
* @param runID The run ID.
@ -521,7 +521,7 @@ func (a *TasksApiService) DeleteTasksIDRunsIDExecuteWithHttpInfo(r ApiDeleteTask
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/tasks/{taskID}/runs/{runID}"
localVarPath := localBasePath + "/api/v2/tasks/{taskID}/runs/{runID}"
localVarPath = strings.Replace(localVarPath, "{"+"taskID"+"}", _neturl.PathEscape(parameterToString(r.taskID, "")), -1)
localVarPath = strings.Replace(localVarPath, "{"+"runID"+"}", _neturl.PathEscape(parameterToString(r.runID, "")), -1)
@ -578,6 +578,17 @@ func (a *TasksApiService) DeleteTasksIDRunsIDExecuteWithHttpInfo(r ApiDeleteTask
}
newErr.body = localVarBody
newErr.error = localVarHTTPResponse.Status
if localVarHTTPResponse.StatusCode == 405 {
var v Error
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
if err != nil {
newErr.error = _fmt.Sprintf("%s: %s", newErr.Error(), err.Error())
return localVarHTTPResponse, newErr
}
v.SetMessage(_fmt.Sprintf("%s: %s", newErr.Error(), v.GetMessage()))
newErr.model = &v
return localVarHTTPResponse, newErr
}
var v Error
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
if err != nil {
@ -728,7 +739,7 @@ func (a *TasksApiService) GetTasksExecuteWithHttpInfo(r ApiGetTasksRequest) (Tas
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/tasks"
localVarPath := localBasePath + "/api/v2/tasks"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -915,7 +926,7 @@ func (a *TasksApiService) GetTasksIDExecuteWithHttpInfo(r ApiGetTasksIDRequest)
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/tasks/{taskID}"
localVarPath := localBasePath + "/api/v2/tasks/{taskID}"
localVarPath = strings.Replace(localVarPath, "{"+"taskID"+"}", _neturl.PathEscape(parameterToString(r.taskID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -1079,7 +1090,7 @@ func (a *TasksApiService) GetTasksIDLogsExecuteWithHttpInfo(r ApiGetTasksIDLogsR
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/tasks/{taskID}/logs"
localVarPath := localBasePath + "/api/v2/tasks/{taskID}/logs"
localVarPath = strings.Replace(localVarPath, "{"+"taskID"+"}", _neturl.PathEscape(parameterToString(r.taskID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -1279,7 +1290,7 @@ func (a *TasksApiService) GetTasksIDRunsExecuteWithHttpInfo(r ApiGetTasksIDRunsR
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/tasks/{taskID}/runs"
localVarPath := localBasePath + "/api/v2/tasks/{taskID}/runs"
localVarPath = strings.Replace(localVarPath, "{"+"taskID"+"}", _neturl.PathEscape(parameterToString(r.taskID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -1421,7 +1432,7 @@ func (r ApiGetTasksIDRunsIDRequest) ExecuteWithHttpInfo() (Run, *_nethttp.Respon
}
/*
* GetTasksIDRunsID Retrieve a single run for a task
* GetTasksIDRunsID Retrieve a single run for a task.
* @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
* @param taskID The task ID.
* @param runID The run ID.
@ -1466,7 +1477,7 @@ func (a *TasksApiService) GetTasksIDRunsIDExecuteWithHttpInfo(r ApiGetTasksIDRun
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/tasks/{taskID}/runs/{runID}"
localVarPath := localBasePath + "/api/v2/tasks/{taskID}/runs/{runID}"
localVarPath = strings.Replace(localVarPath, "{"+"taskID"+"}", _neturl.PathEscape(parameterToString(r.taskID, "")), -1)
localVarPath = strings.Replace(localVarPath, "{"+"runID"+"}", _neturl.PathEscape(parameterToString(r.runID, "")), -1)
@ -1642,7 +1653,7 @@ func (a *TasksApiService) GetTasksIDRunsIDLogsExecuteWithHttpInfo(r ApiGetTasksI
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/tasks/{taskID}/runs/{runID}/logs"
localVarPath := localBasePath + "/api/v2/tasks/{taskID}/runs/{runID}/logs"
localVarPath = strings.Replace(localVarPath, "{"+"taskID"+"}", _neturl.PathEscape(parameterToString(r.taskID, "")), -1)
localVarPath = strings.Replace(localVarPath, "{"+"runID"+"}", _neturl.PathEscape(parameterToString(r.runID, "")), -1)
@ -1817,7 +1828,7 @@ func (a *TasksApiService) PatchTasksIDExecuteWithHttpInfo(r ApiPatchTasksIDReque
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/tasks/{taskID}"
localVarPath := localBasePath + "/api/v2/tasks/{taskID}"
localVarPath = strings.Replace(localVarPath, "{"+"taskID"+"}", _neturl.PathEscape(parameterToString(r.taskID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -1984,7 +1995,7 @@ func (a *TasksApiService) PostTasksExecuteWithHttpInfo(r ApiPostTasksRequest) (T
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/tasks"
localVarPath := localBasePath + "/api/v2/tasks"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -2161,7 +2172,7 @@ func (a *TasksApiService) PostTasksIDRunsExecuteWithHttpInfo(r ApiPostTasksIDRun
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/tasks/{taskID}/runs"
localVarPath := localBasePath + "/api/v2/tasks/{taskID}/runs"
localVarPath = strings.Replace(localVarPath, "{"+"taskID"+"}", _neturl.PathEscape(parameterToString(r.taskID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -2347,7 +2358,7 @@ func (a *TasksApiService) PostTasksIDRunsIDRetryExecuteWithHttpInfo(r ApiPostTas
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/tasks/{taskID}/runs/{runID}/retry"
localVarPath := localBasePath + "/api/v2/tasks/{taskID}/runs/{runID}/retry"
localVarPath = strings.Replace(localVarPath, "{"+"taskID"+"}", _neturl.PathEscape(parameterToString(r.taskID, "")), -1)
localVarPath = strings.Replace(localVarPath, "{"+"runID"+"}", _neturl.PathEscape(parameterToString(r.runID, "")), -1)

View File

@ -208,7 +208,7 @@ func (a *TelegrafsApiService) DeleteTelegrafsIDExecuteWithHttpInfo(r ApiDeleteTe
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/telegrafs/{telegrafID}"
localVarPath := localBasePath + "/api/v2/telegrafs/{telegrafID}"
localVarPath = strings.Replace(localVarPath, "{"+"telegrafID"+"}", _neturl.PathEscape(parameterToString(r.telegrafID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -351,7 +351,7 @@ func (a *TelegrafsApiService) GetTelegrafsExecuteWithHttpInfo(r ApiGetTelegrafsR
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/telegrafs"
localVarPath := localBasePath + "/api/v2/telegrafs"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -526,7 +526,7 @@ func (a *TelegrafsApiService) GetTelegrafsIDExecuteWithHttpInfo(r ApiGetTelegraf
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/telegrafs/{telegrafID}"
localVarPath := localBasePath + "/api/v2/telegrafs/{telegrafID}"
localVarPath = strings.Replace(localVarPath, "{"+"telegrafID"+"}", _neturl.PathEscape(parameterToString(r.telegrafID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -691,7 +691,7 @@ func (a *TelegrafsApiService) PostTelegrafsExecuteWithHttpInfo(r ApiPostTelegraf
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/telegrafs"
localVarPath := localBasePath + "/api/v2/telegrafs"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -868,7 +868,7 @@ func (a *TelegrafsApiService) PutTelegrafsIDExecuteWithHttpInfo(r ApiPutTelegraf
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/telegrafs/{telegrafID}"
localVarPath := localBasePath + "/api/v2/telegrafs/{telegrafID}"
localVarPath = strings.Replace(localVarPath, "{"+"telegrafID"+"}", _neturl.PathEscape(parameterToString(r.telegrafID, "")), -1)
localVarHeaderParams := make(map[string]string)

View File

@ -135,7 +135,7 @@ func (a *TemplatesApiService) ApplyTemplateExecuteWithHttpInfo(r ApiApplyTemplat
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/templates/apply"
localVarPath := localBasePath + "/api/v2/templates/apply"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -300,7 +300,7 @@ func (a *TemplatesApiService) ExportTemplateExecuteWithHttpInfo(r ApiExportTempl
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/templates/export"
localVarPath := localBasePath + "/api/v2/templates/export"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}

View File

@ -228,7 +228,7 @@ func (a *UsersApiService) DeleteUsersIDExecuteWithHttpInfo(r ApiDeleteUsersIDReq
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/users/{userID}"
localVarPath := localBasePath + "/api/v2/users/{userID}"
localVarPath = strings.Replace(localVarPath, "{"+"userID"+"}", _neturl.PathEscape(parameterToString(r.userID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -407,7 +407,7 @@ func (a *UsersApiService) GetUsersExecuteWithHttpInfo(r ApiGetUsersRequest) (Use
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/users"
localVarPath := localBasePath + "/api/v2/users"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -585,7 +585,7 @@ func (a *UsersApiService) GetUsersIDExecuteWithHttpInfo(r ApiGetUsersIDRequest)
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/users/{userID}"
localVarPath := localBasePath + "/api/v2/users/{userID}"
localVarPath = strings.Replace(localVarPath, "{"+"userID"+"}", _neturl.PathEscape(parameterToString(r.userID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -758,7 +758,7 @@ func (a *UsersApiService) PatchUsersIDExecuteWithHttpInfo(r ApiPatchUsersIDReque
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/users/{userID}"
localVarPath := localBasePath + "/api/v2/users/{userID}"
localVarPath = strings.Replace(localVarPath, "{"+"userID"+"}", _neturl.PathEscape(parameterToString(r.userID, "")), -1)
localVarHeaderParams := make(map[string]string)
@ -925,7 +925,7 @@ func (a *UsersApiService) PostUsersExecuteWithHttpInfo(r ApiPostUsersRequest) (U
return localVarReturnValue, nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/users"
localVarPath := localBasePath + "/api/v2/users"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}
@ -1099,7 +1099,7 @@ func (a *UsersApiService) PostUsersIDPasswordExecuteWithHttpInfo(r ApiPostUsersI
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/users/{userID}/password"
localVarPath := localBasePath + "/api/v2/users/{userID}/password"
localVarPath = strings.Replace(localVarPath, "{"+"userID"+"}", _neturl.PathEscape(parameterToString(r.userID, "")), -1)
localVarHeaderParams := make(map[string]string)

View File

@ -29,19 +29,43 @@ type WriteApi interface {
* PostWrite Write data
* Writes data to a bucket.
To write data into InfluxDB, you need the following:
Use this endpoint to send data in [line protocol]({{% INFLUXDB_DOCS_URL %}}/reference/syntax/line-protocol/) format to InfluxDB.
- **organization name or ID** _See [View organizations]({{% INFLUXDB_DOCS_URL %}}/organizations/view-orgs/#view-your-organization-id) for instructions on viewing your organization ID._
- **bucket** _See [View buckets]({{% INFLUXDB_DOCS_URL %}}/organizations/buckets/view-buckets/) for
instructions on viewing your bucket ID._
- **API token** _See [View tokens]({{% INFLUXDB_DOCS_URL %}}/security/tokens/view-tokens/)
for instructions on viewing your API token._
- **InfluxDB URL** _See [InfluxDB URLs]({{% INFLUXDB_DOCS_URL %}}/reference/urls/)_.
- data in [line protocol]({{% INFLUXDB_DOCS_URL %}}/reference/syntax/line-protocol) format.
#### InfluxDB Cloud
InfluxDB Cloud enforces rate and size limits different from InfluxDB OSS. For details, see Responses.
- Takes the following steps when you send a write request:
1. Validates the request and queues the write.
2. If the write is queued, responds with an HTTP `204` status code.
3. Handles the write asynchronously and reaches eventual consistency.
An HTTP `2xx` status code acknowledges that the write or delete is queued.
To ensure that InfluxDB Cloud handles writes and deletes in the order you request them,
wait for a response before you send the next request.
Because writes are asynchronous, data might not yet be written
when you receive the response.
#### InfluxDB OSS
- Validates the request, handles the write synchronously,
and then responds with success or failure.
- If all points were written successfully, returns `204`,
otherwise returns the first line that failed.
#### Required permissions
- `write-buckets` or `write-bucket BUCKET_ID`.
`BUCKET_ID` is the ID of the destination bucket.
#### Rate limits (with InfluxDB Cloud)
`write` rate limits apply.
For more information, see [limits and adjustable quotas](https://docs.influxdata.com/influxdb/cloud/account-management/limits/).
#### Related guides
For more information and examples, see the following:
- [Write data with the InfluxDB API]({{% INFLUXDB_DOCS_URL %}}/write-data/developer-tools/api).
- [Optimize writes to InfluxDB]({{% INFLUXDB_DOCS_URL %}}/write-data/best-practices/optimize-writes/).
- [Troubleshoot issues writing data]({{% INFLUXDB_DOCS_URL %}}/write-data/troubleshoot/)
@ -174,19 +198,43 @@ func (r ApiPostWriteRequest) ExecuteWithHttpInfo() (*_nethttp.Response, error) {
* PostWrite Write data
* Writes data to a bucket.
To write data into InfluxDB, you need the following:
Use this endpoint to send data in [line protocol]({{% INFLUXDB_DOCS_URL %}}/reference/syntax/line-protocol/) format to InfluxDB.
- **organization name or ID** _See [View organizations]({{% INFLUXDB_DOCS_URL %}}/organizations/view-orgs/#view-your-organization-id) for instructions on viewing your organization ID._
- **bucket** _See [View buckets]({{% INFLUXDB_DOCS_URL %}}/organizations/buckets/view-buckets/) for
instructions on viewing your bucket ID._
- **API token** _See [View tokens]({{% INFLUXDB_DOCS_URL %}}/security/tokens/view-tokens/)
for instructions on viewing your API token._
- **InfluxDB URL** _See [InfluxDB URLs]({{% INFLUXDB_DOCS_URL %}}/reference/urls/)_.
- data in [line protocol]({{% INFLUXDB_DOCS_URL %}}/reference/syntax/line-protocol) format.
#### InfluxDB Cloud
InfluxDB Cloud enforces rate and size limits different from InfluxDB OSS. For details, see Responses.
- Takes the following steps when you send a write request:
1. Validates the request and queues the write.
2. If the write is queued, responds with an HTTP `204` status code.
3. Handles the write asynchronously and reaches eventual consistency.
An HTTP `2xx` status code acknowledges that the write or delete is queued.
To ensure that InfluxDB Cloud handles writes and deletes in the order you request them,
wait for a response before you send the next request.
Because writes are asynchronous, data might not yet be written
when you receive the response.
#### InfluxDB OSS
- Validates the request, handles the write synchronously,
and then responds with success or failure.
- If all points were written successfully, returns `204`,
otherwise returns the first line that failed.
#### Required permissions
- `write-buckets` or `write-bucket BUCKET_ID`.
`BUCKET_ID` is the ID of the destination bucket.
#### Rate limits (with InfluxDB Cloud)
`write` rate limits apply.
For more information, see [limits and adjustable quotas](https://docs.influxdata.com/influxdb/cloud/account-management/limits/).
#### Related guides
For more information and examples, see the following:
- [Write data with the InfluxDB API]({{% INFLUXDB_DOCS_URL %}}/write-data/developer-tools/api).
- [Optimize writes to InfluxDB]({{% INFLUXDB_DOCS_URL %}}/write-data/best-practices/optimize-writes/).
- [Troubleshoot issues writing data]({{% INFLUXDB_DOCS_URL %}}/write-data/troubleshoot/)
@ -228,7 +276,7 @@ func (a *WriteApiService) PostWriteExecuteWithHttpInfo(r ApiPostWriteRequest) (*
return nil, GenericOpenAPIError{error: err.Error()}
}
localVarPath := localBasePath + "/write"
localVarPath := localBasePath + "/api/v2/write"
localVarHeaderParams := make(map[string]string)
localVarQueryParams := _neturl.Values{}

View File

@ -66,8 +66,14 @@ type APIClient struct {
LegacyAuthorizationsApi LegacyAuthorizationsApi
LegacyQueryApi LegacyQueryApi
LegacyWriteApi LegacyWriteApi
OrganizationsApi OrganizationsApi
PingApi PingApi
QueryApi QueryApi
RemoteConnectionsApi RemoteConnectionsApi
@ -123,7 +129,10 @@ func NewAPIClient(cfg *Configuration) *APIClient {
c.DeleteApi = (*DeleteApiService)(&c.common)
c.HealthApi = (*HealthApiService)(&c.common)
c.LegacyAuthorizationsApi = (*LegacyAuthorizationsApiService)(&c.common)
c.LegacyQueryApi = (*LegacyQueryApiService)(&c.common)
c.LegacyWriteApi = (*LegacyWriteApiService)(&c.common)
c.OrganizationsApi = (*OrganizationsApiService)(&c.common)
c.PingApi = (*PingApiService)(&c.common)
c.QueryApi = (*QueryApiService)(&c.common)
c.RemoteConnectionsApi = (*RemoteConnectionsApiService)(&c.common)
c.ReplicationsApi = (*ReplicationsApiService)(&c.common)

View File

@ -102,7 +102,7 @@ func NewConfiguration() *Configuration {
Debug: false,
Servers: ServerConfigurations{
{
URL: "/api/v2",
URL: "",
Description: "No description provided",
},
},
@ -113,39 +113,15 @@ func NewConfiguration() *Configuration {
Description: "No description provided",
},
},
"LegacyAuthorizationsApiService.DeleteLegacyAuthorizationsID": {
"PingApiService.GetPing": {
{
URL: "/private",
URL: "",
Description: "No description provided",
},
},
"LegacyAuthorizationsApiService.GetLegacyAuthorizations": {
"PingApiService.HeadPing": {
{
URL: "/private",
Description: "No description provided",
},
},
"LegacyAuthorizationsApiService.GetLegacyAuthorizationsID": {
{
URL: "/private",
Description: "No description provided",
},
},
"LegacyAuthorizationsApiService.PatchLegacyAuthorizationsID": {
{
URL: "/private",
Description: "No description provided",
},
},
"LegacyAuthorizationsApiService.PostLegacyAuthorizations": {
{
URL: "/private",
Description: "No description provided",
},
},
"LegacyAuthorizationsApiService.PostLegacyAuthorizationsIDPassword": {
{
URL: "/private",
URL: "",
Description: "No description provided",
},
},

View File

@ -3,123 +3,121 @@ info:
title: Subset of Influx API covered by Influx CLI
version: 2.0.0
servers:
- url: /api/v2
- url: /
paths:
/health:
servers:
- url: ''
$ref: "./openapi/src/oss/paths/health.yml"
/setup:
$ref: "./openapi/src/common/paths/setup.yml"
/write:
$ref: "./openapi/src/common/paths/write.yml"
/buckets:
$ref: "./openapi/src/common/paths/buckets.yml"
/buckets/{bucketID}:
$ref: "./openapi/src/common/paths/buckets_bucketID.yml"
/orgs:
$ref: "./openapi/src/common/paths/orgs.yml"
/orgs/{orgID}:
$ref: "./openapi/src/common/paths/orgs_orgID.yml"
/orgs/{orgID}/members:
$ref: "./openapi/src/common/paths/orgs_orgID_members.yml"
/orgs/{orgID}/members/{userID}:
$ref: "./openapi/src/common/paths/orgs_orgID_members_userID.yml"
/orgs/{orgID}/secrets:
$ref: "./openapi/src/common/paths/orgs_orgID_secrets.yml"
/orgs/{orgID}/secrets/{delete}:
$ref: "./openapi/src/common/paths/orgs_orgID_secrets_delete.yml"
/buckets/{bucketID}/schema/measurements:
$ref: "./openapi/src/cloud/paths/measurements.yml"
/buckets/{bucketID}/schema/measurements/{measurementID}:
$ref: "./openapi/src/cloud/paths/measurements_measurementID.yml"
/query:
$ref: "./openapi/src/legacy/paths/query.yml"
/write:
$ref: "./openapi/src/legacy/paths/write.yml"
/health:
$ref: "./openapi/src/oss/paths/health.yml"
/ping:
$ref: "./openapi/src/common/paths/ping.yml"
/private/legacy/authorizations:
$ref: "./openapi/src/legacy/paths/legacy_authorizations.yml"
/private/legacy/authorizations/{authID}:
$ref: "./openapi/src/legacy/paths/legacy_authorizations_authID.yml"
/private/legacy/authorizations/{authID}/password:
$ref: "./openapi/src/legacy/paths/legacy_authorizations_authID_password.yml"
/api/v2/setup:
$ref: "./openapi/src/common/paths/setup.yml"
/api/v2/write:
$ref: "./openapi/src/common/paths/write.yml"
/api/v2/buckets:
$ref: "./openapi/src/common/paths/buckets.yml"
/api/v2/buckets/{bucketID}:
$ref: "./openapi/src/common/paths/buckets_bucketID.yml"
/api/v2/orgs:
$ref: "./openapi/src/common/paths/orgs.yml"
/api/v2/orgs/{orgID}:
$ref: "./openapi/src/common/paths/orgs_orgID.yml"
/api/v2/orgs/{orgID}/members:
$ref: "./openapi/src/common/paths/orgs_orgID_members.yml"
/api/v2/orgs/{orgID}/members/{userID}:
$ref: "./openapi/src/common/paths/orgs_orgID_members_userID.yml"
/api/v2/orgs/{orgID}/secrets:
$ref: "./openapi/src/common/paths/orgs_orgID_secrets.yml"
/api/v2/orgs/{orgID}/secrets/{delete}:
$ref: "./openapi/src/common/paths/orgs_orgID_secrets_delete.yml"
/api/v2/buckets/{bucketID}/schema/measurements:
$ref: "./openapi/src/cloud/paths/measurements.yml"
/api/v2/buckets/{bucketID}/schema/measurements/{measurementID}:
$ref: "./openapi/src/cloud/paths/measurements_measurementID.yml"
/api/v2/query:
$ref: "./overrides/paths/query.yml"
/users:
/api/v2/users:
$ref: "./openapi/src/common/paths/users.yml"
/users/{userID}:
/api/v2/users/{userID}:
$ref: "./openapi/src/common/paths/users_userID.yml"
"/users/{userID}/password":
"/api/v2/users/{userID}/password":
$ref: "./openapi/src/common/paths/users_userID_password.yml"
/delete:
/api/v2/delete:
$ref: "./openapi/src/common/paths/delete.yml"
/tasks:
/api/v2/tasks:
$ref: "./openapi/src/common/paths/tasks.yml"
/tasks/{taskID}:
/api/v2/tasks/{taskID}:
$ref: "./openapi/src/common/paths/tasks_taskID.yml"
/tasks/{taskID}/runs:
/api/v2/tasks/{taskID}/runs:
$ref: "./openapi/src/common/paths/tasks_taskID_runs.yml"
/tasks/{taskID}/runs/{runID}:
/api/v2/tasks/{taskID}/runs/{runID}:
$ref: "./openapi/src/common/paths/tasks_taskID_runs_runID.yml"
/tasks/{taskID}/runs/{runID}/retry:
/api/v2/tasks/{taskID}/runs/{runID}/retry:
$ref: "./openapi/src/common/paths/tasks_taskID_runs_runID_retry.yml"
/tasks/{taskID}/logs:
/api/v2/tasks/{taskID}/logs:
$ref: "./openapi/src/common/paths/tasks_taskID_logs.yml"
/tasks/{taskID}/runs/{runID}/logs:
/api/v2/tasks/{taskID}/runs/{runID}/logs:
$ref: "./openapi/src/common/paths/tasks_taskID_runs_runID_logs.yml"
/backup/kv:
/api/v2/backup/kv:
$ref: "./openapi/src/oss/paths/backup_kv.yml"
/backup/metadata:
/api/v2/backup/metadata:
$ref: "./overrides/paths/backup_metadata.yml"
/backup/shards/{shardID}:
/api/v2/backup/shards/{shardID}:
$ref: "./openapi/src/oss/paths/backup_shards_shardID.yml"
/resources:
/api/v2/resources:
$ref: "./openapi/src/common/paths/resources.yml"
/restore/kv:
/api/v2/restore/kv:
$ref: "./openapi/src/oss/paths/restore_kv.yml"
/restore/sql:
/api/v2/restore/sql:
$ref: "./openapi/src/oss/paths/restore_sql.yml"
/restore/buckets/{bucketID}:
/api/v2/restore/buckets/{bucketID}:
$ref: "./openapi/src/oss/paths/restore_bucket_bucketID.yml"
/restore/bucketMetadata:
/api/v2/restore/bucketMetadata:
$ref: "./openapi/src/oss/paths/restore_bucketMetadata.yml"
/restore/shards/{shardID}:
/api/v2/restore/shards/{shardID}:
$ref: "./openapi/src/oss/paths/restore_shards_shardID.yml"
"/telegrafs":
"/api/v2/telegrafs":
$ref: "./openapi/src/common/paths/telegrafs.yml"
"/telegrafs/{telegrafID}":
"/api/v2/telegrafs/{telegrafID}":
$ref: "./overrides/paths/telegrafs_telegrafID.yml"
/dashboards:
/api/v2/dashboards:
$ref: "./overrides/paths/dashboards.yml"
/templates/export:
/api/v2/templates/export:
$ref: "./overrides/paths/templates_export.yml"
/templates/apply:
/api/v2/templates/apply:
$ref: "./overrides/paths/templates_apply.yml"
/stacks:
/api/v2/stacks:
$ref: "./overrides/paths/stacks.yml"
/stacks/{stack_id}:
/api/v2/stacks/{stack_id}:
$ref: "./overrides/paths/stacks_stack_id.yml"
/dbrps:
/api/v2/dbrps:
$ref: "./openapi/src/common/paths/dbrps.yml"
"/dbrps/{dbrpID}":
"/api/v2/dbrps/{dbrpID}":
$ref: "./openapi/src/common/paths/dbrps_dbrpID.yml"
/legacy/authorizations:
servers:
- url: "/private"
$ref: "./openapi/src/oss/paths/legacy_authorizations.yml"
/legacy/authorizations/{authID}:
servers:
- url: "/private"
$ref: "./openapi/src/oss/paths/legacy_authorizations_authID.yml"
/legacy/authorizations/{authID}/password:
servers:
- url: "/private"
$ref: "./openapi/src/oss/paths/legacy_authorizations_authID_password.yml"
/authorizations:
/api/v2/authorizations:
$ref: "./openapi/src/common/paths/authorizations.yml"
/authorizations/{authID}:
/api/v2/authorizations/{authID}:
$ref: "./openapi/src/common/paths/authorizations_authID.yml"
/remotes:
/api/v2/remotes:
$ref: "./openapi/src/oss/paths/remotes.yml"
/remotes/{remoteID}:
/api/v2/remotes/{remoteID}:
$ref: "./openapi/src/oss/paths/remotes_remoteID.yml"
/replications:
/api/v2/replications:
$ref: "./openapi/src/oss/paths/replications.yml"
/replications/{replicationID}:
/api/v2/replications/{replicationID}:
$ref: "./openapi/src/oss/paths/replications_replicationID.yml"
/replications/{replicationID}/validate:
/api/v2/replications/{replicationID}/validate:
$ref: "./openapi/src/oss/paths/replications_replicationID_validate.yml"
/config:
/api/v2/config:
$ref: "./openapi/src/oss/paths/config.yml"
components:
parameters:
@ -229,6 +227,10 @@ components:
$ref: "./openapi/src/cloud/schemas/MeasurementSchemaUpdateRequest.yml"
Query:
$ref: "./overrides/schemas/Query.yml"
InfluxqlCsvResponse:
$ref: "./openapi/src/legacy/schemas/InfluxqlCsvResponse.yml"
InfluxqlJsonResponse:
$ref: "./openapi/src/legacy/schemas/InfluxqlJsonResponse.yml"
Dialect:
$ref: "./openapi/src/common/schemas/Dialect.yml"
Extern:
@ -434,7 +436,7 @@ components:
Authorizations:
$ref: "./openapi/src/common/schemas/Authorizations.yml"
LegacyAuthorizationPostRequest:
$ref: "./openapi/src/oss/schemas/LegacyAuthorizationPostRequest.yml"
$ref: "./openapi/src/legacy/schemas/LegacyAuthorizationPostRequest.yml"
AuthorizationPostRequest:
$ref: "./openapi/src/common/schemas/AuthorizationPostRequest.yml"
RemoteConnection:

@ -1 +1 @@
Subproject commit 6ea7df4daa5735a063be3db60d0165b34b26c096
Subproject commit 9b93b9e414c45537f6ebed0757ff4f764518e2b5

View File

@ -17,11 +17,11 @@ import (
// DeletePredicateRequest The delete predicate request.
type DeletePredicateRequest struct {
// RFC3339Nano
// A timestamp ([RFC3339 date/time format](https://docs.influxdata.com/flux/v0.x/data-types/basic/time/#time-syntax)).
Start time.Time `json:"start" yaml:"start"`
// RFC3339Nano
// A timestamp ([RFC3339 date/time format](https://docs.influxdata.com/flux/v0.x/data-types/basic/time/#time-syntax)).
Stop time.Time `json:"stop" yaml:"stop"`
// InfluxQL-like delete statement
// An expression in [delete predicate syntax]({{% INFLUXDB_DOCS_URL %}}/reference/syntax/delete-predicate/).
Predicate *string `json:"predicate,omitempty" yaml:"predicate,omitempty"`
}

View File

@ -0,0 +1,113 @@
/*
* Subset of Influx API covered by Influx CLI
*
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
*
* API version: 2.0.0
*/
// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
package api
import (
"encoding/json"
)
// InfluxqlJsonResponse JSON Response to InfluxQL Query
type InfluxqlJsonResponse struct {
Results *[]InfluxqlJsonResponseResults `json:"results,omitempty" yaml:"results,omitempty"`
}
// NewInfluxqlJsonResponse instantiates a new InfluxqlJsonResponse object
// This constructor will assign default values to properties that have it defined,
// and makes sure properties required by API are set, but the set of arguments
// will change when the set of required properties is changed
func NewInfluxqlJsonResponse() *InfluxqlJsonResponse {
this := InfluxqlJsonResponse{}
return &this
}
// NewInfluxqlJsonResponseWithDefaults instantiates a new InfluxqlJsonResponse object
// This constructor will only assign default values to properties that have it defined,
// but it doesn't guarantee that properties required by API are set
func NewInfluxqlJsonResponseWithDefaults() *InfluxqlJsonResponse {
this := InfluxqlJsonResponse{}
return &this
}
// GetResults returns the Results field value if set, zero value otherwise.
func (o *InfluxqlJsonResponse) GetResults() []InfluxqlJsonResponseResults {
if o == nil || o.Results == nil {
var ret []InfluxqlJsonResponseResults
return ret
}
return *o.Results
}
// GetResultsOk returns a tuple with the Results field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *InfluxqlJsonResponse) GetResultsOk() (*[]InfluxqlJsonResponseResults, bool) {
if o == nil || o.Results == nil {
return nil, false
}
return o.Results, true
}
// HasResults returns a boolean if a field has been set.
func (o *InfluxqlJsonResponse) HasResults() bool {
if o != nil && o.Results != nil {
return true
}
return false
}
// SetResults gets a reference to the given []InfluxqlJsonResponseResults and assigns it to the Results field.
func (o *InfluxqlJsonResponse) SetResults(v []InfluxqlJsonResponseResults) {
o.Results = &v
}
func (o InfluxqlJsonResponse) MarshalJSON() ([]byte, error) {
toSerialize := map[string]interface{}{}
if o.Results != nil {
toSerialize["results"] = o.Results
}
return json.Marshal(toSerialize)
}
type NullableInfluxqlJsonResponse struct {
value *InfluxqlJsonResponse
isSet bool
}
func (v NullableInfluxqlJsonResponse) Get() *InfluxqlJsonResponse {
return v.value
}
func (v *NullableInfluxqlJsonResponse) Set(val *InfluxqlJsonResponse) {
v.value = val
v.isSet = true
}
func (v NullableInfluxqlJsonResponse) IsSet() bool {
return v.isSet
}
func (v *NullableInfluxqlJsonResponse) Unset() {
v.value = nil
v.isSet = false
}
func NewNullableInfluxqlJsonResponse(val *InfluxqlJsonResponse) *NullableInfluxqlJsonResponse {
return &NullableInfluxqlJsonResponse{value: val, isSet: true}
}
func (v NullableInfluxqlJsonResponse) MarshalJSON() ([]byte, error) {
return json.Marshal(v.value)
}
func (v *NullableInfluxqlJsonResponse) UnmarshalJSON(src []byte) error {
v.isSet = true
return json.Unmarshal(src, &v.value)
}

View File

@ -0,0 +1,185 @@
/*
* Subset of Influx API covered by Influx CLI
*
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
*
* API version: 2.0.0
*/
// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
package api
import (
"encoding/json"
)
// InfluxqlJsonResponseResults struct for InfluxqlJsonResponseResults
type InfluxqlJsonResponseResults struct {
StatementId *int32 `json:"statement_id,omitempty" yaml:"statement_id,omitempty"`
Error *string `json:"error,omitempty" yaml:"error,omitempty"`
Series *[]InfluxqlJsonResponseSeries `json:"series,omitempty" yaml:"series,omitempty"`
}
// NewInfluxqlJsonResponseResults instantiates a new InfluxqlJsonResponseResults object
// This constructor will assign default values to properties that have it defined,
// and makes sure properties required by API are set, but the set of arguments
// will change when the set of required properties is changed
func NewInfluxqlJsonResponseResults() *InfluxqlJsonResponseResults {
this := InfluxqlJsonResponseResults{}
return &this
}
// NewInfluxqlJsonResponseResultsWithDefaults instantiates a new InfluxqlJsonResponseResults object
// This constructor will only assign default values to properties that have it defined,
// but it doesn't guarantee that properties required by API are set
func NewInfluxqlJsonResponseResultsWithDefaults() *InfluxqlJsonResponseResults {
this := InfluxqlJsonResponseResults{}
return &this
}
// GetStatementId returns the StatementId field value if set, zero value otherwise.
func (o *InfluxqlJsonResponseResults) GetStatementId() int32 {
if o == nil || o.StatementId == nil {
var ret int32
return ret
}
return *o.StatementId
}
// GetStatementIdOk returns a tuple with the StatementId field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *InfluxqlJsonResponseResults) GetStatementIdOk() (*int32, bool) {
if o == nil || o.StatementId == nil {
return nil, false
}
return o.StatementId, true
}
// HasStatementId returns a boolean if a field has been set.
func (o *InfluxqlJsonResponseResults) HasStatementId() bool {
if o != nil && o.StatementId != nil {
return true
}
return false
}
// SetStatementId gets a reference to the given int32 and assigns it to the StatementId field.
func (o *InfluxqlJsonResponseResults) SetStatementId(v int32) {
o.StatementId = &v
}
// GetError returns the Error field value if set, zero value otherwise.
func (o *InfluxqlJsonResponseResults) GetError() string {
if o == nil || o.Error == nil {
var ret string
return ret
}
return *o.Error
}
// GetErrorOk returns a tuple with the Error field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *InfluxqlJsonResponseResults) GetErrorOk() (*string, bool) {
if o == nil || o.Error == nil {
return nil, false
}
return o.Error, true
}
// HasError returns a boolean if a field has been set.
func (o *InfluxqlJsonResponseResults) HasError() bool {
if o != nil && o.Error != nil {
return true
}
return false
}
// SetError gets a reference to the given string and assigns it to the Error field.
func (o *InfluxqlJsonResponseResults) SetError(v string) {
o.Error = &v
}
// GetSeries returns the Series field value if set, zero value otherwise.
func (o *InfluxqlJsonResponseResults) GetSeries() []InfluxqlJsonResponseSeries {
if o == nil || o.Series == nil {
var ret []InfluxqlJsonResponseSeries
return ret
}
return *o.Series
}
// GetSeriesOk returns a tuple with the Series field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *InfluxqlJsonResponseResults) GetSeriesOk() (*[]InfluxqlJsonResponseSeries, bool) {
if o == nil || o.Series == nil {
return nil, false
}
return o.Series, true
}
// HasSeries returns a boolean if a field has been set.
func (o *InfluxqlJsonResponseResults) HasSeries() bool {
if o != nil && o.Series != nil {
return true
}
return false
}
// SetSeries gets a reference to the given []InfluxqlJsonResponseSeries and assigns it to the Series field.
func (o *InfluxqlJsonResponseResults) SetSeries(v []InfluxqlJsonResponseSeries) {
o.Series = &v
}
func (o InfluxqlJsonResponseResults) MarshalJSON() ([]byte, error) {
toSerialize := map[string]interface{}{}
if o.StatementId != nil {
toSerialize["statement_id"] = o.StatementId
}
if o.Error != nil {
toSerialize["error"] = o.Error
}
if o.Series != nil {
toSerialize["series"] = o.Series
}
return json.Marshal(toSerialize)
}
type NullableInfluxqlJsonResponseResults struct {
value *InfluxqlJsonResponseResults
isSet bool
}
func (v NullableInfluxqlJsonResponseResults) Get() *InfluxqlJsonResponseResults {
return v.value
}
func (v *NullableInfluxqlJsonResponseResults) Set(val *InfluxqlJsonResponseResults) {
v.value = val
v.isSet = true
}
func (v NullableInfluxqlJsonResponseResults) IsSet() bool {
return v.isSet
}
func (v *NullableInfluxqlJsonResponseResults) Unset() {
v.value = nil
v.isSet = false
}
func NewNullableInfluxqlJsonResponseResults(val *InfluxqlJsonResponseResults) *NullableInfluxqlJsonResponseResults {
return &NullableInfluxqlJsonResponseResults{value: val, isSet: true}
}
func (v NullableInfluxqlJsonResponseResults) MarshalJSON() ([]byte, error) {
return json.Marshal(v.value)
}
func (v *NullableInfluxqlJsonResponseResults) UnmarshalJSON(src []byte) error {
v.isSet = true
return json.Unmarshal(src, &v.value)
}

View File

@ -0,0 +1,257 @@
/*
* Subset of Influx API covered by Influx CLI
*
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
*
* API version: 2.0.0
*/
// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
package api
import (
"encoding/json"
)
// InfluxqlJsonResponseSeries struct for InfluxqlJsonResponseSeries
type InfluxqlJsonResponseSeries struct {
Name *string `json:"name,omitempty" yaml:"name,omitempty"`
Tags *map[string]string `json:"tags,omitempty" yaml:"tags,omitempty"`
Partial *bool `json:"partial,omitempty" yaml:"partial,omitempty"`
Columns *[]string `json:"columns,omitempty" yaml:"columns,omitempty"`
Values *[][]interface{} `json:"values,omitempty" yaml:"values,omitempty"`
}
// NewInfluxqlJsonResponseSeries instantiates a new InfluxqlJsonResponseSeries object
// This constructor will assign default values to properties that have it defined,
// and makes sure properties required by API are set, but the set of arguments
// will change when the set of required properties is changed
func NewInfluxqlJsonResponseSeries() *InfluxqlJsonResponseSeries {
this := InfluxqlJsonResponseSeries{}
return &this
}
// NewInfluxqlJsonResponseSeriesWithDefaults instantiates a new InfluxqlJsonResponseSeries object
// This constructor will only assign default values to properties that have it defined,
// but it doesn't guarantee that properties required by API are set
func NewInfluxqlJsonResponseSeriesWithDefaults() *InfluxqlJsonResponseSeries {
this := InfluxqlJsonResponseSeries{}
return &this
}
// GetName returns the Name field value if set, zero value otherwise.
func (o *InfluxqlJsonResponseSeries) GetName() string {
if o == nil || o.Name == nil {
var ret string
return ret
}
return *o.Name
}
// GetNameOk returns a tuple with the Name field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *InfluxqlJsonResponseSeries) GetNameOk() (*string, bool) {
if o == nil || o.Name == nil {
return nil, false
}
return o.Name, true
}
// HasName returns a boolean if a field has been set.
func (o *InfluxqlJsonResponseSeries) HasName() bool {
if o != nil && o.Name != nil {
return true
}
return false
}
// SetName gets a reference to the given string and assigns it to the Name field.
func (o *InfluxqlJsonResponseSeries) SetName(v string) {
o.Name = &v
}
// GetTags returns the Tags field value if set, zero value otherwise.
func (o *InfluxqlJsonResponseSeries) GetTags() map[string]string {
if o == nil || o.Tags == nil {
var ret map[string]string
return ret
}
return *o.Tags
}
// GetTagsOk returns a tuple with the Tags field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *InfluxqlJsonResponseSeries) GetTagsOk() (*map[string]string, bool) {
if o == nil || o.Tags == nil {
return nil, false
}
return o.Tags, true
}
// HasTags returns a boolean if a field has been set.
func (o *InfluxqlJsonResponseSeries) HasTags() bool {
if o != nil && o.Tags != nil {
return true
}
return false
}
// SetTags gets a reference to the given map[string]string and assigns it to the Tags field.
func (o *InfluxqlJsonResponseSeries) SetTags(v map[string]string) {
o.Tags = &v
}
// GetPartial returns the Partial field value if set, zero value otherwise.
func (o *InfluxqlJsonResponseSeries) GetPartial() bool {
if o == nil || o.Partial == nil {
var ret bool
return ret
}
return *o.Partial
}
// GetPartialOk returns a tuple with the Partial field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *InfluxqlJsonResponseSeries) GetPartialOk() (*bool, bool) {
if o == nil || o.Partial == nil {
return nil, false
}
return o.Partial, true
}
// HasPartial returns a boolean if a field has been set.
func (o *InfluxqlJsonResponseSeries) HasPartial() bool {
if o != nil && o.Partial != nil {
return true
}
return false
}
// SetPartial gets a reference to the given bool and assigns it to the Partial field.
func (o *InfluxqlJsonResponseSeries) SetPartial(v bool) {
o.Partial = &v
}
// GetColumns returns the Columns field value if set, zero value otherwise.
func (o *InfluxqlJsonResponseSeries) GetColumns() []string {
if o == nil || o.Columns == nil {
var ret []string
return ret
}
return *o.Columns
}
// GetColumnsOk returns a tuple with the Columns field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *InfluxqlJsonResponseSeries) GetColumnsOk() (*[]string, bool) {
if o == nil || o.Columns == nil {
return nil, false
}
return o.Columns, true
}
// HasColumns returns a boolean if a field has been set.
func (o *InfluxqlJsonResponseSeries) HasColumns() bool {
if o != nil && o.Columns != nil {
return true
}
return false
}
// SetColumns gets a reference to the given []string and assigns it to the Columns field.
func (o *InfluxqlJsonResponseSeries) SetColumns(v []string) {
o.Columns = &v
}
// GetValues returns the Values field value if set, zero value otherwise.
func (o *InfluxqlJsonResponseSeries) GetValues() [][]interface{} {
if o == nil || o.Values == nil {
var ret [][]interface{}
return ret
}
return *o.Values
}
// GetValuesOk returns a tuple with the Values field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *InfluxqlJsonResponseSeries) GetValuesOk() (*[][]interface{}, bool) {
if o == nil || o.Values == nil {
return nil, false
}
return o.Values, true
}
// HasValues returns a boolean if a field has been set.
func (o *InfluxqlJsonResponseSeries) HasValues() bool {
if o != nil && o.Values != nil {
return true
}
return false
}
// SetValues gets a reference to the given [][]interface{} and assigns it to the Values field.
func (o *InfluxqlJsonResponseSeries) SetValues(v [][]interface{}) {
o.Values = &v
}
func (o InfluxqlJsonResponseSeries) MarshalJSON() ([]byte, error) {
toSerialize := map[string]interface{}{}
if o.Name != nil {
toSerialize["name"] = o.Name
}
if o.Tags != nil {
toSerialize["tags"] = o.Tags
}
if o.Partial != nil {
toSerialize["partial"] = o.Partial
}
if o.Columns != nil {
toSerialize["columns"] = o.Columns
}
if o.Values != nil {
toSerialize["values"] = o.Values
}
return json.Marshal(toSerialize)
}
type NullableInfluxqlJsonResponseSeries struct {
value *InfluxqlJsonResponseSeries
isSet bool
}
func (v NullableInfluxqlJsonResponseSeries) Get() *InfluxqlJsonResponseSeries {
return v.value
}
func (v *NullableInfluxqlJsonResponseSeries) Set(val *InfluxqlJsonResponseSeries) {
v.value = val
v.isSet = true
}
func (v NullableInfluxqlJsonResponseSeries) IsSet() bool {
return v.isSet
}
func (v *NullableInfluxqlJsonResponseSeries) Unset() {
v.value = nil
v.isSet = false
}
func NewNullableInfluxqlJsonResponseSeries(val *InfluxqlJsonResponseSeries) *NullableInfluxqlJsonResponseSeries {
return &NullableInfluxqlJsonResponseSeries{value: val, isSet: true}
}
func (v NullableInfluxqlJsonResponseSeries) MarshalJSON() ([]byte, error) {
return json.Marshal(v.value)
}
func (v *NullableInfluxqlJsonResponseSeries) UnmarshalJSON(src []byte) error {
v.isSet = true
return json.Unmarshal(src, &v.value)
}

View File

@ -18,6 +18,8 @@ import (
type PostOrganizationRequest struct {
Name string `json:"name" yaml:"name"`
Description *string `json:"description,omitempty" yaml:"description,omitempty"`
// An optional list of email address's to be invited to the organization
Users *[]string `json:"users,omitempty" yaml:"users,omitempty"`
}
// NewPostOrganizationRequest instantiates a new PostOrganizationRequest object
@ -94,6 +96,38 @@ func (o *PostOrganizationRequest) SetDescription(v string) {
o.Description = &v
}
// GetUsers returns the Users field value if set, zero value otherwise.
func (o *PostOrganizationRequest) GetUsers() []string {
if o == nil || o.Users == nil {
var ret []string
return ret
}
return *o.Users
}
// GetUsersOk returns a tuple with the Users field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *PostOrganizationRequest) GetUsersOk() (*[]string, bool) {
if o == nil || o.Users == nil {
return nil, false
}
return o.Users, true
}
// HasUsers returns a boolean if a field has been set.
func (o *PostOrganizationRequest) HasUsers() bool {
if o != nil && o.Users != nil {
return true
}
return false
}
// SetUsers gets a reference to the given []string and assigns it to the Users field.
func (o *PostOrganizationRequest) SetUsers(v []string) {
o.Users = &v
}
func (o PostOrganizationRequest) MarshalJSON() ([]byte, error) {
toSerialize := map[string]interface{}{}
if true {
@ -102,6 +136,9 @@ func (o PostOrganizationRequest) MarshalJSON() ([]byte, error) {
if o.Description != nil {
toSerialize["description"] = o.Description
}
if o.Users != nil {
toSerialize["users"] = o.Users
}
return json.Marshal(toSerialize)
}

View File

@ -18,31 +18,31 @@ import (
// Task struct for Task
type Task struct {
Id string `json:"id" yaml:"id"`
// Type of the task, useful for filtering a task list.
// The type of the task, useful for filtering a task list.
Type *string `json:"type,omitempty" yaml:"type,omitempty"`
// ID of the organization that owns the task.
// The ID of the organization that owns the task.
OrgID string `json:"orgID" yaml:"orgID"`
// Name of the organization that owns the task.
// The name of the organization that owns the task.
Org *string `json:"org,omitempty" yaml:"org,omitempty"`
// Name of the task.
// The name of the task.
Name string `json:"name" yaml:"name"`
// ID of the user who owns this Task.
// The ID of the user who owns this Task.
OwnerID *string `json:"ownerID,omitempty" yaml:"ownerID,omitempty"`
// Description of the task.
// The description of the task.
Description *string `json:"description,omitempty" yaml:"description,omitempty"`
Status *TaskStatusType `json:"status,omitempty" yaml:"status,omitempty"`
Labels *[]Label `json:"labels,omitempty" yaml:"labels,omitempty"`
// ID of the authorization used when the task communicates with the query engine.
// The ID of the authorization used when the task communicates with the query engine.
AuthorizationID *string `json:"authorizationID,omitempty" yaml:"authorizationID,omitempty"`
// Flux script to run for this task.
// The Flux script to run for this task.
Flux string `json:"flux" yaml:"flux"`
// Interval at which the task runs. `every` also determines when the task first runs, depending on the specified time. Value is a [duration literal](https://docs.influxdata.com/flux/v0.x/spec/lexical-elements/#duration-literals)).
// An interval ([duration literal](https://docs.influxdata.com/flux/v0.x/spec/lexical-elements/#duration-literals))) at which the task runs. `every` also determines when the task first runs, depending on the specified time.
Every *string `json:"every,omitempty" yaml:"every,omitempty"`
// [Cron expression](https://en.wikipedia.org/wiki/Cron#Overview) that defines the schedule on which the task runs. Cron scheduling is based on system time. Value is a [Cron expression](https://en.wikipedia.org/wiki/Cron#Overview).
// [Cron expression](https://en.wikipedia.org/wiki/Cron#Overview) that defines the schedule on which the task runs. InfluxDB bases cron runs on the system time.
Cron *string `json:"cron,omitempty" yaml:"cron,omitempty"`
// [Duration](https://docs.influxdata.com/flux/v0.x/spec/lexical-elements/#duration-literals) to delay execution of the task after the scheduled time has elapsed. `0` removes the offset. The value is a [duration literal](https://docs.influxdata.com/flux/v0.x/spec/lexical-elements/#duration-literals).
// A [duration](https://docs.influxdata.com/flux/v0.x/spec/lexical-elements/#duration-literals) to delay execution of the task after the scheduled time has elapsed. `0` removes the offset.
Offset *string `json:"offset,omitempty" yaml:"offset,omitempty"`
// Timestamp of the latest scheduled and completed run. Value is a timestamp in [RFC3339 date/time format](https://docs.influxdata.com/flux/v0.x/data-types/basic/time/#time-syntax).
// A timestamp ([RFC3339 date/time format](https://docs.influxdata.com/flux/v0.x/data-types/basic/time/#time-syntax)) of the latest scheduled and completed run.
LatestCompleted *time.Time `json:"latestCompleted,omitempty" yaml:"latestCompleted,omitempty"`
LastRunStatus *string `json:"lastRunStatus,omitempty" yaml:"lastRunStatus,omitempty"`
LastRunError *string `json:"lastRunError,omitempty" yaml:"lastRunError,omitempty"`

54
clients/v1_repl/gopher.go Normal file
View File

@ -0,0 +1,54 @@
package v1repl
var Gopher string = `
.-::-::://:-::- .:/++/'
'://:-''/oo+//++o+/.://o- ./+:
.:-. '++- .o/ '+yydhy' o-
.:/. .h: :osoys .smMN- :/
-/:.' s- /MMMymh. '/y/ s'
-+s:'''' d -mMMms// '-/o:
-/++/++/////:. o: '... s- :s.
:+-+s-' ':/' 's- /+ 'o:
'+-'o: /ydhsh. '//. '-o- o-
.y. o: .MMMdm+y ':+++:::/+:.' s:
.-h/ y- 'sdmds'h -+ydds:::-.' 'h.
.//-.d' o: '.' 'dsNMMMNh:.:++' :y
+y. 'd 's. .s:mddds: ++ o/
'N- odd 'o/. './o-s-' .---+++' o-
'N' yNd .://:/:::::. -s -+/s/./s' 'o/'
so' .h '''' ////s: '+. .s +y'
os/-.y' 's' 'y::+ +d'
'.:o/ -+:-:.' so.---.'
o' 'd-.''/s'
.s' :y.''.y
-s mo:::'
:: yh
// '''' /M'
o+ .s///:/. 'N:
:+ /: -s' ho
's- -/s/:+/.+h' +h
ys' ':' '-. -d
oh .h
/o .s
s. .h
-y .d
m/ -h
+d /o
'N- y:
h: m.
s- -d
o- s+
+- 'm'
s/ oo--.
y- /s ':+'
s' 'od--' .d:
-+ ':o: ':+-/+
y- .:+- '
//o- '.:+/.
.-:+/' ''-/+/.
./:' ''.:o+/-'
.+o:/:/+-' ''.-+ooo/-'
o: -h///++////-.
/: .o/
//+ 'y
./sooy.`

789
clients/v1_repl/v1_repl.go Normal file
View File

@ -0,0 +1,789 @@
package v1repl
import (
"bufio"
"bytes"
"compress/gzip"
"context"
"encoding/csv"
"encoding/json"
"errors"
"fmt"
"os"
"reflect"
"regexp"
"sort"
"strings"
"text/tabwriter"
"github.com/fatih/color"
"github.com/influxdata/influx-cli/v2/api"
"github.com/influxdata/influx-cli/v2/clients"
)
type Client struct {
clients.CLI
PersistentQueryParams
api.LegacyQueryApi
api.PingApi
api.OrganizationsApi
api.LegacyWriteApi
api.DBRPsApi
}
type PersistentQueryParams struct {
clients.OrgParams
Database string
RetentionPolicy string
Precision string
Format FormatType
Pretty bool
// Autocompletion Storage
Databases []string
RetentionPolicies []string
Measurements []string
}
func (c *Client) clear(cmd string) {
args := strings.Split(strings.TrimSuffix(strings.TrimSpace(cmd), ";"), " ")
v := strings.ToLower(strings.Join(args[1:], " "))
switch v {
case "database", "db":
c.Database = ""
c.RetentionPolicies = []string{}
fmt.Println("database context cleared")
return
case "retention policy", "rp":
c.RetentionPolicy = ""
fmt.Println("retention policy context cleared")
return
default:
if len(args) > 1 {
fmt.Printf("invalid command %q.\n", v)
}
fmt.Println(`Possible commands for 'clear' are:
# Clear the database context
clear database
clear db
# Clear the retention policy context
clear retention policy
clear rp
`)
}
}
func DefaultPersistentQueryParams() PersistentQueryParams {
return PersistentQueryParams{
Format: ColumnFormat,
Precision: "ns",
}
}
func (c *Client) Create(ctx context.Context) error {
res, err := c.GetPing(ctx).ExecuteWithHttpInfo()
if err != nil {
color.Red("Unable to connect to InfluxDB")
return err
}
build := res.Header.Get("X-Influxdb-Build")
version := res.Header.Get("X-Influxdb-Version")
color.Cyan("Connected to InfluxDB %s %s", build, version)
c.Databases, _ = c.GetDatabases(ctx)
color.Cyan("InfluxQL Shell")
scanner := bufio.NewScanner(os.Stdin)
fmt.Printf("%s", color.GreenString("> "))
for scanner.Scan() {
c.executor(scanner.Text())
fmt.Printf("%s", color.GreenString("> "))
}
return nil
}
func (c *Client) gopher() {
color.Cyan(Gopher)
}
// The logic for the main prompt that is run in the REPL loop
func (c *Client) executor(cmd string) {
if cmd == "" {
return
}
cmdArgs := strings.Split(cmd, " ")
switch strings.ToLower(cmdArgs[0]) {
case "quit", "exit":
color.HiBlack("Goodbye!")
os.Exit(0)
case "gopher":
c.gopher()
case "node":
color.Yellow("The 'node' command is enterprise only, not available in the influx 2.x CLI - were you looking for the 1.x InfluxDB CLI?")
case "consistency":
color.Yellow("The 'consistency' command is not available in the influx 2.x CLI - were you looking for the 1.x InfluxDB CLI?")
case "help":
c.help()
case "history":
color.Yellow("The 'history' command is not yet implemented in 2.x")
case "format":
c.setFormat(cmdArgs)
case "precision":
c.setPrecision(cmdArgs)
case "settings":
c.settings()
case "pretty":
c.togglePretty()
case "use":
c.use(cmdArgs)
case "insert":
c.insert(cmd)
case "clear":
c.clear(cmd)
default:
c.runAndShowQuery(cmd)
}
}
// Create a regex string for a named InfluxQL identifier, quoted or unquoted
func identRegex(name string) string {
return `((?P<` + name + `>\w+)|(\"(?P<` + name + `_quote>.+?)\"))`
}
// Get the value of a named InfluxQL identifier from a regex match map.
// Returns empty string if no match
func getIdentFromMatches(matches *map[string]string, name string) string {
if val, ok := (*matches)[name]; ok && val != "" {
return val
} else if val, ok := (*matches)[name+"_quote"]; ok && val != "" {
return val
}
return ""
}
// Create a regex match map from a regexp with named groups.
// Returns nil if no match.
func reSubMatchMap(r *regexp.Regexp, str string) *map[string]string {
match := r.FindStringSubmatch(str)
if match == nil {
return nil
}
subMatchMap := make(map[string]string)
for i, name := range r.SubexpNames() {
if i != 0 {
subMatchMap[name] = match[i]
}
}
return &subMatchMap
}
// Returns parsed database, retention policy, point, and if the command was an INSERT statement
// if db and rp are both blank and command was INSERT statement, it was an "INSERT <point>" statement
func ParseInsert(cmd string) (string, string, string, bool) {
// the (?i) clause makes the regex match case-insensitive
var insertIntoStart string = `^(?i)INSERT(\s+)INTO`
var insertIntoRegex string = insertIntoStart + `(\s+)` + identRegex("db") + `(\.` + identRegex("rp") + `)?(\s+)(?P<point>.+)$`
var insertRegex string = `^(?i)INSERT(\s+)(?P<point>.+)$`
var db string
var rp string
var point string
insertRgx := regexp.MustCompile(insertRegex)
insertIntoStartRgx := regexp.MustCompile(insertIntoStart)
insertIntoRgx := regexp.MustCompile(insertIntoRegex)
insertMatches := reSubMatchMap(insertRgx, cmd)
insertIntoMatches := reSubMatchMap(insertIntoRgx, cmd)
if insertIntoMatches != nil {
db = getIdentFromMatches(insertIntoMatches, "db")
rp = getIdentFromMatches(insertIntoMatches, "rp")
point = getIdentFromMatches(insertIntoMatches, "point")
} else if !insertIntoStartRgx.Match([]byte(cmd)) && insertMatches != nil {
point = getIdentFromMatches(insertMatches, "point")
} else {
return "", "", "", false
}
return db, rp, point, true
}
func (c Client) insert(cmd string) {
db, rp, point, isInsertCmd := ParseInsert(cmd)
if !isInsertCmd || point == "" {
color.Red("Expected \"INSERT INTO <database>.<retention_policy> <point>\" OR \"INSERT <point>\".")
return
} else if db == "" && rp == "" { // this is an "INSERT <point>" command
db = c.Database
rp = c.RetentionPolicy
}
buf := bytes.Buffer{}
gzw := gzip.NewWriter(&buf)
_, err := gzw.Write([]byte(point))
gzw.Close()
if err != nil {
color.Red("Failed to gzip points")
return
}
switch c.Precision {
case "h", "m", "rfc3339":
color.Red("Current precision %q unsupported for writes. Use [s, ms, ns, us]", c.Precision)
return
}
ctx := context.Background()
writeReq := c.PostLegacyWrite(ctx).
Db(db).
Rp(rp).
Precision(c.Precision).
ContentEncoding("gzip").
Body(buf.String())
if err := writeReq.Execute(); err != nil {
if err.Error() == "" {
err = ctx.Err()
if err == context.Canceled {
err = errors.New("aborted by user")
} else if err == nil {
err = errors.New("no data received")
}
}
color.Red("ERR: %v", err)
if c.Database == "" {
color.Yellow("Note: error may be due to not setting a database or retention policy.")
color.Yellow(`Please set a database with the command "use <database>"`)
return
}
}
}
type FormatType string
type FormatFunc func(api.InfluxqlJsonResponse)
var (
CsvFormat FormatType = "csv"
JsonFormat FormatType = "json"
ColumnFormat FormatType = "column"
)
func (c *Client) runAndShowQuery(query string) {
// TODO: guide users trying to use deprecated InfluxQL queries: https://github.com/influxdata/influx-cli/issues/397
ctx := context.Background()
responseStr, err := c.query(ctx, query)
if err != nil {
if err.Error() == "" {
err = ctx.Err()
if err == context.Canceled {
err = errors.New("aborted by user")
} else if err == nil {
err = errors.New("no data received")
}
}
color.Red("ERR: %v", err)
return
}
var response api.InfluxqlJsonResponse
if err := json.Unmarshal([]byte(responseStr), &response); err != nil {
color.Red("Failed to parse JSON response: %v", err)
if c.Database == "" {
color.Yellow("Warning: It is possible this error is due to not setting a database.")
color.Yellow(`Please set a database with the command "use <database>".`)
}
return
}
displayMap := map[FormatType]FormatFunc{
CsvFormat: c.outputCsv,
JsonFormat: c.outputJson,
ColumnFormat: c.outputColumns,
}
displayFunc := displayMap[c.Format]
displayFunc(response)
}
func (c *Client) help() {
fmt.Println(`Usage:
pretty toggles pretty print for the json format
use <db_name> sets current database
format <format> specifies the format of the server responses: json, csv, column
precision <format> specifies the format of the timestamp: rfc3339, h, m, s, ms, u or ns
history displays command history
settings outputs the current settings for the shell
clear clears settings such as database or retention policy. run 'clear' for help
exit/quit/ctrl+d quits the influx shell
show databases show database names
show series show series information
show measurements show measurement information
show tag keys show tag key information
show field keys show field key information
insert <point> insert point into currently-used database
A full list of influxql commands can be found at:
https://docs.influxdata.com/influxdb/latest/query_language/spec/
Keybindings:
<CTRL+D> exit
<CTRL+L> clear screen
<UP ARROW> previous command
<DOWN ARROW> next command`)
}
func (c *Client) settings() {
w := new(tabwriter.Writer)
w.Init(os.Stdout, 0, 1, 1, ' ', 0)
fmt.Fprintln(w, "Setting\tValue")
fmt.Fprintln(w, "--------\t--------")
fmt.Fprintf(w, "Database\t%s\n", c.Database)
fmt.Fprintf(w, "RetentionPolicy\t%s\n", c.RetentionPolicy)
fmt.Fprintf(w, "Pretty\t%v\n", c.Pretty)
fmt.Fprintf(w, "Format\t%s\n", c.Format)
fmt.Fprintf(w, "Precision\t%s\n", c.Precision)
fmt.Fprintln(w)
w.Flush()
}
func (c *Client) query(ctx context.Context, query string) (string, error) {
res := c.GetLegacyQuery(ctx).
Db(c.Database).
Q(query).
Rp(c.RetentionPolicy).
Accept("application/json")
// when precision is blank, the API uses RFC339 timestamps
if c.Precision != "rfc3339" && c.Precision != "" {
res = res.Epoch(c.Precision)
}
resBody, err := res.Execute()
if err != nil {
return "", err
}
return resBody, nil
}
func (c *Client) setFormat(args []string) {
// args[0] is "format"
if len(args) != 2 {
color.Red("Expected a format [csv, json, column]")
return
}
newFormat := FormatType(args[1])
switch newFormat {
case CsvFormat, JsonFormat, ColumnFormat:
c.Format = newFormat
default:
color.HiRed("Unimplemented format %q, keeping %s format.", newFormat, c.Format)
color.HiBlack("Choose a format from [csv, json, column]")
}
}
func (c *Client) setPrecision(args []string) {
// args[0] is "precision"
if len(args) != 2 {
color.Red("Expected a precision [rfc3339, ns, u, ms, s, m, or h]")
return
}
precision := args[1]
switch precision {
case "rfc3339", "ns", "u", "µ", "ms", "s", "m", "h":
c.Precision = precision
default:
color.HiRed("Unimplemented precision %q, keeping %s precision.", precision, c.Precision)
color.HiBlack("Choose a precision from [rfc3339, ns, u, ms, s, m, or h]")
}
}
func tagsEqual(prev, current map[string]string) bool {
return reflect.DeepEqual(prev, current)
}
func columnsEqual(prev, current []string) bool {
return reflect.DeepEqual(prev, current)
}
func headersEqual(prev, current api.InfluxqlJsonResponseSeries) bool {
if prev.Name != current.Name {
return false
}
return tagsEqual(prev.GetTags(), current.GetTags()) && columnsEqual(prev.GetColumns(), current.GetColumns())
}
// formatResults will behave differently if you are formatting for columns or csv
func (c *Client) formatResults(result api.InfluxqlJsonResponseResults, separator string, suppressHeaders bool) []string {
rows := []string{}
// Create a tabbed writer for each result as they won't always line up
for i, row := range result.GetSeries() {
// gather tags
tags := []string{}
for k, v := range row.GetTags() {
tags = append(tags, fmt.Sprintf("%s=%s", k, v))
sort.Strings(tags)
}
columnNames := []string{}
// Only put name/tags in a column if format is csv
if c.Format == CsvFormat {
if len(tags) > 0 {
columnNames = append([]string{"tags"}, columnNames...)
}
if row.GetName() != "" {
columnNames = append([]string{"name"}, columnNames...)
}
}
columnNames = append(columnNames, row.GetColumns()...)
// Output a line separator if we have more than one set or results and format is column
if i > 0 && c.Format == ColumnFormat && !suppressHeaders {
rows = append(rows, "")
}
// If we are column format, we break out the name/tag to separate lines
if c.Format == ColumnFormat && !suppressHeaders {
if row.GetName() != "" {
n := fmt.Sprintf("name: %s", row.GetName())
rows = append(rows, n)
}
if len(tags) > 0 {
t := fmt.Sprintf("tags: %s", (strings.Join(tags, ", ")))
rows = append(rows, t)
}
}
if !suppressHeaders {
rows = append(rows, strings.Join(columnNames, separator))
}
// if format is column, write dashes under each column
if c.Format == ColumnFormat && !suppressHeaders {
lines := []string{}
for _, columnName := range columnNames {
lines = append(lines, strings.Repeat("-", len(columnName)))
}
rows = append(rows, strings.Join(lines, separator))
}
for _, v := range row.GetValues() {
var values []string
if c.Format == CsvFormat {
if row.GetName() != "" {
values = append(values, row.GetName())
}
if len(tags) > 0 {
values = append(values, strings.Join(tags, ","))
}
}
for _, vv := range v {
values = append(values, interfaceToString(vv))
}
rows = append(rows, strings.Join(values, separator))
}
}
return rows
}
func interfaceToString(v interface{}) string {
switch t := v.(type) {
case nil:
return ""
case bool:
return fmt.Sprintf("%v", v)
case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, uintptr:
return fmt.Sprintf("%d", t)
case float32, float64:
return fmt.Sprintf("%v", t)
default:
return fmt.Sprintf("%v", t)
}
}
func (c *Client) outputCsv(response api.InfluxqlJsonResponse) {
csvw := csv.NewWriter(os.Stdout)
var previousHeaders api.InfluxqlJsonResponseSeries
for _, result := range response.GetResults() {
if result.Error != nil {
color.Red("Query Error: %v", result.GetError())
continue
}
series := result.GetSeries()
suppressHeaders := len(series) > 0 && headersEqual(previousHeaders, series[0])
if !suppressHeaders && len(result.GetSeries()) > 0 {
previousHeaders = result.GetSeries()[0]
}
// Create a tabbed writer for each result as they won't always line up
rows := c.formatResults(result, "\t", suppressHeaders)
for _, r := range rows {
csvw.Write(strings.Split(r, "\t"))
}
}
csvw.Flush()
}
func (c *Client) outputJson(response api.InfluxqlJsonResponse) {
var data []byte
var err error
if c.Pretty {
data, err = json.MarshalIndent(response, "", " ")
} else {
data, err = json.Marshal(response)
}
if err != nil {
color.Red("Unable to parse json: %s\n", err)
return
}
fmt.Println(string(data))
}
func (c *Client) outputColumns(response api.InfluxqlJsonResponse) {
// Create a tabbed writer for each result as they won't always line up
writer := new(tabwriter.Writer)
writer.Init(os.Stdin, 0, 8, 1, ' ', 0)
var previousHeaders api.InfluxqlJsonResponseSeries
for i, result := range response.GetResults() {
if result.Error != nil {
color.Red("Query Error: %v", result.GetError())
continue
}
// Check to see if the headers are the same as the previous row. If so, suppress them in the output
suppressHeaders := len(result.GetSeries()) > 0 && headersEqual(previousHeaders, result.GetSeries()[0])
if !suppressHeaders && len(result.GetSeries()) > 0 {
previousHeaders = result.GetSeries()[0]
}
// If we are suppressing headers, don't output the extra line return. If we
// aren't suppressing headers, then we put out line returns between results
// (not before the first result, and not after the last result).
if !suppressHeaders && i > 0 {
fmt.Fprintln(writer, "")
}
rows := c.formatResults(result, "\t", suppressHeaders)
for _, r := range rows {
fmt.Fprintln(writer, r)
}
}
writer.Flush()
}
func (c *Client) togglePretty() {
c.Pretty = !c.Pretty
color.HiBlack("Pretty: %v", c.Pretty)
}
func (c *Client) use(args []string) {
if len(args) != 2 {
color.Red("wrong number of args for \"use <database>\"")
return
}
parsedDb, parsedRp, err := parseDatabaseAndRetentionPolicy([]byte(args[1]))
if err != nil {
color.Red("Unable to parse: %v", err)
return
}
dbs, err := c.GetDatabases(context.Background())
if err != nil {
color.Red("Unable to check databases: %v", err)
return
}
// discover if the parsedDb is a valid database
for _, db := range dbs {
if parsedDb == db {
exists := false
prevDb := c.Database
c.Database = parsedDb
rps, _ := c.getRetentionPolicies(context.Background())
// discover if the parsedRp is a valid retention policy
for _, rp := range rps {
switch parsedRp {
case "":
c.RetentionPolicy, _ = c.getDefaultRetentionPolicy(context.Background(), c.Database)
case rp:
c.RetentionPolicy = parsedRp
default:
continue
}
c.RetentionPolicies = rps
exists = true
c.Measurements, _ = c.GetMeasurements(context.Background())
break
}
if !exists {
color.Red("No such retention policy %q exists on %q", parsedRp, c.Database)
color.HiBlack("Available retention policies on %q:", parsedDb)
for _, rp := range rps {
color.HiBlack("- %q", rp)
}
c.Database = prevDb
return
}
c.Database = parsedDb
c.Databases = dbs
return
}
}
color.Red("No such database %q exists", parsedDb)
color.HiBlack("Available databases:")
for _, db := range dbs {
color.HiBlack("- %q", db)
}
}
// Get retention policies from the currently used database
func (c *Client) getRetentionPolicies(ctx context.Context) ([]string, error) {
singleSeries, err := c.getDataSingleSeries(ctx,
fmt.Sprintf("SHOW RETENTION POLICIES ON %q", c.Database))
if err != nil {
return []string{}, err
}
nameIndex := -1
for i, colName := range singleSeries.GetColumns() {
if colName == "name" {
nameIndex = i
}
}
if nameIndex == -1 {
return []string{}, fmt.Errorf("expected a \"name\" column for retention policies")
}
var retentionPolicies []string
for _, value := range singleSeries.GetValues() {
if name, ok := value[nameIndex].(string); ok {
retentionPolicies = append(retentionPolicies, name)
} else {
return []string{}, fmt.Errorf("expected \"name\" column to contain string value")
}
}
return retentionPolicies, nil
}
// Get the default retention policy for a given database
func (c *Client) getDefaultRetentionPolicy(ctx context.Context, db string) (string, error) {
singleSeries, err := c.getDataSingleSeries(ctx,
fmt.Sprintf("SHOW RETENTION POLICIES ON %q", db))
if err != nil {
return "", err
}
nameIndex := -1
defaultIndex := -1
for i, colName := range singleSeries.GetColumns() {
if colName == "default" {
defaultIndex = i
} else if colName == "name" {
nameIndex = i
}
}
if nameIndex == -1 {
return "", fmt.Errorf("expected a \"name\" column for retention policies")
}
if defaultIndex == -1 {
return "", fmt.Errorf("expected a \"default\" column for retention policies")
}
for _, value := range singleSeries.GetValues() {
isDefault := value[defaultIndex]
if isDefault, ok := isDefault.(bool); ok {
if isDefault {
if name, ok := value[nameIndex].(string); ok {
return name, nil
} else {
return "", fmt.Errorf("expected \"name\" column to contain string value")
}
}
} else {
return "", fmt.Errorf("expected \"default\" column to contain boolean value")
}
}
return "", fmt.Errorf("no default retention policy")
}
// Get list of database names
func (c *Client) GetDatabases(ctx context.Context) ([]string, error) {
singleSeries, err := c.getDataSingleSeries(ctx, "SHOW DATABASES")
if err != nil {
return []string{}, err
}
values := singleSeries.GetValues()
var databases []string
for _, value := range values {
for _, db := range value {
if db, ok := db.(string); ok {
databases = append(databases, db)
} else {
return []string{}, fmt.Errorf("expected database names to be strings")
}
}
}
return databases, nil
}
// Get list of measurements for currently used database and retention policy
func (c *Client) GetMeasurements(ctx context.Context) ([]string, error) {
singleSeries, err := c.getDataSingleSeries(ctx, "SHOW MEASUREMENTS")
if err != nil {
return []string{}, err
}
var measures []string
for _, measureArr := range singleSeries.GetValues() {
if len(measureArr) != 1 {
return []string{}, fmt.Errorf("expected a single measurement name in each array in values array")
}
if measure, ok := measureArr[0].(string); ok {
measures = append(measures, measure)
} else {
return []string{}, fmt.Errorf("expected measurement name to be a string")
}
}
return measures, nil
}
// Helper function to execute query & parse response, expecting a single series
func (c *Client) getDataSingleSeries(ctx context.Context, query string) (*api.InfluxqlJsonResponseSeries, error) {
res := c.GetLegacyQuery(ctx).
Db(c.Database).
Q(query).
Rp(c.RetentionPolicy).
Accept("application/json")
// when c.Precision is empty, the API returns timestamps in RFC3339 format
if c.Precision != "rfc3339" && c.Precision != "" {
res.Epoch(c.Precision)
}
resBody, err := res.Execute()
if err != nil {
return nil, err
}
var responses api.InfluxqlJsonResponse
if err := json.Unmarshal([]byte(resBody), &responses); err != nil {
return nil, err
}
results := responses.GetResults()
if len(results) != 1 {
return nil, fmt.Errorf("expected a single result from single query")
}
result := results[0]
series := result.GetSeries()
if len(series) != 1 {
return nil, fmt.Errorf("expected a single series from single result")
}
return &series[0], nil
}
// Parse database and retention policy from byte slice.
// Expects format like "db"."rp", db.rp, db, "db".
func parseDatabaseAndRetentionPolicy(stmt []byte) (string, string, error) {
var db, rp []byte
var quoted bool
var seperatorCount int
stmt = bytes.TrimSpace(stmt)
for _, b := range stmt {
if b == '"' {
quoted = !quoted
continue
}
if b == '.' && !quoted {
seperatorCount++
if seperatorCount > 1 {
return "", "", fmt.Errorf("unable to parse database and retention policy from %s", string(stmt))
}
continue
}
if seperatorCount == 1 {
rp = append(rp, b)
continue
}
db = append(db, b)
}
return string(db), string(rp), nil
}

View File

@ -0,0 +1,142 @@
package v1repl_test
import (
"testing"
v1repl "github.com/influxdata/influx-cli/v2/clients/v1_repl"
)
var point = `weather,location=us-midwest temperature=82 1465839830100400200`
var db = "test_database"
var quotedDb = `"test_database"`
var rp = "test_retention_policy"
var quotedRp = `"test_retention_policy"`
type InsertTestCase struct {
cmd string
expectedDb string
expectedRp string
expectedPoint string
}
func (it *InsertTestCase) Test(t *testing.T) {
db, rp, point, isInsert := v1repl.ParseInsert(it.cmd)
if !isInsert {
t.Errorf("%q should be a valid INSERT command", it.cmd)
} else {
if db != it.expectedDb {
t.Errorf("Db mismatch: expected: %s, got: %s", it.expectedDb, db)
}
if rp != it.expectedRp {
t.Errorf("Rp mismatch: expected: %s, got: %s", it.expectedRp, rp)
}
if point != it.expectedPoint {
t.Errorf("Point mismatch: expected: %s, got: %s", it.expectedPoint, point)
}
}
}
var insertIntoCmds = []InsertTestCase{
{
cmd: `insert into ` + quotedDb + " " + point,
expectedDb: db,
expectedRp: "",
expectedPoint: point,
},
{
cmd: `insert into ` + quotedDb + "." + quotedRp + " " + point,
expectedDb: db,
expectedRp: rp,
expectedPoint: point,
},
{
cmd: `insert into ` + quotedDb + " " + point,
expectedDb: db,
expectedRp: "",
expectedPoint: point,
},
{
cmd: `insert into ` + quotedDb + "." + quotedRp + " " + point,
expectedDb: db,
expectedRp: rp,
expectedPoint: point,
},
{
cmd: `insert into ` + quotedDb + " " + point,
expectedDb: db,
expectedRp: "",
expectedPoint: point,
},
{
cmd: `InSeRt INtO ` + quotedDb + "." + quotedRp + " " + point,
expectedDb: db,
expectedRp: rp,
expectedPoint: point,
},
{
cmd: `INSERT INTO ` + quotedDb + "." + quotedRp + " " + point,
expectedDb: db,
expectedRp: rp,
expectedPoint: point,
},
}
var insertCmds = []InsertTestCase{
{
cmd: `INSERT ` + point,
expectedDb: "",
expectedRp: "",
expectedPoint: point,
},
{
cmd: `insert ` + point,
expectedDb: "",
expectedRp: "",
expectedPoint: point,
},
{
cmd: `INSERT ` + point,
expectedDb: "",
expectedRp: "",
expectedPoint: point,
},
{
cmd: `insert ` + point,
expectedDb: "",
expectedRp: "",
expectedPoint: point,
},
}
var invalidCmds = []string{
`insert` + point,
`insert into ` + point,
`INSERT` + point,
`insert into . ` + point,
`insert into ` + quotedDb + `. ` + point,
`insertinto ` + quotedDb + ` ` + point,
`insert into ` + quotedDb + `.` + quotedRp + ". " + point,
}
func TestParseInsert(t *testing.T) {
t.Parallel()
for _, insertCmd := range insertCmds {
insertCmd.Test(t)
}
}
func TestParseInsertInto(t *testing.T) {
t.Parallel()
for _, insertIntoCmd := range insertIntoCmds {
insertIntoCmd.Test(t)
}
}
func TestParseInsertInvalid(t *testing.T) {
t.Parallel()
for _, cmd := range invalidCmds {
if _, _, _, isValid := v1repl.ParseInsert(cmd); isValid {
t.Errorf("%q should be an invalid INSERT command", cmd)
}
}
}

View File

@ -13,6 +13,7 @@ func newV1SubCommand() cli.Command {
Subcommands: []cli.Command{
newV1DBRPCmd(),
newV1AuthCommand(),
newV1ReplCmd(),
},
}
}

44
cmd/influx/v1_repl.go Normal file
View File

@ -0,0 +1,44 @@
package main
import (
"github.com/fatih/color"
"github.com/influxdata/influx-cli/v2/api"
"github.com/influxdata/influx-cli/v2/clients"
repl "github.com/influxdata/influx-cli/v2/clients/v1_repl"
"github.com/influxdata/influx-cli/v2/pkg/cli/middleware"
"github.com/urfave/cli"
)
type Client struct {
clients.CLI
api.LegacyQueryApi
}
func newV1ReplCmd() cli.Command {
var orgParams clients.OrgParams
persistentQueryParams := repl.DefaultPersistentQueryParams()
return cli.Command{
Name: "repl",
Usage: "Start an InfluxQL REPL",
Description: "Start an InfluxQL REPL",
Before: middleware.WithBeforeFns(withCli(), withApi(true)),
Flags: append(commonFlagsNoPrint(), getOrgFlags(&orgParams)...),
Action: func(ctx *cli.Context) error {
if err := checkOrgFlags(&orgParams); err != nil {
return err
}
api := getAPI(ctx)
c := repl.Client{
CLI: getCLI(ctx),
PersistentQueryParams: persistentQueryParams,
PingApi: api.PingApi,
LegacyQueryApi: api.LegacyQueryApi,
OrganizationsApi: api.OrganizationsApi,
LegacyWriteApi: api.LegacyWriteApi,
DBRPsApi: api.DBRPsApi,
}
color.Cyan("InfluxQL Shell %s", version)
return c.Create(getContext(ctx))
},
}
}

14
go.mod
View File

@ -3,7 +3,7 @@ module github.com/influxdata/influx-cli/v2
go 1.18
require (
github.com/AlecAivazis/survey/v2 v2.2.9
github.com/AlecAivazis/survey/v2 v2.3.4
github.com/BurntSushi/toml v0.4.1
github.com/MakeNowJust/heredoc/v2 v2.0.1
github.com/daixiang0/gci v0.2.8
@ -12,7 +12,7 @@ require (
github.com/gocarina/gocsv v0.0.0-20210408192840-02d7211d929d
github.com/golang/mock v1.5.0
github.com/google/go-jsonnet v0.17.0
github.com/mattn/go-isatty v0.0.13
github.com/mattn/go-isatty v0.0.14
github.com/olekukonko/tablewriter v0.0.5
github.com/stretchr/testify v1.7.0
github.com/urfave/cli v1.22.5
@ -28,18 +28,18 @@ require (
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
github.com/mattn/go-colorable v0.1.4 // indirect
github.com/mattn/go-runewidth v0.0.9 // indirect
github.com/mattn/go-colorable v0.1.12 // indirect
github.com/mattn/go-runewidth v0.0.13 // indirect
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/rivo/uniseg v0.2.0 // indirect
github.com/russross/blackfriday/v2 v2.0.1 // indirect
github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect
github.com/stretchr/objx v0.1.0 // indirect
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 // indirect
golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e // indirect
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 // indirect
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 // indirect
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect
golang.org/x/term v0.0.0-20220411215600-e5f449aeb171 // indirect
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
)

46
go.sum
View File

@ -1,14 +1,16 @@
github.com/AlecAivazis/survey/v2 v2.2.9 h1:LWvJtUswz/W9/zVVXELrmlvdwWcKE60ZAw0FWV9vssk=
github.com/AlecAivazis/survey/v2 v2.2.9/go.mod h1:9DYvHgXtiXm6nCn+jXnOXLKbH+Yo9u8fAS/SduGdoPk=
github.com/AlecAivazis/survey/v2 v2.3.4 h1:pchTU9rsLUSvWEl2Aq9Pv3k0IE2fkqtGxazskAMd9Ng=
github.com/AlecAivazis/survey/v2 v2.3.4/go.mod h1:hrV6Y/kQCLhIZXGcriDCUBtB3wnN7156gMXJ3+b23xM=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/toml v0.4.1 h1:GaI7EiDXDRfa8VshkTj7Fym7ha+y8/XxIgD2okUIjLw=
github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/MakeNowJust/heredoc/v2 v2.0.1 h1:rlCHh70XXXv7toz95ajQWOWQnN4WNLt0TdpZYIR/J6A=
github.com/MakeNowJust/heredoc/v2 v2.0.1/go.mod h1:6/2Abh5s+hc3g9nbWLe9ObDIOhaRrqsyY9MWy+4JdRM=
github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8 h1:xzYJEypr/85nBpB11F9br+3HUrpgb+fcm5iADzXXYEw=
github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8/go.mod h1:oX5x61PbNXchhh0oikYAH+4Pcfw5LKv21+Jnpr6r6Pc=
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s=
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/creack/pty v1.1.17 h1:QeVUsEDNrLBW4tMgZHvxy18sKtr6VI492kBhUfhDJNI=
github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
github.com/daixiang0/gci v0.2.8 h1:1mrIGMBQsBu0P7j7m1M8Lb+ZeZxsZL+jyGX4YoMJJpg=
github.com/daixiang0/gci v0.2.8/go.mod h1:+4dZ7TISfSmqfAGv59ePaHfNzgGtIkHAhhdKggP1JAc=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@ -29,32 +31,34 @@ github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-jsonnet v0.17.0 h1:/9NIEfhK1NQRKl3sP2536b2+x5HnZMdql7x3yK/l8JY=
github.com/google/go-jsonnet v0.17.0/go.mod h1:sOcuej3UW1vpPTZOr8L7RQimqai1a57bt5j22LzGZCw=
github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174 h1:WlZsjVhE8Af9IcZDGgJGQpNflI3+MJSBhsgT5PCtzBQ=
github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174/go.mod h1:DqJ97dSdRW1W22yXSB90986pcOyQ7r45iio1KN2ez1A=
github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog=
github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.4 h1:5Myjjh3JY/NaAi4IsUbHADytDyl1VE1Y9PXDlL+P/VQ=
github.com/kr/pty v1.1.4/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40=
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
github.com/mattn/go-isatty v0.0.13 h1:qdl+GuBjcsKKDco5BsxPJlId98mSWNKqYA+Co0SC1yA=
github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=
github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
@ -63,8 +67,8 @@ github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5I
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/urfave/cli v1.22.5 h1:lNq9sAHXK2qfdI8W+GRItjCEkI+2oR4d+MEHy1CKXoU=
@ -73,11 +77,8 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec
go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU=
go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e h1:qyrTQ++p1afMkO4DPEeLGq/3oTsdlvdH4vqZUBWzUKM=
golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
@ -91,16 +92,17 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190530182044-ad28b68e88f1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 h1:id054HUawV2/6IGm2IV8KZQjqtwAOo2CYlOToYqa0d0=
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20210503060354-a79de5458b56/go.mod h1:tfny5GFUkzUvx4ps4ajbZsCe5lw1metzhBm9T3x7oIY=
golang.org/x/term v0.0.0-20220411215600-e5f449aeb171 h1:EH1Deb8WZJ0xc0WK//leUHXcX9aLE5SymusoTmMZye8=
golang.org/x/term v0.0.0-20220411215600-e5f449aeb171/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=