openSegment: function openSegment()

in sdk_contrib/koa/lib/koa_mw.js [27:81]


  openSegment: function openSegment(defaultName) {
    if (!defaultName || typeof defaultName !== 'string') {
      throw new Error(
        'Default segment name was not supplied.  Please provide a string.'
      );
    }

    mwUtils.setDefaultName(defaultName);

    return async (ctx, next) => {
      const amznTraceHeader = mwUtils.processHeaders(ctx);
      const name = mwUtils.resolveName(ctx.host);
      const segment = new Segment(
        name,
        amznTraceHeader.Root || amznTraceHeader.root,
        amznTraceHeader.Parent || amznTraceHeader.parent
      );

      mwUtils.resolveSampling(amznTraceHeader, segment, ctx);
      segment.addIncomingRequestData(new IncomingRequestData(ctx.req));

      mwUtils.middlewareLog('Starting koa segment', ctx.url, segment);

      if (AWSXRay.isAutomaticMode()) {
        const ns = AWSXRay.getNamespace();
        ns.bindEmitter(ctx.req);
        ns.bindEmitter(ctx.res);

        return ns.runAndReturn(async function () {
          let error;
          AWSXRay.setSegment(segment);
          ctx.segment = segment;
          try {
            if (next) {
              await next();
            }
          } catch (err) {
            error = err;
          }
          exports._processResponse(ctx, segment, error);
        });
      } else {
        let error;
        ctx.segment = segment;
        try {
          if (next) {
            await next();
          }
        } catch (err) {
          error = err;
        }
        exports._processResponse(ctx, segment, error);
      }
    };
  },