api

package
v0.0.0-...-1c5d739 Latest Latest
Warning

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

Go to latest
Published: Dec 14, 2023 License: Apache-2.0 Imports: 89 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DefaultHomeDir = "/opt/serviced"
	DefaultRPCPort = 4979
)

Variables

This section is empty.

Functions

func GetAgentIP

func GetAgentIP(defaultRPCPort int) string

GetAgentIP returns the agent ip address

func GetDefaultOptions

func GetDefaultOptions(cfg utils.ConfigReader) config.Options

func GetOptionsAgent

func GetOptionsAgent() bool

GetOptionsAgent returns the agent mode setting from options

func GetOptionsMaster

func GetOptionsMaster() bool

GetOptionsMaster returns the master mode setting from options

func GetOptionsMasterPoolID

func GetOptionsMasterPoolID() string

GetOptionsMasterPoolID returns the master pool ID from options

func GetOptionsMaxRPCClients

func GetOptionsMaxRPCClients() int

GetOptionsMaxRPCClients returns the max RPC clients setting from options

func GetOptionsRPCEndpoint

func GetOptionsRPCEndpoint() string

GetOptionsRPCEndpoint returns the serviced RPC endpoint from options

func GetOptionsRPCPort

func GetOptionsRPCPort() string

GetOptionsRPCPort returns the serviced RPC port from options

func IDsToString

func IDsToString(ids interface{}) string

func NormalizeYYYYMMDD

func NormalizeYYYYMMDD(s string) (string, error)

NormalizeYYYYMMDD matches optional non-digits, 4 digits, optional non-digits, 2 digits, optional non-digits, 2 digits, optional non-digits Returns those 8 digits formatted as "dddd.dd.dd", or error if unparseable.

func ValidateCommonOptions

func ValidateCommonOptions(opts config.Options) error

Validate options which are common to all CLI commands

func ValidateServerOptions

func ValidateServerOptions(options *config.Options) error

Validate options which are specific to running as a server

Types

type API

