60 lines
1.7 KiB
Go
60 lines
1.7 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"net/http"
|
||
|
"os"
|
||
|
|
||
|
stdprometheus "github.com/prometheus/client_golang/prometheus"
|
||
|
|
||
|
"github.com/go-kit/kit/log"
|
||
|
kitprometheus "github.com/go-kit/kit/metrics/prometheus"
|
||
|
httptransport "github.com/go-kit/kit/transport/http"
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
logger := log.NewLogfmtLogger(os.Stderr)
|
||
|
|
||
|
fieldKeys := []string{"method", "error"}
|
||
|
requestCount := kitprometheus.NewCounterFrom(stdprometheus.CounterOpts{
|
||
|
Namespace: "my_group",
|
||
|
Subsystem: "string_service",
|
||
|
Name: "request_count",
|
||
|
Help: "Number of requests received.",
|
||
|
}, fieldKeys)
|
||
|
requestLatency := kitprometheus.NewSummaryFrom(stdprometheus.SummaryOpts{
|
||
|
Namespace: "my_group",
|
||
|
Subsystem: "string_service",
|
||
|
Name: "request_latency_microseconds",
|
||
|
Help: "Total duration of requests in microseconds.",
|
||
|
}, fieldKeys)
|
||
|
countResult := kitprometheus.NewSummaryFrom(stdprometheus.SummaryOpts{
|
||
|
Namespace: "my_group",
|
||
|
Subsystem: "string_service",
|
||
|
Name: "count_result",
|
||
|
Help: "The result of each count method.",
|
||
|
}, []string{}) // no fields here
|
||
|
|
||
|
var svc StringService
|
||
|
svc = stringService{}
|
||
|
svc = loggingMiddleware{logger, svc}
|
||
|
svc = instrumentingMiddleware{requestCount, requestLatency, countResult, svc}
|
||
|
|
||
|
uppercaseHandler := httptransport.NewServer(
|
||
|
makeUppercaseEndpoint(svc),
|
||
|
decodeUppercaseRequest,
|
||
|
encodeResponse,
|
||
|
)
|
||
|
|
||
|
countHandler := httptransport.NewServer(
|
||
|
makeCountEndpoint(svc),
|
||
|
decodeCountRequest,
|
||
|
encodeResponse,
|
||
|
)
|
||
|
|
||
|
http.Handle("/uppercase", uppercaseHandler)
|
||
|
http.Handle("/count", countHandler)
|
||
|
http.Handle("/metrics", stdprometheus.Handler())
|
||
|
logger.Log("msg", "HTTP", "addr", ":8080")
|
||
|
logger.Log("err", http.ListenAndServe(":8080", nil))
|
||
|
}
|