5252import static software .amazon .opentelemetry .javaagent .providers .AwsAttributeKeys .AWS_GUARDRAIL_ARN ;
5353import static software .amazon .opentelemetry .javaagent .providers .AwsAttributeKeys .AWS_GUARDRAIL_ID ;
5454import static software .amazon .opentelemetry .javaagent .providers .AwsAttributeKeys .AWS_KNOWLEDGE_BASE_ID ;
55+ import static software .amazon .opentelemetry .javaagent .providers .AwsAttributeKeys .AWS_LAMBDA_ARN ;
56+ import static software .amazon .opentelemetry .javaagent .providers .AwsAttributeKeys .AWS_LAMBDA_NAME ;
5557import static software .amazon .opentelemetry .javaagent .providers .AwsAttributeKeys .AWS_LAMBDA_RESOURCE_ID ;
5658import static software .amazon .opentelemetry .javaagent .providers .AwsAttributeKeys .AWS_LOCAL_OPERATION ;
5759import static software .amazon .opentelemetry .javaagent .providers .AwsAttributeKeys .AWS_LOCAL_SERVICE ;
5860import static software .amazon .opentelemetry .javaagent .providers .AwsAttributeKeys .AWS_QUEUE_NAME ;
5961import static software .amazon .opentelemetry .javaagent .providers .AwsAttributeKeys .AWS_QUEUE_URL ;
6062import static software .amazon .opentelemetry .javaagent .providers .AwsAttributeKeys .AWS_REMOTE_DB_USER ;
63+ import static software .amazon .opentelemetry .javaagent .providers .AwsAttributeKeys .AWS_REMOTE_ENVIRONMENT ;
6164import static software .amazon .opentelemetry .javaagent .providers .AwsAttributeKeys .AWS_REMOTE_OPERATION ;
6265import static software .amazon .opentelemetry .javaagent .providers .AwsAttributeKeys .AWS_REMOTE_RESOURCE_IDENTIFIER ;
6366import static software .amazon .opentelemetry .javaagent .providers .AwsAttributeKeys .AWS_REMOTE_RESOURCE_TYPE ;
@@ -518,6 +521,29 @@ private static void setRemoteResourceTypeAndIdentifier(SpanData span, Attributes
518521 Optional .ofNullable (escapeDelimiters (span .getAttributes ().get (AWS_SECRET_ARN ))));
519522 cloudformationPrimaryIdentifier =
520523 Optional .ofNullable (escapeDelimiters (span .getAttributes ().get (AWS_SECRET_ARN )));
524+ } else if (isKeyPresent (span , AWS_LAMBDA_NAME )) {
525+ if ("Invoke" .equals (getRemoteOperation (span , RPC_METHOD ))) {
526+ String remoteService =
527+ Optional .ofNullable (System .getenv ("LAMBDA_APPLICATION_SIGNALS_REMOTE_SERVICE" ))
528+ .filter (s -> !s .isEmpty ())
529+ .orElse (span .getAttributes ().get (AWS_LAMBDA_NAME ));
530+ if (remoteService != null ) {
531+ builder .put (AWS_REMOTE_SERVICE , remoteService );
532+ }
533+
534+ String remoteEnvironment =
535+ Optional .ofNullable (System .getenv ("LAMBDA_APPLICATION_SIGNALS_REMOTE_ENVIRONMENT" ))
536+ .filter (s -> !s .isEmpty ())
537+ .orElse ("default" );
538+ builder .put (AWS_REMOTE_ENVIRONMENT , "lambda:" + remoteEnvironment );
539+ } else {
540+ remoteResourceType = Optional .of (NORMALIZED_LAMBDA_SERVICE_NAME + "::Function" );
541+ remoteResourceIdentifier =
542+ getLambdaFunctionNameFromArn (
543+ Optional .ofNullable (escapeDelimiters (span .getAttributes ().get (AWS_LAMBDA_NAME ))));
544+ cloudformationPrimaryIdentifier =
545+ Optional .ofNullable (escapeDelimiters (span .getAttributes ().get (AWS_LAMBDA_ARN )));
546+ }
521547 } else if (isKeyPresent (span , AWS_LAMBDA_RESOURCE_ID )) {
522548 remoteResourceType = Optional .of (NORMALIZED_LAMBDA_SERVICE_NAME + "::EventSourceMapping" );
523549 remoteResourceIdentifier =
@@ -539,6 +565,14 @@ private static void setRemoteResourceTypeAndIdentifier(SpanData span, Attributes
539565 }
540566 }
541567
568+ private static Optional <String > getLambdaFunctionNameFromArn (Optional <String > stringArn ) {
569+ if (stringArn .isPresent () && stringArn .get ().startsWith ("arn:aws:lambda:" )) {
570+ Arn resourceArn = Arn .fromString (stringArn .get ());
571+ return Optional .of (resourceArn .getResource ().toString ().split (":" )[1 ]);
572+ }
573+ return stringArn ;
574+ }
575+
542576 private static Optional <String > getSecretsManagerResourceNameFromArn (Optional <String > stringArn ) {
543577 Arn resourceArn = Arn .fromString (stringArn .get ());
544578 return Optional .of (resourceArn .getResource ().toString ().split (":" )[1 ]);
0 commit comments