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

chore: optimize import date range

This commit is contained in:
Ferdinand Mütsch
2021-02-06 00:31:30 +01:00
parent da3c80362c
commit 161e375f74
10 changed files with 58 additions and 11 deletions

View File

@@ -1,7 +1,11 @@
package imports
import "github.com/muety/wakapi/models"
import (
"github.com/muety/wakapi/models"
"time"
)
type HeartbeatImporter interface {
Import(*models.User) <-chan *models.Heartbeat
Import(*models.User, time.Time, time.Time) <-chan *models.Heartbeat
ImportAll(*models.User) <-chan *models.Heartbeat
}

View File

@@ -17,9 +17,8 @@ import (
"time"
)
const (
maxWorkers = 6
)
const OriginWakatime = "wakatime"
const maxWorkers = 6
type WakatimeHeartbeatImporter struct {
ApiKey string
@@ -31,7 +30,7 @@ func NewWakatimeHeartbeatImporter(apiKey string) *WakatimeHeartbeatImporter {
}
}
func (w *WakatimeHeartbeatImporter) Import(user *models.User) <-chan *models.Heartbeat {
func (w *WakatimeHeartbeatImporter) Import(user *models.User, minFrom time.Time, maxTo time.Time) <-chan *models.Heartbeat {
out := make(chan *models.Heartbeat)
go func(user *models.User, out chan *models.Heartbeat) {
@@ -41,6 +40,13 @@ func (w *WakatimeHeartbeatImporter) Import(user *models.User) <-chan *models.Hea
return
}
if startDate.Before(minFrom) {
startDate = minFrom
}
if endDate.After(maxTo) {
endDate = maxTo
}
userAgents, err := w.fetchUserAgents()
if err != nil {
logbuch.Error("failed to fetch user agents while importing wakatime heartbeats for user '%s' %v", user.ID, err)
@@ -82,6 +88,10 @@ func (w *WakatimeHeartbeatImporter) Import(user *models.User) <-chan *models.Hea
return out
}
func (w *WakatimeHeartbeatImporter) ImportAll(user *models.User) <-chan *models.Heartbeat {
return w.Import(user, time.Time{}, time.Now())
}
// https://wakatime.com/api/v1/users/current/heartbeats?date=2021-02-05
func (w *WakatimeHeartbeatImporter) fetchHeartbeats(day string) ([]*wakatime.HeartbeatEntry, error) {
httpClient := &http.Client{Timeout: 10 * time.Second}
@@ -211,7 +221,8 @@ func mapHeartbeat(
OperatingSystem: ua.Os,
Machine: entry.MachineNameId, // TODO
Time: entry.Time,
Origin: fmt.Sprintf("wt@%s", entry.Id),
Origin: OriginWakatime,
OriginId: entry.Id,
}).Hashed()
}