From 30de96950bbbe8c654033c9cf8c654186f3c1337 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ferdinand=20M=C3=BCtsch?= Date: Sun, 29 Aug 2021 10:54:00 +0200 Subject: [PATCH] chore: persist raw user agent value --- models/heartbeat.go | 1 + routes/api/heartbeat.go | 4 +++- services/imports/wakatime.go | 5 +++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/models/heartbeat.go b/models/heartbeat.go index 99838b0..5571dc5 100644 --- a/models/heartbeat.go +++ b/models/heartbeat.go @@ -22,6 +22,7 @@ type Heartbeat struct { Editor string `json:"editor" hash:"ignore"` // ignored because editor might be parsed differently by wakatime OperatingSystem string `json:"operating_system" hash:"ignore"` // ignored because os might be parsed differently by wakatime Machine string `json:"machine" hash:"ignore"` // ignored because wakatime api doesn't return machines currently + UserAgent string `json:"user_agent" hash:"ignore"` Time CustomTime `json:"time" gorm:"type:timestamp; index:idx_time,idx_time_user" swaggertype:"primitive,number"` Hash string `json:"-" gorm:"type:varchar(17); uniqueIndex"` Origin string `json:"-" hash:"ignore"` diff --git a/routes/api/heartbeat.go b/routes/api/heartbeat.go index cac328f..0d67642 100644 --- a/routes/api/heartbeat.go +++ b/routes/api/heartbeat.go @@ -79,7 +79,8 @@ func (h *HeartbeatApiHandler) Post(w http.ResponseWriter, r *http.Request) { } } - opSys, editor, _ := utils.ParseUserAgent(r.Header.Get("User-Agent")) + userAgent := r.Header.Get("User-Agent") + opSys, editor, _ := utils.ParseUserAgent(userAgent) machineName := r.Header.Get("X-Machine-Name") for _, hb := range heartbeats { @@ -88,6 +89,7 @@ func (h *HeartbeatApiHandler) Post(w http.ResponseWriter, r *http.Request) { hb.Machine = machineName hb.User = user hb.UserID = user.ID + hb.UserAgent = userAgent if !hb.Valid() { w.WriteHeader(http.StatusBadRequest) diff --git a/services/imports/wakatime.go b/services/imports/wakatime.go index fa54b0c..61fe731 100644 --- a/services/imports/wakatime.go +++ b/services/imports/wakatime.go @@ -106,6 +106,7 @@ func (w *WakatimeHeartbeatImporter) ImportAll(user *models.User) <-chan *models. } // https://wakatime.com/api/v1/users/current/heartbeats?date=2021-02-05 +// https://pastr.de/p/b5p4od5s8w0pfntmwoi117jy func (w *WakatimeHeartbeatImporter) fetchHeartbeats(day string) ([]*wakatime.HeartbeatEntry, error) { httpClient := &http.Client{Timeout: 10 * time.Second} @@ -134,6 +135,7 @@ func (w *WakatimeHeartbeatImporter) fetchHeartbeats(day string) ([]*wakatime.Hea } // https://wakatime.com/api/v1/users/current/all_time_since_today +// https://pastr.de/p/w8xb4biv575pu32pox7jj2gr func (w *WakatimeHeartbeatImporter) fetchRange() (time.Time, time.Time, error) { httpClient := &http.Client{Timeout: 10 * time.Second} @@ -168,6 +170,7 @@ func (w *WakatimeHeartbeatImporter) fetchRange() (time.Time, time.Time, error) { } // https://wakatime.com/api/v1/users/current/user_agents +// https://pastr.de/p/05k5do8q108k94lic4lfl3pc func (w *WakatimeHeartbeatImporter) fetchUserAgents() (map[string]*wakatime.UserAgentEntry, error) { httpClient := &http.Client{Timeout: 10 * time.Second} @@ -195,6 +198,7 @@ func (w *WakatimeHeartbeatImporter) fetchUserAgents() (map[string]*wakatime.User } // https://wakatime.com/api/v1/users/current/machine_names +// https://pastr.de/p/v58cv0xrupp3zvyyv8o6973j func (w *WakatimeHeartbeatImporter) fetchMachineNames() (map[string]*wakatime.MachineEntry, error) { httpClient := &http.Client{Timeout: 10 * time.Second} @@ -261,6 +265,7 @@ func mapHeartbeat( Editor: ua.Editor, OperatingSystem: ua.Os, Machine: ma.Value, + UserAgent: ua.Value, Time: entry.Time, Origin: OriginWakatime, OriginId: entry.Id,