xfer

package
v0.0.0-...-06e0152 Latest Latest
Warning

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

Go to latest
Published: Apr 26, 2020 License: Apache-2.0 Imports: 16 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// AppPort is the default port that the app will use for its HTTP server.
	// The app publishes the API and user interface, and receives reports from
	// probes, on this port.
	AppPort = 4040

	// ScopeProbeIDHeader is the header we use to carry the probe's unique ID. The
	// ID is currently set to the a random string on probe startup.
	ScopeProbeIDHeader = "X-Scope-Probe-ID"

	// ScopeProbeVersionHeader is the header we use to carry the probe's version.
	ScopeProbeVersionHeader = "X-Scope-Probe-Version"
)
View Source
const HistoricReportsCapability = "historic_reports"

HistoricReportsCapability indicates whether reports older than the current time (-app.window) can be retrieved.

Variables

View Source
var EmptyPluginSpecs = PluginSpecs{ps.NewMap()}

EmptyPluginSpecs is the empty set of plugin specs.

View Source
var ErrInvalidMessage = fmt.Errorf("Invalid Message")

ErrInvalidMessage is the error returned when the on-wire message is unexpected.

Functions

func IsExpectedWSCloseError

func IsExpectedWSCloseError(err error) bool

IsExpectedWSCloseError returns boolean indicating whether the error is a clean disconnection.

Types

type ControlHandler

type ControlHandler interface {
	Handle(req Request, res *Response) error
}

ControlHandler is interface used in the app and the probe to represent a control RPC.

type ControlHandlerFunc

type ControlHandlerFunc func(Request) Response

