diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/ce/ActionSpanCE.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/ce/ActionSpanCE.java index b7f907f04c3e..4fe1e23b7877 100644 --- a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/ce/ActionSpanCE.java +++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/ce/ActionSpanCE.java @@ -22,7 +22,8 @@ public class ActionSpanCE { public static final String CREATE_AND_EXECUTE_QUERY_FROM_CONNECTION = APPSMITH_SPAN_PREFIX + "createAndExecuteQueryFromConnection"; - + public static final String EXECUTE_QUERY = APPSMITH_SPAN_PREFIX + "executeQuery"; + public static final String DESERIALIZE_RESULT = APPSMITH_SPAN_PREFIX + "deserializeResult"; public static final String ACTUAL_API_CALL = APPSMITH_SPAN_PREFIX + "actualApiCall"; public static final String TRIGGER_API_CALL = APPSMITH_SPAN_PREFIX + "triggerApiCall"; diff --git a/app/server/appsmith-plugins/mssqlPlugin/src/main/java/com/external/plugins/MssqlPlugin.java b/app/server/appsmith-plugins/mssqlPlugin/src/main/java/com/external/plugins/MssqlPlugin.java index 361ba70e1eef..1dfc2cf5f13e 100644 --- a/app/server/appsmith-plugins/mssqlPlugin/src/main/java/com/external/plugins/MssqlPlugin.java +++ b/app/server/appsmith-plugins/mssqlPlugin/src/main/java/com/external/plugins/MssqlPlugin.java @@ -10,6 +10,7 @@ import com.appsmith.external.exceptions.pluginExceptions.StaleConnectionException; import com.appsmith.external.helpers.DataTypeServiceUtils; import com.appsmith.external.helpers.MustacheHelper; +import com.appsmith.external.helpers.ObservationHelper; import com.appsmith.external.helpers.Stopwatch; import com.appsmith.external.models.ActionConfiguration; import com.appsmith.external.models.ActionExecutionRequest; @@ -35,6 +36,7 @@ import com.zaxxer.hikari.HikariDataSource; import com.zaxxer.hikari.pool.HikariPool; import io.micrometer.observation.ObservationRegistry; +import io.micrometer.tracing.Span; import lombok.NonNull; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; @@ -73,6 +75,8 @@ import static com.appsmith.external.constants.ActionConstants.ACTION_CONFIGURATION_BODY; import static com.appsmith.external.constants.PluginConstants.PluginName.MSSQL_PLUGIN_NAME; +import static com.appsmith.external.constants.spans.ce.ActionSpanCE.DESERIALIZE_RESULT; +import static com.appsmith.external.constants.spans.ce.ActionSpanCE.EXECUTE_QUERY; import static com.appsmith.external.helpers.PluginUtils.getIdenticalColumns; import static com.appsmith.external.helpers.PluginUtils.getPSParamLabel; import static com.appsmith.external.helpers.SmartSubstitutionHelper.replaceQuestionMarkWithDollarIndex; @@ -121,10 +125,15 @@ public static class MssqlPluginExecutor implements PluginExecutor executeCommon( try { if (FALSE.equals(preparedStatement)) { statement = sqlConnectionFromPool.createStatement(); + + Span exexuteQuerySpan = observationHelper.createSpan(EXECUTE_QUERY); isResultSet = statement.execute(query); + exexuteQuerySpan.end(); resultSet = statement.getResultSet(); } else { preparedQuery = sqlConnectionFromPool.prepareStatement(query); @@ -290,7 +302,7 @@ public Mono executeCommon( isResultSet = preparedQuery.execute(); resultSet = preparedQuery.getResultSet(); } - + Span deserializeResultSpan = observationHelper.createSpan(DESERIALIZE_RESULT); MssqlExecuteUtils.populateRowsAndColumns( rowsList, columnsList, @@ -299,7 +311,7 @@ public Mono executeCommon( preparedStatement, statement, preparedQuery); - + deserializeResultSpan.end(); } catch (SQLException e) { return Mono.error(new AppsmithPluginException( MssqlPluginError.QUERY_EXECUTION_FAILED, diff --git a/app/server/appsmith-plugins/mssqlPlugin/src/test/java/com/external/plugins/MssqlTestDBContainerManager.java b/app/server/appsmith-plugins/mssqlPlugin/src/test/java/com/external/plugins/MssqlTestDBContainerManager.java index 52035f9c0946..d7f4400649e0 100644 --- a/app/server/appsmith-plugins/mssqlPlugin/src/test/java/com/external/plugins/MssqlTestDBContainerManager.java +++ b/app/server/appsmith-plugins/mssqlPlugin/src/test/java/com/external/plugins/MssqlTestDBContainerManager.java @@ -1,6 +1,7 @@ package com.external.plugins; import com.appsmith.external.configurations.connectionpool.ConnectionPoolConfig; +import com.appsmith.external.helpers.ObservationHelper; import com.appsmith.external.models.DBAuth; import com.appsmith.external.models.DatasourceConfiguration; import com.appsmith.external.models.Endpoint; @@ -28,8 +29,8 @@ public Mono getMaxConnectionPoolSize() { } } - static MssqlPlugin.MssqlPluginExecutor mssqlPluginExecutor = - new MssqlPlugin.MssqlPluginExecutor(new MockConnectionPoolConfig(), ObservationRegistry.NOOP); + static MssqlPlugin.MssqlPluginExecutor mssqlPluginExecutor = new MssqlPlugin.MssqlPluginExecutor( + new MockConnectionPoolConfig(), ObservationRegistry.NOOP, ObservationHelper.NOOP); public static MssqlDatasourceUtils mssqlDatasourceUtils = new MssqlDatasourceUtils(); diff --git a/app/server/appsmith-plugins/postgresPlugin/src/main/java/com/external/plugins/PostgresPlugin.java b/app/server/appsmith-plugins/postgresPlugin/src/main/java/com/external/plugins/PostgresPlugin.java index 107957fbe188..a6f891872eba 100644 --- a/app/server/appsmith-plugins/postgresPlugin/src/main/java/com/external/plugins/PostgresPlugin.java +++ b/app/server/appsmith-plugins/postgresPlugin/src/main/java/com/external/plugins/PostgresPlugin.java @@ -7,10 +7,7 @@ import com.appsmith.external.exceptions.pluginExceptions.AppsmithPluginError; import com.appsmith.external.exceptions.pluginExceptions.AppsmithPluginException; import com.appsmith.external.exceptions.pluginExceptions.StaleConnectionException; -import com.appsmith.external.helpers.DataTypeServiceUtils; -import com.appsmith.external.helpers.MustacheHelper; -import com.appsmith.external.helpers.SSHUtils; -import com.appsmith.external.helpers.Stopwatch; +import com.appsmith.external.helpers.*; import com.appsmith.external.models.ActionConfiguration; import com.appsmith.external.models.ActionExecutionRequest; import com.appsmith.external.models.ActionExecutionResult; @@ -42,6 +39,7 @@ import com.zaxxer.hikari.pool.HikariPool.PoolInitializationException; import com.zaxxer.hikari.pool.HikariProxyConnection; import io.micrometer.observation.ObservationRegistry; +import io.micrometer.tracing.Span; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.ObjectUtils; @@ -93,7 +91,7 @@ import static com.appsmith.external.constants.ActionConstants.ACTION_CONFIGURATION_BODY; import static com.appsmith.external.constants.PluginConstants.HostName.LOCALHOST; import static com.appsmith.external.constants.PluginConstants.PluginName.POSTGRES_PLUGIN_NAME; -import static com.appsmith.external.constants.spans.ce.ActionSpanCE.PLUGIN_EXECUTE_COMMON; +import static com.appsmith.external.constants.spans.ce.ActionSpanCE.*; import static com.appsmith.external.exceptions.pluginExceptions.BasePluginErrorMessages.DS_INVALID_SSH_HOSTNAME_ERROR_MSG; import static com.appsmith.external.exceptions.pluginExceptions.BasePluginErrorMessages.DS_MISSING_SSH_HOSTNAME_ERROR_MSG; import static com.appsmith.external.exceptions.pluginExceptions.BasePluginErrorMessages.DS_MISSING_SSH_KEY_ERROR_MSG; @@ -161,6 +159,7 @@ public PostgresPlugin(PluginWrapper wrapper) { @Extension public static class PostgresPluginExecutor implements SmartSubstitutionInterface, PluginExecutor { + private final Scheduler scheduler = Schedulers.boundedElastic(); private static final String TABLES_QUERY = @@ -209,15 +208,18 @@ public static class PostgresPluginExecutor implements SmartSubstitutionInterface private final SharedConfig sharedConfig; private final ConnectionPoolConfig connectionPoolConfig; private final ObservationRegistry observationRegistry; + private final ObservationHelper observationHelper; public PostgresPluginExecutor( SharedConfig sharedConfig, ConnectionPoolConfig connectionPoolConfig, - ObservationRegistry observationRegistry) { + ObservationRegistry observationRegistry, + ObservationHelper observationHelper) { this.sharedConfig = sharedConfig; this.connectionPoolConfig = connectionPoolConfig; MAX_SIZE_SUPPORTED = sharedConfig.getMaxResponseSize(); this.observationRegistry = observationRegistry; + this.observationHelper = observationHelper; } /** @@ -435,7 +437,11 @@ private Mono executeCommon( parameters.get(i).getValue()))); requestData.put("ps-parameters", parameters); + Span executeQuerySpan = observationHelper.createSpan(EXECUTE_QUERY); + isResultSet = preparedQuery.execute(); + executeQuerySpan.end(); + resultSet = preparedQuery.getResultSet(); } @@ -454,6 +460,8 @@ private Mono executeCommon( columnsList.addAll(getColumnsListForJdbcPlugin(metaData)); int iterator = 0; + Span deserializeResultSpan = observationHelper.createSpan(DESERIALIZE_RESULT); + while (resultSet.next()) { // Only check the data size at low frequency to ensure the performance is not @@ -539,6 +547,7 @@ private Mono executeCommon( iterator++; } + deserializeResultSpan.end(); } } catch (SQLException e) { diff --git a/app/server/appsmith-plugins/postgresPlugin/src/test/java/com/external/plugins/PostgresDatasourceValidationTest.java b/app/server/appsmith-plugins/postgresPlugin/src/test/java/com/external/plugins/PostgresDatasourceValidationTest.java index 24b4354066e4..4a73d54a6e17 100644 --- a/app/server/appsmith-plugins/postgresPlugin/src/test/java/com/external/plugins/PostgresDatasourceValidationTest.java +++ b/app/server/appsmith-plugins/postgresPlugin/src/test/java/com/external/plugins/PostgresDatasourceValidationTest.java @@ -1,6 +1,7 @@ package com.external.plugins; import com.appsmith.external.configurations.connectionpool.ConnectionPoolConfig; +import com.appsmith.external.helpers.ObservationHelper; import com.appsmith.external.models.Connection; import com.appsmith.external.models.DBAuth; import com.appsmith.external.models.DatasourceConfiguration; @@ -31,7 +32,7 @@ public class PostgresDatasourceValidationTest { static SharedConfig mockSharedConfig = mock(SharedConfig.class); static ConnectionPoolConfig mockConnectionPoolConfig = mock(ConnectionPoolConfig.class); static PostgresPlugin.PostgresPluginExecutor pluginExecutor = new PostgresPlugin.PostgresPluginExecutor( - mockSharedConfig, mockConnectionPoolConfig, ObservationRegistry.NOOP); + mockSharedConfig, mockConnectionPoolConfig, ObservationRegistry.NOOP, ObservationHelper.NOOP); private DatasourceConfiguration getDatasourceConfigurationWithStandardConnectionMethod() { DatasourceConfiguration datasourceConfiguration = new DatasourceConfiguration(); diff --git a/app/server/appsmith-plugins/postgresPlugin/src/test/java/com/external/plugins/PostgresPluginTest.java b/app/server/appsmith-plugins/postgresPlugin/src/test/java/com/external/plugins/PostgresPluginTest.java index 984703308e42..55de28b264e6 100644 --- a/app/server/appsmith-plugins/postgresPlugin/src/test/java/com/external/plugins/PostgresPluginTest.java +++ b/app/server/appsmith-plugins/postgresPlugin/src/test/java/com/external/plugins/PostgresPluginTest.java @@ -5,6 +5,7 @@ import com.appsmith.external.dtos.ExecuteActionDTO; import com.appsmith.external.exceptions.pluginExceptions.AppsmithPluginException; import com.appsmith.external.exceptions.pluginExceptions.StaleConnectionException; +import com.appsmith.external.helpers.ObservationHelper; import com.appsmith.external.models.ActionConfiguration; import com.appsmith.external.models.ActionExecutionRequest; import com.appsmith.external.models.ActionExecutionResult; @@ -90,7 +91,7 @@ public Mono getMaxConnectionPoolSize() { } PostgresPlugin.PostgresPluginExecutor pluginExecutor = new PostgresPlugin.PostgresPluginExecutor( - new MockSharedConfig(), new MockConnectionPoolConfig(), ObservationRegistry.NOOP); + new MockSharedConfig(), new MockConnectionPoolConfig(), ObservationRegistry.NOOP, ObservationHelper.NOOP); @SuppressWarnings("rawtypes") // The type parameter for the container type is just itself and is pseudo-optional. @Container