Documentation ¶
Index ¶
- Constants
- Variables
- func AliveHandler(rt *RestTunnel) http.HandlerFunc
- func AnalyticsHandler(rt *RestTunnel) http.HandlerFunc
- func CallbacksHandler(rt *RestTunnel) http.HandlerFunc
- func DurationTimestamp(d time.Duration) (output string)
- func IsDiscordAPIURI(uri *fasthttp.URI) bool
- type BaseResponse
- type ErrorResponse
- type MethodRouter
- type Queue
- type RestTunnel
- func (rt *RestTunnel) CollectCallbacks() (cleaned int, dur time.Duration)
- func (rt *RestTunnel) CollectQueues() (cleaned int, dur time.Duration)
- func (rt *RestTunnel) DecodeBody(resp *fasthttp.Response) (body []byte, err error)
- func (rt *RestTunnel) HandleQueueJob(tr *structs.TunnelRequest)
- func (rt *RestTunnel) HandleRequest(ctx *fasthttp.RequestCtx)
- func (rt *RestTunnel) LoadConfiguration(path string) (configuration *TunnelConfiguration, err error)
- func (rt *RestTunnel) Open() (err error)
- func (rt *RestTunnel) StartQueueJob(q *Queue)
- func (rt *RestTunnel) TakeOutTheTrash()
- func (rt *RestTunnel) TraverseBucket(bucketStr string) (_bucket *bucket.Bucket, bucketStack []string, err error)
- func (rt *RestTunnel) TunnelHTTPRequest(ctx *fasthttp.RequestCtx)
- type TunnelConfiguration
Constants ¶
const ConfigurationPath = "restTunnel.yaml"
ConfigurationPath is the path to the file the configration will be located at.
const Interval = time.Second * 15
Interval between each analytic sample.
const MaxRedirects = 5
MaxRedirects is the maximum number of redirects before is it not attempted again.
const Samples = 720
Samples to hold. 5 seconds and 72 samples is 1 hour.
const VERSION = "1.2.1"
VERSION respects semantic versioning.
Variables ¶
var ErrCallbackDoesNotExist = "Callback '%s' does not exist"
ErrCallbackDoesNotExist is raised when referencing a callback that does not exist.
var ErrCallbackNotFinished = "Callback '%s' has not completed request"
ErrCallbackNotFinished is raised when attempting to retrieve the callback on a request that is not done.
Functions ¶
func AliveHandler ¶
func AliveHandler(rt *RestTunnel) http.HandlerFunc
AliveHandler returns the RestTunnel version as a way of signifying it is ready to serve.
func AnalyticsHandler ¶
func AnalyticsHandler(rt *RestTunnel) http.HandlerFunc
AnalyticsHandler handles returning the RestTunnel analytics.
func CallbacksHandler ¶
func CallbacksHandler(rt *RestTunnel) http.HandlerFunc
CallbacksHandler handles returning a callback to a client.
func DurationTimestamp ¶
DurationTimestamp outputs in a format similar to the timestamp String().
func IsDiscordAPIURI ¶
IsDiscordAPIURI returns a boolean if the current URI is a discord API endpoint.
Types ¶
type BaseResponse ¶
type BaseResponse struct { Error string `json:"error,omitempty"` Success bool `json:"success"` Data interface{} `json:"data,omitempty"` Queued *bool `json:"queued,omitempty"` UUID *uuid.UUID `json:"uuid,omitempty"` }
BaseResponse is the structure of all REST requests.
type ErrorResponse ¶
type ErrorResponse struct { Error string `json:"error"` Success bool `json:"success"` Queued bool `json:"queued,omitempty"` // Boolean if the request has already been queued UUID uuid.UUID `json:"uuid,omitempty"` }
ErrorResponse is the structure error messages are returned to by the client. We do not have a Success response as the raw response is sent.
type MethodRouter ¶
MethodRouter beepboop.
func NewMethodRouter ¶
func NewMethodRouter() *MethodRouter
NewMethodRouter creates a new method router.
func (*MethodRouter) HandleFunc ¶
func (mr *MethodRouter) HandleFunc(path string, f func(http.ResponseWriter, *http.Request), methods ...string) *mux.Route
HandleFunc registers a route that handles both paths and methods.
type Queue ¶
type Queue struct { Expiration time.Time JobActive *abool.AtomicBool JobsHandled *int64 Bucket *bucket.Bucket PriorityEvents chan *structs.TunnelRequest Events chan *structs.TunnelRequest // contains filtered or unexported fields }
Queue represents a Deque with a priority queue.
type RestTunnel ¶
type RestTunnel struct { Configuration *TunnelConfiguration `json:"configuration"` Logger zerolog.Logger `json:"-"` Start time.Time `json:"uptime"` HTTP *fasthttp.Client `json:"-"` Buckets map[string]*bucket.Bucket `json:"buckets"` Queues map[string]*Queue `json:"queue"` Callbacks map[uuid.UUID]*structs.TunnelResponse `json:"callbacks"` // Analytics for ratelimits AnalyticsHit *accumulator.Accumulator AnalyticsMiss *accumulator.Accumulator // Requests waiting and an atomic cache AnalyticsWaiting *accumulator.Accumulator // Analytics for requests and callbacks buffer AnalyticsRequests *accumulator.Accumulator AnalyticsCallbacks *accumulator.Accumulator // Uses total response time and requests to calculate average AnalyticsAverageResponse *accumulator.Accumulator AverageResponse *accumulator.Accumulator Router *MethodRouter // contains filtered or unexported fields }
RestTunnel represents the global application state.
func NewTunnel ¶
func NewTunnel(logger io.Writer) (rt *RestTunnel, err error)
NewTunnel creates a RestTunnel instance.
func (*RestTunnel) CollectCallbacks ¶
func (rt *RestTunnel) CollectCallbacks() (cleaned int, dur time.Duration)
CollectCallbacks handles cleaning old callbacks.
func (*RestTunnel) CollectQueues ¶
func (rt *RestTunnel) CollectQueues() (cleaned int, dur time.Duration)
CollectQueues handles cleaning old queues.
func (*RestTunnel) DecodeBody ¶
func (rt *RestTunnel) DecodeBody(resp *fasthttp.Response) (body []byte, err error)
DecodeBody returns a decoded fasthttp.Response body using the Content-Encoding header.
func (*RestTunnel) HandleQueueJob ¶
func (rt *RestTunnel) HandleQueueJob(tr *structs.TunnelRequest)
HandleQueueJob handles a TunnelRequest gathered from a queue.
func (*RestTunnel) HandleRequest ¶
func (rt *RestTunnel) HandleRequest(ctx *fasthttp.RequestCtx)
HandleRequest handles a HTTP request given to RestTunnel.
func (*RestTunnel) LoadConfiguration ¶
func (rt *RestTunnel) LoadConfiguration(path string) (configuration *TunnelConfiguration, err error)
LoadConfiguration loads the configuration for RestTunnel.
func (*RestTunnel) StartQueueJob ¶
func (rt *RestTunnel) StartQueueJob(q *Queue)
StartQueueJob starts a queue job.
func (*RestTunnel) TakeOutTheTrash ¶
func (rt *RestTunnel) TakeOutTheTrash()
TakeOutTheTrash handles cleaning old entries.
func (*RestTunnel) TraverseBucket ¶
func (rt *RestTunnel) TraverseBucket(bucketStr string) (_bucket *bucket.Bucket, bucketStack []string, err error)
TraverseBucket returns the original bucket from the bucket alias. Returns current bucket, slice of buckets traversed through and error.
func (*RestTunnel) TunnelHTTPRequest ¶
func (rt *RestTunnel) TunnelHTTPRequest(ctx *fasthttp.RequestCtx)
TunnelHTTPRequest handles creating a tunnel request.
type TunnelConfiguration ¶
type TunnelConfiguration struct { Host string `json:"host" yaml:"host"` State struct { CallbackExpiration int `json:"callback_expiration" yaml:"callback_expiration"` QueueExpiration int `json:"queue_expiration" yaml:"queue_expiration"` } `json:"state" yaml:"state"` ReverseRoute struct { Enabled bool `json:"enabled" yaml:"enabled"` Host string `json:"host" yaml:"host"` } `json:"reverse_route" yaml:"reverse_route"` Logging struct { ConsoleLoggingEnabled bool `json:"console_logging" yaml:"console_logging"` FileLoggingEnabled bool `json:"file_logging" yaml:"file_logging"` EncodeAsJSON bool `json:"encode_as_json" yaml:"encode_as_json"` // Make the framework log as json Directory string `json:"directory" yaml:"directory"` // Directory to log into Filename string `json:"filename" yaml:"filename"` // Name of logfile MaxSize int `json:"max_size" yaml:"max_size"` // Size in MB before a new file MaxBackups int `json:"max_backups" yaml:"max_backups"` // Number of files to keep MaxAge int `json:"max_age" yaml:"max_age"` // Number of days to keep a logfile } `json:"logging" yaml:"logging"` }
TunnelConfiguration represents the configuration for RestTunnel.