Skip to content

Commit 1ff5d25

Browse files
authored
Add roleName to profile metadata (#1725)
1 parent 1697a8f commit 1ff5d25

File tree

8 files changed

+102
-41
lines changed

8 files changed

+102
-41
lines changed

agent/agent-profiler/agent-profiler-api/src/main/java/com/microsoft/applicationinsights/profiler/ProfilerServiceFactory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ Future<ProfilerService> initialize(
2020
String instrumentationKey,
2121
CloseableHttpClient httpClient,
2222
ScheduledExecutorService serviceProfilerExecutorService,
23-
String userAgent
23+
String userAgent,
24+
String roleName
2425
);
2526
}

agent/agent-profiler/agent-service-profiler/src/main/java/com/microsoft/applicationinsights/serviceprofilerapi/JfrProfilerServiceFactory.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,17 @@ public synchronized Future<ProfilerService> initialize(
3434
String instrumentationKey,
3535
CloseableHttpClient httpClient,
3636
ScheduledExecutorService serviceProfilerExecutorService,
37-
String userAgent) {
37+
String userAgent,
38+
String roleName) {
3839
if (INSTANCE == null) {
3940
ServiceProfilerClientV2 serviceProfilerClient = new ProfilerFrontendClientV2(config.getServiceProfilerFrontEndPoint(), instrumentationKey, httpClient, userAgent);
4041

4142
ServiceProfilerUploader uploader = new ServiceProfilerUploader(
4243
serviceProfilerClient,
4344
machineName,
4445
processId,
45-
appIdSupplier);
46+
appIdSupplier,
47+
roleName);
4648

4749
INSTANCE = new JfrProfilerService(
4850
appIdSupplier,

agent/agent-profiler/agent-service-profiler/src/main/java/com/microsoft/applicationinsights/serviceprofilerapi/client/contract/BlobMetadataConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,5 @@ public class BlobMetadataConstants {
3434
public static final String PROGRAMMING_LANGUAGE_META_NAME = "spProgrammingLanguage";
3535
public static final String OS_PLATFORM_META_NAME = "spOSPlatform";
3636
public static final String TRACE_FILE_FORMAT_META_NAME = "spTraceFileFormat";
37+
public static final String ROLE_NAME_META_NAME = "RoleName";
3738
}

agent/agent-profiler/agent-service-profiler/src/main/java/com/microsoft/applicationinsights/serviceprofilerapi/upload/ServiceProfilerUploader.java

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,23 +20,6 @@
2020
*/
2121
package com.microsoft.applicationinsights.serviceprofilerapi.upload;
2222

23-
import java.io.File;
24-
import java.io.FileOutputStream;
25-
import java.io.IOException;
26-
import java.io.OutputStream;
27-
import java.net.MalformedURLException;
28-
import java.net.URISyntaxException;
29-
import java.net.URL;
30-
import java.nio.file.Files;
31-
import java.nio.file.Path;
32-
import java.util.Base64;
33-
import java.util.Comparator;
34-
import java.util.HashMap;
35-
import java.util.Random;
36-
import java.util.UUID;
37-
import java.util.function.Supplier;
38-
import java.util.zip.GZIPOutputStream;
39-
4023
import com.azure.core.http.rest.Response;
4124
import com.azure.storage.blob.BlobAsyncClient;
4225
import com.azure.storage.blob.BlobContainerAsyncClient;
@@ -61,6 +44,23 @@
6144
import org.slf4j.LoggerFactory;
6245
import reactor.core.publisher.Mono;
6346

47+
import java.io.File;
48+
import java.io.FileOutputStream;
49+
import java.io.IOException;
50+
import java.io.OutputStream;
51+
import java.net.MalformedURLException;
52+
import java.net.URISyntaxException;
53+
import java.net.URL;
54+
import java.nio.file.Files;
55+
import java.nio.file.Path;
56+
import java.util.Base64;
57+
import java.util.Comparator;
58+
import java.util.HashMap;
59+
import java.util.Random;
60+
import java.util.UUID;
61+
import java.util.function.Supplier;
62+
import java.util.zip.GZIPOutputStream;
63+
6464
/**
6565
* Uploads profiles to the service profiler endpoint
6666
*/
@@ -73,16 +73,19 @@ public class ServiceProfilerUploader {
7373
private final String machineName;
7474
private final Supplier<String> appIdSupplier;
7575
private final String processId;
76+
private final String roleName;
7677

7778
public ServiceProfilerUploader(
7879
ServiceProfilerClientV2 serviceProfilerClient,
7980
String machineName,
8081
String processId,
81-
Supplier<String> appIdSupplier) {
82+
Supplier<String> appIdSupplier,
83+
String roleName) {
8284
this.appIdSupplier = appIdSupplier;
8385
this.machineName = machineName;
8486
this.serviceProfilerClient = serviceProfilerClient;
8587
this.processId = processId;
88+
this.roleName = roleName;
8689
}
8790

8891
/**
@@ -232,15 +235,19 @@ protected UploadFinishArgs reportUploadComplete(UUID profileId, Response<BlockBl
232235
}
233236
}
234237

235-
private BlobUploadFromFileOptions createBlockBlobOptions(File file, UploadContext uploadContext) {
238+
BlobUploadFromFileOptions createBlockBlobOptions(File file, UploadContext uploadContext) {
236239
HashMap<String, String> metadata = new HashMap<>();
237240

238241
metadata.put(BlobMetadataConstants.DATA_CUBE_META_NAME, uploadContext.getDataCube().toString().toLowerCase());
239242
metadata.put(BlobMetadataConstants.MACHINE_NAME_META_NAME, uploadContext.getMachineName());
240243
metadata.put(BlobMetadataConstants.START_TIME_META_NAME, TimestampContract.timestampToString(uploadContext.getSessionId()));
241244
metadata.put(BlobMetadataConstants.PROGRAMMING_LANGUAGE_META_NAME, "Java");
242245
metadata.put(BlobMetadataConstants.OS_PLATFORM_META_NAME, OsPlatformProvider.getOSPlatformDescription());
243-
metadata.put(BlobMetadataConstants.TRACE_FILE_FORMAT_META_NAME, "Netperf");
246+
metadata.put(BlobMetadataConstants.TRACE_FILE_FORMAT_META_NAME, "jfr");
247+
248+
if (roleName != null && !roleName.isEmpty()) {
249+
metadata.put(BlobMetadataConstants.ROLE_NAME_META_NAME, roleName);
250+
}
244251

245252
String fullFilePath = file
246253
.getAbsoluteFile()

agent/agent-profiler/agent-service-profiler/src/test/java/com/microsoft/applicationinsights/serviceprofilerapi/upload/ServiceProfilerUploaderTest.java

Lines changed: 60 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,25 +20,28 @@
2020
*/
2121
package com.microsoft.applicationinsights.serviceprofilerapi.upload;
2222

23-
import java.io.File;
24-
import java.io.FileOutputStream;
25-
import java.io.IOException;
26-
import java.net.URISyntaxException;
27-
import java.nio.charset.UnsupportedCharsetException;
28-
import java.util.Date;
29-
import java.util.UUID;
30-
import java.util.concurrent.atomic.AtomicBoolean;
31-
23+
import com.azure.storage.blob.options.BlobUploadFromFileOptions;
3224
import com.microsoft.applicationinsights.profileUploader.ServiceProfilerIndex;
3325
import com.microsoft.applicationinsights.serviceprofilerapi.client.ClientClosedException;
3426
import com.microsoft.applicationinsights.serviceprofilerapi.client.ServiceProfilerClientV2;
3527
import com.microsoft.applicationinsights.serviceprofilerapi.client.contract.ArtifactAcceptedResponse;
3628
import com.microsoft.applicationinsights.serviceprofilerapi.client.contract.BlobAccessPass;
29+
import com.microsoft.applicationinsights.serviceprofilerapi.client.contract.BlobMetadataConstants;
3730
import com.microsoft.applicationinsights.serviceprofilerapi.client.uploader.UploadContext;
3831
import com.microsoft.applicationinsights.serviceprofilerapi.client.uploader.UploadFinishArgs;
39-
import org.junit.*;
32+
import org.junit.Assert;
33+
import org.junit.Test;
4034
import reactor.core.publisher.Mono;
4135

36+
import java.io.File;
37+
import java.io.FileOutputStream;
38+
import java.io.IOException;
39+
import java.net.URISyntaxException;
40+
import java.nio.charset.UnsupportedCharsetException;
41+
import java.util.Date;
42+
import java.util.UUID;
43+
import java.util.concurrent.atomic.AtomicBoolean;
44+
4245
public class ServiceProfilerUploaderTest {
4346
@Test
4447
public void uploadFileGoodPathReturnsExpectedResponse() throws IOException {
@@ -52,7 +55,8 @@ public void uploadFileGoodPathReturnsExpectedResponse() throws IOException {
5255
serviceProfilerClient,
5356
"a-machine-name",
5457
"a-process-id",
55-
appId::toString
58+
appId::toString,
59+
"a-role-name"
5660
) {
5761
@Override
5862
protected Mono<UploadFinishArgs> performUpload(UploadContext uploadContext, BlobAccessPass uploadPass, File file) {
@@ -80,10 +84,47 @@ protected Mono<UploadFinishArgs> performUpload(UploadContext uploadContext, Blob
8084

8185
Assert.assertEquals(appId.toString(),
8286
result.getServiceProfilerIndex().getProperties().get(ServiceProfilerIndex.SERVICE_PROFILER_DATACUBE_PROPERTY_NAME));
83-
8487
});
8588
}
8689

90+
@Test
91+
public void roleNameIsCorrectlyAddedToMetaData() throws IOException {
92+
93+
ServiceProfilerClientV2 serviceProfilerClient = stubServiceProfilerClient();
94+
95+
File tmpFile = createFakeJfrFile();
96+
UUID appId = UUID.randomUUID();
97+
98+
BlobUploadFromFileOptions blobOptions = new ServiceProfilerUploader(
99+
serviceProfilerClient,
100+
"a-machine-name",
101+
"a-process-id",
102+
appId::toString,
103+
"a-role-name"
104+
).createBlockBlobOptions(
105+
tmpFile,
106+
new UploadContext("a-machine-name", UUID.randomUUID(), 1, tmpFile, UUID.randomUUID())
107+
);
108+
109+
// Role name is set correctly
110+
Assert.assertEquals("a-role-name", blobOptions.getMetadata().get(BlobMetadataConstants.ROLE_NAME_META_NAME));
111+
112+
113+
blobOptions = new ServiceProfilerUploader(
114+
serviceProfilerClient,
115+
"a-machine-name",
116+
"a-process-id",
117+
appId::toString,
118+
null
119+
).createBlockBlobOptions(
120+
tmpFile,
121+
new UploadContext("a-machine-name", UUID.randomUUID(), 1, tmpFile, UUID.randomUUID())
122+
);
123+
124+
// Null role name tag is not added
125+
Assert.assertNull(blobOptions.getMetadata().get(BlobMetadataConstants.ROLE_NAME_META_NAME));
126+
127+
}
87128

88129
@Test
89130
public void uploadWithoutAFileThrows() {
@@ -92,7 +133,7 @@ public void uploadWithoutAFileThrows() {
92133

93134
UUID appId = UUID.randomUUID();
94135

95-
ServiceProfilerUploader serviceProfilerUploader = new ServiceProfilerUploader(serviceProfilerClient, "a-machine-name", "a-process-id", appId::toString);
136+
ServiceProfilerUploader serviceProfilerUploader = new ServiceProfilerUploader(serviceProfilerClient, "a-machine-name", "a-process-id", appId::toString, "a-role-name");
96137

97138
AtomicBoolean threw = new AtomicBoolean(false);
98139
serviceProfilerUploader
@@ -121,15 +162,18 @@ private File createFakeJfrFile() throws IOException {
121162
public static ServiceProfilerClientV2 stubServiceProfilerClient() {
122163
return new ServiceProfilerClientV2() {
123164

124-
@Override public BlobAccessPass getUploadAccess(UUID profileId) {
165+
@Override
166+
public BlobAccessPass getUploadAccess(UUID profileId) {
125167
return new BlobAccessPass("https://localhost:99999/a-blob-uri", null, "a-sas-token");
126168
}
127169

128-
@Override public ArtifactAcceptedResponse reportUploadFinish(UUID profileId, String etag) throws URISyntaxException, UnsupportedCharsetException, ClientClosedException {
170+
@Override
171+
public ArtifactAcceptedResponse reportUploadFinish(UUID profileId, String etag) throws URISyntaxException, UnsupportedCharsetException, ClientClosedException {
129172
return null;
130173
}
131174

132-
@Override public String getSettings(Date oldTimeStamp) {
175+
@Override
176+
public String getSettings(Date oldTimeStamp) {
133177
return null;
134178
}
135179
};

agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/AiComponentInstaller.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ private static void start(Instrumentation instrumentation) {
170170
SystemInformation.INSTANCE.getProcessId(),
171171
formServiceProfilerConfig(config.preview.profiler),
172172
configuration.getRoleInstance(),
173+
configuration.getRoleName(),
173174
// TODO this will not work with Azure Spring Cloud updating connection string at runtime
174175
configuration.getInstrumentationKey(),
175176
telemetryClient,

core/src/main/java/com/microsoft/applicationinsights/internal/profiler/ProfilerServiceInitializer.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ public synchronized static void initialize(Supplier<String> appIdSupplier,
6464
String processId,
6565
ServiceProfilerServiceConfig config,
6666
String machineName,
67+
String roleName,
6768
String instrumentationKey,
6869
TelemetryClient client,
6970
String userAgent,
@@ -73,6 +74,7 @@ public synchronized static void initialize(Supplier<String> appIdSupplier,
7374
processId,
7475
config,
7576
machineName,
77+
roleName,
7678
instrumentationKey,
7779
client,
7880
LazyHttpClient.getInstance(),
@@ -85,6 +87,7 @@ public synchronized static void initialize(Supplier<String> appIdSupplier,
8587
String processId,
8688
ServiceProfilerServiceConfig config,
8789
String machineName,
90+
String roleName,
8891
String instrumentationKey,
8992
TelemetryClient client,
9093
CloseableHttpClient httpClient,
@@ -125,7 +128,8 @@ public synchronized static void initialize(Supplier<String> appIdSupplier,
125128
instrumentationKey,
126129
httpClient,
127130
serviceProfilerExecutorService,
128-
userAgent
131+
userAgent,
132+
roleName
129133
);
130134

131135
serviceProfilerExecutorService.submit(() -> {

core/src/test/java/com/microsoft/applicationinsights/internal/profiler/ProfilerServiceTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,8 @@ private ServiceProfilerUploader getServiceProfilerJFRUpload(ServiceProfilerClien
231231
clientV2,
232232
machineName,
233233
processId,
234-
appIdSupplier
234+
appIdSupplier,
235+
"a-role-name"
235236
) {
236237
@Override
237238
protected Mono<UploadFinishArgs> performUpload(UploadContext uploadContext, BlobAccessPass uploadPass, File file) {

0 commit comments

Comments
 (0)