task_tracker/storage/monitoring.go
2019-02-05 20:11:52 -05:00

45 lines
1.4 KiB
Go

package storage
type ProjectMonitoringSnapshot struct {
NewTaskCount int64
FailedTaskCount int64
ClosedTaskCount int64
WorkerAccessCount int64
TimeStamp int64
}
func (database *Database) MakeProjectSnapshots() {
db := database.getDB()
_, err := db.Exec(`
INSERT INTO project_monitoring_snapshot
(project, new_task_count, failed_task_count, closed_task_count, worker_access_count, timestamp)
SELECT id,
(SELECT COUNT(*) FROM task WHERE task.project = project.id AND status = 1),
(SELECT COUNT(*) FROM task WHERE task.project = project.id AND status = 2),
closed_task_count,
(SELECT COUNT(*) FROM worker_has_access_to_project wa WHERE wa.project = project.id),
extract(epoch from now() at time zone 'utc')
FROM project`)
handleErr(err)
}
func (database *Database) GetMonitoringSnapshots(pid int64, from int64, to int64) (ss *[]ProjectMonitoringSnapshot) {
db := database.getDB()
rows, err := db.Query(`SELECT new_task_count, failed_task_count, closed_task_count,
worker_access_count, timestamp FROM project_monitoring_snapshot
WHERE project=$1 AND timestamp BETWEEN $2 AND $3`, pid, from, to)
handleErr(err)
for rows.Next() {
s := ProjectMonitoringSnapshot{}
err := rows.Scan(&s.NewTaskCount, &s.FailedTaskCount, &s.ClosedTaskCount, &s.WorkerAccessCount, &s.TimeStamp)
handleErr(err)
}
return nil
}