powertools-lambda-typescript icon indicating copy to clipboard operation
powertools-lambda-typescript copied to clipboard

Feature (tracer): correctly create segments for parallel processing (i.e. Promise.all[])

Open dreamorosi opened this issue 2 years ago • 0 comments

Description of the feature request

Problem statement

As a user I want to use Tracer while processing objects in parallel and be able to create a segments, annotate it / put metadata on it, for each one of them.

Originally suggested by @singlewind in #452.

Code examples

const tracer = new Tracer();

export const handler = async (event: Messages[]) => {
  const mainSubsegment = tracer.getSegment(); // This segment is the one called ## index.handler created by Tracer
  await Promise.all[
    event.map((message) => new Promise((resolve, _reject) => {
      const msgSubsegment = mainSubsegment.addNewSubsegment(`### Message ${message.id}`);
      // process message
      tracer.putMetadata('message', message.body);
      msgSubsegment.close();
      msgSubsegment.flush();
      resolve();
    });
  ]
}

Benefits for you and the wider AWS community

Faster handling of batch of objects, shorter execution times, cheaper executions.

Related issues, RFCs

#452

dreamorosi avatar Jan 14 '22 19:01 dreamorosi