@@ -32,7 +32,6 @@ import {
3232 MetricAttributeGenerator ,
3333 SERVICE_METRIC ,
3434} from './metric-attribute-generator' ;
35- import { RegionalResourceArnParser } from './regional-resource-arn-parser' ;
3635import { SqsUrlParser } from './sqs-url-parser' ;
3736import { LAMBDA_APPLICATION_SIGNALS_REMOTE_ENVIRONMENT } from './aws-opentelemetry-configurator' ;
3837
@@ -113,20 +112,8 @@ export class AwsMetricAttributeGenerator implements MetricAttributeGenerator {
113112 AwsMetricAttributeGenerator . setService ( resource , span , attributes ) ;
114113 AwsMetricAttributeGenerator . setEgressOperation ( span , attributes ) ;
115114 AwsMetricAttributeGenerator . setRemoteServiceAndOperation ( span , attributes ) ;
116- const isRemoteResourceIdentifierPresent = AwsMetricAttributeGenerator . setRemoteResourceTypeAndIdentifier (
117- span ,
118- attributes
119- ) ;
115+ AwsMetricAttributeGenerator . setRemoteResourceTypeAndIdentifier ( span , attributes ) ;
120116 AwsMetricAttributeGenerator . setRemoteEnvironment ( span , attributes ) ;
121- if ( isRemoteResourceIdentifierPresent ) {
122- const isAccountIdAndRegionPresent = AwsMetricAttributeGenerator . setRemoteResourceAccountIdAndRegion (
123- span ,
124- attributes
125- ) ;
126- if ( ! isAccountIdAndRegionPresent ) {
127- AwsMetricAttributeGenerator . setRemoteResourceAccessKeyAndRegion ( span , attributes ) ;
128- }
129- }
130117 AwsMetricAttributeGenerator . setSpanKindForDependency ( span , attributes ) ;
131118 AwsMetricAttributeGenerator . setRemoteDbUser ( span , attributes ) ;
132119
@@ -382,7 +369,7 @@ export class AwsMetricAttributeGenerator implements MetricAttributeGenerator {
382369 * href="https://docs.aws.amazon.com/cloudcontrolapi/latest/userguide/supported-resources.html">AWS
383370 * Cloud Control resource format</a>.
384371 */
385- private static setRemoteResourceTypeAndIdentifier ( span : ReadableSpan , attributes : Attributes ) : boolean {
372+ private static setRemoteResourceTypeAndIdentifier ( span : ReadableSpan , attributes : Attributes ) : void {
386373 let remoteResourceType : AttributeValue | undefined ;
387374 let remoteResourceIdentifier : AttributeValue | undefined ;
388375 let cloudFormationIdentifier : AttributeValue | undefined ;
@@ -396,25 +383,11 @@ export class AwsMetricAttributeGenerator implements MetricAttributeGenerator {
396383 ) {
397384 remoteResourceType = NORMALIZED_DYNAMO_DB_SERVICE_NAME + '::Table' ;
398385 remoteResourceIdentifier = AwsMetricAttributeGenerator . escapeDelimiters ( awsTableNames [ 0 ] ) ;
399- } else if ( AwsSpanProcessingUtil . isKeyPresent ( span , AWS_ATTRIBUTE_KEYS . AWS_DYNAMODB_TABLE_ARN ) ) {
400- remoteResourceType = NORMALIZED_DYNAMO_DB_SERVICE_NAME + '::Table' ;
401- remoteResourceIdentifier = AwsMetricAttributeGenerator . escapeDelimiters (
402- RegionalResourceArnParser . extractDynamoDbTableNameFromArn (
403- span . attributes [ AWS_ATTRIBUTE_KEYS . AWS_DYNAMODB_TABLE_ARN ]
404- )
405- ) ;
406386 } else if ( AwsSpanProcessingUtil . isKeyPresent ( span , AWS_ATTRIBUTE_KEYS . AWS_KINESIS_STREAM_NAME ) ) {
407387 remoteResourceType = NORMALIZED_KINESIS_SERVICE_NAME + '::Stream' ;
408388 remoteResourceIdentifier = AwsMetricAttributeGenerator . escapeDelimiters (
409389 span . attributes [ AWS_ATTRIBUTE_KEYS . AWS_KINESIS_STREAM_NAME ]
410390 ) ;
411- } else if ( AwsSpanProcessingUtil . isKeyPresent ( span , AWS_ATTRIBUTE_KEYS . AWS_KINESIS_STREAM_ARN ) ) {
412- remoteResourceType = NORMALIZED_KINESIS_SERVICE_NAME + '::Stream' ;
413- remoteResourceIdentifier = AwsMetricAttributeGenerator . escapeDelimiters (
414- RegionalResourceArnParser . extractKinesisStreamNameFromArn (
415- span . attributes [ AWS_ATTRIBUTE_KEYS . AWS_KINESIS_STREAM_ARN ]
416- )
417- ) ;
418391 } else if ( AwsSpanProcessingUtil . isKeyPresent ( span , AWS_ATTRIBUTE_KEYS . AWS_S3_BUCKET ) ) {
419392 remoteResourceType = NORMALIZED_S3_SERVICE_NAME + '::Bucket' ;
420393 remoteResourceIdentifier = AwsMetricAttributeGenerator . escapeDelimiters (
@@ -425,31 +398,31 @@ export class AwsMetricAttributeGenerator implements MetricAttributeGenerator {
425398
426399 remoteResourceType = NORMALIZED_SNS_SERVICE_NAME + '::Topic' ;
427400 remoteResourceIdentifier = AwsMetricAttributeGenerator . escapeDelimiters (
428- RegionalResourceArnParser . extractResourceNameFromArn ( snsArn )
401+ this . extractResourceNameFromArn ( snsArn )
429402 ) ;
430403 cloudFormationIdentifier = AwsMetricAttributeGenerator . escapeDelimiters ( snsArn ) ;
431404 } else if ( AwsSpanProcessingUtil . isKeyPresent ( span , AWS_ATTRIBUTE_KEYS . AWS_SECRETSMANAGER_SECRET_ARN ) ) {
432405 const secretsArn = span . attributes [ AWS_ATTRIBUTE_KEYS . AWS_SECRETSMANAGER_SECRET_ARN ] ;
433406
434407 remoteResourceType = NORMALIZED_SECRETSMANAGER_SERVICE_NAME + '::Secret' ;
435408 remoteResourceIdentifier = AwsMetricAttributeGenerator . escapeDelimiters (
436- RegionalResourceArnParser . extractResourceNameFromArn ( secretsArn )
409+ this . extractResourceNameFromArn ( secretsArn )
437410 ) ;
438411 cloudFormationIdentifier = AwsMetricAttributeGenerator . escapeDelimiters ( secretsArn ) ;
439412 } else if ( AwsSpanProcessingUtil . isKeyPresent ( span , AWS_ATTRIBUTE_KEYS . AWS_STEPFUNCTIONS_STATEMACHINE_ARN ) ) {
440413 const stateMachineArn = span . attributes [ AWS_ATTRIBUTE_KEYS . AWS_STEPFUNCTIONS_STATEMACHINE_ARN ] ;
441414
442415 remoteResourceType = NORMALIZED_STEPFUNCTIONS_SERVICE_NAME + '::StateMachine' ;
443416 remoteResourceIdentifier = AwsMetricAttributeGenerator . escapeDelimiters (
444- RegionalResourceArnParser . extractResourceNameFromArn ( stateMachineArn )
417+ this . extractResourceNameFromArn ( stateMachineArn )
445418 ) ;
446419 cloudFormationIdentifier = AwsMetricAttributeGenerator . escapeDelimiters ( stateMachineArn ) ;
447420 } else if ( AwsSpanProcessingUtil . isKeyPresent ( span , AWS_ATTRIBUTE_KEYS . AWS_STEPFUNCTIONS_ACTIVITY_ARN ) ) {
448421 const activityArn = span . attributes [ AWS_ATTRIBUTE_KEYS . AWS_STEPFUNCTIONS_ACTIVITY_ARN ] ;
449422
450423 remoteResourceType = NORMALIZED_STEPFUNCTIONS_SERVICE_NAME + '::Activity' ;
451424 remoteResourceIdentifier = AwsMetricAttributeGenerator . escapeDelimiters (
452- RegionalResourceArnParser . extractResourceNameFromArn ( activityArn )
425+ this . extractResourceNameFromArn ( activityArn )
453426 ) ;
454427 cloudFormationIdentifier = AwsMetricAttributeGenerator . escapeDelimiters ( activityArn ) ;
455428 } else if ( AwsSpanProcessingUtil . isKeyPresent ( span , AWS_ATTRIBUTE_KEYS . AWS_LAMBDA_FUNCTION_NAME ) ) {
@@ -527,10 +500,7 @@ export class AwsMetricAttributeGenerator implements MetricAttributeGenerator {
527500 attributes [ AWS_ATTRIBUTE_KEYS . AWS_REMOTE_RESOURCE_TYPE ] = remoteResourceType ;
528501 attributes [ AWS_ATTRIBUTE_KEYS . AWS_REMOTE_RESOURCE_IDENTIFIER ] = remoteResourceIdentifier ;
529502 attributes [ AWS_ATTRIBUTE_KEYS . AWS_CLOUDFORMATION_PRIMARY_IDENTIFIER ] = cloudFormationIdentifier ;
530- return true ;
531503 }
532-
533- return false ;
534504 }
535505
536506 /**
@@ -552,56 +522,6 @@ export class AwsMetricAttributeGenerator implements MetricAttributeGenerator {
552522 }
553523 }
554524
555- private static setRemoteResourceAccountIdAndRegion ( span : ReadableSpan , attributes : Attributes ) : boolean {
556- const ARN_ATTRIBUTES : string [ ] = [
557- AWS_ATTRIBUTE_KEYS . AWS_DYNAMODB_TABLE_ARN ,
558- AWS_ATTRIBUTE_KEYS . AWS_KINESIS_STREAM_ARN ,
559- AWS_ATTRIBUTE_KEYS . AWS_SNS_TOPIC_ARN ,
560- AWS_ATTRIBUTE_KEYS . AWS_SECRETSMANAGER_SECRET_ARN ,
561- AWS_ATTRIBUTE_KEYS . AWS_STEPFUNCTIONS_STATEMACHINE_ARN ,
562- AWS_ATTRIBUTE_KEYS . AWS_STEPFUNCTIONS_ACTIVITY_ARN ,
563- AWS_ATTRIBUTE_KEYS . AWS_LAMBDA_FUNCTION_ARN ,
564- AWS_ATTRIBUTE_KEYS . AWS_BEDROCK_GUARDRAIL_ARN ,
565- ] ;
566- let remoteResourceAccountId : string | undefined = undefined ;
567- let remoteResourceRegion : string | undefined = undefined ;
568-
569- if ( AwsSpanProcessingUtil . isKeyPresent ( span , AWS_ATTRIBUTE_KEYS . AWS_SQS_QUEUE_URL ) ) {
570- const sqsQueueUrl = AwsMetricAttributeGenerator . escapeDelimiters (
571- span . attributes [ AWS_ATTRIBUTE_KEYS . AWS_SQS_QUEUE_URL ]
572- ) ;
573- remoteResourceAccountId = SqsUrlParser . getAccountId ( sqsQueueUrl ) ;
574- remoteResourceRegion = SqsUrlParser . getRegion ( sqsQueueUrl ) ;
575- } else {
576- for ( const attributeKey of ARN_ATTRIBUTES ) {
577- if ( AwsSpanProcessingUtil . isKeyPresent ( span , attributeKey ) ) {
578- const arn = span . attributes [ attributeKey ] ;
579- remoteResourceAccountId = RegionalResourceArnParser . getAccountId ( arn ) ;
580- remoteResourceRegion = RegionalResourceArnParser . getRegion ( arn ) ;
581- break ;
582- }
583- }
584- }
585-
586- if ( remoteResourceAccountId !== undefined && remoteResourceRegion !== undefined ) {
587- attributes [ AWS_ATTRIBUTE_KEYS . AWS_REMOTE_RESOURCE_ACCOUNT_ID ] = remoteResourceAccountId ;
588- attributes [ AWS_ATTRIBUTE_KEYS . AWS_REMOTE_RESOURCE_REGION ] = remoteResourceRegion ;
589- return true ;
590- }
591-
592- return false ;
593- }
594-
595- private static setRemoteResourceAccessKeyAndRegion ( span : ReadableSpan , attributes : Attributes ) : void {
596- if ( AwsSpanProcessingUtil . isKeyPresent ( span , AWS_ATTRIBUTE_KEYS . AWS_AUTH_ACCOUNT_ACCESS_KEY ) ) {
597- attributes [ AWS_ATTRIBUTE_KEYS . AWS_REMOTE_RESOURCE_ACCOUNT_ACCESS_KEY ] =
598- span . attributes [ AWS_ATTRIBUTE_KEYS . AWS_AUTH_ACCOUNT_ACCESS_KEY ] ;
599- }
600- if ( AwsSpanProcessingUtil . isKeyPresent ( span , AWS_ATTRIBUTE_KEYS . AWS_AUTH_REGION ) ) {
601- attributes [ AWS_ATTRIBUTE_KEYS . AWS_REMOTE_RESOURCE_REGION ] = span . attributes [ AWS_ATTRIBUTE_KEYS . AWS_AUTH_REGION ] ;
602- }
603- }
604-
605525 /**
606526 * RemoteResourceIdentifier is populated with rule <code>
607527 * ^[{db.name}|]?{address}[|{port}]?
@@ -729,6 +649,16 @@ export class AwsMetricAttributeGenerator implements MetricAttributeGenerator {
729649 return rpcService === 'Lambda' && span . attributes [ SEMATTRS_RPC_METHOD ] === LAMBDA_INVOKE_OPERATION ;
730650 }
731651
652+ // Extracts the name of the resource from an arn
653+ private static extractResourceNameFromArn ( attribute : AttributeValue | undefined ) : string | undefined {
654+ if ( typeof attribute === 'string' && attribute . startsWith ( 'arn:aws:' ) ) {
655+ const split = attribute . split ( ':' ) ;
656+ return split [ split . length - 1 ] ;
657+ }
658+
659+ return undefined ;
660+ }
661+
732662 /** Span kind is needed for differentiating metrics in the EMF exporter */
733663 private static setSpanKindForService ( span : ReadableSpan , attributes : Attributes ) : void {
734664 let spanKind : string = SpanKind [ span . kind ] ;
0 commit comments