import Fastify from "fastify"; import sequelizePlugin from "./plugins/sequelize.js"; import dotenv from "dotenv"; dotenv.config(); import { S3Client, ListBucketsCommand } from "@aws-sdk/client-s3"; const s3Client = new S3Client({ region: process.env.AWS_REGION, profile: 'default' }); const listCommand = new ListBucketsCommand({}); const response = await s3Client.send(listCommand); const server = Fastify({ logger: true }); server.register(sequelizePlugin); server.get("/", async (request, reply) => { const [results, metadata] = await server.sequelize.query('SELECT 1 + 2 AS result'); console.log(results); console.log(metadata); return { hello: "world" }; }); const productQuery = `SELECT DISTINCT line_item_resource_id AS resourceId, line_item_product_code AS productCode, line_item_usage_account_id AS accountId FROM ${process.env.ATHENA_CU_TABLE};`; import { AthenaClient, StartQueryExecutionCommand, GetQueryExecutionCommand, GetQueryResultsCommand } from "@aws-sdk/client-athena"; const athenaClient = new AthenaClient({ region: process.env.AWS_REGION, profile: 'default' }); const startQueryCommand = new StartQueryExecutionCommand({ QueryString: productQuery, QueryExecutionContext: { Database: process.env.ATHENA_CU_DATABASE }, ResultConfiguration: { OutputLocation: process.env.ATHENA_OUTPUT_S3_BUCKET }, }); const startQueryResponse = await athenaClient.send(startQueryCommand); const queryExecutionId = startQueryResponse.QueryExecutionId; let queryExecutionStatus; do { const getQueryExecutionCommand = new GetQueryExecutionCommand({ QueryExecutionId: queryExecutionId, }); const queryExecutionResponse = await athenaClient.send(getQueryExecutionCommand); queryExecutionStatus = queryExecutionResponse.QueryExecution.Status.State; if (queryExecutionStatus === "FAILED") { console.error(`Query Failed: ${JSON.stringify(queryExecutionResponse)}`); break; } await new Promise((resolve) => setTimeout(resolve, 5000)); } while (queryExecutionStatus !== "SUCCEEDED"); const getQueryResultsCommand = new GetQueryResultsCommand({ QueryExecutionId: queryExecutionId, }); console.log(getQueryResultsCommand); const result = await athenaClient.send(getQueryResultsCommand); console.log(result.ResultSet.Rows); try { await server.listen({ port: 3000 }) } catch (err) { server.log.error(err) process.exit(1) }