Skip to content

Commit 0ffb21f

Browse files
add parseArn helper function; address minor comments
1 parent d28721d commit 0ffb21f

File tree

3 files changed

+19
-36
lines changed

3 files changed

+19
-36
lines changed

aws-distro-opentelemetry-node-autoinstrumentation/src/patches/instrumentation-patch.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -414,11 +414,7 @@ function patchAwsSdkInstrumentation(instrumentation: Instrumentation): void {
414414
}
415415
}
416416
} catch (err) {
417-
diag.debug(
418-
`Failed to get auth account access key and region: ${
419-
err instanceof Error ? err.message : String(err)
420-
}`
421-
);
417+
diag.debug('Failed to get auth account access key and region:', err);
422418
}
423419
}
424420

aws-distro-opentelemetry-node-autoinstrumentation/src/regional-resource-arn-parser.ts

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,18 @@ import { AttributeValue } from '@opentelemetry/api';
55
import { isAccountId } from './utils';
66

77
export class RegionalResourceArnParser {
8+
private static parseArn(arn: AttributeValue | undefined): string[] | undefined {
9+
if (typeof arn !== 'string') return undefined;
10+
const parts = arn.split(':');
11+
return parts.length >= 6 && parts[0] === 'arn' && isAccountId(parts[4]) ? parts : undefined;
12+
}
13+
814
public static getAccountId(arn: AttributeValue | undefined): string | undefined {
9-
if (typeof arn == 'string' && this.isArn(arn)) {
10-
return arn.split(':')[4];
11-
}
12-
return undefined;
15+
return this.parseArn(arn)?.[4];
1316
}
1417

1518
public static getRegion(arn: AttributeValue | undefined): string | undefined {
16-
if (typeof arn == 'string' && this.isArn(arn)) {
17-
return arn.split(':')[3];
18-
}
19-
return undefined;
19+
return this.parseArn(arn)?.[3];
2020
}
2121

2222
public static extractDynamoDbTableNameFromArn(arn: AttributeValue | undefined): string | undefined {
@@ -27,21 +27,8 @@ export class RegionalResourceArnParser {
2727
return this.extractResourceNameFromArn(arn)?.replace('stream/', '');
2828
}
2929

30-
// Extracts the name of the resource from an arn
3130
public static extractResourceNameFromArn(arn: AttributeValue | undefined): string | undefined {
32-
if (typeof arn === 'string' && this.isArn(arn)) {
33-
const split = arn.split(':');
34-
return split[split.length - 1];
35-
}
36-
37-
return undefined;
38-
}
39-
40-
public static isArn(arn: string): boolean {
41-
// Check if arn follows the format:
42-
// arn:partition:service:region:account-id:resource-type/resource-id or
43-
// arn:partition:service:region:account-id:resource-type:resource-id
44-
const arnParts = arn.split(':');
45-
return arnParts.length >= 6 && arnParts[0] === 'arn' && isAccountId(arnParts[4]);
31+
const parts = this.parseArn(arn);
32+
return parts?.[parts.length - 1];
4633
}
4734
}

aws-distro-opentelemetry-node-autoinstrumentation/test/aws-metric-attribute-generator.test.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1427,21 +1427,21 @@ describe('AwsMetricAttributeGeneratorTest', () => {
14271427
if (region !== undefined) {
14281428
expect(actualAttributes[AWS_ATTRIBUTE_KEYS.AWS_REMOTE_RESOURCE_REGION]).toEqual(region);
14291429
} else {
1430-
expect(actualAttributes[AWS_ATTRIBUTE_KEYS.AWS_REMOTE_RESOURCE_REGION]).toEqual(undefined);
1430+
expect(actualAttributes).not.toHaveProperty(AWS_ATTRIBUTE_KEYS.AWS_REMOTE_RESOURCE_REGION);
14311431
}
14321432

14331433
if (accountId !== undefined) {
14341434
expect(actualAttributes[AWS_ATTRIBUTE_KEYS.AWS_REMOTE_RESOURCE_ACCOUNT_ID]).toEqual(accountId);
1435-
expect(actualAttributes[AWS_ATTRIBUTE_KEYS.AWS_REMOTE_RESOURCE_ACCOUNT_ACCESS_KEY]).toEqual(undefined);
1435+
expect(actualAttributes).not.toHaveProperty(AWS_ATTRIBUTE_KEYS.AWS_REMOTE_RESOURCE_ACCOUNT_ACCESS_KEY);
14361436
} else {
1437-
expect(actualAttributes[AWS_ATTRIBUTE_KEYS.AWS_REMOTE_RESOURCE_ACCOUNT_ID]).toEqual(undefined);
1437+
expect(actualAttributes).not.toHaveProperty(AWS_ATTRIBUTE_KEYS.AWS_REMOTE_RESOURCE_ACCOUNT_ID);
14381438
}
14391439

14401440
if (accessKey !== undefined) {
14411441
expect(actualAttributes[AWS_ATTRIBUTE_KEYS.AWS_REMOTE_RESOURCE_ACCOUNT_ACCESS_KEY]).toEqual(accessKey);
1442-
expect(actualAttributes[AWS_ATTRIBUTE_KEYS.AWS_REMOTE_RESOURCE_ACCOUNT_ID]).toEqual(undefined);
1442+
expect(actualAttributes).not.toHaveProperty(AWS_ATTRIBUTE_KEYS.AWS_REMOTE_RESOURCE_ACCOUNT_ID);
14431443
} else {
1444-
expect(actualAttributes[AWS_ATTRIBUTE_KEYS.AWS_REMOTE_RESOURCE_ACCOUNT_ACCESS_KEY]).toEqual(undefined);
1444+
expect(actualAttributes).not.toHaveProperty(AWS_ATTRIBUTE_KEYS.AWS_REMOTE_RESOURCE_ACCOUNT_ACCESS_KEY);
14451445
}
14461446
}
14471447

@@ -1451,9 +1451,9 @@ describe('AwsMetricAttributeGeneratorTest', () => {
14511451
expect(actualAttributes[AWS_ATTRIBUTE_KEYS.AWS_REMOTE_RESOURCE_TYPE]).toEqual(undefined);
14521452
expect(actualAttributes[AWS_ATTRIBUTE_KEYS.AWS_REMOTE_RESOURCE_IDENTIFIER]).toEqual(undefined);
14531453
expect(actualAttributes[AWS_ATTRIBUTE_KEYS.AWS_CLOUDFORMATION_PRIMARY_IDENTIFIER]).toEqual(undefined);
1454-
expect(actualAttributes[AWS_ATTRIBUTE_KEYS.AWS_REMOTE_RESOURCE_REGION]).toEqual(undefined);
1455-
expect(actualAttributes[AWS_ATTRIBUTE_KEYS.AWS_REMOTE_RESOURCE_ACCOUNT_ID]).toEqual(undefined);
1456-
expect(actualAttributes[AWS_ATTRIBUTE_KEYS.AWS_REMOTE_RESOURCE_ACCOUNT_ACCESS_KEY]).toEqual(undefined);
1454+
expect(actualAttributes).not.toHaveProperty(AWS_ATTRIBUTE_KEYS.AWS_REMOTE_RESOURCE_REGION);
1455+
expect(actualAttributes).not.toHaveProperty(AWS_ATTRIBUTE_KEYS.AWS_REMOTE_RESOURCE_ACCOUNT_ID);
1456+
expect(actualAttributes).not.toHaveProperty(AWS_ATTRIBUTE_KEYS.AWS_REMOTE_RESOURCE_ACCOUNT_ACCESS_KEY);
14571457
}
14581458

14591459
it('testDBUserAttribute', () => {

0 commit comments

Comments
 (0)