From aca20fdcfdeb0206eb29c87a0aedaf3a0a38c521 Mon Sep 17 00:00:00 2001 From: oliverbeumkes-nhs Date: Wed, 24 Dec 2025 10:35:12 +0000 Subject: [PATCH] [PRM-495] Reverted removal of checkS3Status from services --- services/ehr-repo/src/services/storage/s3.js | 33 ++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/services/ehr-repo/src/services/storage/s3.js b/services/ehr-repo/src/services/storage/s3.js index 6484e047..1f3c8e93 100644 --- a/services/ehr-repo/src/services/storage/s3.js +++ b/services/ehr-repo/src/services/storage/s3.js @@ -1,5 +1,6 @@ import { initializeConfig } from '../../config'; import { Endpoint, S3 } from 'aws-sdk'; +import dayjs from 'dayjs'; const URL_EXPIRY_TIME = 60; const CONTENT_TYPE = 'text/xml'; @@ -11,6 +12,24 @@ export default class S3Service { this.Bucket = config.awsS3BucketName; } + checkS3Health() { + const result = { + type: 's3', + bucketName: config.awsS3BucketName, + available: true, + writable: false + }; + + const date = dayjs().format('YYYY-MM-DD HH:mm:ss'); + return this._isConnected() + .then(() => + this.saveObjectWithName('health-check.txt', date) + .then(() => ({ ...result, writable: true })) + .catch((err) => ({ ...result, error: err })) + ) + .catch((err) => ({ ...result, error: err, available: false })); + } + saveObjectWithName(filename, data) { const params = { Bucket: config.awsS3BucketName, @@ -34,6 +53,20 @@ export default class S3Service { return this.s3.getSignedUrlPromise(operation, params); } + _isConnected() { + return new Promise((resolve, reject) => { + this.s3.headBucket( + { + Bucket: config.awsS3BucketName + }, + (err) => { + if (err) reject(err); + resolve(true); + } + ); + }); + } + _get_config() { if (config.nhsEnvironment === 'local') { return {