Skip to content

Instantly share code, notes, and snippets.

@plutov
plutov / service.go
Created September 6, 2018 03:56
service.go
import (
"context"
uuid "github.com/satori/go.uuid"
)
// NotificatorService describes the service.
type NotificatorService interface {
// Add your methods here
SendEmail(ctx context.Context, email string, content string) (string, error)
@plutov
plutov / middleware.go
Created September 6, 2018 03:57
middleware.go
func (l loggingMiddleware) SendEmail(ctx context.Context, email string, content string) (string, error) {
defer func() {
l.logger.Log("method", "SendEmail", "email", email, "content", content)
}()
return l.next.SendEmail(ctx, email, content)
}
@plutov
plutov / endpoint.go
Created September 6, 2018 03:57
endpoint.go
// SendEmailResponse collects the response parameters for the SendEmail method.
type SendEmailResponse struct {
Id string
E0 error `json:"e0"`
}
// MakeSendEmailEndpoint returns an endpoint that invokes SendEmail on the service.
func MakeSendEmailEndpoint(s service.NotificatorService) endpoint.Endpoint {
return func(ctx context.Context, request interface{}) (interface{}, error) {
req := request.(SendEmailRequest)
@plutov
plutov / handler.go
Created September 6, 2018 03:59
handler.go
func decodeSendEmailRequest(_ context.Context, r interface{}) (interface{}, error) {
req := r.(*pb.SendEmailRequest)
return endpoint.SendEmailRequest{Email: req.Email, Content: req.Content}, nil
}
func encodeSendEmailResponse(_ context.Context, r interface{}) (interface{}, error) {
reply := r.(endpoint.SendEmailResponse)
return &pb.SendEmailReply{Id: reply.Id}, nil
}
@plutov
plutov / docker-compose.yml
Last active September 6, 2018 04:00
docker-compose.yml
etcd:
image: 'quay.io/coreos/etcd:v3.1.7'
restart: always
ports:
- '23791:2379'
- '23801:2380'
environment:
ETCD_NAME: infra
ETCD_INITIAL_ADVERTISE_PEER_URLS: 'http://etcd:2380'
ETCD_INITIAL_CLUSTER: infra=http://etcd:2380
@plutov
plutov / service.go
Created September 6, 2018 04:01
service.go
registrar, err := registerService(logger)
if err != nil {
logger.Log(err)
return
}
defer registrar.Deregister()
func registerService(logger log.Logger) (*sdetcd.Registrar, error) {
var (
@plutov
plutov / service.go
Created September 6, 2018 04:01
service.go
import (
"github.com/plutov/packagemain/13-go-kit-2/notificator/pkg/grpc/pb"
"google.golang.org/grpc"
)
type basicUsersService struct {
notificatorServiceClient pb.NotificatorClient
}
func (b *basicUsersService) Create(ctx context.Context, email string) error {
@plutov
plutov / service.go
Created September 6, 2018 04:02
service.go
var etcdServer = "http://etcd:2379"
client, err := sdetcd.NewClient(context.Background(), []string{etcdServer}, sdetcd.ClientOptions{})
if err != nil {
log.Printf("unable to connect to etcd: %s", err.Error())
return new(basicUsersService)
}
entries, err := client.GetEntries("/services/notificator/")
if err != nil || len(entries) == 0 {
@plutov
plutov / calendar.filter
Created October 6, 2018 06:41
calendar gmail filter
from:(-me) {filename:vcs filename:ics} has:attachment