As of late April, 2021 Gizmo has been placed in maintenance mode.
This toolkit provides packages to put together server and pubsub daemons with the following features:
Notice the capitalization!
go get github.com/NYTimes/gizmo/...
The New York Times recently changed the github organization from NYTimes
to nytimes
. This should not affect the installation as long as you use the proper casing NYTimes
and not nytimes
per installation instructions above.
However, the intention is to migrate the import paths to be consistent with how it's shown on GitHub. This will be a breaking change and we will introduce a major tag when we update the code. Therefore, the import path will go from github.com/NYTimes/gizmo/server
to github.com/nytimes/gizmo/v2/server
. This ensures that people will not have type-mismatches between import path changes.
server
The server
package is the bulk of the toolkit and relies on server.Config
to manage Server
implementations.
It offers 1 server implementation:
SimpleServer
, which is capable of handling basic HTTP and JSON requests via 5 of the available Service
implementations: SimpleService
, JSONService
, ContextService
, MixedService
and a MixedContextService
.
server/kit
The server/kit
package embodies Gizmo's goals to combine with go-kit.
SERVICE_NAME
and SERVICE_VERSION
environment variables.observe
The observe
package provides observability helpers for metrics and tracing through OpenCensus
server/kit
(and soon SimpleServer) utilizes this package to create a StackDriver exporter with sane defaultsGoogleProjectID
, IsGAE
, and IsCloudRun
can help you make decisions about the underlying platformauth
The auth
package provides primitives for verifying inbound authentication tokens:
PublicKeySource
interface is meant to provide *rsa.PublicKeys
from JSON Web Key Sets.Verifier
struct composes key source implementations with custom decoders and verifier functions to streamline server side token verification.auth/gcp
The auth/gcp
package provides 2 Google Cloud Platform based auth.PublicKeySource
and oauth2.TokenSource
implementations:
The auth/gcp
package also includes an Authenticator
, which encapsulates a Google Identity verifier and oauth2
credentials to manage a basic web auth flow.
config
The config
package contains a handful of useful functions to load to configuration structs from JSON files or environment variables.
There are also many structs for common configuration options and credentials of different Cloud Services and Databases.
pubsub
The pubsub
package contains two (publisher
and subscriber
) generic interfaces for publishing data to queues as well as subscribing and consuming data from those queues.
There are 4 implementations of pubsub
interfaces:
For pubsub via Amazon's SNS/SQS, you can use the pubsub/aws
package
For pubsub via Google's Pubsub, you can use the pubsub/gcp
package
For pubsub via Kafka topics, you can use the pubsub/kafka
package
For publishing via HTTP, you can use the pubsub/http
package
pubsub/pubsubtest
The pubsub/pubsubtest
package contains test implementations of the pubsub.Publisher
, pubsub.MultiPublisher
, and pubsub.Subscriber
interfaces that will allow developers to easily mock out and test their pubsub
implementations.
server
and pubsub
are available in the examples
subdirectory.If you experience any issues please create an issue and/or reach out on the #gizmo channel in the Gophers Slack Workspace with what you've found.
The Gizmo logo was based on the Go mascot designed by Renée French and copyrighted under the Creative Commons Attribution 3.0 license.