request_metrics.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package middleware
  2. import (
  3. "net/http"
  4. "strings"
  5. "github.com/grafana/grafana/pkg/metrics"
  6. "gopkg.in/macaron.v1"
  7. )
  8. func RequestMetrics() macaron.Handler {
  9. return func(res http.ResponseWriter, req *http.Request, c *macaron.Context) {
  10. rw := res.(macaron.ResponseWriter)
  11. c.Next()
  12. status := rw.Status()
  13. if strings.HasPrefix(req.RequestURI, "/api/datasources/proxy") {
  14. countProxyRequests(status)
  15. } else if strings.HasPrefix(req.RequestURI, "/api/") {
  16. countApiRequests(status)
  17. } else {
  18. countPageRequests(status)
  19. }
  20. }
  21. }
  22. func countApiRequests(status int) {
  23. switch status {
  24. case 200:
  25. metrics.M_Api_Status_200.Inc(1)
  26. case 404:
  27. metrics.M_Api_Status_404.Inc(1)
  28. case 500:
  29. metrics.M_Api_Status_500.Inc(1)
  30. default:
  31. metrics.M_Api_Status_Unknown.Inc(1)
  32. }
  33. }
  34. func countPageRequests(status int) {
  35. switch status {
  36. case 200:
  37. metrics.M_Page_Status_200.Inc(1)
  38. case 404:
  39. metrics.M_Page_Status_404.Inc(1)
  40. case 500:
  41. metrics.M_Page_Status_500.Inc(1)
  42. default:
  43. metrics.M_Page_Status_Unknown.Inc(1)
  44. }
  45. }
  46. func countProxyRequests(status int) {
  47. switch status {
  48. case 200:
  49. metrics.M_Proxy_Status_200.Inc(1)
  50. case 404:
  51. metrics.M_Proxy_Status_404.Inc(1)
  52. case 500:
  53. metrics.M_Proxy_Status_500.Inc(1)
  54. default:
  55. metrics.M_Proxy_Status_Unknown.Inc(1)
  56. }
  57. }