/
dashboard.go
56 lines (43 loc) · 1.39 KB
/
dashboard.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package main
import (
"net/http"
"time"
"github.com/go-martini/martini"
"github.com/jmoiron/sqlx"
)
type dashboardData struct {
layoutData
Secrets int
Consumers int
Users int
RecentHits int
AuditLog []AuditLogEntry
AccessLog []AccessLogEntry
}
func dashboardAction(user *User, req *http.Request, session *Session, db *sqlx.Tx) response {
secrets := countResultSet{}
db.Get(&secrets, "SELECT COUNT(*) AS `num` FROM `secret`")
users := countResultSet{}
db.Get(&users, "SELECT COUNT(*) AS `num` FROM `user` WHERE `deleted` IS NULL")
consumers := countResultSet{}
db.Get(&consumers, "SELECT COUNT(*) AS `num` FROM `consumer` WHERE `deleted` = 0")
now := time.Now()
limit := now.AddDate(0, 0, -7).Format("2006-01-02")
recentHits := countResultSet{}
db.Get(&recentHits, "SELECT COUNT(*) AS `num` FROM `access_log` WHERE requested_at >= '"+limit+"'")
auditLog := NewAuditLog(db, req)
accessLog := NewAccessLog(db)
data := &dashboardData{
layoutData: NewLayoutData("Dashboard", "dashboard", user, session.CsrfToken),
Secrets: secrets.Count,
Consumers: consumers.Count,
Users: users.Count,
RecentHits: recentHits.Count,
AuditLog: auditLog.FindAll(10, 0),
AccessLog: accessLog.FindAll(10, 0),
}
return renderTemplate(200, "dashboard/index", data)
}
func setupDashboardCtrl(app *martini.ClassicMartini) {
app.Get("/", sessions.RequireLogin, dashboardAction)
}