OSDN Git Service

new repo
[bytom/vapor.git] / vendor / github.com / go-kit / kit / examples / shipping / booking / instrumenting.go
1 package booking
2
3 import (
4         "time"
5
6         "github.com/go-kit/kit/metrics"
7
8         "github.com/go-kit/kit/examples/shipping/cargo"
9         "github.com/go-kit/kit/examples/shipping/location"
10 )
11
12 type instrumentingService struct {
13         requestCount   metrics.Counter
14         requestLatency metrics.Histogram
15         Service
16 }
17
18 // NewInstrumentingService returns an instance of an instrumenting Service.
19 func NewInstrumentingService(counter metrics.Counter, latency metrics.Histogram, s Service) Service {
20         return &instrumentingService{
21                 requestCount:   counter,
22                 requestLatency: latency,
23                 Service:        s,
24         }
25 }
26
27 func (s *instrumentingService) BookNewCargo(origin, destination location.UNLocode, deadline time.Time) (cargo.TrackingID, error) {
28         defer func(begin time.Time) {
29                 s.requestCount.With("method", "book").Add(1)
30                 s.requestLatency.With("method", "book").Observe(time.Since(begin).Seconds())
31         }(time.Now())
32
33         return s.Service.BookNewCargo(origin, destination, deadline)
34 }
35
36 func (s *instrumentingService) LoadCargo(id cargo.TrackingID) (c Cargo, err error) {
37         defer func(begin time.Time) {
38                 s.requestCount.With("method", "load").Add(1)
39                 s.requestLatency.With("method", "load").Observe(time.Since(begin).Seconds())
40         }(time.Now())
41
42         return s.Service.LoadCargo(id)
43 }
44
45 func (s *instrumentingService) RequestPossibleRoutesForCargo(id cargo.TrackingID) []cargo.Itinerary {
46         defer func(begin time.Time) {
47                 s.requestCount.With("method", "request_routes").Add(1)
48                 s.requestLatency.With("method", "request_routes").Observe(time.Since(begin).Seconds())
49         }(time.Now())
50
51         return s.Service.RequestPossibleRoutesForCargo(id)
52 }
53
54 func (s *instrumentingService) AssignCargoToRoute(id cargo.TrackingID, itinerary cargo.Itinerary) (err error) {
55         defer func(begin time.Time) {
56                 s.requestCount.With("method", "assign_to_route").Add(1)
57                 s.requestLatency.With("method", "assign_to_route").Observe(time.Since(begin).Seconds())
58         }(time.Now())
59
60         return s.Service.AssignCargoToRoute(id, itinerary)
61 }
62
63 func (s *instrumentingService) ChangeDestination(id cargo.TrackingID, l location.UNLocode) (err error) {
64         defer func(begin time.Time) {
65                 s.requestCount.With("method", "change_destination").Add(1)
66                 s.requestLatency.With("method", "change_destination").Observe(time.Since(begin).Seconds())
67         }(time.Now())
68
69         return s.Service.ChangeDestination(id, l)
70 }
71
72 func (s *instrumentingService) Cargos() []Cargo {
73         defer func(begin time.Time) {
74                 s.requestCount.With("method", "list_cargos").Add(1)
75                 s.requestLatency.With("method", "list_cargos").Observe(time.Since(begin).Seconds())
76         }(time.Now())
77
78         return s.Service.Cargos()
79 }
80
81 func (s *instrumentingService) Locations() []Location {
82         defer func(begin time.Time) {
83                 s.requestCount.With("method", "list_locations").Add(1)
84                 s.requestLatency.With("method", "list_locations").Observe(time.Since(begin).Seconds())
85         }(time.Now())
86
87         return s.Service.Locations()
88 }