UNPKG

@artilleryio/platform-fargate

Version:
1 lines 2.42 kB
"use strict";const AWS=require("aws-sdk"),debug=require("debug")("plugin:sqsReporter"),uuid=require("uuid"),HdrHistogram=require("hdr-histogram-js");function ArtillerySQSPlugin(script,events){this.script=script,this.events=events,this.unsent=0;const self=this;this.tags=process.env.SQS_TAGS?JSON.parse(process.env.SQS_TAGS):[],this.testId=null;let messageAttributes={};return this.tags.forEach(function(tag){"testId"===tag.key&&(self.testId=tag.value),messageAttributes[tag.key]={DataType:"String",StringValue:tag.value}}),this.messageAttributes=messageAttributes,this.sqs=new AWS.SQS({region:process.env.SQS_REGION||script.config.plugins["sqs-reporter"].region}),this.queueUrl=process.env.SQS_QUEUE_URL||script.config.plugins["sqs-reporter"].queueUrl,this.h=HdrHistogram.build({bitBucketSize:64,autoResize:!0,lowestDiscernibleValue:2,highestTrackableValue:1e12,numberOfSignificantValueDigits:1}),events.on("stats",statsOriginal=>{let body;if(statsOriginal.period){var serialized=global.artillery.__SSMS.serializeMetrics(statsOriginal);body={event:"workerStats",stats:serialized},body=JSON.stringify(body)}else{serialized=JSON.parse(JSON.stringify(statsOriginal));const self=this;serialized._latencies&&(serialized._latencies.forEach(function(entry){self.h.recordValue(entry/1e6)}),debug(`Recorded ${serialized._latencies.length} latencies in an HdrHistogram`),debug(serialized._latencies),statsOriginal=HdrHistogram.encodeIntoBase64String(self.h),serialized.serializedHdr=statsOriginal),delete serialized._latencies,delete serialized._entries,body=JSON.stringify(serialized)}debug("Prepared messsage body"),debug(body),this.unsent++;statsOriginal={MessageBody:body,QueueUrl:this.queueUrl,MessageAttributes:this.messageAttributes,MessageDeduplicationId:uuid.v4(),MessageGroupId:this.testId};this.sqs.sendMessage(statsOriginal,(err,data)=>{err&&console.error(err),self.h.reset(),this.unsent--})}),events.on("done",stats=>{this.unsent++;var params={MessageBody:JSON.stringify({event:"done"}),QueueUrl:this.queueUrl,MessageAttributes:this.messageAttributes,MessageDeduplicationId:uuid.v4(),MessageGroupId:this.testId};this.sqs.sendMessage(params,(err,data)=>{err&&console.error(err),this.unsent--})}),this}module.exports={Plugin:ArtillerySQSPlugin,LEGACY_METRICS_FORMAT:!1},ArtillerySQSPlugin.prototype.cleanup=function(done){const interval=setInterval(()=>{this.unsent<=0&&(clearInterval(interval),done(null))},200).unref()};