我对Go还比较陌生,想知道是否有类似Java中AOP的方式来收集Go方法级别的执行时间指标?最好不要将这样的代码放在常规业务逻辑代码中。
我不想对应用程序进行性能分析。我的意思是真正的生产就绪指标,可以导出到Graphite等工具中,以便我可以监视响应时间直方图等内容。
我对Go还比较陌生,想知道是否有类似Java中AOP的方式来收集Go方法级别的执行时间指标?最好不要将这样的代码放在常规业务逻辑代码中。
我不想对应用程序进行性能分析。我的意思是真正的生产就绪指标,可以导出到Graphite等工具中,以便我可以监视响应时间直方图等内容。
package main
import (
"fmt"
"net/http"
"time"
"github.com/PagerDuty/godspeed"
"github.com/codegangsta/negroni"
)
func statsdMiddleware(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
start := time.Now()
next(w, r)
elapsed := float64(time.Now().Sub(start)) / float64(time.Millisecond)
g, err := godspeed.NewDefault()
if err != nil {
return
}
defer g.Conn.Close()
g.Histogram("http.response.time_ms", elapsed, []string{"path:" + r.URL.Path})
}
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
fmt.Fprintf(w, "Welcome to the home page!")
})
n := negroni.Classic()
n.Use(negroni.HandlerFunc(statsdMiddleware))
n.UseHandler(mux)
n.Run(":3000")
}