refactor: extract awsCollector.getReportKeys helper

This makes Report() more readable. We also intend to use this function
elsewhere.
This commit is contained in:
Matthias Radestock
2017-12-13 23:50:05 +00:00
parent 3a122aeed5
commit 6c4bf58fe2

View File

@@ -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