mirror of
https://github.com/muety/wakapi.git
synced 2023-08-10 21:12:56 +03:00
refactor: introduce concept of durations (resolve #261)
This commit is contained in:
64
models/duration.go
Normal file
64
models/duration.go
Normal file
@ -0,0 +1,64 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/emvi/logbuch"
|
||||
"github.com/mitchellh/hashstructure/v2"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Duration struct {
|
||||
UserID string `json:"user_id"`
|
||||
Time CustomTime `json:"time" hash:"ignore"`
|
||||
Duration time.Duration `json:"duration" hash:"ignore"`
|
||||
Project string `json:"project"`
|
||||
Language string `json:"language"`
|
||||
Editor string `json:"editor"`
|
||||
OperatingSystem string `json:"operating_system"`
|
||||
Machine string `json:"machine"`
|
||||
GroupHash string `json:"-" hash:"ignore"`
|
||||
}
|
||||
|
||||
func NewDurationFromHeartbeat(h *Heartbeat) *Duration {
|
||||
d := &Duration{
|
||||
UserID: h.UserID,
|
||||
Time: h.Time,
|
||||
Duration: 0,
|
||||
Project: h.Project,
|
||||
Language: h.Language,
|
||||
Editor: h.Editor,
|
||||
OperatingSystem: h.OperatingSystem,
|
||||
Machine: h.Machine,
|
||||
}
|
||||
return d.Hashed()
|
||||
}
|
||||
|
||||
func (d *Duration) Hashed() *Duration {
|
||||
hash, err := hashstructure.Hash(d, hashstructure.FormatV2, nil)
|
||||
if err != nil {
|
||||
logbuch.Error("CRITICAL ERROR: failed to hash struct – %v", err)
|
||||
}
|
||||
d.GroupHash = fmt.Sprintf("%x", hash)
|
||||
return d
|
||||
}
|
||||
|
||||
func (d *Duration) GetKey(t uint8) (key string) {
|
||||
switch t {
|
||||
case SummaryProject:
|
||||
key = d.Project
|
||||
case SummaryEditor:
|
||||
key = d.Editor
|
||||
case SummaryLanguage:
|
||||
key = d.Language
|
||||
case SummaryOS:
|
||||
key = d.OperatingSystem
|
||||
case SummaryMachine:
|
||||
key = d.Machine
|
||||
}
|
||||
|
||||
if key == "" {
|
||||
key = UnknownSummaryKey
|
||||
}
|
||||
|
||||
return key
|
||||
}
|
Reference in New Issue
Block a user