coordinator

package
v0.0.0-...-5c345c6 Latest Latest
Warning

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

Go to latest
Published: Sep 2, 2016 License: MIT Imports: 19 Imported by: 0

README

coordinator

coordinator

Package coordinator is a request router and proxy, to be used with Providers. It is the entry point for all task requests and separates local providers from external services.

New task requests are first sent to a Coordinator. There are two means the Coordinator has of receiving requests: an http server, used for external requests, and a unix socket, used for internal requests (i.e. from providers). The Coordinator looks for providers of the task in the well defined directory structure and sends the request to an appropriate provider. If the request has an http response hook rather than a unix socket, it is tracked and a new request using the Coordinator's response socket as the hook is sent to the appropriate task. In this way, responses to external requests first come back to the Coordinator and then go to the original response hook, rather than Providers responding directly to the outside world. Similarly, if the response to a proxied request contains a StreamURL, the Coordinator proxies the stream, modifying the StreamURL being sent externally appropriately.

Endpoints
External Request: http, /
Internal Request: unix, /[socket_dir]/coordinator/[coordinator name].sock
Internal Response: unix, /[socket_dir]/response/[coordinator name].sock
Proxied Stream: http, /stream?addr=[original StreamURL]
Config
{
	"config_file": "/path/to/config/file.json",
	"socket_dir": "/base/path/for/sockets",
	"service_name": "NameOfThisCoordinator",
	"external_port": 8080,
	"request_timeout": 0,
	"log_level": "warning"
}

Usage

type Config
type Config struct {
}

Config holds all configuration for the provider.

func NewConfig
func NewConfig(flagSet *flag.FlagSet, v *viper.Viper) *Config

NewConfig creates a new instance of Config. If a viper instance is not provided, a new one will be created.

func (*Config) ExternalPort
func (c *Config) ExternalPort() int

ExternalPort returns the port to listen on for external requests.

func (*Config) LoadConfig
func (c *Config) LoadConfig() error

LoadConfig attempts to load the config. Flags should be parsed first.

func (*Config) RequestTimeout
func (c *Config) RequestTimeout() time.Duration

RequestTimeout returns the duration of the default request timeout.

func (*Config) ServiceName
func (c *Config) ServiceName() string

ServiceName returns the name the service should register as.

func (*Config) SetupLogging
func (c *Config) SetupLogging() error

SetupLogging sets the log level and formatting.

func (*Config) SocketDir
func (c *Config) SocketDir() string

SocketDir returns the base directory for task sockets.

func (*Config) Validate
func (c *Config) Validate() error

Validate returns whether the config is valid, containing necessary values.

type ConfigData
type ConfigData struct {
	SocketDir      string `json:"socket_dir"`
	ServiceName    string `json:"service_name"`
	ExternalPort   uint   `json:"external_port"`
	RequestTimeout uint   `json:"request_timeout"`
	LogLevel       string `json:"log_level"`
}

ConfigData defines the structure of the config data (e.g. in the config file)

type Server
type Server struct {
}

Server is the coordinator server. It handles accepting internal and external requests and proxying them to appropriate providers.

func NewServer
func NewServer(config *Config) (*Server, error)

NewServer creates and initializes a new instance of Server.

func (*Server) Start
func (s *Server) Start() error

Start starts the server, running all of the listeners and proxy tracker.

func (*Server) Stop
func (s *Server) Stop()

Stop stops the server, gracefully stopping all of the listeners and proxy tracker.

func (*Server) StopOnSignal
func (s *Server) StopOnSignal(signals ...os.Signal)

StopOnSignal will wait until one of the specified signals is received and then stop the server. If no signals are specified, it will use a default set.

-- Generated with godocdown

Documentation

Overview

Package coordinator is a request router and proxy, to be used with Providers. It is the entry point for all task requests and separates local providers from external services.

New task requests are first sent to a Coordinator. There are two means the Coordinator has of receiving requests: an http server, used for external requests, and a unix socket, used for internal requests (i.e. from providers). The Coordinator looks for providers of the task in the well defined directory structure and sends the request to an appropriate provider. If the request has an http response hook rather than a unix socket, it is tracked and a new request using the Coordinator's response socket as the hook is sent to the appropriate task. In this way, responses to external requests first come back to the Coordinator and then go to the original response hook, rather than Providers responding directly to the outside world. Similarly, if the response to a proxied request contains a StreamURL, the Coordinator proxies the stream, modifying the StreamURL being sent externally appropriately.

Endpoints

External Request: http, /
Internal Request: unix, /[socket_dir]/coordinator/[coordinator name].sock
Internal Response: unix, /[socket_dir]/response/[coordinator name].sock
Proxied Stream: http, /stream?addr=[original StreamURL]

Config

{
	"config_file": "/path/to/config/file.json",
	"socket_dir": "/base/path/for/sockets",
	"service_name": "NameOfThisCoordinator",
	"external_port": 8080,
	"request_timeout": 0,
	"log_level": "warning"
}

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Config

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

Config holds all configuration for the provider.

func NewConfig

func NewConfig(flagSet *flag.FlagSet, v *viper.Viper) *Config

NewConfig creates a new instance of Config. If a viper instance is not provided, a new one will be created.

func (*Config) ExternalPort

func (c *Config) ExternalPort() int

ExternalPort returns the port to listen on for external requests.

func (*Config) LoadConfig

func (c *Config) LoadConfig() error

LoadConfig attempts to load the config. Flags should be parsed first.

func (*Config) RequestTimeout

func (c *Config) RequestTimeout() time.Duration

RequestTimeout returns the duration of the default request timeout.

func (*Config) ServiceName

func (c *Config) ServiceName() string

ServiceName returns the name the service should register as.

func (*Config) SetupLogging

func (c *Config) SetupLogging() error

SetupLogging sets the log level and formatting.

func (*Config) SocketDir

func (c *Config) SocketDir() string

SocketDir returns the base directory for task sockets.

func (*Config) Validate

func (c *Config) Validate() error

Validate returns whether the config is valid, containing necessary values.

type ConfigData

type ConfigData struct {
	SocketDir      string `json:"socket_dir"`
	ServiceName    string `json:"service_name"`
	ExternalPort   uint   `json:"external_port"`
	RequestTimeout uint   `json:"request_timeout"`
	LogLevel       string `json:"log_level"`
}

ConfigData defines the structure of the config data (e.g. in the config file)

type Server

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

Server is the coordinator server. It handles accepting internal and external requests and proxying them to appropriate providers.

func NewServer

func NewServer(config *Config) (*Server, error)

NewServer creates and initializes a new instance of Server.

func (*Server) Start

func (s *Server) Start() error

Start starts the server, running all of the listeners and proxy tracker.

func (*Server) Stop

func (s *Server) Stop()

Stop stops the server, gracefully stopping all of the listeners and proxy tracker.

func (*Server) StopOnSignal

func (s *Server) StopOnSignal(signals ...os.Signal)

StopOnSignal will wait until one of the specified signals is received and then stop the server. If no signals are specified, it will use a default set.

Jump to

Keyboard shortcuts

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