Documentation
¶
Overview ¶
Package cloudapi contains several things related to the k6 cloud - various data and config structures, a REST API client, log streaming logic, etc. They are all used in cloud tests (i.e. `k6 cloud`), and in local tests emitting their results to the k6 cloud output (i.e. `k6 run --out cloud`).
Index ¶
- Constants
- func CheckResponse(r *http.Response) error
- func GetTemporaryCloudConfig(cloudConfig json.RawMessage, external map[string]json.RawMessage) (map[string]any, error)
- func URLForResults(refID string, config Config) string
- type Client
- func (c *Client) BaseURL() string
- func (c *Client) CreateTestRun(testRun *TestRun) (*CreateTestRunResponse, error)
- func (c *Client) Do(req *http.Request, v any) error
- func (c *Client) GetTestProgress(referenceID string) (*TestProgressResponse, error)
- func (c *Client) Login(email string, password string) (*LoginResponse, error)
- func (c *Client) NewRequest(method, url string, data any) (*http.Request, error)
- func (c *Client) SetStackID(stackID int64)
- func (c *Client) StartCloudTestRun(name string, projectID int64, arc *lib.Archive) (*CreateTestRunResponse, error)
- func (c *Client) StopCloudTestRun(referenceID string) error
- func (c *Client) TestFinished(referenceID string, thresholds ThresholdResult, tained bool, ...) error
- func (c *Client) UploadTestOnly(name string, projectID int64, arc *lib.Archive) (*CreateTestRunResponse, error)
- func (c *Client) ValidateOptions(options lib.Options) error
- func (c *Client) ValidateToken() (*ValidateTokenResponse, error)
- type Config
- type CreateTestRunResponse
- type LogEntry
- type LoginResponse
- type ResponseError
- type ResultStatus
- type RunStatus
- type TestProgressResponse
- type TestRun
- type ThresholdResult
- type ValidateTokenResponse
Constants ¶
const ( // RetryInterval is the default cloud request retry interval RetryInterval = 500 * time.Millisecond // MaxRetries specifies max retry attempts MaxRetries = 3 )
const LegacyCloudConfigKey = "loadimpact"
LegacyCloudConfigKey is the key used in the JSON config for the cloud output.
Variables ¶
This section is empty.
Functions ¶
func CheckResponse ¶
CheckResponse checks the parsed response. It returns nil if the code is in the successful range, otherwise it tries to parse the body and return a parsed error.
func GetTemporaryCloudConfig ¶
func GetTemporaryCloudConfig( cloudConfig json.RawMessage, external map[string]json.RawMessage, ) (map[string]any, error)
GetTemporaryCloudConfig returns a temporary cloud config. Original comment TODO: Fix this We reuse cloud.Config for parsing options.cloud (or legacy loadimpact struct), but this probably shouldn't be done, as the idea of options.ext is that they are extensible without touching k6. But in order for this to happen, we shouldn't actually marshal cloud.Config on top of it, because it will be missing some fields that aren't actually mentioned in the struct. So in order for use to copy the fields that we need for k6 cloud's api we unmarshal in map[string]any and copy what we need if it isn't set already
func URLForResults ¶
URLForResults returns the cloud URL with the test run results.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client handles communication with the k6 Cloud API.
func NewClient ¶
func NewClient(logger logrus.FieldLogger, token, host, version string, timeout time.Duration) *Client
NewClient return a new client for the cloud API
func (*Client) CreateTestRun ¶
func (c *Client) CreateTestRun(testRun *TestRun) (*CreateTestRunResponse, error)
CreateTestRun is used when a test run is being executed locally, while the results are streamed to the cloud, i.e. `k6 cloud run --local-execution` or `k6 run --out cloud script.js`.
func (*Client) GetTestProgress ¶
func (c *Client) GetTestProgress(referenceID string) (*TestProgressResponse, error)
GetTestProgress for the provided referenceID.
func (*Client) Login ¶
func (c *Client) Login(email string, password string) (*LoginResponse, error)
Login the user with the specified email and password.
func (*Client) NewRequest ¶
NewRequest creates new HTTP request.
This is the same as http.NewRequest, except that data if not nil will be serialized in json format.
func (*Client) SetStackID ¶
SetStackID sets the stack ID for the client.
func (*Client) StartCloudTestRun ¶
func (c *Client) StartCloudTestRun(name string, projectID int64, arc *lib.Archive) (*CreateTestRunResponse, error)
StartCloudTestRun starts a cloud test run, i.e. `k6 cloud script.js`.
func (*Client) StopCloudTestRun ¶
StopCloudTestRun tells the cloud to stop the test with the provided referenceID.
func (*Client) TestFinished ¶
func (c *Client) TestFinished(referenceID string, thresholds ThresholdResult, tained bool, runStatus RunStatus) error
TestFinished sends the result and run status values to the cloud, along with information for the test thresholds, and marks the test run as finished.
func (*Client) UploadTestOnly ¶
func (c *Client) UploadTestOnly(name string, projectID int64, arc *lib.Archive) (*CreateTestRunResponse, error)
UploadTestOnly uploads a test run to the cloud without actually starting it.
func (*Client) ValidateOptions ¶
ValidateOptions sends the provided options to the cloud for validation.
func (*Client) ValidateToken ¶
func (c *Client) ValidateToken() (*ValidateTokenResponse, error)
ValidateToken calls the endpoint to validate the Client's token and returns the result.
type Config ¶
type Config struct {
// TODO: refactor common stuff between cloud execution and output
StackID null.Int `json:"stackID" envconfig:"K6_CLOUD_STACK_ID"`
StackURL null.String `json:"stackURL" envconfig:"K6_CLOUD_STACK_URL"`
DefaultProjectID null.Int `json:"defaultProjectID"`
Token null.String `json:"token" envconfig:"K6_CLOUD_TOKEN"`
ProjectID null.Int `json:"projectID" envconfig:"K6_CLOUD_PROJECT_ID"`
Name null.String `json:"name" envconfig:"K6_CLOUD_NAME"`
Host null.String `json:"host" envconfig:"K6_CLOUD_HOST"`
Hostv6 null.String `json:"hostv6" envconfig:"K6_CLOUD_HOST_V6"` // For test purposes only
Timeout types.NullDuration `json:"timeout" envconfig:"K6_CLOUD_TIMEOUT"`
LogsTailURL null.String `json:"-" envconfig:"K6_CLOUD_LOGS_TAIL_URL"`
WebAppURL null.String `json:"webAppURL" envconfig:"K6_CLOUD_WEB_APP_URL"`
TestRunDetails null.String `json:"testRunDetails" envconfig:"K6_CLOUD_TEST_RUN_DETAILS"`
NoCompress null.Bool `json:"noCompress" envconfig:"K6_CLOUD_NO_COMPRESS"`
StopOnError null.Bool `json:"stopOnError" envconfig:"K6_CLOUD_STOP_ON_ERROR"`
APIVersion null.Int `json:"apiVersion" envconfig:"K6_CLOUD_API_VERSION"`
// PushRefID is the identifier used by k6 Cloud to correlate all the things that
// belong to the same test run/execution. Currently, it is equivalent to the test run id.
// But, in the future, or in future solutions (e.g. Synthetic Monitoring), there might be
// no test run id, and we may still need an identifier to correlate all the things.
PushRefID null.String `json:"pushRefID" envconfig:"K6_CLOUD_PUSH_REF_ID"`
// Defines the max allowed number of time series in a single batch.
MaxTimeSeriesInBatch null.Int `json:"maxTimeSeriesInBatch" envconfig:"K6_CLOUD_MAX_TIME_SERIES_IN_BATCH"`
// The time interval between periodic API calls for sending samples to the cloud ingest service.
MetricPushInterval types.NullDuration `json:"metricPushInterval" envconfig:"K6_CLOUD_METRIC_PUSH_INTERVAL"`
// This is how many concurrent pushes will be done at the same time to the cloud
MetricPushConcurrency null.Int `json:"metricPushConcurrency" envconfig:"K6_CLOUD_METRIC_PUSH_CONCURRENCY"`
// If specified and is greater than 0, sample aggregation with that period is enabled
AggregationPeriod types.NullDuration `json:"aggregationPeriod" envconfig:"K6_CLOUD_AGGREGATION_PERIOD"`
// If aggregation is enabled, this specifies how long we'll wait for period samples to accumulate before trying to aggregate them.
AggregationWaitPeriod types.NullDuration `json:"aggregationWaitPeriod" envconfig:"K6_CLOUD_AGGREGATION_WAIT_PERIOD"`
// Indicates whether to send traces to the k6 Insights backend service.
TracesEnabled null.Bool `json:"tracesEnabled" envconfig:"K6_CLOUD_TRACES_ENABLED"`
// The host of the k6 Insights backend service.
TracesHost null.String `json:"traceHost" envconfig:"K6_CLOUD_TRACES_HOST"`
// This is how many concurrent pushes will be done at the same time to the cloud
TracesPushConcurrency null.Int `json:"tracesPushConcurrency" envconfig:"K6_CLOUD_TRACES_PUSH_CONCURRENCY"`
// The time interval between periodic API calls for sending samples to the cloud ingest service.
TracesPushInterval types.NullDuration `json:"tracesPushInterval" envconfig:"K6_CLOUD_TRACES_PUSH_INTERVAL"`
}
Config holds all the necessary data and options for sending metrics to the k6 Cloud.
func GetConsolidatedConfig ¶
func GetConsolidatedConfig( jsonRawConf json.RawMessage, env map[string]string, configArg string, cloudConfig json.RawMessage, external map[string]json.RawMessage, ) (Config, string, error)
GetConsolidatedConfig combines the default config values with the JSON config values and environment variables and returns the final result. it also returns a warning message that could be shown to the user. to bring some attention to the fact that the user.
func NewConfig ¶
func NewConfig() Config
NewConfig creates a new Config instance with default values for some fields.
type CreateTestRunResponse ¶
type CreateTestRunResponse struct {
ReferenceID string `json:"reference_id"`
ConfigOverride *Config `json:"config"`
Logs []LogEntry `json:"logs"`
}
CreateTestRunResponse represents the response of successfully created test run in the cloud.
type LogEntry ¶
LogEntry can be used by the cloud to tell k6 to log something to the console, so the user can see it.
type LoginResponse ¶
type LoginResponse struct {
Token string `json:"token"`
}
LoginResponse includes the token after a successful login.
type ResponseError ¶
type ResponseError struct {
Response *http.Response `json:"-"`
Code int `json:"code"`
Message string `json:"message"`
Details map[string][]string `json:"details"`
FieldErrors map[string][]string `json:"field_errors"`
Errors []string `json:"errors"`
}
ResponseError represents an error cause by talking to the API
func (ResponseError) Error ¶
func (e ResponseError) Error() string
type ResultStatus ¶
type ResultStatus int
ResultStatus represents the result status of a test.
const ( // ResultStatusPassed means the test has passed ResultStatusPassed ResultStatus = 0 // ResultStatusFailed means the test has failed ResultStatusFailed ResultStatus = 1 )
type RunStatus ¶
type RunStatus int
RunStatus values are used to tell the cloud output how a local test run ended, and to get that information from the cloud for cloud tests.
const ( RunStatusCreated RunStatus = -2 RunStatusValidated RunStatus = -1 RunStatusQueued RunStatus = 0 RunStatusInitializing RunStatus = 1 RunStatusRunning RunStatus = 2 RunStatusFinished RunStatus = 3 RunStatusTimedOut RunStatus = 4 RunStatusAbortedUser RunStatus = 5 RunStatusAbortedSystem RunStatus = 6 RunStatusAbortedScriptError RunStatus = 7 RunStatusAbortedThreshold RunStatus = 8 RunStatusAbortedLimit RunStatus = 9 RunStatusArchived RunStatus = 10 )
Possible run status values; iota isn't used intentionally
type TestProgressResponse ¶
type TestProgressResponse struct {
RunStatusText string `json:"run_status_text"`
RunStatus RunStatus `json:"run_status"`
ResultStatus ResultStatus `json:"result_status"`
Progress float64 `json:"progress"`
}
TestProgressResponse represents the progress of a cloud test.
type TestRun ¶
type TestRun struct {
Name string `json:"name"`
ProjectID int64 `json:"project_id,omitempty"`
VUsMax int64 `json:"vus"`
Thresholds map[string][]string `json:"thresholds"`
// Duration of test in seconds. -1 for unknown length, 0 for continuous running.
Duration int64 `json:"duration"`
// Archive is the test script archive to (maybe) upload to the cloud.
Archive *lib.Archive `json:"-"`
}
TestRun represents a test run.
type ThresholdResult ¶
ThresholdResult is a helper type to make sending the thresholds result to the cloud.
type ValidateTokenResponse ¶
type ValidateTokenResponse struct {
IsValid bool `json:"is_valid"`
Message string `json:"message"`
Token string `json:"token-info"`
}
ValidateTokenResponse is the response of a token validation.