From 3d12a2a76c72bd7fd7ab69f40121372e0014aa1c Mon Sep 17 00:00:00 2001 From: Jonathan Lange Date: Tue, 7 Jun 2016 18:48:01 +0100 Subject: [PATCH] Extract function for getting single report --- app/multitenant/dynamo_collector.go | 47 +++++++++++++++++------------ 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/app/multitenant/dynamo_collector.go b/app/multitenant/dynamo_collector.go index d84add02e..d84c4818b 100644 --- a/app/multitenant/dynamo_collector.go +++ b/app/multitenant/dynamo_collector.go @@ -243,34 +243,43 @@ func (c *dynamoDBCollector) getCached(reportKeys []string) ([]report.Report, []s func (c *dynamoDBCollector) getNonCached(reportKeys []string) ([]report.Report, error) { reports := []report.Report{} for _, reportKey := range reportKeys { - var resp *s3.GetObjectOutput - err := timeRequest("Get", s3RequestDuration, func() error { - var err error - resp, err = c.s3.GetObject(&s3.GetObjectInput{ - Bucket: aws.String(c.bucketName), - Key: aws.String(reportKey), - }) - return err - }) + rep, err := c.getNonCachedReport(reportKey) if err != nil { return nil, err } - reader, err := gzip.NewReader(resp.Body) - if err != nil { - log.Errorf("Error gunzipping report: %v", err) - continue - } - rep := report.MakeReport() - if err := codec.NewDecoder(reader, &codec.MsgpackHandle{}).Decode(&rep); err != nil { - log.Errorf("Failed to decode report: %v", err) - continue - } reports = append(reports, rep) c.cache.Set(reportKey, rep) } return reports, nil } +func (c *dynamoDBCollector) getNonCachedReport(reportKey string) (report.Report, error) { + var resp *s3.GetObjectOutput + err := timeRequest("Get", s3RequestDuration, func() error { + var err error + resp, err = c.s3.GetObject(&s3.GetObjectInput{ + Bucket: aws.String(c.bucketName), + Key: aws.String(reportKey), + }) + return err + }) + // XXX: Not sure why this one is returned out when the rest are logged. + if err != nil { + return report.Report{}, err + } + reader, err := gzip.NewReader(resp.Body) + if err != nil { + log.Errorf("Error gunzipping report: %v", err) + return report.Report{}, nil + } + rep := report.MakeReport() + if err := codec.NewDecoder(reader, &codec.MsgpackHandle{}).Decode(&rep); err != nil { + log.Errorf("Failed to decode report: %v", err) + return report.Report{}, nil + } + return rep, nil +} + func (c *dynamoDBCollector) getReports(userid string, row int64, start, end time.Time) ([]report.Report, error) { rowKey := fmt.Sprintf("%s-%s", userid, strconv.FormatInt(row, 10)) reportKeys, err := c.getReportKeys(rowKey, start, end)