in functions/src/report.ts [671:724]
export async function GetWeeklyEmail(org: string) {
// Originally the bot was designed only to scrape Firebase so the
// reports were stored just under reports/github. This is special-cased.
const reportsChild = org === "firebase" ? "github" : org;
const reportSnapshot = await database()
.ref("reports")
.child(reportsChild)
.limitToLast(1)
.once("child_added");
const report = reportSnapshot.val();
const previousReportSnapshot = await database()
.ref("reports")
.child(reportsChild)
.limitToLast(2)
.once("child_added");
const previousReport = previousReportSnapshot.val();
Object.keys(report).forEach(key => {
if (typeof report[key] !== "number") return;
const keyDiff = `${key}Diff`;
report[keyDiff] = report[key] - previousReport[key];
if (report[keyDiff] >= 0) report[keyDiff] = `+${report[keyDiff]}`;
});
report.topSAMs = report.topSAMs.slice(0, 10);
report.bottomSAMs = report.bottomSAMs.slice(0, 10);
report.topStars = report.topStars.slice(0, 5);
report.topIssues = report.topIssues.slice(0, 5);
report.topSAMs.forEach((entry: any, index: number) => {
entry.index = index + 1;
entry.sam = entry.sam.toPrecision(3);
});
report.bottomSAMs.forEach((entry: any, index: number) => {
entry.index = index + 1;
entry.sam = entry.sam.toPrecision(3);
});
report.topStars.forEach((entry: any, index: number) => {
entry.index = index + 1;
});
report.topIssues.forEach((entry: any, index: number) => {
entry.index = index + 1;
});
const template = readFileSync(path.join(__dirname, "./weekly.mustache"));
return mustache.render(template.toString(), report);
}