v1alpha2

package
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 11, 2020 License: Apache-2.0 Imports: 7 Imported by: 0

Documentation

Overview

Package v1alpha2 contains API Schema definitions for the iter8 v1alpha2 API group +k8s:openapi-gen=true +k8s:deepcopy-gen=package,register +k8s:conversion-gen=github.com/iter8-tools/iter8-controller/pkg/apis/iter8 +k8s:defaulter-gen=TypeMeta +groupName=iter8.tools

Package v1alpha2 contains API Schema definitions for the iter8 v1alpha2 API group +k8s:openapi-gen=true +k8s:deepcopy-gen=package,register +k8s:conversion-gen=github.com/iter8-tools/iter8-controller/pkg/apis/iter8 +k8s:defaulter-gen=TypeMeta +groupName=iter8.tools

Index

Constants

View Source
const (
	ReasonTargetsFound            = "TargetsFound"
	ReasonTargetsError            = "TargetsError"
	ReasonAnalyticsServiceError   = "AnalyticsServiceError"
	ReasonAnalyticsServiceRunning = "AnalyticsServiceRunning"
	ReasonIterationUpdate         = "IterationUpdate"
	ReasonAssessmentUpdate        = "AssessmentUpdate"
	ReasonTrafficUpdate           = "TrafficUpdate"
	ReasonExperimentCompleted     = "ExperimentCompleted"
	ReasonSyncMetricsError        = "SyncMetricsError"
	ReasonSyncMetricsSucceeded    = "SyncMetricsSucceeded"
	ReasonRoutingRulesError       = "RoutingRulesError"
	ReasonRoutingRulesReady       = "RoutingRulesReady"
	ReasonActionPause             = "ActionPause"
	ReasonActionResume            = "ActionResume"
)

A set of reason setting the experiment condition status

View Source
const (
	// DefaultRewardMetric indicate whether a metric is a reward by default, which is false
	DefaultRewardMetric bool = false

	// DefaultZeroToOne indicate whether the value range of metric is from 0 to 1  by default, which is false
	DefaultZeroToOne bool = false

	// DefaultCleanup indicate whether router and targets receiving no traffic should be deleted after expreriment
	DefaultCleanup bool = false

	// DefaultStrategy is the default value for strategy, which is progressive
	DefaultStrategy StrategyType = StrategyProgressive

	// DefaultOnTermination is the default value for onTermination, which is to_winner
	DefaultOnTermination OnTerminationType = OnTerminationToWinner

	// DefaultPercentage is the default traffic percentage used in experiment, which is 100
	DefaultPercentage int32 = 100

	// DefaultMaxIncrement is the default maxIncrement for traffic update, which is 2
	DefaultMaxIncrement int32 = 2

	// DefaultDuration is the default duration for an interval, which is 30 seconds
	DefaultDuration time.Duration = time.Second * 30

	// DefaultMaxIterations is the default number of iterations, which is 100
	DefaultMaxIterations int32 = 100

	// DefaultAnalyticsEndpoint is the default endpoint of analytics
	DefaultAnalyticsEndpoint string = "http://iter8-analytics:8080"
)
View Source
const (
	ExperimentTypePerformance string = "Perfromance"
	ExperimentTypeCanary      string = "Canary"
	ExperimentTypeAB          string = "A/B"
	ExperimentTypeABN         string = "A/B/N"
)

Variables

View Source
var (
	// SchemeGroupVersion is group version used to register these objects
	SchemeGroupVersion = schema.GroupVersion{Group: "iter8.tools", Version: "v1alpha2"}

	// SchemeBuilder is used to add go types to the GroupVersionKind scheme
	SchemeBuilder runtime.SchemeBuilder

	AddToScheme = SchemeBuilder.AddToScheme
)

Functions

func Resource

func Resource(resource string) schema.GroupResource

Resource is required by pkg/client/listers/...

Types

type ActionType

type ActionType string

ActionType provides options for override actions

const (
	// ActionPause is an action to pause the experiment
	ActionPause ActionType = "pause"

	// ActionResume is an action to resume the experiment
	ActionResume ActionType = "resume"

	// ActionTerminate is an action to terminate the experiment
	ActionTerminate ActionType = "terminate"
)

type Assessment

type Assessment struct {
	// Assessment details of baseline
	Baseline VersionAssessment `json:"baseline"`

	// Assessment details of each candidate
	Candidates []VersionAssessment `json:"candidates"`

	// Assessment for winner target if exists
	Winner *WinnerAssessment `json:"winner,omitempty"`
}

