spec

package
v1.1.0 Latest Latest
Warning

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

Go to latest
Published: Jul 16, 2021 License: Apache-2.0 Imports: 13 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// RegistryTypeConsul is the consul registry type.
	RegistryTypeConsul = "consul"
	// RegistryTypeEureka is the eureka registry type.
	RegistryTypeEureka = "eureka"
	// RegistryTypeNacos is the eureka registry type.
	RegistryTypeNacos = "nacos"

	// GlobalTenant is the reserved name of the system scope tenant,
	// its services can be accessible in mesh wide.
	GlobalTenant = "global"

	// ServiceStatusUp indicates this service instance can accept ingress traffic
	ServiceStatusUp = "UP"

	// ServiceStatusOutOfService indicates this service instance can't accept ingress traffic
	ServiceStatusOutOfService = "OUT_OF_SERVICE"

	// WorkerAPIPort is the default port for worker's API server
	WorkerAPIPort = 13009

	// IngressPort is the default port for ingress controller
	IngressPort = 13010

	// HeartbeatInterval is the default heartbeat interval for checking service heartbeat
	HeartbeatInterval = "5s"
)

Variables

View Source
var (
	// ErrParamNotMatch means RESTful request URL's object name or other fields are not matched in this request's body
	ErrParamNotMatch = fmt.Errorf("param in url and body's spec not matched")
	// ErrAlreadyRegistered indicates this instance has already been registered
	ErrAlreadyRegistered = fmt.Errorf("service already registered")
	// ErrNoRegisteredYet indicates this instance haven't registered successfully yet
	ErrNoRegisteredYet = fmt.Errorf("service not registered yet")
	// ErrServiceNotFound indicates could find target service in its tenant or in global tenant
	ErrServiceNotFound = fmt.Errorf("can't find service in its tenant or in global tenant")
	// ErrServiceNotavailable indicates could find target service's available instances.
	ErrServiceNotavailable = fmt.Errorf("can't find service available instances")
)

Functions

func IngressHTTPServerSpec

func IngressHTTPServerSpec(port int, rules []*IngressRule) (*supervisor.Spec, error)

IngressHTTPServerSpec generates HTTP server spec for ingress. as ingress does not belong to a service, it is not a method of 'Service'

Types

type Admin

type Admin struct {
	// HeartbeatInterval is the interval for one service instance reporting its heartbeat.
	HeartbeatInterval string `yaml:"heartbeatInterval" jsonschema:"required,format=duration"`
	// RegistryTime indicates which protocol the registry center accepts.
	RegistryType string `yaml:"registryType" jsonschema:"required"`

	// APIPort is the port for worker's API server
	APIPort int `yaml:"apiPort" jsonschema:"required"`

	// IngressPort is the port for http server in mesh ingress
	IngressPort int `yaml:"ingressPort" jsonschema:"required"`
}

Admin is the spec of MeshController.

func (Admin) Validate

func (a Admin) Validate() error

Validate validates Spec.

type Canary

type Canary struct {
	CanaryRules []*CanaryRule `yaml:"canaryRules" jsonschema:"omitempty"`
}

Canary is the spec of service canary.

type CanaryRule

type CanaryRule struct {
	ServiceInstanceLabels map[string]string               `yaml:"serviceInstanceLabels" jsonschema:"required"`
	Headers               map[string]*urlrule.StringMatch `yaml:"headers" jsonschema:"required"`
	URLs                  []*urlrule.URLRule              `yaml:"urls" jsonschema:"required"`
}

CanaryRule is one matching rule for canary.

type GlobalCanaryHeaders

type GlobalCanaryHeaders struct {
	ServiceHeaders map[string][]string `yaml:"serviceHeaders" jsonschema:"omitempty"`
}

GlobalCanaryLabels is the spec of global service

type Ingress

type Ingress struct {
	Name  string         `yaml:"name" jsonschema:"required"`
	Rules []*IngressRule `yaml:"rules" jsonschema:"required"`
}

Ingress is the spec of mesh ingress

type IngressPath

type IngressPath struct {
	Path          string `yaml:"path" jsonschema:"required"`
	RewriteTarget string `yaml:"rewriteTarget" jsonschema:"omitempty"`
	Backend       string `yaml:"backend" jsonschema:"required"`
}

IngressPath is the path for a mesh ingress rule

type IngressRule

type IngressRule struct {
	Host  string         `yaml:"host" jsonschema:"omitempty"`
	Paths []*IngressPath `yaml:"paths" jsonschema:"required"`
}

IngressRule is the rule for mesh ingress

type LoadBalance

type LoadBalance = proxy.LoadBalance

LoadBalance is the spec of service load balance.

type Observability