type API interface {

	// Server
	StartServer() error
	ServicedHealthCheck(IServiceNames []string) ([]isvcs.IServiceHealthResult, error)

	// Hosts
	GetHosts() ([]host.Host, error)
	GetHost(string) (*host.Host, error)
	GetHostMap() (map[string]host.Host, error)
	AddHost(HostConfig) (*host.Host, []byte, error)
	AddHostPrivate(HostConfig) (*host.Host, []byte, error)
	RemoveHost(string) error
	GetHostMemory(string) (*metrics.MemoryUsageStats, error)
	SetHostMemory(HostUpdateConfig) error
	GetHostPublicKey(string) ([]byte, error)
	RegisterHost([]byte) error
	RegisterRemoteHost(*host.Host, utils.URL, []byte, bool) error
	WriteDelegateKey(string, []byte) error
	AuthenticateHost(string) (string, int64, error)
	ResetHostKey(string) ([]byte, error)
	GetHostWithAuthInfo(string) (*AuthHost, error)
	GetHostsWithAuthInfo() ([]AuthHost, error)

	// Pools
	GetResourcePools() ([]pool.ResourcePool, error)
	GetResourcePool(string) (*pool.ResourcePool, error)
	AddResourcePool(PoolConfig) (*pool.ResourcePool, error)
	RemoveResourcePool(string) error
	UpdateResourcePool(pool pool.ResourcePool) error
	GetPoolIPs(string) (*pool.PoolIPs, error)
	AddVirtualIP(pool.VirtualIP) error
	RemoveVirtualIP(pool.VirtualIP) error

	// Services
	GetAllServiceDetails() ([]service.ServiceDetails, error)
	GetServiceDetails(serviceID string) (*service.ServiceDetails, error)
	GetServiceStatus(string) (map[string]map[string]interface{}, error)
	GetService(string) (*service.Service, error)
	AddService(ServiceConfig) (*service.ServiceDetails, error)
	CloneService(string, string) (*service.ServiceDetails, error)
	RemoveService(string) error
	UpdateService(io.Reader) (*service.ServiceDetails, error)
	UpdateServiceObj(service.Service) (*service.ServiceDetails, error)
	StartService(SchedulerConfig) (int, error)
	RestartService(SchedulerConfig) (int, error)
	RebalanceService(SchedulerConfig) (int, error)
	StopService(SchedulerConfig) (int, error)
	PauseService(SchedulerConfig) (int, error)
	AssignIP(IPConfig) error
	GetEndpoints(serviceID string, reportImports, reportExports, validate bool) ([]applicationendpoint.EndpointReport, error)
	ResolveServicePath(path string, noprefix bool) ([]service.ServiceDetails, error)
	ClearEmergency(serviceID string) (int, error)
	RemoveIP(args []string) error
	SetIP(IPConfig) error

	// Shell
	StartShell(ShellConfig) error
	RunShell(ShellConfig, chan struct{}) (int, error)

	// Snapshots
	GetSnapshots() ([]dao.SnapshotInfo, error)
	GetSnapshotsByServiceID(string) ([]dao.SnapshotInfo, error)
	GetSnapshotByServiceIDAndTag(string, string) (string, error)
	AddSnapshot(SnapshotConfig) (string, error)
	RemoveSnapshot(string) error
	Rollback(string, bool) error
	TagSnapshot(string, string) error
	RemoveSnapshotTag(string, string) (string, error)

	// Templates
	GetServiceTemplates() ([]template.ServiceTemplate, error)
	GetServiceTemplate(string) (*template.ServiceTemplate, error)
	AddServiceTemplate(io.Reader) (*template.ServiceTemplate, error)
	RemoveServiceTemplate(string) error
	CompileServiceTemplate(CompileTemplateConfig) (*template.ServiceTemplate, error)
	DeployServiceTemplate(DeployTemplateConfig) ([]service.ServiceDetails, error)

	// Backup & Restore
	GetBackupEstimate(string, []string) (*dao.BackupEstimate, error)
	Backup(string, []string, bool) (string, error)
	Restore(string) error

	// Docker
	ResetRegistry() error
	RegistrySync() error
	UpgradeRegistry(endpoint string, override bool) error
	DockerOverride(newImage string, oldImage string) error

	// Logs
	ExportLogs(config ExportLogsConfig) error

	// Metric
	PostMetric(metricName string, metricValue string) (string, error)

	// Scripts
	ScriptRun(fileName string, config *script.Config, stopChan chan struct{}) error
	ScriptParse(fileName string, config *script.Config) error

	// Volumes
	GetVolumeStatus() (*volume.Statuses, error)

	// Public endpoints
	AddPublicEndpointPort(serviceid, endpointName, portAddr string, usetls bool, protocol string, isEnabled, restart bool) (*servicedefinition.Port, error)
	RemovePublicEndpointPort(serviceid, endpointName, portAddr string) error
	EnablePublicEndpointPort(serviceid, endpointName, portAddr string, isEnabled bool) error
	AddPublicEndpointVHost(serviceid, endpointName, vhost string, isEnabled, restart bool) (*servicedefinition.VHost, error)
	RemovePublicEndpointVHost(serviceid, endpointName, vhost string) error
	EnablePublicEndpointVHost(serviceid, endpointName, vhost string, isEnabled bool) error
	GetAllPublicEndpoints() ([]service.PublicEndpoint, error)

	// Service Instances
	GetServiceInstances(serviceID string) ([]service.Instance, error)
	StopServiceInstance(serviceID string, instanceID int) error
	AttachServiceInstance(serviceID string, instanceID int, command string, args []string) error
	LogsForServiceInstance(serviceID string, instanceID int, command string, args []string) error
	SendDockerAction(serviceID string, instanceID int, action string, args []string) error

	// Debug Management
	DebugEnableMetrics() (string, error)
	DebugDisableMetrics() (string, error)
}

API is the intermediary between the command-line interface and the dao layer

func New

func New() API

func NewAPI

func NewAPI(master master.ClientInterface, agent *agent.Client, docker *dockerclient.Client, dao dao.ControlPlane) API

New creates a new API type

