export async function run()

in bandit/src/query-lambda/query-lambda.ts [30:64]


export async function run(input: QueryLambdaInput): Promise<void> {
	if (stage !== "CODE" && stage !== "PROD") {
		return Promise.reject(`Invalid stage: ${stage ?? ""}`);
	}

	const ssmPath = `/bandit-testing/${stage}/gcp-wif-credentials-config`;
	const date = input.date ?? new Date(Date.now());
	const currentHour = set(date, { minutes: 0, seconds: 0, milliseconds: 0 });
	/**
	 * Look back at the hour before last, to get a more complete set of events per hour.
	 * This is because component_events can arrive in the pageview table late.
	 */
	const start = subHours(currentHour, 2);
	const startTimestamp = start.toISOString().replace("T", " ");
	const client = await getSSMParam(ssmPath).then(buildAuthClient);

	const banditTestConfigs: BanditTestConfig[] = input.tests.flatMap(test => getTestConfigs(test));

	const resultsFromBigQuery: BigQueryResult[] = await Promise.all(
		banditTestConfigs.map(test => getDataForBanditTest(client, stage, test, start))
	);

	const writeRequests = resultsFromBigQuery.map(({testName,channel, rows}) => {
		const parsed = parseResultFromBigQuery(rows);
		console.log(`Writing row for ${testName}: `, parsed);
		return buildWriteRequest(parsed, testName,channel, startTimestamp);
	});
	if (writeRequests.length > 0) {
		await writeBatch(writeRequests, stage, docClient);
	} else {
		console.log("No data to write");
	}

	return;
}