type Observability struct {
	OutputServer *ObservabilityOutputServer `yaml:"outputServer" jsonschema:"omitempty"`
	Tracings     *ObservabilityTracings     `yaml:"tracings" jsonschema:"omitempty"`
	Metrics      *ObservabilityMetrics      `yaml:"metrics" jsonschema:"omitempty"`
}

Observability is the spec of service observability.

type ObservabilityMetrics

type ObservabilityMetrics struct {
	Enabled        bool                       `yaml:"enabled" jsonschema:"required"`
	Access         ObservabilityMetricsDetail `yaml:"access" jsonschema:"required"`
	Request        ObservabilityMetricsDetail `yaml:"request" jsonschema:"required"`
	JdbcStatement  ObservabilityMetricsDetail `yaml:"jdbcStatement" jsonschema:"required"`
	JdbcConnection ObservabilityMetricsDetail `yaml:"jdbcConnection" jsonschema:"required"`
	Rabbit         ObservabilityMetricsDetail `yaml:"rabbit" jsonschema:"required"`
	Kafka          ObservabilityMetricsDetail `yaml:"kafka" jsonschema:"required"`
	Redis          ObservabilityMetricsDetail `yaml:"redis" jsonschema:"required"`
	JvmGC          ObservabilityMetricsDetail `yaml:"jvmGc" jsonschema:"required"`
	JvmMemory      ObservabilityMetricsDetail `yaml:"jvmMemory" jsonschema:"required"`
	Md5Dictionary  ObservabilityMetricsDetail `yaml:"md5Dictionary" jsonschema:"required"`
}

ObservabilityMetrics is the metrics of observability.

type ObservabilityMetricsDetail

type ObservabilityMetricsDetail struct {
	Enabled  bool   `yaml:"enabled" jsonschema:"required"`
	Interval int    `yaml:"interval" jsonschema:"required"`
	Topic    string `yaml:"topic" jsonschema:"required"`
}

ObservabilityMetricsDetail is the metrics detail of observability.

type ObservabilityOutputServer

type ObservabilityOutputServer struct {
	Enabled         bool   `yaml:"enabled" jsonschema:"required"`
	BootstrapServer string `yaml:"bootstrapServer" jsonschema:"required"`
	Timeout         int    `yaml:"timeout" jsonschema:"required"`
}

ObservabilityOutputServer is the output server of observability.

type ObservabilityTracings

type ObservabilityTracings struct {
	Enabled     bool                              `yaml:"enabled" jsonschema:"required"`
	SampleByQPS int                               `yaml:"sampleByQPS" jsonschema:"required"`
	Output      ObservabilityTracingsOutputConfig `yaml:"output" jsonschema:"required"`

	Request      ObservabilityTracingsDetail `yaml:"request" jsonschema:"required"`
	RemoteInvoke ObservabilityTracingsDetail `yaml:"remoteInvoke" jsonschema:"required"`
	Kafka        ObservabilityTracingsDetail `yaml:"kafka" jsonschema:"required"`
	Jdbc         ObservabilityTracingsDetail `yaml:"jdbc" jsonschema:"required"`
	Redis        ObservabilityTracingsDetail `yaml:"redis" jsonschema:"required"`
	Rabbit       ObservabilityTracingsDetail `yaml:"rabbit" jsonschema:"required"`
}

ObservabilityTracings is the tracings of observability.

type ObservabilityTracingsDetail

type ObservabilityTracingsDetail struct {
	Enabled       bool   `yaml:"enabled" jsonschema:"required"`
	ServicePrefix string `yaml:"servicePrefix" jsonschema:"required"`
}

ObservabilityTracingsDetail is the tracing detail of observability.

type ObservabilityTracingsOutputConfig

type ObservabilityTracingsOutputConfig struct {
	Enabled         bool   `yaml:"enabled" jsonschema:"required"`
	ReportThread    int    `yaml:"reportThread" jsonschema:"required"`
	Topic           string `yaml:"topic" jsonschema:"required"`
	MessageMaxBytes int    `yaml:"messageMaxBytes" jsonschema:"required"`
	QueuedMaxSpans  int    `yaml:"queuedMaxSpans" jsonschema:"required"`
	QueuedMaxSize   int    `yaml:"queuedMaxSize" jsonschema:"required"`
	MessageTimeout  int    `yaml:"messageTimeout" jsonschema:"required"`
}

type Resilience

type Resilience struct {
	RateLimiter    *ratelimiter.Spec    `yaml:"rateLimiter" jsonschema:"omitempty"`
	CircuitBreaker *circuitbreaker.Spec `yaml:"circuitBreaker" jsonschema:"omitempty"`
	Retryer        *retryer.Spec        `yaml:"retryer" jsonschema:"omitempty"`
	TimeLimiter    *timelimiter.Spec    `yaml:"timeLimiter" jsonschema:"omitempty"`
}