type AuthHost

type AuthHost struct {
	host.Host
	Authenticated bool
}

type CompileTemplateConfig

type CompileTemplateConfig struct {
	Dir string
	Map ImageMap
}

CompileTemplateConfig is the configuration object to conpile a template directory

type ContainerFileIndex

type ContainerFileIndex struct {
	// contains filtered or unexported fields
}

ContainerFileIndex maintains an index of separate files based on each unique combination of container ID and application log file name. Depending on the lifespan of the container and the date range defined by exporter.days, some of the files created by this method may have messages from multiple dates.

func NewContainerFileIndex

func NewContainerFileIndex() *ContainerFileIndex

func (*ContainerFileIndex) AddIndexForMessage

func (cfi *ContainerFileIndex) AddIndexForMessage(index int, message *parsedMessage)

func (*ContainerFileIndex) FindIndexForMessage

func (cfi *ContainerFileIndex) FindIndexForMessage(message *parsedMessage) (index int, found bool)

func (*ContainerFileIndex) GetFileIndexData

func (cfi *ContainerFileIndex) GetFileIndexData(index int, outputFile outputFileInfo, hostName, serviceName string) string

func (*ContainerFileIndex) GetFileName

func (cfi *ContainerFileIndex) GetFileName(index int, message *parsedMessage) string

func (*ContainerFileIndex) GetIndexHeader

func (cfi *ContainerFileIndex) GetIndexHeader() string

type DateFileIndex

type DateFileIndex struct {
	// contains filtered or unexported fields
}

DateFileIndex maintains an index of separate files based on date. Therefore, a single output file will contain messages from multiple services.

func NewDateFileIndex

func NewDateFileIndex() *DateFileIndex

func (*DateFileIndex) AddIndexForMessage

func (dfi *DateFileIndex) AddIndexForMessage(index int, message *parsedMessage)

func (*DateFileIndex) FindIndexForMessage

func (dfi *DateFileIndex) FindIndexForMessage(message *parsedMessage) (index int, found bool)

func (*DateFileIndex) GetFileIndexData

func (dfi *DateFileIndex) GetFileIndexData(index int, outputFile outputFileInfo, hostName, serviceName string) string

func (*DateFileIndex) GetFileName

func (dfi *DateFileIndex) GetFileName(index int, message *parsedMessage) string

func (*DateFileIndex) GetIndexHeader

func (dfi *DateFileIndex) GetIndexHeader() string

type DeployTemplateConfig

type DeployTemplateConfig struct {
	ID              string
	PoolID          string
	DeploymentID    string
	ManualAssignIPs bool
}

DeployTemplateConfig is the configuration object to deploy a template

type ElasticSearchResults

type ElasticSearchResults struct {
	Took     int            `json:"took,omitempty"`
	TimedOut bool           `json:"timed_out,omitempty"`
	Shards   map[string]int `json:"_shards,omitempty"`
	ScrollID string         `json:"_scroll_id,omitempty"`
	Hits     ExternalHit    `json:"hits,omitempty"`
}

type ExportGroup

type ExportGroup int

The export process produces 1 or more <nnn>.log files containing the exported log messages. The values of ExportGroup control which messages are grouped together in a single <nnn>.log file:

GroupByContainer   Each <nnn>.log contains messages for the same unique combination of container ID and
                   application log file name.
GroupByDay         Each <nnn>.log contains messages for the same calendar day.
GroupByService     Each <nnn>.log contains messages for the same logical service.
const (
	GroupByContainerID ExportGroup = iota
	GroupByDay
	GroupByService
)

func ExportGroupFromString

func ExportGroupFromString(value string) ExportGroup

func (ExportGroup) String

func (eg ExportGroup) String() string

type ExportLogDriver

type ExportLogDriver interface {
	// Sets the ES Logstash connection info; logstashES should be in the format hostname:port
	SetLogstashInfo(logstashES string) error

	// Returns a list of all the dates for which logs are available
	// The strings are in YYYY.MM.DD format, and in reverse chronological order.
	LogstashDays() ([]string, error)

	// Start a new search of ES logstash for a given date
	StartSearch(logstashIndex string, query string) (ElasticSearchResults, error)

	// Scroll to the next set of search results
	ScrollSearch(scrollID string) (ElasticSearchResults, error)
}

