9 stdprometheus "github.com/prometheus/client_golang/prometheus"
10 "github.com/prometheus/client_golang/prometheus/promhttp"
12 "github.com/go-kit/kit/log"
13 kitprometheus "github.com/go-kit/kit/metrics/prometheus"
14 httptransport "github.com/go-kit/kit/transport/http"
19 listen = flag.String("listen", ":8080", "HTTP listen address")
20 proxy = flag.String("proxy", "", "Optional comma-separated list of URLs to proxy uppercase requests")
25 logger = log.NewLogfmtLogger(os.Stderr)
26 logger = log.With(logger, "listen", *listen, "caller", log.DefaultCaller)
28 fieldKeys := []string{"method", "error"}
29 requestCount := kitprometheus.NewCounterFrom(stdprometheus.CounterOpts{
30 Namespace: "my_group",
31 Subsystem: "string_service",
32 Name: "request_count",
33 Help: "Number of requests received.",
35 requestLatency := kitprometheus.NewSummaryFrom(stdprometheus.SummaryOpts{
36 Namespace: "my_group",
37 Subsystem: "string_service",
38 Name: "request_latency_microseconds",
39 Help: "Total duration of requests in microseconds.",
41 countResult := kitprometheus.NewSummaryFrom(stdprometheus.SummaryOpts{
42 Namespace: "my_group",
43 Subsystem: "string_service",
45 Help: "The result of each count method.",
50 svc = proxyingMiddleware(context.Background(), *proxy, logger)(svc)
51 svc = loggingMiddleware(logger)(svc)
52 svc = instrumentingMiddleware(requestCount, requestLatency, countResult)(svc)
54 uppercaseHandler := httptransport.NewServer(
55 makeUppercaseEndpoint(svc),
56 decodeUppercaseRequest,
59 countHandler := httptransport.NewServer(
60 makeCountEndpoint(svc),
65 http.Handle("/uppercase", uppercaseHandler)
66 http.Handle("/count", countHandler)
67 http.Handle("/metrics", promhttp.Handler())
68 logger.Log("msg", "HTTP", "addr", *listen)
69 logger.Log("err", http.ListenAndServe(*listen, nil))