4343@ InternalExtensionOnly
4444public interface DatastoreMetricsRecorder extends MetricsRecorder {
4545
46+ Logger logger = Logger .getLogger (DatastoreMetricsRecorder .class .getName ());
47+
4648 /**
4749 * Releases any resources held by this recorder.
4850 *
@@ -85,16 +87,21 @@ default void close() {}
8587 */
8688 static DatastoreMetricsRecorder getInstance (
8789 @ Nonnull DatastoreOptions options , OpenTelemetry builtInOtel ) {
88- Logger logger = Logger .getLogger (DatastoreMetricsRecorder .class .getName ());
89- DatastoreOpenTelemetryOptions otelOptions = options .getOpenTelemetryOptions ();
9090 List <DatastoreMetricsRecorder > recorders = new ArrayList <>();
9191
92- // Default provider: export built-in metrics to Cloud Monitoring
92+ // No need to send metrics when using an emulator
9393 String emulatorHost = System .getenv (DatastoreOptions .LOCAL_HOST_ENV_VAR );
9494 boolean emulatorEnabled = emulatorHost != null && !emulatorHost .isEmpty ();
9595
96+ if (emulatorEnabled ) {
97+ logger .log (Level .FINE , "Emulator detected in Datastore. Metrics are not being recorded." );
98+ return new CompositeDatastoreMetricsRecorder (recorders );
99+ }
100+
101+ DatastoreOpenTelemetryOptions otelOptions = options .getOpenTelemetryOptions ();
102+
96103 // When using a local emulator, there is no need to configure a built-in Otel instance
97- if (otelOptions .isExportBuiltinMetricsToGoogleCloudMonitoring () && ! emulatorEnabled ) {
104+ if (otelOptions .isExportBuiltinMetricsToGoogleCloudMonitoring ()) {
98105 try {
99106 if (builtInOtel != null ) {
100107 recorders .add (
@@ -104,7 +111,7 @@ static DatastoreMetricsRecorder getInstance(
104111 } catch (Exception e ) {
105112 logger .log (
106113 Level .WARNING ,
107- "Failed to create built-in metrics provider for Cloud Monitoring export ." ,
114+ "Failed to create built-in metrics provider for Cloud Monitoring exporting ." ,
108115 e );
109116 }
110117 }
@@ -113,7 +120,7 @@ static DatastoreMetricsRecorder getInstance(
113120 // configured backend. We will first check their supplied Otel object, then check
114121 // the global Otel config.
115122 // Note: Metrics will not be sent if an emulator is enabled.
116- if (otelOptions .isMetricsEnabled () && ! emulatorEnabled ) {
123+ if (otelOptions .isMetricsEnabled ()) {
117124 OpenTelemetry customOtel = otelOptions .getOpenTelemetry ();
118125 if (customOtel == null ) {
119126 customOtel = GlobalOpenTelemetry .get ();
0 commit comments