Assessment details for the each target

func (*Assessment) DeepCopy

func (in *Assessment) DeepCopy() *Assessment

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Assessment.

func (*Assessment) DeepCopyInto

func (in *Assessment) DeepCopyInto(out *Assessment)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type Conditions

type Conditions []*ExperimentCondition

Conditions is a list of ExperimentConditions

func (Conditions) DeepCopy

func (in Conditions) DeepCopy() Conditions

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Conditions.

func (Conditions) DeepCopyInto

func (in Conditions) DeepCopyInto(out *Conditions)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type CounterMetric

type CounterMetric struct {
	// Name of metric
	Name string `json:"name" yaml:"name"`

	// Query template of this metric
	QueryTemplate string `json:"query_template" yaml:"query_template"`

	// Preferred direction of the metric value
	// +optional
	PreferredDirection *string `json:"preferred_direction,omitempty" yaml:"preferred_direction,omitempty"`

	// Unit of the metric value
	// +optional
	Unit *string `json:"unit,omitempty" yaml:"unit,omitempty"`
}

CounterMetric is the definition of Counter Metric

func (*CounterMetric) DeepCopy

func (in *CounterMetric) DeepCopy() *CounterMetric

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CounterMetric.

func (*CounterMetric) DeepCopyInto

func (in *CounterMetric) DeepCopyInto(out *CounterMetric)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type Criterion

type Criterion struct {
	// Name of metric used in the assessment
	Metric string `json:"metric"`

	// Threshold specifies the numerical value for a success criterion
	// Metric value above threhsold violates the criterion
	// +optional
	Threshold *Threshold `json:"threshold,omitempty"`

	// IsReward indicates whether the metric is a reward metric or not
	// +optional
	IsReward *bool `json:"isReward,omitempty"`
}

Criterion defines the criterion for assessing a target

func (*Criterion) DeepCopy

func (in *Criterion) DeepCopy() *Criterion

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Criterion.

func (*Criterion) DeepCopyInto

func (in *Criterion) DeepCopyInto(out *Criterion)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*Criterion) HasRewardMetric

func (c *Criterion) HasRewardMetric() bool

HasRewardMetric indicates whether this criterion uses a reward metric or not

type Duration

type Duration struct {
	// Interval specifies duration between iterations
	// default is 30s
	// +optional
	Interval *string `json:"interval,omitempty"`
	// MaxIterations indicates the amount of iteration
	// default is 100
	// +optional
	MaxIterations *int32 `json:"maxIterations,omitempty"`
}

Duration specifies how often/many times the expriment should re-evaluate the assessment

func (*Duration) DeepCopy

func (in *Duration) DeepCopy() *Duration

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Duration.

func (*Duration) DeepCopyInto

func (in *Duration) DeepCopyInto(out *Duration)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type Experiment

type Experiment struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	Spec ExperimentSpec `json:"spec"`
	// +optional
	Status ExperimentStatus `json:"status,omitempty"`
}

Experiment contains the sections for -- defining an experiment, showing experiment status, +k8s:openapi-gen=true +kubebuilder:subresource:status +kubebuilder:categories=all,iter8 +kubebuilder:printcolumn:name="type",type="string",JSONPath=".status.experimentType",description="Type of experiment",format="byte" +kubebuilder:printcolumn:name="hosts",type="string",JSONPath=".status.effectiveHosts",description="Names of candidates",format="byte" +kubebuilder:printcolumn:name="phase",type="string",JSONPath=".status.phase",description="Phase of the experiment",format="byte" +kubebuilder:printcolumn:name="winner found",type="boolean",JSONPath=".status.assessment.winner.winning_version_found",description="Winner identified",format="byte" +kubebuilder:printcolumn:name="current best",type="string",JSONPath=".status.assessment.winner.name",description="Current best version",format="byte" +kubebuilder:printcolumn:name="confidence",priority=1,type="string",JSONPath=".status.assessment.winner.probability_of_winning_for_best_version",description="Confidence current bets version will be the winner",format="float" +kubebuilder:printcolumn:name="status",type="string",JSONPath=".status.message",description="Detailed Status of the experiment",format="byte" +kubebuilder:printcolumn:name="baseline",priority=1,type="string",JSONPath=".spec.service.baseline",description="Name of baseline",format="byte" +kubebuilder:printcolumn:name="candidates",priority=1,type="string",JSONPath=".spec.service.candidates",description="Names of candidates",format="byte"

