Moved to google.golang.org/genproto/googleapis/api/annotations
Fixes #52
This commit is contained in:
34
vendor/github.com/go-kit/kit/examples/shipping/handling/endpoint.go
generated
vendored
Normal file
34
vendor/github.com/go-kit/kit/examples/shipping/handling/endpoint.go
generated
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
package handling
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/go-kit/kit/endpoint"
|
||||
|
||||
"github.com/go-kit/kit/examples/shipping/cargo"
|
||||
"github.com/go-kit/kit/examples/shipping/location"
|
||||
"github.com/go-kit/kit/examples/shipping/voyage"
|
||||
)
|
||||
|
||||
type registerIncidentRequest struct {
|
||||
ID cargo.TrackingID
|
||||
Location location.UNLocode
|
||||
Voyage voyage.Number
|
||||
EventType cargo.HandlingEventType
|
||||
CompletionTime time.Time
|
||||
}
|
||||
|
||||
type registerIncidentResponse struct {
|
||||
Err error `json:"error,omitempty"`
|
||||
}
|
||||
|
||||
func (r registerIncidentResponse) error() error { return r.Err }
|
||||
|
||||
func makeRegisterIncidentEndpoint(hs Service) endpoint.Endpoint {
|
||||
return func(ctx context.Context, request interface{}) (interface{}, error) {
|
||||
req := request.(registerIncidentRequest)
|
||||
err := hs.RegisterHandlingEvent(req.CompletionTime, req.ID, req.Voyage, req.Location, req.EventType)
|
||||
return registerIncidentResponse{Err: err}, nil
|
||||
}
|
||||
}
|
37
vendor/github.com/go-kit/kit/examples/shipping/handling/instrumenting.go
generated
vendored
Normal file
37
vendor/github.com/go-kit/kit/examples/shipping/handling/instrumenting.go
generated
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
package handling
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/go-kit/kit/metrics"
|
||||
|
||||
"github.com/go-kit/kit/examples/shipping/cargo"
|
||||
"github.com/go-kit/kit/examples/shipping/location"
|
||||
"github.com/go-kit/kit/examples/shipping/voyage"
|
||||
)
|
||||
|
||||
type instrumentingService struct {
|
||||
requestCount metrics.Counter
|
||||
requestLatency metrics.Histogram
|
||||
Service
|
||||
}
|
||||
|
||||
// NewInstrumentingService returns an instance of an instrumenting Service.
|
||||
func NewInstrumentingService(counter metrics.Counter, latency metrics.Histogram, s Service) Service {
|
||||
return &instrumentingService{
|
||||
requestCount: counter,
|
||||
requestLatency: latency,
|
||||
Service: s,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *instrumentingService) RegisterHandlingEvent(completed time.Time, id cargo.TrackingID, voyageNumber voyage.Number,
|
||||
loc location.UNLocode, eventType cargo.HandlingEventType) error {
|
||||
|
||||
defer func(begin time.Time) {
|
||||
s.requestCount.With("method", "register_incident").Add(1)
|
||||
s.requestLatency.With("method", "register_incident").Observe(time.Since(begin).Seconds())
|
||||
}(time.Now())
|
||||
|
||||
return s.Service.RegisterHandlingEvent(completed, id, voyageNumber, loc, eventType)
|
||||
}
|
38
vendor/github.com/go-kit/kit/examples/shipping/handling/logging.go
generated
vendored
Normal file
38
vendor/github.com/go-kit/kit/examples/shipping/handling/logging.go
generated
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
package handling
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/go-kit/kit/log"
|
||||
|
||||
"github.com/go-kit/kit/examples/shipping/cargo"
|
||||
"github.com/go-kit/kit/examples/shipping/location"
|
||||
"github.com/go-kit/kit/examples/shipping/voyage"
|
||||
)
|
||||
|
||||
type loggingService struct {
|
||||
logger log.Logger
|
||||
Service
|
||||
}
|
||||
|
||||
// NewLoggingService returns a new instance of a logging Service.
|
||||
func NewLoggingService(logger log.Logger, s Service) Service {
|
||||
return &loggingService{logger, s}
|
||||
}
|
||||
|
||||
func (s *loggingService) RegisterHandlingEvent(completed time.Time, id cargo.TrackingID, voyageNumber voyage.Number,
|
||||
unLocode location.UNLocode, eventType cargo.HandlingEventType) (err error) {
|
||||
defer func(begin time.Time) {
|
||||
s.logger.Log(
|
||||
"method", "register_incident",
|
||||
"tracking_id", id,
|
||||
"location", unLocode,
|
||||
"voyage", voyageNumber,
|
||||
"event_type", eventType,
|
||||
"completion_time", completed,
|
||||
"took", time.Since(begin),
|
||||
"err", err,
|
||||
)
|
||||
}(time.Now())
|
||||
return s.Service.RegisterHandlingEvent(completed, id, voyageNumber, unLocode, eventType)
|
||||
}
|
76
vendor/github.com/go-kit/kit/examples/shipping/handling/service.go
generated
vendored
Normal file
76
vendor/github.com/go-kit/kit/examples/shipping/handling/service.go
generated
vendored
Normal file
@@ -0,0 +1,76 @@
|
||||
// Package handling provides the use-case for registering incidents. Used by
|
||||
// views facing the people handling the cargo along its route.
|
||||
package handling
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"github.com/go-kit/kit/examples/shipping/cargo"
|
||||
"github.com/go-kit/kit/examples/shipping/inspection"
|
||||
"github.com/go-kit/kit/examples/shipping/location"
|
||||
"github.com/go-kit/kit/examples/shipping/voyage"
|
||||
)
|
||||
|
||||
// ErrInvalidArgument is returned when one or more arguments are invalid.
|
||||
var ErrInvalidArgument = errors.New("invalid argument")
|
||||
|
||||
// EventHandler provides a means of subscribing to registered handling events.
|
||||
type EventHandler interface {
|
||||
CargoWasHandled(cargo.HandlingEvent)
|
||||
}
|
||||
|
||||
// Service provides handling operations.
|
||||
type Service interface {
|
||||
// RegisterHandlingEvent registers a handling event in the system, and
|
||||
// notifies interested parties that a cargo has been handled.
|
||||
RegisterHandlingEvent(completed time.Time, id cargo.TrackingID, voyageNumber voyage.Number,
|
||||
unLocode location.UNLocode, eventType cargo.HandlingEventType) error
|
||||
}
|
||||
|
||||
type service struct {
|
||||
handlingEventRepository cargo.HandlingEventRepository
|
||||
handlingEventFactory cargo.HandlingEventFactory
|
||||
handlingEventHandler EventHandler
|
||||
}
|
||||
|
||||
func (s *service) RegisterHandlingEvent(completed time.Time, id cargo.TrackingID, voyageNumber voyage.Number,
|
||||
loc location.UNLocode, eventType cargo.HandlingEventType) error {
|
||||
if completed.IsZero() || id == "" || loc == "" || eventType == cargo.NotHandled {
|
||||
return ErrInvalidArgument
|
||||
}
|
||||
|
||||
e, err := s.handlingEventFactory.CreateHandlingEvent(time.Now(), completed, id, voyageNumber, loc, eventType)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
s.handlingEventRepository.Store(e)
|
||||
s.handlingEventHandler.CargoWasHandled(e)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// NewService creates a handling event service with necessary dependencies.
|
||||
func NewService(r cargo.HandlingEventRepository, f cargo.HandlingEventFactory, h EventHandler) Service {
|
||||
return &service{
|
||||
handlingEventRepository: r,
|
||||
handlingEventFactory: f,
|
||||
handlingEventHandler: h,
|
||||
}
|
||||
}
|
||||
|
||||
type handlingEventHandler struct {
|
||||
InspectionService inspection.Service
|
||||
}
|
||||
|
||||
func (h *handlingEventHandler) CargoWasHandled(event cargo.HandlingEvent) {
|
||||
h.InspectionService.InspectCargo(event.TrackingID)
|
||||
}
|
||||
|
||||
// NewEventHandler returns a new instance of a EventHandler.
|
||||
func NewEventHandler(s inspection.Service) EventHandler {
|
||||
return &handlingEventHandler{
|
||||
InspectionService: s,
|
||||
}
|
||||
}
|
100
vendor/github.com/go-kit/kit/examples/shipping/handling/transport.go
generated
vendored
Normal file
100
vendor/github.com/go-kit/kit/examples/shipping/handling/transport.go
generated
vendored
Normal file
@@ -0,0 +1,100 @@
|
||||
package handling
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
|
||||
kitlog "github.com/go-kit/kit/log"
|
||||
kithttp "github.com/go-kit/kit/transport/http"
|
||||
|
||||
"github.com/go-kit/kit/examples/shipping/cargo"
|
||||
"github.com/go-kit/kit/examples/shipping/location"
|
||||
"github.com/go-kit/kit/examples/shipping/voyage"
|
||||
)
|
||||
|
||||
// MakeHandler returns a handler for the handling service.
|
||||
func MakeHandler(hs Service, logger kitlog.Logger) http.Handler {
|
||||
r := mux.NewRouter()
|
||||
|
||||
opts := []kithttp.ServerOption{
|
||||
kithttp.ServerErrorLogger(logger),
|
||||
kithttp.ServerErrorEncoder(encodeError),
|
||||
}
|
||||
|
||||
registerIncidentHandler := kithttp.NewServer(
|
||||
makeRegisterIncidentEndpoint(hs),
|
||||
decodeRegisterIncidentRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
)
|
||||
|
||||
r.Handle("/handling/v1/incidents", registerIncidentHandler).Methods("POST")
|
||||
|
||||
return r
|
||||
}
|
||||
|
||||
func decodeRegisterIncidentRequest(_ context.Context, r *http.Request) (interface{}, error) {
|
||||
var body struct {
|
||||
CompletionTime time.Time `json:"completion_time"`
|
||||
TrackingID string `json:"tracking_id"`
|
||||
VoyageNumber string `json:"voyage"`
|
||||
Location string `json:"location"`
|
||||
EventType string `json:"event_type"`
|
||||
}
|
||||
|
||||
if err := json.NewDecoder(r.Body).Decode(&body); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return registerIncidentRequest{
|
||||
CompletionTime: body.CompletionTime,
|
||||
ID: cargo.TrackingID(body.TrackingID),
|
||||
Voyage: voyage.Number(body.VoyageNumber),
|
||||
Location: location.UNLocode(body.Location),
|
||||
EventType: stringToEventType(body.EventType),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func stringToEventType(s string) cargo.HandlingEventType {
|
||||
types := map[string]cargo.HandlingEventType{
|
||||
cargo.Receive.String(): cargo.Receive,
|
||||
cargo.Load.String(): cargo.Load,
|
||||
cargo.Unload.String(): cargo.Unload,
|
||||
cargo.Customs.String(): cargo.Customs,
|
||||
cargo.Claim.String(): cargo.Claim,
|
||||
}
|
||||
return types[s]
|
||||
}
|
||||
|
||||
func encodeResponse(ctx context.Context, w http.ResponseWriter, response interface{}) error {
|
||||
if e, ok := response.(errorer); ok && e.error() != nil {
|
||||
encodeError(ctx, e.error(), w)
|
||||
return nil
|
||||
}
|
||||
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||||
return json.NewEncoder(w).Encode(response)
|
||||
}
|
||||
|
||||
type errorer interface {
|
||||
error() error
|
||||
}
|
||||
|
||||
// encode errors from business-logic
|
||||
func encodeError(_ context.Context, err error, w http.ResponseWriter) {
|
||||
switch err {
|
||||
case cargo.ErrUnknown:
|
||||
w.WriteHeader(http.StatusNotFound)
|
||||
case ErrInvalidArgument:
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
default:
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
}
|
||||
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||||
json.NewEncoder(w).Encode(map[string]interface{}{
|
||||
"error": err.Error(),
|
||||
})
|
||||
}
|
Reference in New Issue
Block a user