From 6c4bf58fe295fe0f6d4ba045a8c2b013ecd1abd9 Mon Sep 17 00:00:00 2001 From: Matthias Radestock Date: Wed, 13 Dec 2017 23:50:05 +0000 Subject: [PATCH] refactor: extract awsCollector.getReportKeys helper This makes Report() more readable. We also intend to use this function elsewhere. --- app/multitenant/aws_collector.go | 69 ++++++++++++++++++-------------- 1 file changed, 39 insertions(+), 30 deletions(-) diff --git a/app/multitenant/aws_collector.go b/app/multitenant/aws_collector.go index 8ebed467a..dc4b6fbad 100644 --- a/app/multitenant/aws_collector.go +++ b/app/multitenant/aws_collector.go @@ -264,6 +264,43 @@ func (c *awsCollector) reportKeysInRange(ctx context.Context, userid string, row return result, nil } +// getReportKeys returns the S3 for reports in the reporting window ending at timestamp. +func (c *awsCollector) getReportKeys(ctx context.Context, timestamp time.Time) ([]string, error) { + var ( + end = timestamp + start = end.Add(-c.window) + rowStart = start.UnixNano() / time.Hour.Nanoseconds() + rowEnd = end.UnixNano() / time.Hour.Nanoseconds() + userid, err = c.userIDer(ctx) + ) + if err != nil { + return nil, err + } + + // Queries will only every span 2 rows max. + var reportKeys []string + if rowStart != rowEnd { + reportKeys1, err := c.reportKeysInRange(ctx, userid, rowStart, start, end) + if err != nil { + return nil, err + } + + reportKeys2, err := c.reportKeysInRange(ctx, userid, rowEnd, start, end) + if err != nil { + return nil, err + } + + reportKeys = append(reportKeys, reportKeys1...) + reportKeys = append(reportKeys, reportKeys2...) + } else { + if reportKeys, err = c.reportKeysInRange(ctx, userid, rowEnd, start, end); err != nil { + return nil, err + } + } + + return reportKeys, nil +} + func (c *awsCollector) getReports(ctx context.Context, reportKeys []string) ([]report.Report, error) { missing := reportKeys @@ -300,39 +337,11 @@ func (c *awsCollector) getReports(ctx context.Context, reportKeys []string) ([]r } func (c *awsCollector) Report(ctx context.Context, timestamp time.Time) (report.Report, error) { - var ( - end = timestamp - start = end.Add(-c.window) - rowStart = start.UnixNano() / time.Hour.Nanoseconds() - rowEnd = end.UnixNano() / time.Hour.Nanoseconds() - userid, err = c.userIDer(ctx) - ) + reportKeys, err := c.getReportKeys(ctx, timestamp) if err != nil { return report.MakeReport(), err } - - // Queries will only every span 2 rows max. - var reportKeys []string - if rowStart != rowEnd { - reportKeys1, err := c.reportKeysInRange(ctx, userid, rowStart, start, end) - if err != nil { - return report.MakeReport(), err - } - - reportKeys2, err := c.reportKeysInRange(ctx, userid, rowEnd, start, end) - if err != nil { - return report.MakeReport(), err - } - - reportKeys = append(reportKeys, reportKeys1...) - reportKeys = append(reportKeys, reportKeys2...) - } else { - if reportKeys, err = c.reportKeysInRange(ctx, userid, rowEnd, start, end); err != nil { - return report.MakeReport(), err - } - } - - log.Debugf("Fetching %d reports from %v to %v", len(reportKeys), start, end) + log.Debugf("Fetching %d reports to %v", len(reportKeys), timestamp) reports, err := c.getReports(ctx, reportKeys) if err != nil { return report.MakeReport(), err