func (*Experiment) DeepCopy

func (in *Experiment) DeepCopy() *Experiment

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Experiment.

func (*Experiment) DeepCopyInto

func (in *Experiment) DeepCopyInto(out *Experiment)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*Experiment) DeepCopyObject

func (in *Experiment) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

func (*Experiment) InitStatus

func (e *Experiment) InitStatus()

InitStatus initialize status value of an experiment

func (*Experiment) ServiceNamespace

func (e *Experiment) ServiceNamespace() string

ServiceNamespace gets the namespace for targets

type ExperimentCondition

type ExperimentCondition struct {
	// Type of the condition
	Type ExperimentConditionType `json:"type"`

	// Status of the condition
	Status corev1.ConditionStatus `json:"status"`

	// The time when this condition is last updated
	// +optional
	LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty"`

	// Reason for the last update
	// +optional
	Reason *string `json:"reason,omitempty"`

	// Detailed explanation on the update
	// +optional
	Message *string `json:"message,omitempty"`
}

ExperimentCondition describes a condition of an experiment

func (*ExperimentCondition) DeepCopy

func (in *ExperimentCondition) DeepCopy() *ExperimentCondition

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExperimentCondition.

func (*ExperimentCondition) DeepCopyInto

func (in *ExperimentCondition) DeepCopyInto(out *ExperimentCondition)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ExperimentCondition) IsFalse

func (c *ExperimentCondition) IsFalse() bool

IsFalse tells whether the experiment condition is false or not

func (*ExperimentCondition) IsTrue

func (c *ExperimentCondition) IsTrue() bool

IsTrue tells whether the experiment condition is true or not

type ExperimentConditionType

type ExperimentConditionType string

ExperimentConditionType limits conditions can be set by controller

const (
	// ExperimentConditionTargetsProvided has status True when the Experiment detects all elements specified in targetService
	ExperimentConditionTargetsProvided ExperimentConditionType = "TargetsProvided"

	// ExperimentConditionAnalyticsServiceNormal has status True when the analytics service is operating normally
	ExperimentConditionAnalyticsServiceNormal ExperimentConditionType = "AnalyticsServiceNormal"

	// ExperimentConditionMetricsSynced has status True when metrics are successfully synced with config map
	ExperimentConditionMetricsSynced ExperimentConditionType = "MetricsSynced"

	// ExperimentConditionExperimentCompleted has status True when the experiment is completed
	ExperimentConditionExperimentCompleted ExperimentConditionType = "ExperimentCompleted"

	// ExperimentConditionRoutingRulesReady has status True when routing rules are ready
	ExperimentConditionRoutingRulesReady ExperimentConditionType = "RoutingRulesReady"
)

type ExperimentList

type ExperimentList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []Experiment `json:"items"`
}

ExperimentList contains a list of Experiment +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

func (*ExperimentList) DeepCopy

func (in *ExperimentList) DeepCopy() *ExperimentList

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExperimentList.

func (*ExperimentList) DeepCopyInto

func (in *ExperimentList) DeepCopyInto(out *ExperimentList)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ExperimentList) DeepCopyObject

func (in *ExperimentList) DeepCopyObject() runtime.Object

DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.

type ExperimentSpec

type ExperimentSpec struct {
	// Service is a reference to the service componenets that this experiment is targeting at
	Service `json:"service"`

	// Criteria contains a list of Criterion for assessing the target service
	// Noted that at most one reward metric is allowed
	// If more than one reward criterion is included, the first would be used while others would be omitted
	// +optional
	Criteria []Criterion `json:"criteria,omitempty"`

	// TrafficControl provides instructions on traffic management for an experiment
	// +optional
	TrafficControl *TrafficControl `json:"trafficControl,omitempty"`

	// Endpoint of reaching analytics service
	// default is http://iter8-analytics:8080
	// +optional
	AnalyticsEndpoint *string `json:"analyticsEndpoint,omitempty"`

	// Duration specifies how often/many times the expriment should re-evaluate the assessment
	// +optional
	Duration *Duration `json:"duration,omitempty"`

	// Cleanup indicates whether routing rules and deployment receiving no traffic should be deleted at the end of experiment
	// +optional
	Cleanup *bool `json:"cleanup,omitempty"`

	// The metrics used in the experiment
	// +optional
	Metrics *Metrics `json:"metrics,omitempty"`

	// User actions to override the current status of the experiment
	// +optional
	ManualOverride *ManualOverride `json:"manualOverride,omitempty"`

	// Networking describes how traffic network should be configured for the experiment
	// +optional
	Networking *Networking `json:"networking,omitempty"`
}

