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 #9

Closed
wants to merge 6 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
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';
dzehnder marked this conversation as resolved.
Show resolved Hide resolved

function SQSQueue() {
function SQSQueue(sqsClient, queueUrl) {
dzehnder marked this conversation as resolved.
Show resolved Hide resolved
dzehnder marked this conversation as resolved.
Show resolved Hide resolved
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);
dzehnder marked this conversation as resolved.
Show resolved Hide resolved
return {
statusCode: 200,
dzehnder marked this conversation as resolved.
Show resolved Hide resolved
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 };
dzehnder marked this conversation as resolved.
Show resolved Hide resolved
}

export default SQSQueue;
dzehnder marked this conversation as resolved.
Show resolved Hide resolved
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;
dzehnder marked this conversation as resolved.
Show resolved Hide resolved

if (!region) {
throw new Error('region is required');
}
dzehnder marked this conversation as resolved.
Show resolved Hide resolved
if (!queueUrl) {
throw new Error('queueUrl is required');
dzehnder marked this conversation as resolved.
Show resolved Hide resolved
}

// 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 });
dzehnder marked this conversation as resolved.
Show resolved Hide resolved
}

context.sqsQueue = SqsQueue(sqsClient, queueUrl);

return func(request, context);
};
}

export default SQSWrapper;
Loading