This interface is primarily provided for unit-testing ExportLogs(). Admittedly a very leaky abstraction around only a handful of elastigo calls. A better implementation would be to design an interface around all of the elastigo APIs which are needed by ExportLogs and the datastore package. Alternatively, maybe we need create a package just for interfacing withES Logstash. Either way that effort is outside the scope of making ExportLogs() testable.

type ExportLogDriverMock

type ExportLogDriverMock struct {
	mock.Mock
}

func (*ExportLogDriverMock) LogstashDays

func (_m *ExportLogDriverMock) LogstashDays() ([]string, error)

func (*ExportLogDriverMock) ScrollSearch

func (_m *ExportLogDriverMock) ScrollSearch(scrollID string) (ElasticSearchResults, error)

func (*ExportLogDriverMock) SetLogstashInfo

func (_m *ExportLogDriverMock) SetLogstashInfo(logstashES string) error

func (*ExportLogDriverMock) StartSearch

func (_m *ExportLogDriverMock) StartSearch(logstashIndex string, query string) (ElasticSearchResults, error)

type ExportLogsConfig

type ExportLogsConfig struct {
	// A list of one or more serviced IDs to export logs for
	// (includes all child services unless ExcludeChildren is true)
	ServiceIDs []string

	// A list of one or more application log file names to export
	FileNames []string

	// In the format yyyy.mm.dd (inclusive), "" means unbounded
	FromDate string

	// In the format yyyy.mm.dd (inclusive), "" means unbounded
	ToDate string

	// Name of the compressed tar file containing all of the exported logs. If not specified, defaults to
	// "./serviced-log-export-<TIMESTAMP>.tgz" where <TIMESTAMP> is an RFC3339-like string (e.g. 2016-06-02T143843Z)
	OutFileName string

	// Set to true to default more verbose logging
	Debug bool

	// Defines which messages are grouped together in each output file
	GroupBy ExportGroup

	// Set to true to exclude child services
	ExcludeChildren bool

	// Driver to work with logstash ES instance; if nil a default driver will be used. Primarily used for testing.
	Driver ExportLogDriver
	// contains filtered or unexported fields
}

ExportLogsConfig is the deserialized object from the command-line

type ExternalHit

type ExternalHit struct {
	Total    Total         `json:"total"`
	MaxScore float64       `json:"max_score"`
	Hits     []InternalHit `json:"hits,omitempty"`
}

type FileIndex

type FileIndex interface {
	FindIndexForMessage(message *parsedMessage) (index int, found bool)
	AddIndexForMessage(index int, message *parsedMessage)
	GetFileIndexData(index int, outputFile outputFileInfo, hostName, serviceName string) string
	GetIndexHeader() string
	GetFileName(index int, message *parsedMessage) string
}

func NewFileIndex

func NewFileIndex(groupBy ExportGroup) FileIndex

type HostConfig

type HostConfig struct {
	Address *utils.URL
	Nat     *utils.URL
	PoolID  string
	Memory  string
	IPs     []string
}

HostConfig is the deserialized object from the command-line

type HostUpdateConfig

type HostUpdateConfig struct {
	HostID string
	Memory string
}

type IPConfig

type IPConfig struct {
	ServiceID    string
	IPAddress    string
	Port         uint16
	Proto        string
	EndpointName string
}

IPConfig is the deserialized object from the command-line

type ImageMap

type ImageMap map[string]string

ImageMap parses docker image data

func (*ImageMap) Set

func (m *ImageMap) Set(value string) error

Set converts a docker image mapping into an ImageMap

func (*ImageMap) String

func (m *ImageMap) String() string

type InternalHit