ExperimentSpec defines the desired state of Experiment

func (*ExperimentSpec) DeepCopy

func (in *ExperimentSpec) DeepCopy() *ExperimentSpec

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExperimentSpec.

func (*ExperimentSpec) DeepCopyInto

func (in *ExperimentSpec) DeepCopyInto(out *ExperimentSpec)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ExperimentSpec) GetAction

func (s *ExperimentSpec) GetAction() ActionType

GetAction retrieves the action specified in manual override if any

func (*ExperimentSpec) GetAnalyticsEndpoint

func (s *ExperimentSpec) GetAnalyticsEndpoint() string

GetAnalyticsEndpoint returns specified(or default) analytics endpoint

func (*ExperimentSpec) GetCleanup

func (s *ExperimentSpec) GetCleanup() bool

GetCleanup returns whether router and targets receiving no traffic should be deleted after expreriment

func (*ExperimentSpec) GetInterval

func (s *ExperimentSpec) GetInterval() (time.Duration, error)

GetInterval returns specified(or default) interval for each duration

func (*ExperimentSpec) GetMaxIncrements

func (s *ExperimentSpec) GetMaxIncrements() int32

GetMaxIncrements returns specified(or default) maxIncrements for each traffic update

func (*ExperimentSpec) GetMaxIterations

func (s *ExperimentSpec) GetMaxIterations() int32

GetMaxIterations returns specified(or default) max of iterations

func (*ExperimentSpec) GetOnTermination

func (s *ExperimentSpec) GetOnTermination() OnTerminationType

GetOnTermination returns specified(or default) onTermination strategy for traffic controller

func (*ExperimentSpec) GetPercentage

func (s *ExperimentSpec) GetPercentage() int32

GetPercentage returns specified(or default) experiment traffic percentage

func (*ExperimentSpec) GetStrategy

func (s *ExperimentSpec) GetStrategy() string

GetStrategy gets the specified(or default) strategy used for traffic control

func (*ExperimentSpec) Pause

func (s *ExperimentSpec) Pause() bool

Pause indicates whether an Experiment Pause request is issued or not

func (*ExperimentSpec) Resume

func (s *ExperimentSpec) Resume() bool

Resume indicates whether an Experiment Resume request is issued or not

func (*ExperimentSpec) Terminate

func (s *ExperimentSpec) Terminate() bool

Terminate indicates whether an Experiment Terminate request is issued or not

func (*ExperimentSpec) TerminateExperiment

func (s *ExperimentSpec) TerminateExperiment()

TerminateExperiment terminates experiment

func (*ExperimentSpec) Validate

func (s *ExperimentSpec) Validate() error

Validate checks whether specification in Service can be supported by iter8 or not returns nil if ok; otherwise non-nil err with detailed explanation will be returned

type ExperimentStatus

type ExperimentStatus struct {
	// List of conditions
	// +optional
	Conditions Conditions `json:"conditions,omitempty"`

	// InitTimestamp is the timestamp when the experiment is initialized
	// +optional
	InitTimestamp *metav1.Time `json:"initTimestamp,omitempty"`

	// StartTimestamp is the timestamp when the experiment starts
	// +optional
	StartTimestamp *metav1.Time `json:"startTimestamp,omitempty"`

	// EndTimestamp is the timestamp when experiment completes
	// +optional
	EndTimestamp *metav1.Time `json:"endTimestamp,omitempty"`

	// LastUpdateTime is the last time iteration has been updated
	// +optional
	LastUpdateTime *metav1.Time `json:"lastUpdateTime,omitempty"`

	// CurrentIteration is the current iteration number
	// +optional
	CurrentIteration *int32 `json:"currentIteration,omitempty"`

	// Assessment returned by the last analyis
	// +optional
	Assessment *Assessment `json:"assessment,omitempty"`

	// Phase marks the Phase the experiment is at
	// +optional
	Phase PhaseType `json:"phase,omitempty"`

	// Message specifies message to show in the kubectl printer
	// +optional
	Message *string `json:"message,omitempty"`

	// AnalysisState is the last recorded analysis state
	// +optional
	AnalysisState *runtime.RawExtension `json:"analysisState,omitempty"`

	// ExperimentType is type of experiment
	ExperimentType string `json:"experimentType,omitempty"`

	// EffectiveHosts is computed host for experiment.
	// List of spec.Service.Name and spec.Service.Hosts[0].name
	EffectiveHosts []string `json:"effectiveHosts,omitempty"`
}

