Skip to content

Commit c87f394

Browse files
committed
pairing
1 parent 630238a commit c87f394

File tree

4 files changed

+52
-10
lines changed

4 files changed

+52
-10
lines changed

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

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
import com.azure.core.http.HttpClient;
99
import com.azure.core.http.HttpPipeline;
1010
import com.azure.core.http.HttpPipelineBuilder;
11+
import com.azure.core.http.HttpPipelineCallContext;
12+
import com.azure.core.http.HttpPipelineNextPolicy;
13+
import com.azure.core.http.HttpPipelineNextSyncPolicy;
14+
import com.azure.core.http.HttpPipelinePosition;
1115
import com.azure.core.http.HttpRequest;
1216
import com.azure.core.http.HttpResponse;
1317
import com.azure.core.http.ProxyOptions;
@@ -31,6 +35,7 @@
3135
import java.util.List;
3236
import java.util.concurrent.CountDownLatch;
3337
import java.util.concurrent.TimeUnit;
38+
import java.util.function.Supplier;
3439
import javax.annotation.Nullable;
3540
import reactor.core.publisher.Mono;
3641
import reactor.netty.resources.LoopResources;
@@ -110,18 +115,21 @@ private static HttpClient init() {
110115
}
111116

112117
public static HttpPipeline newHttpPipeLineWithDefaultRedirect(
113-
@Nullable Configuration.AadAuthentication aadConfiguration, String aadAudienceWithScope) {
118+
@Nullable Configuration.AadAuthentication aadConfiguration,
119+
Supplier<String> aadAudienceWithScope) {
114120
return newHttpPipeLine(
115121
aadConfiguration, aadAudienceWithScope, new RedirectPolicy(new DefaultRedirectStrategy()));
116122
}
117123

118124
public static HttpPipeline newHttpPipeLine(
119125
@Nullable Configuration.AadAuthentication aadConfiguration,
120-
String aadAudienceWithScope,
126+
Supplier<String> aadAudienceWithScope,
121127
HttpPipelinePolicy... additionalPolicies) {
122128
List<HttpPipelinePolicy> policies = new ArrayList<>();
123129
if (aadConfiguration != null && aadConfiguration.enabled) {
124-
policies.add(getAuthenticationPolicy(aadConfiguration, aadAudienceWithScope));
130+
policies.add(
131+
new LazyHttpPipelinePolicy(
132+
() -> getAuthenticationPolicy(aadConfiguration, aadAudienceWithScope.get())));
125133
}
126134
policies.addAll(asList(additionalPolicies));
127135
// Add Logging Policy. Can be enabled using AZURE_LOG_LEVEL.
@@ -190,4 +198,40 @@ private static HttpPipelinePolicy getAuthenticationPolicyWithSami(String aadAudi
190198
new ManagedIdentityCredentialBuilder().build();
191199
return new BearerTokenAuthenticationPolicy(managedIdentityCredential, aadAudienceWithScope);
192200
}
201+
202+
private static class LazyHttpPipelinePolicy implements HttpPipelinePolicy {
203+
204+
private final Supplier<HttpPipelinePolicy> supplier;
205+
private volatile HttpPipelinePolicy delegate;
206+
207+
LazyHttpPipelinePolicy(Supplier<HttpPipelinePolicy> supplier) {
208+
this.supplier = supplier;
209+
}
210+
211+
@Override
212+
public Mono<HttpResponse> process(
213+
HttpPipelineCallContext context, HttpPipelineNextPolicy next) {
214+
createDelegateFirstTime();
215+
return delegate.process(context, next);
216+
}
217+
218+
@Override
219+
public HttpResponse processSync(
220+
HttpPipelineCallContext context, HttpPipelineNextSyncPolicy next) {
221+
createDelegateFirstTime();
222+
return delegate.processSync(context, next);
223+
}
224+
225+
@Override
226+
public HttpPipelinePosition getPipelinePosition() {
227+
createDelegateFirstTime();
228+
return delegate.getPipelinePosition();
229+
}
230+
231+
private void createDelegateFirstTime() {
232+
if (delegate == null) {
233+
delegate = supplier.get();
234+
}
235+
}
236+
}
193237
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ public void customize(AutoConfigurationCustomizer autoConfiguration) {
201201
if (telemetryClient.getConnectionString() != null) {
202202
statsbeatModule.start(
203203
AzureMonitorHelper.createStatsbeatTelemetryItemExporter(
204-
LazyHttpClient.newHttpPipeLine(null, telemetryClient.getAadAudienceWithScope()),
204+
LazyHttpClient.newHttpPipeLine(null, telemetryClient::getAadAudienceWithScope),
205205
statsbeatModule,
206206
tempDir),
207207
telemetryClient::getStatsbeatConnectionString,
@@ -227,7 +227,7 @@ public void customize(AutoConfigurationCustomizer autoConfiguration) {
227227
quickPulse =
228228
QuickPulse.create(
229229
LazyHttpClient.newHttpPipeLineWithDefaultRedirect(
230-
configuration.authentication, telemetryClient.getAadAudienceWithScope()),
230+
configuration.authentication, telemetryClient::getAadAudienceWithScope),
231231
() -> {
232232
ConnectionString connectionString = telemetryClient.getConnectionString();
233233
return connectionString == null ? null : connectionString.getLiveEndpoint();

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ private synchronized void performInit() {
121121
httpPipeline =
122122
LazyHttpClient.newHttpPipeLine(
123123
telemetryClient.getAadAuthentication(),
124-
telemetryClient.getAadAudienceWithScope(),
124+
telemetryClient::getAadAudienceWithScope,
125125
new RedirectPolicy(
126126
new DefaultRedirectStrategy(
127127
3,

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ private BatchItemProcessor initBatchItemProcessor(
229229
HttpPipeline httpPipeline =
230230
LazyHttpClient.newHttpPipeLine(
231231
aadAuthentication,
232-
getAadAudienceWithScope(),
232+
this::getAadAudienceWithScope,
233233
new NetworkStatsbeatHttpPipelinePolicy(statsbeatModule.getNetworkStatsbeat()));
234234
// TODO (heya) refactor the following by using AzureMonitorHelper.createTelemetryItemExporter by
235235
// passing in getNonessentialStatsbeat
@@ -356,10 +356,8 @@ public ConnectionString getConnectionString() {
356356
return connectionString;
357357
}
358358

359+
@Nullable
359360
public String getAadAudienceWithScope() {
360-
if (connectionString == null) {
361-
return APPLICATIONINSIGHTS_AUTHENTICATION_SCOPE;
362-
}
363361
return connectionString.getAadAudienceWithScope();
364362
}
365363

0 commit comments

Comments
 (0)