ControlHandlerFunc is a adapter (ala golang's http RequestHandlerFunc) for ControlHandler

func ResizeTTYControlWrapper

func ResizeTTYControlWrapper(next func(pipeID string, height, width uint) Response) ControlHandlerFunc

ResizeTTYControlWrapper extracts the arguments needed by the resize tty control handler

func (ControlHandlerFunc) Handle

func (c ControlHandlerFunc) Handle(req Request, res *Response) error

Handle is an adapter method to make ControlHandlers exposable via golang rpc

type Details

type Details struct {
	ID           string          `json:"id"`
	Version      string          `json:"version"`
	Hostname     string          `json:"hostname"`
	Plugins      PluginSpecs     `json:"plugins,omitempty"`
	Capabilities map[string]bool `json:"capabilities,omitempty"`

	NewVersion *NewVersionInfo `json:"newVersion,omitempty"`
}

Details are some generic details that can be fetched from /api

type JSONWebsocketCodec

type JSONWebsocketCodec struct {
	sync.Mutex
	// contains filtered or unexported fields
}

JSONWebsocketCodec is golang rpc compatible Server and Client Codec that transmits and receives RPC messages over a websocker, as JSON.

func NewJSONWebsocketCodec

func NewJSONWebsocketCodec(conn Websocket) *JSONWebsocketCodec

NewJSONWebsocketCodec makes a new JSONWebsocketCodec

func (*JSONWebsocketCodec) Close

func (j *JSONWebsocketCodec) Close() error

Close implements rpc.ClientCodec and rpc.ServerCodec

func (*JSONWebsocketCodec) ReadRequestBody

func (j *JSONWebsocketCodec) ReadRequestBody(v interface{}) error

ReadRequestBody implements rpc.ServerCodec

func (*JSONWebsocketCodec) ReadRequestHeader

func (j *JSONWebsocketCodec) ReadRequestHeader(r *rpc.Request) error

ReadRequestHeader implements rpc.ServerCodec

func (*JSONWebsocketCodec) ReadResponseBody

func (j *JSONWebsocketCodec) ReadResponseBody(v interface{}) error

ReadResponseBody implements rpc.ClientCodec

func (*JSONWebsocketCodec) ReadResponseHeader

func (j *JSONWebsocketCodec) ReadResponseHeader(r *rpc.Response) error

ReadResponseHeader implements rpc.ClientCodec

func (*JSONWebsocketCodec) WaitForReadError

func (j *JSONWebsocketCodec) WaitForReadError() error

WaitForReadError blocks until any read on this codec returns an error. This is useful to know when the server has disconnected from the client.

func (*JSONWebsocketCodec) WriteRequest

func (j *JSONWebsocketCodec) WriteRequest(r *rpc.Request, v interface{}) error

WriteRequest implements rpc.ClientCodec

func (*JSONWebsocketCodec) WriteResponse

func (j *JSONWebsocketCodec) WriteResponse(r *rpc.Response, v interface{}) error

WriteResponse implements rpc.ServerCodec

type Message

type Message struct {
	Request  *rpc.Request
	Response *rpc.Response
	Value    interface{}
}

Message is the unions of Request, Response and arbitrary Value.

type NewVersionInfo

type NewVersionInfo struct {
	Version     string `json:"version"`
	DownloadURL string `json:"downloadUrl"`
}

NewVersionInfo is the struct exposed in /api when there is a new version of Scope available.

type Pipe

type Pipe interface {
	Ends() (io.ReadWriter, io.ReadWriter)
	CopyToWebsocket(io.ReadWriter, Websocket) error

	Close() error
	Closed() bool
	OnClose(func())
}

Pipe is a bi-directional channel from something in the probe to the UI.

func NewPipe

func NewPipe() Pipe

NewPipe makes a new pipe

func NewPipeFromEnds

func NewPipeFromEnds(local io.ReadWriter, remote io.ReadWriter) Pipe

NewPipeFromEnds makes a new pipe specifying its ends

type PluginSpec

type PluginSpec struct {
	ID string `json:"id"`

	// Label is a human-readable name of the plugin
	Label string `json:"label"`

	Description string `json:"description,omitempty"`

	// Interfaces is a list of things this plugin can be used for (e.g. "reporter")
	Interfaces []string `json:"interfaces"`

	APIVersion string `json:"api_version,omitempty"`

	Status string `json:"status,omitempty"`
}

PluginSpec is shared between the Probe, App, and UI. It is the plugin's self-proclaimed description.

type PluginSpecs

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

PluginSpecs is a set of plugin specs keyed on ID. Clients must use the Add method to add plugin specs

func MakePluginSpecs

func MakePluginSpecs(specs ...PluginSpec) PluginSpecs

MakePluginSpecs makes a new PluginSpecs with the given plugin specs.

func (PluginSpecs) Add

func (n PluginSpecs) Add(specs ...PluginSpec) PluginSpecs

Add adds the specs to the PluginSpecs. Add is the only valid way to grow a PluginSpecs. Add returns the PluginSpecs to enable chaining.

func (*PluginSpecs) CodecDecodeSelf

func (n *PluginSpecs) CodecDecodeSelf(decoder *codec.Decoder)

CodecDecodeSelf implements codec.Selfer

func (*PluginSpecs) CodecEncodeSelf

func (n *PluginSpecs) CodecEncodeSelf(encoder *codec.Encoder)

CodecEncodeSelf implements codec.Selfer

func (PluginSpecs) Copy

func (n PluginSpecs) Copy() PluginSpecs

Copy is a noop

func (PluginSpecs) DeepEqual

func (n PluginSpecs) DeepEqual(i interface{}) bool

DeepEqual tests equality with other PluginSpecss

func (PluginSpecs) ForEach

func (n PluginSpecs) ForEach(f func(PluginSpec))

ForEach executes f for each spec in the set. Nodes are traversed in sorted order.

func (PluginSpecs) Keys

func (n PluginSpecs) Keys() []string

Keys is a list of all the keys in this set.

func (PluginSpecs) Lookup

func (n PluginSpecs) Lookup(key string) (PluginSpec, bool)

Lookup the spec by 'key'

func (PluginSpecs) MarshalJSON

func (PluginSpecs) MarshalJSON() ([]byte, error)

MarshalJSON shouldn't be used, use CodecEncodeSelf instead

func (PluginSpecs) Merge

func (n PluginSpecs) Merge(other PluginSpecs) PluginSpecs

Merge combines the two PluginSpecss and returns a new result.

func (PluginSpecs) Size

func (n PluginSpecs) Size() int

Size is the number of specs in the set

func (PluginSpecs) String

func (n PluginSpecs) String() string

func (*PluginSpecs) UnmarshalJSON

func (*PluginSpecs) UnmarshalJSON(b []byte) error

UnmarshalJSON shouldn't be used, use CodecDecodeSelf instead

type PluginSpecsByID

type PluginSpecsByID []PluginSpec

PluginSpecsByID implements sort.Interface, so we can sort the specs by the ID field.

func (PluginSpecsByID) Len

func (p PluginSpecsByID) Len() int

Len is part of sort.Interface.

func (PluginSpecsByID) Less

func (p PluginSpecsByID) Less(i, j int) bool

Less is part of sort.Interface.

func (PluginSpecsByID) Swap

func (p PluginSpecsByID) Swap(i, j int)

Swap is part of sort.Interface.

type Request

type Request struct {
	AppID       string // filled in by the probe on receiving this request
	NodeID      string
	Control     string
	ControlArgs map[string]string
}

Request is the UI -> App -> Probe message type for control RPCs

type Response

type Response struct {
	Value interface{} `json:"value,omitempty"`
	Error string      `json:"error,omitempty"`

	// Pipe specific fields
	Pipe             string `json:"pipe,omitempty"`
	RawTTY           bool   `json:"raw_tty,omitempty"`
	ResizeTTYControl string `json:"resize_tty_control,omitempty"`

	// Remove specific fields
	RemovedNode string `json:"removedNode,omitempty"` // Set if node was removed
}

Response is the Probe -> App -> UI message type for the control RPCs.

func ResponseError

func ResponseError(err error) Response

ResponseError creates a new Response with the given error.

func ResponseErrorf

func ResponseErrorf(format string, a ...interface{}) Response

ResponseErrorf creates a new Response with the given formatted error string.

type WSDialer

type WSDialer interface {
	Dial(urlStr string, requestHeader http.Header) (*websocket.Conn, *http.Response, error)
}

WSDialer can dial a new websocket

type Websocket

type Websocket interface {
	ReadMessage() (messageType int, p []byte, err error)
	WriteMessage(messageType int, data []byte) error
	ReadJSON(v interface{}) error
	WriteJSON(v interface{}) error
	Close() error
}

Websocket exposes the bits of *websocket.Conn we actually use.

func DialWS

func DialWS(d WSDialer, urlStr string, requestHeader http.Header) (Websocket, *http.Response, error)

DialWS creates a new client connection. Use requestHeader to specify the origin (Origin), subprotocols (Sec-WebSocket-Protocol) and cookies (Cookie). Use the response.Header to get the selected subprotocol (Sec-WebSocket-Protocol) and cookies (Set-Cookie).

func Ping

func Ping(c *websocket.Conn) Websocket

Ping adds a periodic ping to a websocket connection.

func Upgrade

func Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header) (Websocket, error)

Upgrade upgrades the HTTP server connection to the WebSocket protocol.

Jump to

Keyboard shortcuts

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