ExperimentStatus defines the observed state of Experiment

func (*ExperimentStatus) DeepCopy

func (in *ExperimentStatus) DeepCopy() *ExperimentStatus

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExperimentStatus.

func (*ExperimentStatus) DeepCopyInto

func (in *ExperimentStatus) DeepCopyInto(out *ExperimentStatus)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*ExperimentStatus) ExperimentCompleted

func (s *ExperimentStatus) ExperimentCompleted() bool

ExperimentCompleted returns whether experiment is completed or not

func (*ExperimentStatus) GetCondition

func (s *ExperimentStatus) GetCondition(condition ExperimentConditionType) *ExperimentCondition

GetCondition returns condition of given conditionType

func (*ExperimentStatus) IsWinnerAssessmentAvailable

func (s *ExperimentStatus) IsWinnerAssessmentAvailable() bool

IsWinnerAssessmentAvailable tells whether winner assessment is presented in status or not

func (*ExperimentStatus) IsWinnerFound

func (s *ExperimentStatus) IsWinnerFound() bool

IsWinnerFound tells whether winner has been found by analytics

func (*ExperimentStatus) MarkAnalyticsServiceError

func (s *ExperimentStatus) MarkAnalyticsServiceError(messageFormat string, messageA ...interface{}) (bool, string)

MarkAnalyticsServiceError sets the condition that the analytics service breaks down Return true if it's converted from true or unknown

func (*ExperimentStatus) MarkAnalyticsServiceRunning

func (s *ExperimentStatus) MarkAnalyticsServiceRunning(messageFormat string, messageA ...interface{}) (bool, string)

MarkAnalyticsServiceRunning sets the condition that the analytics service is operating normally Return true if it's converted from false or unknown

func (*ExperimentStatus) MarkAssessmentUpdate

func (s *ExperimentStatus) MarkAssessmentUpdate(messageFormat string, messageA ...interface{}) (bool, string)

MarkAssessmentUpdate sets the condition that assessment for experiment updated

func (*ExperimentStatus) MarkExperimentCompleted

func (s *ExperimentStatus) MarkExperimentCompleted(messageFormat string, messageA ...interface{}) (bool, string)

MarkExperimentCompleted sets the condition that the experiemnt is completed

func (*ExperimentStatus) MarkExperimentPause

func (s *ExperimentStatus) MarkExperimentPause(messageFormat string, messageA ...interface{}) (bool, string)

MarkExperimentPause sets the phase and status that experiment is paused by manualOverrides returns true if this is a newly-set operation

func (*ExperimentStatus) MarkExperimentResume

func (s *ExperimentStatus) MarkExperimentResume(messageFormat string, messageA ...interface{}) (bool, string)

MarkExperimentResume sets the phase and status that experiment is resmued by manualOverrides returns true if this is a newly-set operation

func (*ExperimentStatus) MarkIterationUpdate

func (s *ExperimentStatus) MarkIterationUpdate(messageFormat string, messageA ...interface{}) (bool, string)

MarkIterationUpdate sets the condition that the iteration updated

func (*ExperimentStatus) MarkMetricsSynced

func (s *ExperimentStatus) MarkMetricsSynced(messageFormat string, messageA ...interface{}) (bool, string)

MarkMetricsSynced sets the condition that the metrics are synced with config map Return true if it's converted from false or unknown

func (*ExperimentStatus) MarkMetricsSyncedError

func (s *ExperimentStatus) MarkMetricsSyncedError(messageFormat string, messageA ...interface{}) (bool, string)

MarkMetricsSyncedError sets the condition that the error occurs when syncing with the config map Return true if it's converted from true or unknown

func (*ExperimentStatus) MarkRoutingRulesError

func (s *ExperimentStatus) MarkRoutingRulesError(messageFormat string, messageA ...interface{}) (bool, string)

MarkRoutingRulesError sets the condition that the routing rules are not ready Return true if it's converted from true or unknown

func (*ExperimentStatus) MarkRoutingRulesReady

