diff --git a/cmd/heartbeat/heartbeat.go b/cmd/heartbeat/heartbeat.go index 1b7fb499..4b5192af 100644 --- a/cmd/heartbeat/heartbeat.go +++ b/cmd/heartbeat/heartbeat.go @@ -17,6 +17,7 @@ import ( "github.com/wakatime/wakatime-cli/pkg/filestats" "github.com/wakatime/wakatime-cli/pkg/filter" "github.com/wakatime/wakatime-cli/pkg/heartbeat" + "github.com/wakatime/wakatime-cli/pkg/ini" "github.com/wakatime/wakatime-cli/pkg/language" _ "github.com/wakatime/wakatime-cli/pkg/lexer" // force to load all lexers "github.com/wakatime/wakatime-cli/pkg/log" @@ -153,6 +154,8 @@ func SendHeartbeats(v *viper.Viper, queueFilepath string) error { } } + ResetRateLimit(v) + return nil } @@ -197,6 +200,24 @@ func RateLimited(offline paramscmd.Offline) bool { return time.Since(offline.LastSentAt) > offline.RateLimit } +// ResetRateLimit updates the internal.heartbeats_last_sent_at timestamp +func ResetRateLimit(v *viper.Viper) error { + w, err := ini.NewWriter(v, ini.InternalFilePath) + if err != nil { + return fmt.Errorf("failed to parse config file: %s", err) + } + + keyValue := map[string]string{ + "heartbeats_last_sent_at": time.Now().Format(ini.DateFormat), + } + + if err := w.Write("internal", keyValue); err != nil { + return fmt.Errorf("failed to write to internal config file: %s", err) + } + + return nil +} + func buildHeartbeats(params paramscmd.Params) []heartbeat.Heartbeat { heartbeats := []heartbeat.Heartbeat{} diff --git a/cmd/offlinesync/offlinesync.go b/cmd/offlinesync/offlinesync.go index a5de0ca3..19c0ec6d 100644 --- a/cmd/offlinesync/offlinesync.go +++ b/cmd/offlinesync/offlinesync.go @@ -148,5 +148,7 @@ func SyncOfflineActivity(v *viper.Viper, queueFilepath string) error { return err } + cmdheartbeat.ResetRateLimit(v) + return nil }