stats.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package sqlstore
  2. import (
  3. "time"
  4. "github.com/grafana/grafana/pkg/bus"
  5. m "github.com/grafana/grafana/pkg/models"
  6. )
  7. func init() {
  8. bus.AddHandler("sql", GetSystemStats)
  9. bus.AddHandler("sql", GetDataSourceStats)
  10. bus.AddHandler("sql", GetAdminStats)
  11. }
  12. var activeUserTimeLimit time.Duration = time.Hour * 24 * 30
  13. func GetDataSourceStats(query *m.GetDataSourceStatsQuery) error {
  14. var rawSql = `SELECT COUNT(*) as count, type FROM data_source GROUP BY type`
  15. query.Result = make([]*m.DataSourceStats, 0)
  16. err := x.SQL(rawSql).Find(&query.Result)
  17. return err
  18. }
  19. func GetSystemStats(query *m.GetSystemStatsQuery) error {
  20. var rawSql = `SELECT
  21. (
  22. SELECT COUNT(*)
  23. FROM ` + dialect.Quote("user") + `
  24. ) AS users,
  25. (
  26. SELECT COUNT(*)
  27. FROM ` + dialect.Quote("org") + `
  28. ) AS orgs,
  29. (
  30. SELECT COUNT(*)
  31. FROM ` + dialect.Quote("dashboard") + `
  32. ) AS dashboards,
  33. (
  34. SELECT COUNT(*)
  35. FROM ` + dialect.Quote("data_source") + `
  36. ) AS datasources,
  37. (
  38. SELECT COUNT(*) FROM ` + dialect.Quote("star") + `
  39. ) AS stars,
  40. (
  41. SELECT COUNT(*)
  42. FROM ` + dialect.Quote("playlist") + `
  43. ) AS playlists,
  44. (
  45. SELECT COUNT(*)
  46. FROM ` + dialect.Quote("alert") + `
  47. ) AS alerts,
  48. (
  49. SELECT COUNT(*) FROM ` + dialect.Quote("user") + ` where last_seen_at > ?
  50. ) as active_users
  51. `
  52. activeUserDeadlineDate := time.Now().Add(-activeUserTimeLimit)
  53. var stats m.SystemStats
  54. _, err := x.SQL(rawSql, activeUserDeadlineDate).Get(&stats)
  55. if err != nil {
  56. return err
  57. }
  58. query.Result = &stats
  59. return err
  60. }
  61. func GetAdminStats(query *m.GetAdminStatsQuery) error {
  62. var rawSql = `SELECT
  63. (
  64. SELECT COUNT(*)
  65. FROM ` + dialect.Quote("user") + `
  66. ) AS users,
  67. (
  68. SELECT COUNT(*)
  69. FROM ` + dialect.Quote("org") + `
  70. ) AS orgs,
  71. (
  72. SELECT COUNT(*)
  73. FROM ` + dialect.Quote("dashboard") + `
  74. ) AS dashboards,
  75. (
  76. SELECT COUNT(*)
  77. FROM ` + dialect.Quote("dashboard_snapshot") + `
  78. ) AS snapshots,
  79. (
  80. SELECT COUNT( DISTINCT ( ` + dialect.Quote("term") + ` ))
  81. FROM ` + dialect.Quote("dashboard_tag") + `
  82. ) AS tags,
  83. (
  84. SELECT COUNT(*)
  85. FROM ` + dialect.Quote("data_source") + `
  86. ) AS datasources,
  87. (
  88. SELECT COUNT(*)
  89. FROM ` + dialect.Quote("playlist") + `
  90. ) AS playlists,
  91. (
  92. SELECT COUNT(*) FROM ` + dialect.Quote("star") + `
  93. ) AS stars,
  94. (
  95. SELECT COUNT(*)
  96. FROM ` + dialect.Quote("alert") + `
  97. ) AS alerts,
  98. (
  99. SELECT COUNT(*)
  100. from ` + dialect.Quote("user") + ` where last_seen_at > ?
  101. ) as active_users
  102. `
  103. activeUserDeadlineDate := time.Now().Add(-activeUserTimeLimit)
  104. var stats m.AdminStats
  105. _, err := x.SQL(rawSql, activeUserDeadlineDate).Get(&stats)
  106. if err != nil {
  107. return err
  108. }
  109. query.Result = &stats
  110. return err
  111. }