Documentation ¶
Index ¶
Constants ¶
const ( ListSize = "webhook_list_size_value" NotificationUnmarshallFailed = "notification_unmarshall_failed_count" )
const (
DEFAULT_EXPIRATION_DURATION time.Duration = time.Second * 300
)
const (
DEFAULT_UNDERTAKER_INTERVAL time.Duration = time.Minute
)
Variables ¶
This section is empty.
Functions ¶
func ProvideMetrics ¶
Types ¶
type Factory ¶
type Factory struct { // Tick is an optional function that produces a channel for time ticks. // Test code can set this field to something that returns a channel under the control of the test. Tick func(time.Duration) <-chan time.Time `json:"-"` // UndertakerInterval is how often the undertaker is invoked UndertakerInterval time.Duration `json:"undertakerInterval"` // internal handler for AWS SNS Server AWS.Notifier `json:"-"` // StartConfig is the contains the data need to obtain the current system's listeners Start *StartConfig `json:"start"` // contains filtered or unexported fields }
Factory is a classic Factory Object for various webhook things.
func NewFactory ¶
NewFactory creates a Factory from a Viper environment. This function always returns a non-nil Factory instance.
This example uses Viper, which I highly recommend. You could just pass an io.Reader too, and use the encoding/json package. In any case, allowing the configuration source to be nil makes a lot of things easier on clients, like creating a test Factory for tests in client code.
func (*Factory) NewRegistryAndHandler ¶
func (f *Factory) NewRegistryAndHandler(metrics WebhookMetrics) (Registry, http.Handler)
NewRegistryAndHandler returns a List instance for accessing webhooks and an HTTP handler which can receive updates from external systems.
func (*Factory) SetExternalUpdate ¶
SetExternalUpdate is a specified function that takes an []W argument This function is called when monitor.changes receives a message
func (*Factory) SetList ¶
func (f *Factory) SetList(ul UpdatableList)
type List ¶
List is a read-only random access interface to a set of W's We don't necessarily need an implementation of just this interface alone.
type Registry ¶
type Registry struct { Changes chan []W // contains filtered or unexported fields }
func NewRegistry ¶
func NewRegistry(mon *monitor) Registry
func (*Registry) GetRegistry ¶
func (r *Registry) GetRegistry(rw http.ResponseWriter, req *http.Request)
get is an api call to return all the registered listeners
func (*Registry) UpdateRegistry ¶
func (r *Registry) UpdateRegistry(rw http.ResponseWriter, req *http.Request)
update is an api call to processes a listenener registration for adding and updating
type StartConfig ¶
type StartConfig struct { // maximum time allowed to wait for data to be retrieved Duration time.Duration `json:"duration"` // path to query for current hooks ApiPath string `json:"apiPath"` AuthHeader string `json:"authHeader"` // sat configuration data for requesting token Sat struct { // url path Path string `json:"path"` // client id Id string `json:"id"` // client secret Secret string `json:"secret"` // client capabilities Capabilities string `json:"capabilities"` // the obtained sat token Token token } `json:"sat"` // contains filtered or unexported fields }
func NewStartFactory ¶
func NewStartFactory(v *viper.Viper) (sc *StartConfig)
func (*StartConfig) GetCurrentSystemsHooks ¶
func (sc *StartConfig) GetCurrentSystemsHooks(rc chan Result)
type UpdatableList ¶
type UpdatableList interface { List // Update performs a bulk update of this webhooks known to this list Update([]W) // Filter atomically filters the elements of this list Filter(func([]W) []W) }
UpdatableList is mutable list that can be updated en masse
func NewList ¶
func NewList(initial []W) UpdatableList
NewList just creates an UpdatableList. Don't forget: NewList(nil) is valid!
type W ¶
type W struct { // Configuration for message delivery Config struct { // The URL to deliver messages to. URL string `json:"url"` // The content-type to set the messages to (unless specified by WRP). ContentType string `json:"content_type"` // The secret to use for the SHA1 HMAC. // Optional, set to "" to disable behavior. Secret string `json:"secret,omitempty"` // alt_urls is a list of explicit URLs that should be round robin on faliure AlternativeURLs []string `json:"alt_urls,omitempty"` } `json:"config"` // The URL to notify when we cut off a client due to overflow. // Optional, set to "" to disable behavior FailureURL string `json:"failure_url"` // The list of regular expressions to match event type against. Events []string `json:"events"` // Matcher type contains values to match against the metadata. Matcher struct { // The list of regular expressions to match device id type against. DeviceId []string `json:"device_id"` } `json:"matcher,omitempty"` // The specified duration for this hook to live Duration time.Duration `json:"duration"` // The absolute time when this hook is to be disabled Until time.Time `json:"until"` // The address that performed the registration Address string `json:"registered_from_address"` }
W is the structure that represents the Webhook listener data we share.
(Note to Wes: this follows the golang naming conventions. webhook.Webhook "stutters", and this type is really the central type of this package. Calling it a single letter is the norm. This could also go in the server package, in which case I'd change the name to Webhook, since service.Webhook works better. See https://blog.golang.org/package-names)
type WebhookMetrics ¶
type WebhookMetrics struct { fx.In ListSize metrics.Gauge `name:"webhook_list_size_value"` NotificationUnmarshallFailed metrics.Counter `name:"notification_unmarshall_failed_count"` }
func ApplyMetricsData ¶
func ApplyMetricsData(registry xmetrics.Registry) (m WebhookMetrics)
ApplyMetricsData is used for setting the counter values on the WebhookMetrics when stored and accessing for later use