func (s *ExperimentStatus) MarkRoutingRulesReady(messageFormat string, messageA ...interface{}) (bool, string)

MarkRoutingRulesReady sets the condition that the routing rules are ready Return true if it's converted from false or unknown

func (*ExperimentStatus) MarkTargetsError

func (s *ExperimentStatus) MarkTargetsError(messageFormat string, messageA ...interface{}) (bool, string)

MarkTargetsError sets the condition that there is error in finding all targets Return true if it's converted from true or unknown

func (*ExperimentStatus) MarkTargetsFound

func (s *ExperimentStatus) MarkTargetsFound(messageFormat string, messageA ...interface{}) (bool, string)

MarkTargetsFound sets the condition that the all target have been found Return true if it's converted from false or unknown

func (*ExperimentStatus) MarkTrafficUpdate

func (s *ExperimentStatus) MarkTrafficUpdate(messageFormat string, messageA ...interface{}) (bool, string)

MarkTrafficUpdate sets the condition that traffic to targets has beeen changed

func (*ExperimentStatus) MetricsSynced

func (s *ExperimentStatus) MetricsSynced() bool

MetricsSynced returns whether status of ExperimentConditionMetricsSynced is true or not

func (*ExperimentStatus) RoutingRulesReady

func (s *ExperimentStatus) RoutingRulesReady() bool

RoutingRulesReady returns whether status of ExperimentConditionRoutingRulesReady is true or not

func (*ExperimentStatus) TargetsFound

func (s *ExperimentStatus) TargetsFound() bool

TargetsFound returns whether status of ExperimentConditionTargetsProvided is true or not

func (*ExperimentStatus) TrafficToString

func (s *ExperimentStatus) TrafficToString() string

TrafficToString outputs current traffic in human-readable format

func (*ExperimentStatus) WinnerToString

func (s *ExperimentStatus) WinnerToString() string

WinnerToString outputs winner assessment in human-readable format

type HTTPMatchRequest

type HTTPMatchRequest struct {
	// The name assigned to a match.
	Name string `json:"name,omitempty"`

	// URI to match
	URI *StringMatch `json:"uri,omitempty"`

	// Scheme Scheme
	Scheme *StringMatch `json:"scheme,omitempty"`

	// HTTP Method
	Method *StringMatch `json:"method,omitempty"`

	// HTTP Authority
	Authority *StringMatch `json:"authority,omitempty"`

	// Headers to match
	Headers map[string]StringMatch `json:"headers,omitempty"`

	// Specifies the ports on the host that is being addressed.
	Port uint32 `json:"port,omitempty"`

	// SourceLabels for matching
	SourceLabels map[string]string `json:"sourceLabels,omitempty"`

	// Gateways for matching
	Gateways []string `json:"gateways,omitempty"`

	// Query parameters for matching.
	QueryParams map[string]StringMatch `json:"query_params,omitempty"`

	// Flag to specify whether the URI matching should be case-insensitive.
	IgnoreURICase bool `json:"ignore_uri_case,omitempty"`
}

func (*HTTPMatchRequest) DeepCopy

func (in *HTTPMatchRequest) DeepCopy() *HTTPMatchRequest

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPMatchRequest.

func (*HTTPMatchRequest) DeepCopyInto

func (in *HTTPMatchRequest) DeepCopyInto(out *HTTPMatchRequest)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type Host

type Host struct {
	// Name of the Host
	Name string `json:"name"`

	// The gateway associated with the host
	Gateway string `json:"gateway"`
}

Host holds the name of host and gateway associated with it

func (*Host) DeepCopy

func (in *Host) DeepCopy() *Host

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Host.

func (*Host) DeepCopyInto

func (in *Host) DeepCopyInto(out *Host)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ManualOverride

type ManualOverride struct {
	// Action to perform
	//+kubebuilder:validation:Enum={pause,resume,terminate}
	Action ActionType `json:"action"`
	// Traffic split status specification
	// Applied to action terminate only
	// example:
	//   reviews-v2:80
	//   reviews-v3:20
	// +optional
	TrafficSplit map[string]int32 `json:"trafficSplit,omitempty"`
}

ManualOverride defines actions that the user can perform to an experiment

func (*ManualOverride) DeepCopy

func (in *ManualOverride) DeepCopy() *ManualOverride

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ManualOverride.

func (*ManualOverride) DeepCopyInto

func (in *ManualOverride) DeepCopyInto(out *ManualOverride)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type Match

