| 
									
										
										
										
											2015-03-23 03:14:00 +08:00
										 |  |  | package sqlstore | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2017-08-09 16:36:41 +08:00
										 |  |  | 	"time" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-23 03:14:00 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/bus" | 
					
						
							|  |  |  | 	m "github.com/grafana/grafana/pkg/models" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func init() { | 
					
						
							|  |  |  | 	bus.AddHandler("sql", GetSystemStats) | 
					
						
							| 
									
										
										
										
											2015-09-29 19:47:56 +08:00
										 |  |  | 	bus.AddHandler("sql", GetDataSourceStats) | 
					
						
							| 
									
										
										
										
											2016-01-25 13:18:17 +08:00
										 |  |  | 	bus.AddHandler("sql", GetAdminStats) | 
					
						
							| 
									
										
										
										
											2015-09-29 19:47:56 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-21 18:56:45 +08:00
										 |  |  | var activeUserTimeLimit time.Duration = time.Hour * 24 * 30 | 
					
						
							| 
									
										
										
										
											2017-08-09 16:36:41 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-29 19:47:56 +08:00
										 |  |  | func GetDataSourceStats(query *m.GetDataSourceStatsQuery) error { | 
					
						
							|  |  |  | 	var rawSql = `SELECT COUNT(*) as count, type FROM data_source GROUP BY type` | 
					
						
							|  |  |  | 	query.Result = make([]*m.DataSourceStats, 0) | 
					
						
							|  |  |  | 	err := x.Sql(rawSql).Find(&query.Result) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return err | 
					
						
							| 
									
										
										
										
											2015-03-23 03:14:00 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func GetSystemStats(query *m.GetSystemStatsQuery) error { | 
					
						
							|  |  |  | 	var rawSql = `SELECT | 
					
						
							|  |  |  | 			( | 
					
						
							|  |  |  | 				SELECT COUNT(*) | 
					
						
							|  |  |  |         FROM ` + dialect.Quote("user") + ` | 
					
						
							| 
									
										
										
										
											2017-08-09 16:36:41 +08:00
										 |  |  |       ) AS users, | 
					
						
							| 
									
										
										
										
											2015-03-23 03:14:00 +08:00
										 |  |  | 			( | 
					
						
							|  |  |  | 				SELECT COUNT(*) | 
					
						
							|  |  |  |         FROM ` + dialect.Quote("org") + ` | 
					
						
							| 
									
										
										
										
											2017-08-09 16:36:41 +08:00
										 |  |  |       ) AS orgs, | 
					
						
							| 
									
										
										
										
											2015-03-23 03:14:00 +08:00
										 |  |  |       ( | 
					
						
							|  |  |  |         SELECT COUNT(*) | 
					
						
							|  |  |  |         FROM ` + dialect.Quote("dashboard") + ` | 
					
						
							| 
									
										
										
										
											2017-08-09 16:36:41 +08:00
										 |  |  |       ) AS dashboards, | 
					
						
							|  |  |  | 			( | 
					
						
							|  |  |  |         SELECT COUNT(*) | 
					
						
							|  |  |  |         FROM ` + dialect.Quote("data_source") + ` | 
					
						
							|  |  |  |       ) AS datasources, | 
					
						
							| 
									
										
										
										
											2016-01-26 04:39:04 +08:00
										 |  |  |       ( | 
					
						
							|  |  |  |         SELECT COUNT(*) | 
					
						
							|  |  |  |         FROM ` + dialect.Quote("playlist") + ` | 
					
						
							| 
									
										
										
										
											2017-08-09 16:36:41 +08:00
										 |  |  |       ) AS playlists, | 
					
						
							| 
									
										
										
										
											2016-11-11 20:57:11 +08:00
										 |  |  |       ( | 
					
						
							|  |  |  |         SELECT COUNT(*) | 
					
						
							|  |  |  |         FROM ` + dialect.Quote("alert") + ` | 
					
						
							| 
									
										
										
										
											2017-08-09 16:36:41 +08:00
										 |  |  |       ) AS alerts, | 
					
						
							|  |  |  | 			( | 
					
						
							|  |  |  | 				SELECT COUNT(*) FROM ` + dialect.Quote("user") + ` where last_seen_at > ? | 
					
						
							|  |  |  |       ) as active_users | 
					
						
							| 
									
										
										
										
											2015-03-23 03:14:00 +08:00
										 |  |  | 			` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-09 16:36:41 +08:00
										 |  |  | 	activeUserDeadlineDate := time.Now().Add(-activeUserTimeLimit) | 
					
						
							| 
									
										
										
										
											2015-03-23 03:14:00 +08:00
										 |  |  | 	var stats m.SystemStats | 
					
						
							| 
									
										
										
										
											2017-08-09 16:36:41 +08:00
										 |  |  | 	_, err := x.Sql(rawSql, activeUserDeadlineDate).Get(&stats) | 
					
						
							| 
									
										
										
										
											2015-03-23 03:14:00 +08:00
										 |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	query.Result = &stats | 
					
						
							|  |  |  | 	return err | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2016-01-25 03:01:33 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | func GetAdminStats(query *m.GetAdminStatsQuery) error { | 
					
						
							| 
									
										
										
										
											2016-01-25 13:18:17 +08:00
										 |  |  | 	var rawSql = `SELECT | 
					
						
							| 
									
										
										
										
											2016-01-25 03:01:33 +08:00
										 |  |  |       ( | 
					
						
							|  |  |  |         SELECT COUNT(*) | 
					
						
							|  |  |  |         FROM ` + dialect.Quote("user") + ` | 
					
						
							| 
									
										
										
										
											2017-08-09 16:36:41 +08:00
										 |  |  |       ) AS users, | 
					
						
							| 
									
										
										
										
											2016-01-25 03:01:33 +08:00
										 |  |  |       ( | 
					
						
							|  |  |  |         SELECT COUNT(*) | 
					
						
							|  |  |  |         FROM ` + dialect.Quote("org") + ` | 
					
						
							| 
									
										
										
										
											2017-08-09 16:36:41 +08:00
										 |  |  |       ) AS orgs, | 
					
						
							| 
									
										
										
										
											2016-01-25 03:01:33 +08:00
										 |  |  |       ( | 
					
						
							|  |  |  |         SELECT COUNT(*) | 
					
						
							|  |  |  |         FROM ` + dialect.Quote("dashboard") + ` | 
					
						
							| 
									
										
										
										
											2017-08-09 16:36:41 +08:00
										 |  |  |       ) AS dashboards, | 
					
						
							| 
									
										
										
										
											2016-01-25 03:01:33 +08:00
										 |  |  |       ( | 
					
						
							|  |  |  |         SELECT COUNT(*) | 
					
						
							|  |  |  |         FROM ` + dialect.Quote("dashboard_snapshot") + ` | 
					
						
							| 
									
										
										
										
											2017-08-09 16:36:41 +08:00
										 |  |  |       ) AS snapshots, | 
					
						
							| 
									
										
										
										
											2016-01-25 03:01:33 +08:00
										 |  |  |       ( | 
					
						
							| 
									
										
										
										
											2016-01-28 09:41:23 +08:00
										 |  |  |         SELECT COUNT( DISTINCT ( ` + dialect.Quote("term") + ` )) | 
					
						
							| 
									
										
										
										
											2016-01-25 03:01:33 +08:00
										 |  |  |         FROM ` + dialect.Quote("dashboard_tag") + ` | 
					
						
							| 
									
										
										
										
											2017-08-09 16:36:41 +08:00
										 |  |  |       ) AS tags, | 
					
						
							| 
									
										
										
										
											2016-01-25 03:01:33 +08:00
										 |  |  |       ( | 
					
						
							|  |  |  |         SELECT COUNT(*) | 
					
						
							|  |  |  |         FROM ` + dialect.Quote("data_source") + ` | 
					
						
							| 
									
										
										
										
											2017-08-09 16:36:41 +08:00
										 |  |  |       ) AS datasources, | 
					
						
							| 
									
										
										
										
											2016-01-25 03:01:33 +08:00
										 |  |  |       ( | 
					
						
							|  |  |  |         SELECT COUNT(*) | 
					
						
							|  |  |  |         FROM ` + dialect.Quote("playlist") + ` | 
					
						
							| 
									
										
										
										
											2017-08-09 16:36:41 +08:00
										 |  |  |       ) AS playlists, | 
					
						
							| 
									
										
										
										
											2016-01-25 03:01:33 +08:00
										 |  |  |       ( | 
					
						
							| 
									
										
										
										
											2017-08-09 16:36:41 +08:00
										 |  |  |         SELECT COUNT(*) FROM ` + dialect.Quote("star") + ` | 
					
						
							|  |  |  |       ) AS stars, | 
					
						
							| 
									
										
										
										
											2016-11-11 21:04:38 +08:00
										 |  |  |       ( | 
					
						
							|  |  |  |         SELECT COUNT(*) | 
					
						
							|  |  |  |         FROM ` + dialect.Quote("alert") + ` | 
					
						
							| 
									
										
										
										
											2017-08-09 16:36:41 +08:00
										 |  |  |       ) AS alerts, | 
					
						
							|  |  |  | 			( | 
					
						
							|  |  |  | 				SELECT COUNT(*) | 
					
						
							|  |  |  |         from ` + dialect.Quote("user") + ` where last_seen_at > ? | 
					
						
							|  |  |  | 			) as active_users | 
					
						
							| 
									
										
										
										
											2016-01-25 03:01:33 +08:00
										 |  |  |       ` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-09 16:36:41 +08:00
										 |  |  | 	activeUserDeadlineDate := time.Now().Add(-activeUserTimeLimit) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-25 13:18:17 +08:00
										 |  |  | 	var stats m.AdminStats | 
					
						
							| 
									
										
										
										
											2017-08-09 16:36:41 +08:00
										 |  |  | 	_, err := x.Sql(rawSql, activeUserDeadlineDate).Get(&stats) | 
					
						
							| 
									
										
										
										
											2016-01-25 13:18:17 +08:00
										 |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-01-25 03:01:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-25 13:18:17 +08:00
										 |  |  | 	query.Result = &stats | 
					
						
							|  |  |  | 	return err | 
					
						
							| 
									
										
										
										
											2016-01-25 03:01:33 +08:00
										 |  |  | } |