stats.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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. sb := &SqlBuilder{}
  29. sb.Write("SELECT ")
  30. sb.Write(`(SELECT COUNT(*) FROM ` + dialect.Quote("user") + `) AS users,`)
  31. sb.Write(`(SELECT COUNT(*) FROM ` + dialect.Quote("org") + `) AS orgs,`)
  32. sb.Write(`(SELECT COUNT(*) FROM ` + dialect.Quote("dashboard") + `) AS dashboards,`)
  33. sb.Write(`(SELECT COUNT(*) FROM ` + dialect.Quote("data_source") + `) AS datasources,`)
  34. sb.Write(`(SELECT COUNT(*) FROM ` + dialect.Quote("star") + `) AS stars,`)
  35. sb.Write(`(SELECT COUNT(*) FROM ` + dialect.Quote("playlist") + `) AS playlists,`)
  36. sb.Write(`(SELECT COUNT(*) FROM ` + dialect.Quote("alert") + `) AS alerts,`)
  37. activeUserDeadlineDate := time.Now().Add(-activeUserTimeLimit)
  38. sb.Write(`(SELECT COUNT(*) FROM `+dialect.Quote("user")+` where last_seen_at > ?) AS active_users,`, activeUserDeadlineDate)
  39. sb.Write(`(SELECT COUNT(id) FROM `+dialect.Quote("dashboard")+` where is_folder = ?) AS folders,`, dialect.BooleanStr(true))
  40. sb.Write(`(
  41. SELECT COUNT(acl.id)
  42. FROM `+dialect.Quote("dashboard_acl")+` as acl
  43. inner join `+dialect.Quote("dashboard")+` as d
  44. on d.id = acl.dashboard_id
  45. WHERE d.is_folder = ?
  46. ) AS dashboard_permissions,`, dialect.BooleanStr(false))
  47. sb.Write(`(
  48. SELECT COUNT(acl.id)
  49. FROM `+dialect.Quote("dashboard_acl")+` as acl
  50. inner join `+dialect.Quote("dashboard")+` as d
  51. on d.id = acl.dashboard_id
  52. WHERE d.is_folder = ?
  53. ) AS folder_permissions,`, dialect.BooleanStr(true))
  54. sb.Write(`(SELECT COUNT(id) FROM ` + dialect.Quote("dashboard_provisioning") + `) AS provisioned_dashboards,`)
  55. sb.Write(`(SELECT COUNT(id) FROM ` + dialect.Quote("dashboard_snapshot") + `) AS snapshots,`)
  56. sb.Write(`(SELECT COUNT(id) FROM ` + dialect.Quote("team") + `) AS teams`)
  57. var stats m.SystemStats
  58. _, err := x.SQL(sb.GetSqlString(), sb.params...).Get(&stats)
  59. if err != nil {
  60. return err
  61. }
  62. query.Result = &stats
  63. return err
  64. }
  65. func GetAdminStats(query *m.GetAdminStatsQuery) error {
  66. var rawSql = `SELECT
  67. (
  68. SELECT COUNT(*)
  69. FROM ` + dialect.Quote("user") + `
  70. ) AS users,
  71. (
  72. SELECT COUNT(*)
  73. FROM ` + dialect.Quote("org") + `
  74. ) AS orgs,
  75. (
  76. SELECT COUNT(*)
  77. FROM ` + dialect.Quote("dashboard") + `
  78. ) AS dashboards,
  79. (
  80. SELECT COUNT(*)
  81. FROM ` + dialect.Quote("dashboard_snapshot") + `
  82. ) AS snapshots,
  83. (
  84. SELECT COUNT( DISTINCT ( ` + dialect.Quote("term") + ` ))
  85. FROM ` + dialect.Quote("dashboard_tag") + `
  86. ) AS tags,
  87. (
  88. SELECT COUNT(*)
  89. FROM ` + dialect.Quote("data_source") + `
  90. ) AS datasources,
  91. (
  92. SELECT COUNT(*)
  93. FROM ` + dialect.Quote("playlist") + `
  94. ) AS playlists,
  95. (
  96. SELECT COUNT(*) FROM ` + dialect.Quote("star") + `
  97. ) AS stars,
  98. (
  99. SELECT COUNT(*)
  100. FROM ` + dialect.Quote("alert") + `
  101. ) AS alerts,
  102. (
  103. SELECT COUNT(*)
  104. from ` + dialect.Quote("user") + ` where last_seen_at > ?
  105. ) as active_users
  106. `
  107. activeUserDeadlineDate := time.Now().Add(-activeUserTimeLimit)
  108. var stats m.AdminStats
  109. _, err := x.SQL(rawSql, activeUserDeadlineDate).Get(&stats)
  110. if err != nil {
  111. return err
  112. }
  113. query.Result = &stats
  114. return err
  115. }
  116. func GetSystemUserCountStats(query *m.GetSystemUserCountStatsQuery) error {
  117. var rawSql = `SELECT COUNT(id) AS Count FROM ` + dialect.Quote("user")
  118. var stats m.SystemUserCountStats
  119. _, err := x.SQL(rawSql).Get(&stats)
  120. if err != nil {
  121. return err
  122. }
  123. query.Result = &stats
  124. return err
  125. }