type InternalHit struct {
	Index       string           `json:"_index"`
	Type        string           `json:"_type"`
	Id          string           `json:"_id"`
	Version     int              `json:"_version,omitempty"`
	PrimaryTerm int              `json:"_primary_term,omitempty"`
	SeqNo       int              `json:"_seq_no,omitempty"`
	Score       float64          `json:"_score"`
	Source      *json.RawMessage `json:"_source"`
}

type PoolConfig

type PoolConfig struct {
	PoolID      string
	Realm       string
	CoreLimit   int
	MemoryLimit uint64
	Permissions pool.Permission
}

PoolConfig is the deserialized data from the command-line

type PortMap

PortMap parses remote and local port data from the command line

func (*PortMap) Set

func (m *PortMap) Set(value string) error

Set converts a port mapping string from the command line to a PortMap object

func (*PortMap) String

func (m *PortMap) String() string

type SchedulerConfig

type SchedulerConfig struct {
	ServiceIDs  []string
	AutoLaunch  bool
	Synchronous bool
}

type ServiceConfig

type ServiceConfig struct {
	Name            string
	ParentServiceID string
	ImageID         string
	Command         string
	LocalPorts      *PortMap
	RemotePorts     *PortMap
}

ServiceConfig is the deserialized object from the command-line

type ServiceFileIndex

type ServiceFileIndex struct {
	// contains filtered or unexported fields
}

ServiceFileIndex maintains an index of separate files based on service id. Therefore, a single output file will contain messages for all instances of single service.

func NewServiceFileIndex

func NewServiceFileIndex() *ServiceFileIndex

func (*ServiceFileIndex) AddIndexForMessage

func (sfi *ServiceFileIndex) AddIndexForMessage(index int, message *parsedMessage)

func (*ServiceFileIndex) FindIndexForMessage

func (sfi *ServiceFileIndex) FindIndexForMessage(message *parsedMessage) (index int, found bool)

func (*ServiceFileIndex) GetFileIndexData

func (sfi *ServiceFileIndex) GetFileIndexData(index int, outputFile outputFileInfo, hostName, serviceName string) string

func (*ServiceFileIndex) GetFileName

func (sfi *ServiceFileIndex) GetFileName(index int, message *parsedMessage) string

func (*ServiceFileIndex) GetIndexHeader

func (sfi *ServiceFileIndex) GetIndexHeader() string

type ServiceMap

type ServiceMap map[string]service.ServiceDetails

ServiceMap maps services by its service id

func NewServiceMap

func NewServiceMap(services []service.ServiceDetails) ServiceMap

NewServiceMap creates a new service map from a slice of services

func (ServiceMap) Add

func (m ServiceMap) Add(service service.ServiceDetails) error

Add appends a service to the service map

func (ServiceMap) Get

func (m ServiceMap) Get(serviceID string) service.ServiceDetails

Get gets a service from the service map identified by its service id

func (ServiceMap) Remove

func (m ServiceMap) Remove(serviceID string) error

Remove removes a service from the service map

func (ServiceMap) Tree

func (m ServiceMap) Tree() map[string][]string

Tree returns a map of parent services and its list of children

func (ServiceMap) Update

func (m ServiceMap) Update(service service.ServiceDetails)

Update updates an existing service within the ServiceMap. If the service not exist, it gets created.

type ServiceStateController

type ServiceStateController func(SchedulerConfig) (int, error)

Type of method that controls the state of a service

type ShellConfig

type ShellConfig struct {
	ServiceID        string
	Command          string
	Args             []string
	Username         string
	SaveAs           string
	IsTTY            bool
	Mounts           []string
	ServicedEndpoint string
	LogToStderr      bool
	LogStash         struct {
		Enable     bool
		SettleTime string
	}
}

ShellConfig is the deserialized object from the command-line

type SnapshotConfig

type SnapshotConfig struct {
	ServiceID string
	Message   string
	Tag       string
	DockerID  string
}

type Total

type Total struct {
	Value    int    `json:"value"`
	Relation string `json:"relation"`
}

type UnknownElasticStructError

type UnknownElasticStructError struct {
	UnknownData   string
	UnknownStruct string
}

func (*UnknownElasticStructError) Error

func (e *UnknownElasticStructError) Error() string

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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