X-Git-Url: https://git.octo.it/?p=kraftakt.git;a=blobdiff_plain;f=gfit%2Fgfit.go;h=3e406b4d2824c6d3712ef7d21f2b210c11868b32;hp=499372556745b103776652db00a17bd4293e6a45;hb=a05bb612a8b3c7b66fc6f841040c69b87350e63e;hpb=024f18e56decd3608f0412eb3f613c99140d77b1 diff --git a/gfit/gfit.go b/gfit/gfit.go index 4993725..3e406b4 100644 --- a/gfit/gfit.go +++ b/gfit/gfit.go @@ -9,7 +9,6 @@ import ( "github.com/octo/kraftakt/app" "github.com/octo/kraftakt/fitbit" - "github.com/octo/retry" "golang.org/x/oauth2" oauth2google "golang.org/x/oauth2/google" fitness "google.golang.org/api/fitness/v1" @@ -119,28 +118,8 @@ func DataStreamID(dataSource *fitness.DataSource) string { return strings.Join(fields, ":") } -func wrapGoogleError(err error) error { - if err == nil { - return nil - } - - if gerr, ok := err.(*googleapi.Error); ok && gerr.Code >= 400 && gerr.Code < 500 { - return retry.Abort(err) - } - - return err -} - func (c *Client) DataSourceCreate(ctx context.Context, dataSource *fitness.DataSource) (string, error) { - var dataStreamID string - err := retry.Do(ctx, func(ctx context.Context) error { - res, err := c.Service.Users.DataSources.Create(userID, dataSource).Context(ctx).Do() - if err != nil { - return wrapGoogleError(err) - } - dataStreamID = res.DataStreamId - return nil - }) + res, err := c.Service.Users.DataSources.Create(userID, dataSource).Context(ctx).Do() if err != nil { if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == http.StatusConflict { if dataSource.DataStreamId != "" { @@ -148,29 +127,20 @@ func (c *Client) DataSourceCreate(ctx context.Context, dataSource *fitness.DataS } return DataStreamID(dataSource), nil } - log.Errorf(ctx, "c.Service.Users.DataSources.Create(%q) = %v", DataStreamID(dataSource), err) - return "", err + return "", fmt.Errorf("DataSources.Create(%q) = %v", DataStreamID(dataSource), err) } - return dataStreamID, nil + + return res.DataStreamId, nil } -func (c *Client) DatasetGet(ctx context.Context, dataStreamID string, startTime, endTime time.Time) (*fitness.Dataset, error) { +func (c *Client) DatasetGet(ctx context.Context, dataSourceID string, startTime, endTime time.Time) (*fitness.Dataset, error) { datasetID := fmt.Sprintf("%d-%d", startTime.UnixNano(), endTime.UnixNano()) - var dataset *fitness.Dataset - err := retry.Do(ctx, func(ctx context.Context) error { - res, err := c.Service.Users.DataSources.Datasets.Get(userID, dataStreamID, datasetID).Context(ctx).Do() - if err != nil { - return wrapGoogleError(err) - } - dataset = res - return nil - }) + res, err := c.Service.Users.DataSources.Datasets.Get(userID, dataSourceID, datasetID).Context(ctx).Do() if err != nil { - log.Errorf(ctx, "c.Service.Users.DataSources.Datasets.Get(%q, %q) = %v", dataStreamID, datasetID, err) - return nil, err + return nil, fmt.Errorf("DataSources.Datasets.Get(%q, %q) = %v", dataSourceID, datasetID, err) } - return dataset, nil + return res, nil } func (c *Client) DatasetPatch(ctx context.Context, dataSourceID string, points []*fitness.DataPoint) error { @@ -192,12 +162,9 @@ func (c *Client) DatasetPatch(ctx context.Context, dataSourceID string, points [ Point: points, } - err := retry.Do(ctx, func(ctx context.Context) error { - _, err := c.Service.Users.DataSources.Datasets.Patch(userID, dataSourceID, datasetID, dataset).Context(ctx).Do() - return wrapGoogleError(err) - }) + _, err := c.Service.Users.DataSources.Datasets.Patch(userID, dataSourceID, datasetID, dataset).Context(ctx).Do() if err != nil { - log.Errorf(ctx, "c.Service.Users.DataSources.Datasets.Patch() = %v", err) + log.Errorf(ctx, "DataSources.Datasets.Patch(%q, %q) = %v", dataSourceID, datasetID, err) return err } return nil @@ -272,15 +239,16 @@ func (c *Client) SetCalories(ctx context.Context, totalCalories float64, startOf type Activity struct { Start time.Time End time.Time - Type int64 + Type string } func (a Activity) String() string { - return fmt.Sprintf("%s-%s %d", a.Start.Format("15:04:05"), a.End.Format("15:04:05"), a.Type) + return fmt.Sprintf("%s-%s %q", a.Start.Format("15:04:05"), a.End.Format("15:04:05"), a.Type) } func (c *Client) SetActivities(ctx context.Context, activities []Activity, startOfDay time.Time) error { if len(activities) == 0 { + log.Debugf(ctx, "SetActivities(): len(activities) == 0") return nil } @@ -313,9 +281,10 @@ Next: for _, a := range activities { startTimeNanos := a.Start.UnixNano() endTimeNanos := a.End.UnixNano() + activityType := ParseFitbitActivity(a.Type) for _, p := range dataset.Point { - if p.StartTimeNanos == startTimeNanos && p.EndTimeNanos == endTimeNanos && p.Value[0].IntVal == a.Type { + if p.StartTimeNanos == startTimeNanos && p.EndTimeNanos == endTimeNanos && p.Value[0].IntVal == activityType { log.Debugf(ctx, "activity %s already stored in Google Fit", a) continue Next } @@ -327,15 +296,17 @@ Next: StartTimeNanos: startTimeNanos, EndTimeNanos: endTimeNanos, Value: []*fitness.Value{ - &fitness.Value{IntVal: a.Type}, + &fitness.Value{IntVal: activityType}, }, }) } if len(dataPoints) == 0 { + log.Debugf(ctx, "SetActivities(): len(dataPoints) == 0") return nil } + log.Debugf(ctx, "SetActivities(): calling c.DatasetPatch(%q)", dataStreamID) return c.DatasetPatch(ctx, dataStreamID, dataPoints) }