diff --git a/agent/agent-gc-monitor/gc-monitor-api/gradle.lockfile b/agent/agent-gc-monitor/gc-monitor-api/gradle.lockfile index c841513d1f5..4c7fc2e11e9 100644 --- a/agent/agent-gc-monitor/gc-monitor-api/gradle.lockfile +++ b/agent/agent-gc-monitor/gc-monitor-api/gradle.lockfile @@ -3,7 +3,7 @@ # This file is expected to be part of source control. com.azure:azure-sdk-bom:1.2.26=runtimeClasspath com.fasterxml.jackson:jackson-bom:2.17.2=runtimeClasspath -com.google.errorprone:error_prone_annotations:2.29.2=runtimeClasspath +com.google.errorprone:error_prone_annotations:2.30.0=runtimeClasspath io.netty:netty-bom:4.1.112.Final=runtimeClasspath io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.6.0-alpha=runtimeClasspath io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.6.0=runtimeClasspath diff --git a/agent/agent-gc-monitor/gc-monitor-core/gradle.lockfile b/agent/agent-gc-monitor/gc-monitor-core/gradle.lockfile index c841513d1f5..4c7fc2e11e9 100644 --- a/agent/agent-gc-monitor/gc-monitor-core/gradle.lockfile +++ b/agent/agent-gc-monitor/gc-monitor-core/gradle.lockfile @@ -3,7 +3,7 @@ # This file is expected to be part of source control. com.azure:azure-sdk-bom:1.2.26=runtimeClasspath com.fasterxml.jackson:jackson-bom:2.17.2=runtimeClasspath -com.google.errorprone:error_prone_annotations:2.29.2=runtimeClasspath +com.google.errorprone:error_prone_annotations:2.30.0=runtimeClasspath io.netty:netty-bom:4.1.112.Final=runtimeClasspath io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.6.0-alpha=runtimeClasspath io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.6.0=runtimeClasspath diff --git a/agent/agent-tooling/gradle.lockfile b/agent/agent-tooling/gradle.lockfile index 375f6613ba1..a72da4fef0d 100644 --- a/agent/agent-tooling/gradle.lockfile +++ b/agent/agent-tooling/gradle.lockfile @@ -24,7 +24,7 @@ com.fasterxml.jackson:jackson-bom:2.17.2=runtimeClasspath com.fasterxml.woodstox:woodstox-core:6.7.0=runtimeClasspath com.github.oshi:oshi-core:6.6.2=runtimeClasspath com.github.stephenc.jcip:jcip-annotations:1.0-1=runtimeClasspath -com.google.errorprone:error_prone_annotations:2.29.2=runtimeClasspath +com.google.errorprone:error_prone_annotations:2.30.0=runtimeClasspath com.microsoft.azure:msal4j-persistence-extension:1.3.0=runtimeClasspath com.microsoft.azure:msal4j:1.16.1=runtimeClasspath com.nimbusds:content-type:2.3=runtimeClasspath diff --git a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/perfcounter/JmxDataFetcher.java b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/perfcounter/JmxDataFetcher.java index 900f8074c35..d5ac2746bf6 100644 --- a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/perfcounter/JmxDataFetcher.java +++ b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/perfcounter/JmxDataFetcher.java @@ -10,6 +10,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; import javax.management.AttributeNotFoundException; @@ -44,7 +45,7 @@ public static Map> fetch( MBeanServer server = ManagementFactory.getPlatformMBeanServer(); Set objects = server.queryNames(new ObjectName(objectName), null); if (objects.isEmpty()) { - String errorMsg = String.format("Cannot find object name '%s'", objectName); + String errorMsg = String.format(Locale.ROOT, "Cannot find object name '%s'", objectName); throw new IllegalArgumentException(errorMsg); } @@ -81,7 +82,7 @@ public static List fetch(String objectName, String attribute) throws Exc Set objects = server.queryNames(new ObjectName(objectName), null); logger.trace("Matching object names for pattern {}: {}", objectName, objects.toString()); if (objects.isEmpty()) { - String errorMsg = String.format("Cannot find object name '%s'", objectName); + String errorMsg = String.format(Locale.ROOT, "Cannot find object name '%s'", objectName); throw new IllegalArgumentException(errorMsg); } diff --git a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/perfcounter/OshiPerformanceCounter.java b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/perfcounter/OshiPerformanceCounter.java index 092eb2eecd6..09c2683ca7e 100644 --- a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/perfcounter/OshiPerformanceCounter.java +++ b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/perfcounter/OshiPerformanceCounter.java @@ -4,6 +4,7 @@ package com.microsoft.applicationinsights.agent.internal.perfcounter; import com.microsoft.applicationinsights.agent.internal.telemetry.TelemetryClient; +import java.util.Locale; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import org.slf4j.Logger; @@ -115,7 +116,8 @@ private static long getProcessBytes(OSProcess processInfo) { // use for calculating I/O bytes private static long getProcessBytesLinux(int processId) { Map io = - FileUtil.getKeyValueMapFromFile(String.format(ProcPath.PID_IO, processId), ":"); + FileUtil.getKeyValueMapFromFile( + String.format(Locale.ROOT, ProcPath.PID_IO, processId), ":"); long bytesRead = ParseUtil.parseLongOrDefault(io.getOrDefault("read_bytes", ""), 0L); long bytesWritten = ParseUtil.parseLongOrDefault(io.getOrDefault("write_bytes", ""), 0L); return bytesRead + bytesWritten; diff --git a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/perfcounter/PerformanceCounterContainer.java b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/perfcounter/PerformanceCounterContainer.java index 07343253021..892506527dd 100644 --- a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/perfcounter/PerformanceCounterContainer.java +++ b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/perfcounter/PerformanceCounterContainer.java @@ -6,6 +6,7 @@ import com.azure.monitor.opentelemetry.exporter.implementation.utils.ThreadPoolUtils; import com.microsoft.applicationinsights.agent.internal.telemetry.TelemetryClient; import java.util.List; +import java.util.Locale; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -76,9 +77,11 @@ public void setCollectionFrequencyInSec(long collectionFrequencyInSec) { if (collectionFrequencyInSec < MIN_COLLECTION_FREQUENCY_IN_SEC) { String errorMessage = String.format( + Locale.ROOT, "Collecting Interval: illegal value '%d'. The minimum value, '%d', " + "is used instead.", - collectionFrequencyInSec, MIN_COLLECTION_FREQUENCY_IN_SEC); + collectionFrequencyInSec, + MIN_COLLECTION_FREQUENCY_IN_SEC); logger.error(errorMessage); collectionFrequencyInSec = MIN_COLLECTION_FREQUENCY_IN_SEC; diff --git a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/profiler/util/TimestampContract.java b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/profiler/util/TimestampContract.java index 20379e8e718..0519c3b73c9 100644 --- a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/profiler/util/TimestampContract.java +++ b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/profiler/util/TimestampContract.java @@ -10,6 +10,7 @@ import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.Date; +import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -22,7 +23,7 @@ public final class TimestampContract { // Cant use ISO_INSTANT as it does not pad the nanos to 7 figures private static final DateTimeFormatter FORMATTER = - DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.nX"); + DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.nX", Locale.ROOT); private static final Pattern TIMESTAMP_PATTERN = Pattern.compile(".*\\.([0-9]+)Z$"); diff --git a/agent/agent-tooling/src/test/java/com/microsoft/applicationinsights/agent/internal/configuration/ConfigurationBuilderTest.java b/agent/agent-tooling/src/test/java/com/microsoft/applicationinsights/agent/internal/configuration/ConfigurationBuilderTest.java index 690a5baca8a..b2f397c3920 100644 --- a/agent/agent-tooling/src/test/java/com/microsoft/applicationinsights/agent/internal/configuration/ConfigurationBuilderTest.java +++ b/agent/agent-tooling/src/test/java/com/microsoft/applicationinsights/agent/internal/configuration/ConfigurationBuilderTest.java @@ -15,6 +15,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashMap; +import java.util.Locale; import java.util.Map; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -144,7 +145,7 @@ void testRpConfigurationOverlayWithEnvVarAndSysPropPopulated() throws Exception envVars.put("APPLICATIONINSIGHTS_SAMPLING_PERCENTAGE", String.valueOf(testSamplingPercentage)); RpConfiguration config = new RpConfiguration(); - config.connectionString = String.format("original-%s", testConnectionString); + config.connectionString = String.format(Locale.ROOT, "original-%s", testConnectionString); config.sampling.percentage = testSamplingPercentage + 1.0; ConfigurationBuilder.overlayFromEnv(config, this::envVars, this::systemProperties); diff --git a/classic-sdk/core/src/main/java/com/microsoft/applicationinsights/internal/util/LocalStringsUtils.java b/classic-sdk/core/src/main/java/com/microsoft/applicationinsights/internal/util/LocalStringsUtils.java index 88efdb2f4ee..bc69e71423a 100644 --- a/classic-sdk/core/src/main/java/com/microsoft/applicationinsights/internal/util/LocalStringsUtils.java +++ b/classic-sdk/core/src/main/java/com/microsoft/applicationinsights/internal/util/LocalStringsUtils.java @@ -6,12 +6,13 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.Locale; import java.util.concurrent.ThreadLocalRandom; public class LocalStringsUtils { private static final SimpleDateFormat simpleDateFormat = - new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZZ"); + new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZZ", Locale.ROOT); public static boolean isNullOrEmpty(String value) { return value == null || value.isEmpty(); diff --git a/classic-sdk/core/src/main/java/com/microsoft/applicationinsights/telemetry/Duration.java b/classic-sdk/core/src/main/java/com/microsoft/applicationinsights/telemetry/Duration.java index 5a5a1767534..76076797590 100644 --- a/classic-sdk/core/src/main/java/com/microsoft/applicationinsights/telemetry/Duration.java +++ b/classic-sdk/core/src/main/java/com/microsoft/applicationinsights/telemetry/Duration.java @@ -3,6 +3,7 @@ package com.microsoft.applicationinsights.telemetry; +import java.util.Locale; import java.util.Objects; /** @@ -106,11 +107,11 @@ public long getTotalMilliseconds() { public String toString() { StringBuilder sb = new StringBuilder(); if (days != 0) { - sb.append(String.format("%02d.", days)); + sb.append(String.format(Locale.ROOT, "%02d.", days)); } - sb.append(String.format("%02d:%02d:%02d", hours, minutes, seconds)); + sb.append(String.format(Locale.ROOT, "%02d:%02d:%02d", hours, minutes, seconds)); if (milliseconds > 0) { - sb.append(String.format(".%03d0000", milliseconds)); + sb.append(String.format(Locale.ROOT, ".%03d0000", milliseconds)); } return sb.toString(); } diff --git a/classic-sdk/web/src/main/java/com/microsoft/applicationinsights/web/internal/correlation/tracecontext/Tracestate.java b/classic-sdk/web/src/main/java/com/microsoft/applicationinsights/web/internal/correlation/tracecontext/Tracestate.java index 850c8af7355..607c0e975f7 100644 --- a/classic-sdk/web/src/main/java/com/microsoft/applicationinsights/web/internal/correlation/tracecontext/Tracestate.java +++ b/classic-sdk/web/src/main/java/com/microsoft/applicationinsights/web/internal/correlation/tracecontext/Tracestate.java @@ -4,6 +4,7 @@ package com.microsoft.applicationinsights.web.internal.correlation.tracecontext; import java.util.LinkedHashMap; +import java.util.Locale; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -19,7 +20,7 @@ public final class Tracestate { private static final String DELIMITER_FORMAT = "[ \\t]*,[ \\t]*"; private static final String MEMBER_FORMAT = - String.format("(%s)(=)(%s)", KEY_FORMAT, VALUE_FORMAT); + String.format(Locale.ROOT, "(%s)(=)(%s)", KEY_FORMAT, VALUE_FORMAT); private static final Pattern DELIMITER_FORMAT_RE = Pattern.compile(DELIMITER_FORMAT); private static final Pattern MEMBER_FORMAT_RE = Pattern.compile("^" + MEMBER_FORMAT + "$"); @@ -40,18 +41,21 @@ public Tracestate(String input) { for (String item : values) { Matcher m = MEMBER_FORMAT_RE.matcher(item); if (!m.find()) { - throw new IllegalArgumentException(String.format("invalid string %s in tracestate", item)); + throw new IllegalArgumentException( + String.format(Locale.ROOT, "invalid string %s in tracestate", item)); } String key = m.group(1); String value = m.group(3); if (internalList.get(key) != null) { - throw new IllegalArgumentException(String.format("duplicated keys %s in tracestate", key)); + throw new IllegalArgumentException( + String.format(Locale.ROOT, "duplicated keys %s in tracestate", key)); } internalList.put(key, value); } if (internalList.size() > MAX_KEY_VALUE_PAIRS) { throw new IllegalArgumentException( - String.format("cannot have more than %d key-value pairs", MAX_KEY_VALUE_PAIRS)); + String.format( + Locale.ROOT, "cannot have more than %d key-value pairs", MAX_KEY_VALUE_PAIRS)); } internalString = toInternalString(); } diff --git a/dependencyManagement/build.gradle.kts b/dependencyManagement/build.gradle.kts index acb6276c2e3..c28b409fadb 100644 --- a/dependencyManagement/build.gradle.kts +++ b/dependencyManagement/build.gradle.kts @@ -34,7 +34,7 @@ val DEPENDENCY_BOMS = listOf( val autoServiceVersion = "1.1.1" val autoValueVersion = "1.11.0" -val errorProneVersion = "2.29.2" +val errorProneVersion = "2.30.0" val jmhVersion = "1.37" val mockitoVersion = "4.11.0" val slf4jVersion = "2.0.16" diff --git a/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java b/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java index 0ab99e01fac..5556df72f97 100644 --- a/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java +++ b/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/DllFileUtils.java @@ -12,6 +12,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Locale; import javax.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -64,7 +65,8 @@ public static void extractToLocalFolder(File dllOnDisk, String libraryToLoad) th } try (InputStream in = classLoader.getResourceAsStream(libraryToLoad)) { if (in == null) { - throw new IllegalStateException(String.format("Failed to find '%s' in jar", libraryToLoad)); + throw new IllegalStateException( + String.format(Locale.ROOT, "Failed to find '%s' in jar", libraryToLoad)); } byte[] buffer = new byte[8192]; try (OutputStream out = new FileOutputStream(dllOnDisk, false)) { diff --git a/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/events/model/IpaEtwEventBase.java b/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/events/model/IpaEtwEventBase.java index 5948e918f38..cbd5516b681 100644 --- a/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/events/model/IpaEtwEventBase.java +++ b/etw/java/src/main/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/events/model/IpaEtwEventBase.java @@ -3,6 +3,8 @@ package com.microsoft.applicationinsights.agent.internal.diagnostics.etw.events.model; +import java.util.Locale; + public abstract class IpaEtwEventBase implements IpaEtwEvent { private String extensionVersion; private String appName; @@ -92,7 +94,7 @@ public String getFormattedMessage() { if (messageArgs == null || messageArgs.length == 0) { return fmt == null ? "" : fmt; } else { - return String.format(fmt, messageArgs); + return String.format(Locale.ROOT, fmt, messageArgs); } } diff --git a/etw/java/src/test/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProviderTests.java b/etw/java/src/test/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProviderTests.java index deafe124f1c..57ec60dd744 100644 --- a/etw/java/src/test/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProviderTests.java +++ b/etw/java/src/test/java/com/microsoft/applicationinsights/agent/internal/diagnostics/etw/EtwProviderTests.java @@ -15,6 +15,7 @@ import com.microsoft.applicationinsights.agent.internal.diagnostics.etw.events.model.IpaEtwEventBase; import com.microsoft.applicationinsights.agent.internal.diagnostics.etw.events.model.IpaEtwEventErrorBase; import java.io.File; +import java.util.Locale; import java.util.UUID; import javax.annotation.Nullable; import org.apache.commons.lang3.RandomUtils; @@ -216,8 +217,13 @@ int sum() { @Override public String toString() { return String.format( + Locale.ROOT, "{ verbose: %d, info: %d, warn: %d, error: %d, critical: %d }", - verbose, info, warn, error, critical); + verbose, + info, + warn, + error, + critical); } void plus(EventCounts operand) { @@ -260,7 +266,7 @@ private static void runLoopTest(int iterations) throws Exception { if (RandomUtils.nextInt(0, warnChance) == 0) { Throwable exception = null; if (RandomUtils.nextBoolean()) { - exception = new Exception(String.format("Exeption %d", i)); + exception = new Exception(String.format(Locale.ROOT, "Exeption %d", i)); } ep.writeEvent(createWarn("test.warn", "testEventsOnLoop", exception, "i=%d", i)); accumulator.warn++; @@ -268,7 +274,7 @@ private static void runLoopTest(int iterations) throws Exception { if (RandomUtils.nextInt(0, errorChance) == 0) { Throwable exception = null; if (RandomUtils.nextBoolean()) { - exception = new Exception(String.format("Exeption %d", i)); + exception = new Exception(String.format(Locale.ROOT, "Exeption %d", i)); } ep.writeEvent(createError("test.error", "testEventsOnLoop", exception, "i=%d", i)); accumulator.error++; @@ -276,7 +282,7 @@ private static void runLoopTest(int iterations) throws Exception { if (RandomUtils.nextInt(0, criticalChance) == 0) { Throwable exception = null; if (RandomUtils.nextBoolean()) { - exception = new Exception(String.format("Exeption %d", i)); + exception = new Exception(String.format(Locale.ROOT, "Exeption %d", i)); } ep.writeEvent(createCritical("test.critical", "testEventsOnLoop", exception, "i=%d", i)); accumulator.critical++; @@ -296,7 +302,9 @@ private static void runLoopTest(int iterations) throws Exception { + printTimer + "ms " + String.format( - "(avg=%.3fms)", ((double) printTimer / (double) accumulator.sum()))); + Locale.ROOT, + "(avg=%.3fms)", + ((double) printTimer / (double) accumulator.sum()))); printTimer = 0; accumulator.reset(); } @@ -312,6 +320,8 @@ private static void runLoopTest(int iterations) throws Exception { + totalElapsedTime + "ms " + String.format( - "(avg=%.3fms)", ((double) totalElapsedTime / (double) totalEvents.sum()))); + Locale.ROOT, + "(avg=%.3fms)", + ((double) totalElapsedTime / (double) totalEvents.sum()))); } } diff --git a/licenses/more-licenses.md b/licenses/more-licenses.md index 1ed1caba2d4..1ac0f6fe4db 100644 --- a/licenses/more-licenses.md +++ b/licenses/more-licenses.md @@ -1,7 +1,7 @@ # agent ## Dependency License Report -_2024-08-12 03:55:29 UTC_ +_2024-08-12 03:55:56 UTC_ ## Apache License, Version 2.0 **1** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-annotations` **Version:** `2.17.2` @@ -36,7 +36,7 @@ _2024-08-12 03:55:29 UTC_ > - **POM Project URL**: [http://stephenc.github.com/jcip-annotations](http://stephenc.github.com/jcip-annotations) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**6** **Group:** `com.google.errorprone` **Name:** `error_prone_annotations` **Version:** `2.29.2` +**6** **Group:** `com.google.errorprone` **Name:** `error_prone_annotations` **Version:** `2.30.0` > - **Manifest Project URL**: [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations) > - **Manifest License**: Apache License, Version 2.0 (Not Packaged) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)