Resilience is the spec of service resilience.

type Service

type Service struct {
	Name           string `yaml:"name" jsonschema:"required"`
	RegisterTenant string `yaml:"registerTenant" jsonschema:"required"`

	Sidecar       *Sidecar       `yaml:"sidecar" jsonschema:"required"`
	Resilience    *Resilience    `yaml:"resilience" jsonschema:"omitempty"`
	Canary        *Canary        `yaml:"canary" jsonschema:"omitempty"`
	LoadBalance   *LoadBalance   `yaml:"loadBalance" jsonschema:"omitempty"`
	Observability *Observability `yaml:"observability" jsonschema:"omitempty"`
}

Service contains the information of service.

func (*Service) ApplicationEndpoint

func (s *Service) ApplicationEndpoint(port uint32) string

func (*Service) BackendName added in v1.1.0

func (s *Service) BackendName() string

func (*Service) EgressEndpoint

func (s *Service) EgressEndpoint() string

func (*Service) EgressHTTPServerName

func (s *Service) EgressHTTPServerName() string

func (*Service) EgressHandlerName

func (s *Service) EgressHandlerName() string

func (*Service) EgressPipelineName

func (s *Service) EgressPipelineName() string

func (*Service) IngressEndpoint

func (s *Service) IngressEndpoint() string

func (*Service) IngressHTTPServerName

func (s *Service) IngressHTTPServerName() string

func (*Service) IngressHandlerName

func (s *Service) IngressHandlerName() string

func (*Service) IngressPipelineName

func (s *Service) IngressPipelineName() string

func (*Service) IngressPipelineSpec

func (s *Service) IngressPipelineSpec(instanceSpecs []*ServiceInstanceSpec) (*supervisor.Spec, error)

func (*Service) SideCarEgressHTTPServerSpec

func (s *Service) SideCarEgressHTTPServerSpec() (*supervisor.Spec, error)

func (*Service) SideCarEgressPipelineSpec

func (s *Service) SideCarEgressPipelineSpec(instanceSpecs []*ServiceInstanceSpec) (*supervisor.Spec, error)

func (*Service) SideCarIngressHTTPServerSpec

func (s *Service) SideCarIngressHTTPServerSpec() (*supervisor.Spec, error)

func (*Service) SideCarIngressPipelineSpec

func (s *Service) SideCarIngressPipelineSpec(applicationPort uint32) (*supervisor.Spec, error)

func (*Service) UniqueCanaryHeaders

func (s *Service) UniqueCanaryHeaders() []string

UniqueCanaryHeaders returns the unique headers in canary filter rules.

type ServiceInstanceSpec

type ServiceInstanceSpec struct {
	// Provide by registry client
	ServiceName  string            `yaml:"serviceName" jsonschema:"required"`
	InstanceID   string            `yaml:"instanceID" jsonschema:"required"`
	IP           string            `yaml:"ip" jsonschema:"required"`
	Port         uint32            `yaml:"port" jsonschema:"required"`
	RegistryTime string            `yaml:"registryTime" jsonschema:"omitempty"`
	Labels       map[string]string `yaml:"labels" jsonschema:"omitempty"`

	// Set by heartbeat timer event or API
	Status string `yaml:"status" jsonschema:"omitempty"`
}

ServiceInstanceSpec is the spec of service instance.

type ServiceInstanceStatus

type ServiceInstanceStatus struct {
	ServiceName string `yaml:"serviceName" jsonschema:"required"`
	InstanceID  string `yaml:"instanceID" jsonschema:"required"`
	// RFC3339 format
	LastHeartbeatTime string `yaml:"lastHeartbeatTime" jsonschema:"required,format=timerfc3339"`
}

ServiceInstanceStatus is the status of service instance.

type Sidecar

type Sidecar struct {
	DiscoveryType   string `yaml:"discoveryType" jsonschema:"required"`
	Address         string `yaml:"address" jsonschema:"required"`
	IngressPort     int    `yaml:"ingressPort" jsonschema:"required"`
	IngressProtocol string `yaml:"ingressProtocol" jsonschema:"required"`
	EgressPort      int    `yaml:"egressPort" jsonschema:"required"`
	EgressProtocol  string `yaml:"egressProtocol" jsonschema:"required"`
}

Sidecar is the spec of service sidecar.

type Tenant

type Tenant struct {
	Name string `yaml:"name"`

	Services []string `yaml:"services" jsonschema:"omitempty"`
	// Format: RFC3339
	CreatedAt   string `yaml:"createdAt" jsonschema:"omitempty"`
	Description string `yaml:"description"`
}

Tenant contains the information of tenant.

Jump to

Keyboard shortcuts

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