stats.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  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", GetDataSourceAccessStats)
  11. bus.AddHandler("sql", GetAdminStats)
  12. bus.AddHandler("sql", GetSystemUserCountStats)
  13. }
  14. var activeUserTimeLimit = time.Hour * 24 * 30
  15. func GetDataSourceStats(query *m.GetDataSourceStatsQuery) error {
  16. var rawSql = `SELECT COUNT(*) as count, type FROM data_source GROUP BY type`
  17. query.Result = make([]*m.DataSourceStats, 0)
  18. err := x.SQL(rawSql).Find(&query.Result)
  19. return err
  20. }
  21. func GetDataSourceAccessStats(query *m.GetDataSourceAccessStatsQuery) error {
  22. var rawSql = `SELECT COUNT(*) as count, type, access FROM data_source GROUP BY type, access`
  23. query.Result = make([]*m.DataSourceAccessStats, 0)
  24. err := x.SQL(rawSql).Find(&query.Result)
  25. return err
  26. }
  27. func GetSystemStats(query *m.GetSystemStatsQuery) error {
  28. var rawSql = `SELECT
  29. (
  30. SELECT COUNT(*)
  31. FROM ` + dialect.Quote("user") + `
  32. ) AS users,
  33. (
  34. SELECT COUNT(*)
  35. FROM ` + dialect.Quote("org") + `
  36. ) AS orgs,
  37. (
  38. SELECT COUNT(*)
  39. FROM ` + dialect.Quote("dashboard") + `
  40. ) AS dashboards,
  41. (
  42. SELECT COUNT(*)
  43. FROM ` + dialect.Quote("data_source") + `
  44. ) AS datasources,
  45. (
  46. SELECT COUNT(*) FROM ` + dialect.Quote("star") + `
  47. ) AS stars,
  48. (
  49. SELECT COUNT(*)
  50. FROM ` + dialect.Quote("playlist") + `
  51. ) AS playlists,
  52. (
  53. SELECT COUNT(*)
  54. FROM ` + dialect.Quote("alert") + `
  55. ) AS alerts,
  56. (
  57. SELECT COUNT(*) FROM ` + dialect.Quote("user") + ` where last_seen_at > ?
  58. ) as active_users,
  59. (
  60. SELECT COUNT(id) FROM ` + dialect.Quote("dashboard") + ` where is_folder = ?
  61. ) as folders,
  62. (
  63. SELECT COUNT(acl.id) FROM ` + dialect.Quote("dashboard_acl") + ` as acl inner join ` + dialect.Quote("dashboard") + ` as d on d.id = acl.dashboard_id where d.is_folder = ?
  64. ) as dashboard_permissions,
  65. (
  66. SELECT COUNT(acl.id) FROM ` + dialect.Quote("dashboard_acl") + ` as acl inner join ` + dialect.Quote("dashboard") + ` as d on d.id = acl.dashboard_id where d.is_folder = ?
  67. ) as folder_permissions,
  68. (
  69. SELECT COUNT(id) FROM ` + dialect.Quote("dashboard_provisioning") + `
  70. ) as provisioned_dashboards,
  71. (
  72. SELECT COUNT(id) FROM ` + dialect.Quote("dashboard_snapshot") + `
  73. ) as snapshots,
  74. (
  75. SELECT COUNT(id) FROM ` + dialect.Quote("team") + `
  76. ) as teams
  77. `
  78. activeUserDeadlineDate := time.Now().Add(-activeUserTimeLimit)
  79. var stats m.SystemStats
  80. _, err := x.SQL(rawSql, activeUserDeadlineDate, dialect.BooleanStr(true), dialect.BooleanStr(false), dialect.BooleanStr(true)).Get(&stats)
  81. if err != nil {
  82. return err
  83. }
  84. query.Result = &stats
  85. return err
  86. }
  87. func GetAdminStats(query *m.GetAdminStatsQuery) error {
  88. var rawSql = `SELECT
  89. (
  90. SELECT COUNT(*)
  91. FROM ` + dialect.Quote("user") + `
  92. ) AS users,
  93. (
  94. SELECT COUNT(*)
  95. FROM ` + dialect.Quote("org") + `
  96. ) AS orgs,
  97. (
  98. SELECT COUNT(*)
  99. FROM ` + dialect.Quote("dashboard") + `
  100. ) AS dashboards,
  101. (
  102. SELECT COUNT(*)
  103. FROM ` + dialect.Quote("dashboard_snapshot") + `
  104. ) AS snapshots,
  105. (
  106. SELECT COUNT( DISTINCT ( ` + dialect.Quote("term") + ` ))
  107. FROM ` + dialect.Quote("dashboard_tag") + `
  108. ) AS tags,
  109. (
  110. SELECT COUNT(*)
  111. FROM ` + dialect.Quote("data_source") + `
  112. ) AS datasources,
  113. (
  114. SELECT COUNT(*)
  115. FROM ` + dialect.Quote("playlist") + `
  116. ) AS playlists,
  117. (
  118. SELECT COUNT(*) FROM ` + dialect.Quote("star") + `
  119. ) AS stars,
  120. (
  121. SELECT COUNT(*)
  122. FROM ` + dialect.Quote("alert") + `
  123. ) AS alerts,
  124. (
  125. SELECT COUNT(*)
  126. from ` + dialect.Quote("user") + ` where last_seen_at > ?
  127. ) as active_users
  128. `
  129. activeUserDeadlineDate := time.Now().Add(-activeUserTimeLimit)
  130. var stats m.AdminStats
  131. _, err := x.SQL(rawSql, activeUserDeadlineDate).Get(&stats)
  132. if err != nil {
  133. return err
  134. }
  135. query.Result = &stats
  136. return err
  137. }
  138. func GetSystemUserCountStats(query *m.GetSystemUserCountStatsQuery) error {
  139. var rawSql = `SELECT COUNT(id) AS Count FROM ` + dialect.Quote("user")
  140. var stats m.SystemUserCountStats
  141. _, err := x.SQL(rawSql).Get(&stats)
  142. if err != nil {
  143. return err
  144. }
  145. query.Result = &stats
  146. return err
  147. }