Skip to content

Commit

Permalink
feat: create wrapper for SQSClient
Browse files Browse the repository at this point in the history
  • Loading branch information
dzehnder committed Oct 19, 2023
1 parent bce63db commit 9d0971b
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 23 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ logs
test-results.xml
.env
.idea/
.npmrc
12 changes: 6 additions & 6 deletions src/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2019 Adobe. All rights reserved.
* Copyright 2023 Adobe. All rights reserved.
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. You may obtain a copy
* of the License at http://www.apache.org/licenses/LICENSE-2.0
Expand All @@ -13,9 +13,9 @@ import secrets from '@adobe/helix-shared-secrets';
import wrap from '@adobe/helix-shared-wrap';
import { logger } from '@adobe/helix-universal-logger';
import { helixStatus } from '@adobe/helix-status';
import SQSQueue from './sqs-queue.js';
import DB from './db.js'; // Assuming the exported content of './db' is default exported
import PSIClient from './psi-client.js'; // Assuming the exported content of './psi-client' is default exported
import DB from './db.js';
import PSIClient from './psi-client.js';
import { SQSWrapper } from './sqs-wrapper.js';

/**
* This is the main function
Expand All @@ -27,7 +27,6 @@ async function run(request, context) {
const db = DB({
region: process.env.REGION,
});
const sqsQueue = SQSQueue();
const { message } = JSON.parse(context.invocation.event.Records[0].body);

const psiClient = PSIClient({
Expand All @@ -44,11 +43,12 @@ async function run(request, context) {
};
const auditResult = await psiClient.runAudit(`https://${site.domain}/${site.path}`);
const auditResultMin = await db.saveAuditIndex(site, auditResult);
await sqsQueue.sendMessage(auditResultMin);
await context.sqsQueue.sendMessage(auditResultMin);
return new Response('SUCCESS');
}

export const main = wrap(run)
.with(SQSWrapper)
.with(helixStatus)
.with(logger.trace)
.with(logger)
Expand Down
28 changes: 11 additions & 17 deletions src/sqs-queue.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,47 +9,41 @@
* OF ANY KIND, either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
import { SQSClient, SendMessageCommand } from '@aws-sdk/client-sqs';
import { SendMessageCommand } from '@aws-sdk/client-sqs';
import { log } from './util.js';

// Set up the region
const REGION = 'us-east-1'; // change this to your desired region

// Create SQS service client object
const sqsClient = new SQSClient({ region: REGION });

// Your SQS queue URL
const queueURL = 'https://sqs.us-east-1.amazonaws.com/282898975672/spacecat-audit-results';

function SQSQueue() {
function SQSQueue(sqsClient, queueUrl) {
async function sendMessage(message) {
const body = {
message,
timestamp: new Date().toISOString(),
};

// Set up the parameters for the send message command
const params = {
DelaySeconds: 10,
MessageBody: JSON.stringify(body),
QueueUrl: queueURL,
QueueUrl: queueUrl,
};

try {
const data = await sqsClient.send(new SendMessageCommand(params));
console.log('Success, message sent. MessageID:', data.MessageId);
log('info', 'Success, message sent. MessageID:', data.MessageId);
return {
statusCode: 200,
body: JSON.stringify({ message: 'SQS message sent!' }),
};
} catch (err) {
console.log('Error:', err);
log('error', 'Error:', err);
throw err;
}

return {
statusCode: 200,
body: JSON.stringify({ message: 'SQS message sent!' }),
};
}
return {
sendMessage,
};
return { sendMessage };
}

export default SQSQueue;
45 changes: 45 additions & 0 deletions src/sqs-wrapper.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* Copyright 2023 Adobe. All rights reserved.
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. You may obtain a copy
* of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
* OF ANY KIND, either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/

'use strict';

import { SQSClient } from '@aws-sdk/client-sqs';
import { log } from './util.js';
import SqsQueue from './sqs-queue.js';

let sqsClient;

function SQSWrapper(func) {
return async (request, context) => {
const region = process.env.AWS_REGION;
const queueUrl = process.env.QUEUE_URL;

if (!region) {
throw new Error('region is required');
}
if (!queueUrl) {
throw new Error('queueUrl is required');
}

// Initialize the SQSClient only if it hasn't been initialized yet
if (!sqsClient) {
log('info', `Creating SQS client in region ${region}`);
sqsClient = new SQSClient({ region });
}

context.sqsQueue = SqsQueue(sqsClient, queueUrl);

return func(request, context);
};
}

export default SQSWrapper;

0 comments on commit 9d0971b

Please sign in to comment.