mirror of
https://github.com/muety/wakapi.git
synced 2023-08-10 21:12:56 +03:00
65 lines
1.5 KiB
Go
65 lines
1.5 KiB
Go
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
|
||
}
|