type Match struct {
	// Matching criteria for HTTP requests
	// +optional
	HTTP []*HTTPMatchRequest `json:"http,omitempty"`
}

Match contains matching criteria for requests

func (*Match) DeepCopy

func (in *Match) DeepCopy() *Match

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Match.

func (*Match) DeepCopyInto

func (in *Match) DeepCopyInto(out *Match)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type Metrics

type Metrics struct {
	// List of counter metrics definiton
	// +optional
	CounterMetrics []CounterMetric `json:"counter_metrics,omitempty"`

	// List of ratio metrics definiton
	// +optional
	RatioMetrics []RatioMetric `json:"ratio_metrics,omitempty"`
}

Metrics contains definitions for metrics used in the experiment

func (*Metrics) DeepCopy

func (in *Metrics) DeepCopy() *Metrics

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Metrics.

func (*Metrics) DeepCopyInto

func (in *Metrics) DeepCopyInto(out *Metrics)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type Networking

type Networking struct {
	// id of router
	// +optional
	ID *string `json:"id,omitempty"`

	// List of hosts used to receive external traffic
	// +optional
	Hosts []Host `json:"hosts,omitempty"`
}

Networking describes how traffic network should be configured for the experiment

func (*Networking) DeepCopy

func (in *Networking) DeepCopy() *Networking

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Networking.

func (*Networking) DeepCopyInto

func (in *Networking) DeepCopyInto(out *Networking)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type OnTerminationType

type OnTerminationType string

OnTerminationType provides options for onTermination

const (
	// OnTerminationToWinner indicates all traffic should go to winner candidate when experiment is terminated
	OnTerminationToWinner OnTerminationType = "to_winner"

	// OnTerminationToBaseline indicates all traffic should go to baseline when experiment is terminated
	OnTerminationToBaseline OnTerminationType = "to_baseline"

	// OnTerminationKeepLast keeps the last traffic status when experiment is terminated
	OnTerminationKeepLast OnTerminationType = "keep_last"
)

type PhaseType

type PhaseType string

PhaseType has options for phases that an experiment can be at

const (
	// PhasePause indicates experiment is paused
	PhasePause PhaseType = "Pause"

	// PhaseProgressing indicates experiment is progressing
	PhaseProgressing PhaseType = "Progressing"

	// PhaseCompleted indicates experiment has competed (successfully or not)
	PhaseCompleted PhaseType = "Completed"
)

type RatioMetric

type RatioMetric struct {
	// name of metric
	Name string `json:"name" yaml:"name"`

	// Counter metric used in numerator
	Numerator string `json:"numerator" yaml:"numerator"`

	// Counter metric used in denominator
	Denominator string `json:"denominator" yaml:"denominator"`

	// Boolean flag indicating if the value of this metric is always in the range 0 to 1
	// +optional
	ZeroToOne *bool `json:"zero_to_one,omitempty" yaml:"zero_to_one,omitempty"`

	// Preferred direction of the metric value
	// +optional
	PreferredDirection *string `json:"preferred_direction,omitempty" yaml:"preferred_direction,omitempty"`
}

RatioMetric is the definiton of Ratio Metric

func (*RatioMetric) DeepCopy

func (in *RatioMetric) DeepCopy() *RatioMetric

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RatioMetric.

func (*RatioMetric) DeepCopyInto

func (in *RatioMetric) DeepCopyInto(out *RatioMetric)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*RatioMetric) IsZeroToOne

func (r *RatioMetric) IsZeroToOne() bool

IsZeroToOne returns specified(or default) zeroToOne value

type Service

type Service struct {
	// defines the object reference to the service
	*corev1.ObjectReference `json:",inline"`

	// Name of the baseline deployment
	Baseline string `json:"baseline"`

	// List of names of candidate deployments
	Candidates []string `json:"candidates"`

	// Port number exposed by internal services
	Port *int32 `json:"port,omitempty"`
}

Service is a reference to the service that this experiment is targeting at

func (*Service) DeepCopy

func (in *Service) DeepCopy() *Service

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Service.

func (*Service) DeepCopyInto

func (in *Service) DeepCopyInto(out *Service)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type StrategyType

type StrategyType string

StrategyType provides options for strategy used in experiment

const (
	// StrategyProgressive is the progressive strategy
	StrategyProgressive StrategyType = "progressive"

	// StrategyTop2 is the top_2 strategy
	StrategyTop2 StrategyType = "top_2"

	// StrategyUniform is the uniform strategy
	StrategyUniform StrategyType = "uniform"
)

