1
0
mirror of https://github.com/muety/wakapi.git synced 2023-08-10 21:12:56 +03:00

Fix heartbeats insertion.

Add OS and editor fields.
Introduce aggregations (not working yet).
This commit is contained in:
Ferdinand Mütsch
2019-05-09 00:07:38 +02:00
parent 3bc706ed4b
commit d1be4ce2a3
8 changed files with 187 additions and 15 deletions

29
services/aggregation.go Normal file
View File

@@ -0,0 +1,29 @@
package services
import (
"database/sql"
"fmt"
"log"
"time"
"github.com/n1try/wakapi/models"
)
type AggregationService struct {
Db *sql.DB
HeartbeatService *HeartbeatService
}
func (srv *AggregationService) Aggregate(from time.Time, to time.Time, user *models.User) {
heartbeats, err := srv.HeartbeatService.GetAllFrom(from, user)
if err != nil {
log.Fatal(err)
}
for _, h := range heartbeats {
fmt.Printf("%+v\n", h)
}
}
func (srv *AggregationService) aggregateBy(*[]models.Heartbeat, models.AggregationType) *models.Aggregation {
return &models.Aggregation{}
}

View File

@@ -4,6 +4,7 @@ import (
"database/sql"
"errors"
"fmt"
"time"
"github.com/n1try/wakapi/models"
)
@@ -14,14 +15,14 @@ type HeartbeatService struct {
Db *sql.DB
}
func (srv *HeartbeatService) InsertBatch(heartbeats []models.Heartbeat, user *models.User) error {
qTpl := "INSERT INTO %+s (user, time, entity, type, category, is_write, project, branch, language) VALUES %+s;"
func (srv *HeartbeatService) InsertBatch(heartbeats []*models.Heartbeat, user *models.User) error {
qTpl := "INSERT INTO %+s (user, time, entity, type, category, is_write, project, branch, language, operating_system, editor) VALUES %+s;"
qFill := ""
vals := []interface{}{}
for _, h := range heartbeats {
qFill = "(?, ?, ?, ?, ?, ?, ?, ?, ?),"
vals = append(vals, user.UserId, h.Time.String(), h.Entity, h.Type, h.Category, h.IsWrite, h.Project, h.Branch, h.Language)
qFill = qFill + "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?),"
vals = append(vals, user.UserId, h.Time.String(), h.Entity, h.Type, h.Category, h.IsWrite, h.Project, h.Branch, h.Language, h.OperatingSystem, h.Editor)
}
q := fmt.Sprintf(qTpl, TableHeartbeat, qFill[0:len(qFill)-1])
@@ -36,3 +37,42 @@ func (srv *HeartbeatService) InsertBatch(heartbeats []models.Heartbeat, user *mo
}
return nil
}
func (srv *HeartbeatService) GetAllFrom(date time.Time, user *models.User) ([]models.Heartbeat, error) {
q := fmt.Sprintf("SELECT user, time, language, project, operating_system, editor FROM %+s WHERE time >= ? AND user = ?", TableHeartbeat)
rows, err := srv.Db.Query(q, date.String(), user.UserId)
defer rows.Close()
if err != nil {
return make([]models.Heartbeat, 0), err
}
var heartbeats []models.Heartbeat
for rows.Next() {
var h models.Heartbeat
var language sql.NullString
var project sql.NullString
var operatingSystem sql.NullString
var editor sql.NullString
err := rows.Scan(&h.User, &h.Time, &language, &project, &operatingSystem, &editor)
if language.Valid {
h.Language = language.String
}
if project.Valid {
h.Project = project.String
}
if operatingSystem.Valid {
h.OperatingSystem = operatingSystem.String
}
if editor.Valid {
h.Editor = editor.String
}
if err != nil {
return make([]models.Heartbeat, 0), err
}
heartbeats = append(heartbeats, h)
}
return heartbeats, nil
}