stats.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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. if err != nil {
  18. return err
  19. }
  20. return err
  21. }
  22. func GetSystemStats(query *m.GetSystemStatsQuery) error {
  23. var rawSql = `SELECT
  24. (
  25. SELECT COUNT(*)
  26. FROM ` + dialect.Quote("user") + `
  27. ) AS users,
  28. (
  29. SELECT COUNT(*)
  30. FROM ` + dialect.Quote("org") + `
  31. ) AS orgs,
  32. (
  33. SELECT COUNT(*)
  34. FROM ` + dialect.Quote("dashboard") + `
  35. ) AS dashboards,
  36. (
  37. SELECT COUNT(*)
  38. FROM ` + dialect.Quote("data_source") + `
  39. ) AS datasources,
  40. (
  41. SELECT COUNT(*) FROM ` + dialect.Quote("star") + `
  42. ) AS stars,
  43. (
  44. SELECT COUNT(*)
  45. FROM ` + dialect.Quote("playlist") + `
  46. ) AS playlists,
  47. (
  48. SELECT COUNT(*)
  49. FROM ` + dialect.Quote("alert") + `
  50. ) AS alerts,
  51. (
  52. SELECT COUNT(*) FROM ` + dialect.Quote("user") + ` where last_seen_at > ?
  53. ) as active_users
  54. `
  55. activeUserDeadlineDate := time.Now().Add(-activeUserTimeLimit)
  56. var stats m.SystemStats
  57. _, err := x.SQL(rawSql, activeUserDeadlineDate).Get(&stats)
  58. if err != nil {
  59. return err
  60. }
  61. query.Result = &stats
  62. return err
  63. }
  64. func GetAdminStats(query *m.GetAdminStatsQuery) error {
  65. var rawSql = `SELECT
  66. (
  67. SELECT COUNT(*)
  68. FROM ` + dialect.Quote("user") + `
  69. ) AS users,
  70. (
  71. SELECT COUNT(*)
  72. FROM ` + dialect.Quote("org") + `
  73. ) AS orgs,
  74. (
  75. SELECT COUNT(*)
  76. FROM ` + dialect.Quote("dashboard") + `
  77. ) AS dashboards,
  78. (
  79. SELECT COUNT(*)
  80. FROM ` + dialect.Quote("dashboard_snapshot") + `
  81. ) AS snapshots,
  82. (
  83. SELECT COUNT( DISTINCT ( ` + dialect.Quote("term") + ` ))
  84. FROM ` + dialect.Quote("dashboard_tag") + `
  85. ) AS tags,
  86. (
  87. SELECT COUNT(*)
  88. FROM ` + dialect.Quote("data_source") + `
  89. ) AS datasources,
  90. (
  91. SELECT COUNT(*)
  92. FROM ` + dialect.Quote("playlist") + `
  93. ) AS playlists,
  94. (
  95. SELECT COUNT(*) FROM ` + dialect.Quote("star") + `
  96. ) AS stars,
  97. (
  98. SELECT COUNT(*)
  99. FROM ` + dialect.Quote("alert") + `
  100. ) AS alerts,
  101. (
  102. SELECT COUNT(*)
  103. from ` + dialect.Quote("user") + ` where last_seen_at > ?
  104. ) as active_users
  105. `
  106. activeUserDeadlineDate := time.Now().Add(-activeUserTimeLimit)
  107. var stats m.AdminStats
  108. _, err := x.SQL(rawSql, activeUserDeadlineDate).Get(&stats)
  109. if err != nil {
  110. return err
  111. }
  112. query.Result = &stats
  113. return err
  114. }