type StringMatch

type StringMatch struct {
	Exact  *string `json:"exact,omitempty"`
	Prefix *string `json:"prefix,omitempty"`
	Regex  *string `json:"regex,omitempty"`
}

func (*StringMatch) DeepCopy

func (in *StringMatch) DeepCopy() *StringMatch

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StringMatch.

func (*StringMatch) DeepCopyInto

func (in *StringMatch) DeepCopyInto(out *StringMatch)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*StringMatch) IsValid

func (s *StringMatch) IsValid() bool

type Threshold

type Threshold struct {
	// Type of threshold
	// relative: value of threshold specifies the relative amount of changes
	// absolute: value of threshold indicates an absolute value
	//+kubebuilder:validation:Enum={relative,absolute}
	Type string `json:"type"`

	// Value of threshold
	Value float32 `json:"value"`

	// Once a target metric violates this threshold, traffic to the target should be cutoff or not
	// +optional
	CutoffTrafficOnViolation *bool `json:"cutoffTrafficOnViolation,omitempty"`
}

Threshold defines the value and type of a criterion threshold

func (*Threshold) CutOffOnViolation

func (t *Threshold) CutOffOnViolation() bool

CutOffOnViolation indicates whether traffic should be cutoff to a target if threshold is violated

func (*Threshold) DeepCopy

func (in *Threshold) DeepCopy() *Threshold

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Threshold.

func (*Threshold) DeepCopyInto

func (in *Threshold) DeepCopyInto(out *Threshold)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type TrafficControl

type TrafficControl struct {
	// Strategy used to shift traffic
	// default is progressive
	// +kubebuilder:validation:Enum={progressive, top_2, uniform}
	// +optional
	Strategy *StrategyType `json:"strategy,omitempty"`

	// OnTermination determines traffic split status at the end of experiment
	// +kubebuilder:validation:Enum={to_winner,to_baseline,keep_last}
	// +optional
	OnTermination *OnTerminationType `json:"onTermination,omitempty"`

	// Only requests fulfill the match section would be used in experiment
	// Istio matching rules are used
	// +optional
	Match *Match `json:"match,omitempty"`

	// Percentage specifies the amount of traffic to service that would be used in experiment
	// default is 100
	// +optional
	Percentage *int32 `json:"percentage,omitempty"`

	// MaxIncrement is the upperlimit of traffic increment for a target in one iteration
	// default is 2
	// +optional
	MaxIncrement *int32 `json:"maxIncrement,omitempty"`

	// RouterID refers to the id of router used to handle traffic for the experiment
	// If it's not specified, the first entry of effictive host will be used as the id
	// +optional
	RouterID *string `json:"routerID,omitempty"`
}

TrafficControl specifies constrains on traffic and stratgy used to update the traffic

func (*TrafficControl) DeepCopy

func (in *TrafficControl) DeepCopy() *TrafficControl

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TrafficControl.

func (*TrafficControl) DeepCopyInto

func (in *TrafficControl) DeepCopyInto(out *TrafficControl)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type VersionAssessment

type VersionAssessment struct {
	// name of version
	Name string `json:"name"`

	// Weight of traffic
	Weight int32 `json:"weight"`

	// Assessment details from analytics
	analyticsv1alpha2.VersionAssessment `json:",inline"`

	// A flag indicates whether traffic to this target should be cutoff
	// +optional
	Rollback bool `json:"rollback,omitempty"`
}

VersionAssessment contains assessment details for each version

func (*VersionAssessment) DeepCopy

func (in *VersionAssessment) DeepCopy() *VersionAssessment

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VersionAssessment.

func (*VersionAssessment) DeepCopyInto

func (in *VersionAssessment) DeepCopyInto(out *VersionAssessment)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type WinnerAssessment

type WinnerAssessment struct {
	// name of winner version
	// +optional
	Name *string `json:"name,omitempty"`

	// Assessment details from analytics
	*analyticsv1alpha2.WinnerAssessment `json:",inline,omitempty"`
}

WinnerAssessment shows assessment details for winner of an experiment

func (*WinnerAssessment) DeepCopy

func (in *WinnerAssessment) DeepCopy() *WinnerAssessment

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WinnerAssessment.

func (*WinnerAssessment) DeepCopyInto

func (in *WinnerAssessment) DeepCopyInto(out *WinnerAssessment)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL