It's great that you should be able to turn off the telemetry option via gradle extension
azureFunctions {
allowTelemetry = false
}
Though the option doesn't seem to work. When I specify this snippet in the my build.gradle file, it still sends requests to Microsoft:
This is the output for my squid cache:
1689197789.908 127 172.21.0.1 NONE_NONE/200 0 CONNECT dc.services.visualstudio.com:443 - HIER_DIRECT/40.78.253.199 -
1689197789.990 108 172.21.0.1 NONE_NONE/200 0 CONNECT dc.services.visualstudio.com:443 - HIER_DIRECT/40.78.253.199 -
1689197789.991 82 172.21.0.1 TCP_MISS/200 619 POST https://dc.services.visualstudio.com/v2/track - HIER_DIRECT/40.78.253.199 application/json
1689197790.077 85 172.21.0.1 TCP_MISS/200 619 POST https://dc.services.visualstudio.com/v2/track - HIER_DIRECT/40.78.253.199 application/json
Inspecting the AzureFunctionsPlugin.java, I find through code inspection that the option cannot possibly work (I've also stepped through the debugger to verify this).
public void apply(Project project) {
JoinPoint var8 = Factory.makeJP(ajc$tjp_0, this, this, project);
try {
AzureOperationAspect.aspectOf().beforeEnter(var8);
AzureTaskManager.register(new GradleAzureTaskManager());
AzureMessager.setDefaultMessager(new GradleAzureMessager(project.getLogger()));
AzureFunctionsExtension extension = (AzureFunctionsExtension)project.getExtensions().create("azurefunctions", AzureFunctionsExtension.class, new Object[]{project});
TelemetryAgent.getInstance().initTelemetry("azure-functions-gradle-plugin", (String)StringUtils.firstNonBlank(new String[]{AzureFunctionsPlugin.class.getPackage().getImplementationVersion(), "develop"}), BooleanUtils.isNotFalse(extension.getAllowTelemetry()));
TelemetryAgent.getInstance().showPrivacyStatement();
try {
CacheManager.evictCache("<ALL>", "<ALL>");
} catch (ExecutionException var11) {
}
Azure.az().config().setLogLevel(HttpLogDetailLevel.NONE.name());
Azure.az().config().setUserAgent(TelemetryAgent.getInstance().getUserAgent());
TaskContainer tasks = project.getTasks();
TaskProvider packageTask = tasks.register("azureFunctionsPackage", PackageTask.class, (task) -> {
task.setGroup("AzureFunctions");
task.setDescription("Package current project to staging folder.");
task.setFunctionsExtension(extension);
});
...
While the extension is indeed registered, it is not populated with values until project is configured, e.g. project.afterEvaluate(), and the initialization of the TelemetryAgent occurs prior to any evaluation of the azureFunctions { } closure. At this point, the value of allowTelemetry in the extension object always evaluates to null, which the BooleanUtils.isNotFalse() evaluates to true (!isFalse(null) is true).
Anyhow, I'd like to be able to disable the telemetry option from my builds. Also, another aspect of this could be to embed (or allow a user to run ./gradlew -Pcom.microsoft.azure.allowTelemetry=false
on the command line alternatively set it in gradle.properties).
Also, it maybe good to change the AzureFunctionExtension to use Property<> API with Gradle to allow for Lazy initialization. See here: https://docs.gradle.org/current/userguide/lazy_configuration.html
It would allow tasks you register to connect with the properties of the extension, but let the evaluation of these happen if the task is actually realized.