11import { initializeConfig } from '../../config' ;
22import { Endpoint , S3 } from 'aws-sdk' ;
3+ import dayjs from 'dayjs' ;
34
45const URL_EXPIRY_TIME = 60 ;
56const CONTENT_TYPE = 'text/xml' ;
@@ -11,6 +12,24 @@ export default class S3Service {
1112 this . Bucket = config . awsS3BucketName ;
1213 }
1314
15+ checkS3Health ( ) {
16+ const result = {
17+ type : 's3' ,
18+ bucketName : config . awsS3BucketName ,
19+ available : true ,
20+ writable : false
21+ } ;
22+
23+ const date = dayjs ( ) . format ( 'YYYY-MM-DD HH:mm:ss' ) ;
24+ return this . _isConnected ( )
25+ . then ( ( ) =>
26+ this . saveObjectWithName ( 'health-check.txt' , date )
27+ . then ( ( ) => ( { ...result , writable : true } ) )
28+ . catch ( ( err ) => ( { ...result , error : err } ) )
29+ )
30+ . catch ( ( err ) => ( { ...result , error : err , available : false } ) ) ;
31+ }
32+
1433 saveObjectWithName ( filename , data ) {
1534 const params = {
1635 Bucket : config . awsS3BucketName ,
@@ -34,6 +53,20 @@ export default class S3Service {
3453 return this . s3 . getSignedUrlPromise ( operation , params ) ;
3554 }
3655
56+ _isConnected ( ) {
57+ return new Promise ( ( resolve , reject ) => {
58+ this . s3 . headBucket (
59+ {
60+ Bucket : config . awsS3BucketName
61+ } ,
62+ ( err ) => {
63+ if ( err ) reject ( err ) ;
64+ resolve ( true ) ;
65+ }
66+ ) ;
67+ } ) ;
68+ }
69+
3770 _get_config ( ) {
3871 if ( config . nhsEnvironment === 'local' ) {
3972 return {
0 commit comments