Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: create wrapper for SQSClient #6

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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;
Loading