diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/ApplicationSpan.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/ApplicationSpan.java new file mode 100644 index 0000000000..4335309935 --- /dev/null +++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/ApplicationSpan.java @@ -0,0 +1,5 @@ +package com.appsmith.external.constants.spans; + +import com.appsmith.external.constants.spans.ce.ApplicationSpanCE; + +public class ApplicationSpan extends ApplicationSpanCE {} diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/PageSpan.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/PageSpan.java new file mode 100644 index 0000000000..5fb8324be9 --- /dev/null +++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/PageSpan.java @@ -0,0 +1,5 @@ +package com.appsmith.external.constants.spans; + +import com.appsmith.external.constants.spans.ce.PageSpanCE; + +public class PageSpan extends PageSpanCE {} 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 23f3f98562..42c2e3753f 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 @@ -1,6 +1,8 @@ package com.appsmith.external.constants.spans.ce; import static com.appsmith.external.constants.spans.BaseSpan.APPSMITH_SPAN_PREFIX; +import static com.appsmith.external.constants.spans.ConsolidatedApiSpanNames.CONSOLIDATED_API_PREFIX; +import static com.appsmith.external.constants.spans.ConsolidatedApiSpanNames.VIEW; /** * Please make sure that all span names start with `appsmith.` because span with any other naming format would get @@ -8,6 +10,8 @@ import static com.appsmith.external.constants.spans.BaseSpan.APPSMITH_SPAN_PREFI */ public class ActionSpanCE { // Action execution spans + public static final String ACTIONS = "actions."; + public static final String ACTIONS_VIEW_MODE_PREFIX = CONSOLIDATED_API_PREFIX + VIEW + ACTIONS; public static final String ACTION_EXECUTION_REQUEST_PARSING = APPSMITH_SPAN_PREFIX + "request.parsing"; public static final String ACTION_EXECUTION_CACHED_DATASOURCE = APPSMITH_SPAN_PREFIX + "get.datasource.cached"; public static final String ACTION_EXECUTION_DATASOURCE_CONTEXT = APPSMITH_SPAN_PREFIX + "get.datasource.context"; @@ -19,4 +23,13 @@ public class ActionSpanCE { public static final String GET_UNPUBLISHED_ACTION = APPSMITH_SPAN_PREFIX + "get.action.unpublished"; public static final String GET_VIEW_MODE_ACTION = APPSMITH_SPAN_PREFIX + "get.action.viewmode"; public static final String GET_ACTION_REPOSITORY_CALL = APPSMITH_SPAN_PREFIX + "get.action.repository.call"; + public static final String VIEW_MODE_FILTER_ACTION = ACTIONS_VIEW_MODE_PREFIX + "filter"; + public static final String VIEW_MODE_SANITISE_ACTION = ACTIONS_VIEW_MODE_PREFIX + "sanitise"; + public static final String VIEW_MODE_INITIAL_ACTION = ACTIONS_VIEW_MODE_PREFIX + "initial"; + public static final String VIEW_MODE_FINAL_ACTION = ACTIONS_VIEW_MODE_PREFIX + "final"; + public static final String VIEW_MODE_SET_PLUGIN_ID_AND_TYPE_JS = ACTIONS_VIEW_MODE_PREFIX + "set_js"; + public static final String VIEW_MODE_SET_PLUGIN_ID_AND_TYPE_ACTION = ACTIONS_VIEW_MODE_PREFIX + "set_action"; + public static final String VIEW_MODE_FETCH_PLUGIN_FROM_DB = ACTIONS_VIEW_MODE_PREFIX + "plugindb"; + public static final String VIEW_MODE_FETCH_ACTIONS_FROM_DB = ACTIONS_VIEW_MODE_PREFIX + "fetchactions"; + public static final String VIEW_MODE_FETCH_ACTIONS_FROM_DB_QUERY = ACTIONS_VIEW_MODE_PREFIX + "actionsdb"; } diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/ce/ApplicationSpanCE.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/ce/ApplicationSpanCE.java new file mode 100644 index 0000000000..6e27900e59 --- /dev/null +++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/ce/ApplicationSpanCE.java @@ -0,0 +1,7 @@ +package com.appsmith.external.constants.spans.ce; + +import static com.appsmith.external.constants.spans.ConsolidatedApiSpanNames.CONSOLIDATED_API_PREFIX; + +public class ApplicationSpanCE { + public static final String APPLICATION_FETCH_FROM_DB = CONSOLIDATED_API_PREFIX + "app_db"; +} diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/ce/PageSpanCE.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/ce/PageSpanCE.java new file mode 100644 index 0000000000..30e388b157 --- /dev/null +++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/spans/ce/PageSpanCE.java @@ -0,0 +1,10 @@ +package com.appsmith.external.constants.spans.ce; + +import static com.appsmith.external.constants.spans.ConsolidatedApiSpanNames.CONSOLIDATED_API_PREFIX; + +public class PageSpanCE { + public static final String GET_PAGE = CONSOLIDATED_API_PREFIX + "getpage"; + public static final String GET_PAGE_WITHOUT_BRANCH = CONSOLIDATED_API_PREFIX + "without_branch"; + public static final String GET_PAGE_WITH_BRANCH = CONSOLIDATED_API_PREFIX + "with_branch"; + public static final String FETCH_PAGE_FROM_DB = CONSOLIDATED_API_PREFIX + "pagedb"; +} diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/applications/base/ApplicationServiceCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/applications/base/ApplicationServiceCEImpl.java index 37ddd81371..b04292a754 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/applications/base/ApplicationServiceCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/applications/base/ApplicationServiceCEImpl.java @@ -42,6 +42,7 @@ import com.appsmith.server.solutions.ApplicationPermission; import com.appsmith.server.solutions.DatasourcePermission; import com.appsmith.server.solutions.PolicySolution; import com.appsmith.server.solutions.WorkspacePermission; +import io.micrometer.observation.ObservationRegistry; import jakarta.validation.Validator; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; @@ -50,6 +51,7 @@ import org.springframework.dao.DuplicateKeyException; import org.springframework.http.codec.multipart.Part; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import reactor.core.observability.micrometer.Micrometer; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -63,6 +65,7 @@ import java.util.Optional; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import static com.appsmith.external.constants.spans.ce.ApplicationSpanCE.APPLICATION_FETCH_FROM_DB; import static com.appsmith.server.acl.AclPermission.MANAGE_APPLICATIONS; import static com.appsmith.server.acl.AclPermission.READ_APPLICATIONS; import static com.appsmith.server.constants.Constraint.MAX_LOGO_SIZE_KB; @@ -84,6 +87,7 @@ public class ApplicationServiceCEImpl extends BaseService { if (Boolean.TRUE.equals(viewMode)) { @@ -745,7 +754,11 @@ public class NewActionServiceCEImpl extends BaseService !PluginType.JS.equals(newAction.getPluginType())) - .map(action -> generateActionViewDTO(action, action.getPublishedAction(), true)); + .map(action -> generateActionViewDTO(action, action.getPublishedAction(), true)) + .name(VIEW_MODE_FINAL_ACTION) + .tap(Micrometer.observation(observationRegistry)); } @Override @@ -1159,31 +1176,43 @@ public class NewActionServiceCEImpl extends BaseService setPluginTypeFromId(NewAction action, String pluginId) { - return pluginService.findById(pluginId).flatMap(plugin -> { - action.setPluginType(plugin.getType()); - return Mono.just(action); - }); + return pluginService + .findById(pluginId) + .name(VIEW_MODE_FETCH_PLUGIN_FROM_DB) + .tap(Micrometer.observation(observationRegistry)) + .flatMap(plugin -> { + action.setPluginType(plugin.getType()); + return Mono.just(action); + }); } private Mono setPluginIdAndTypeForJSAction(NewAction action) { action.setPluginType(JS_PLUGIN_TYPE); - return pluginService.findByPackageName(JS_PLUGIN_PACKAGE_NAME).flatMap(plugin -> { - action.setPluginId(plugin.getId()); - return Mono.just(action); - }); + return pluginService + .findByPackageName(JS_PLUGIN_PACKAGE_NAME) + .name(VIEW_MODE_FETCH_PLUGIN_FROM_DB) + .tap(Micrometer.observation(observationRegistry)) + .flatMap(plugin -> { + action.setPluginId(plugin.getId()); + return Mono.just(action); + }); } // We can afford to make this call all the time since we already have all the info we need in context diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/newpages/base/NewPageServiceCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/newpages/base/NewPageServiceCEImpl.java index bb7707bf36..0d1740b912 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/newpages/base/NewPageServiceCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/newpages/base/NewPageServiceCEImpl.java @@ -21,6 +21,7 @@ import com.appsmith.server.services.BaseService; import com.appsmith.server.services.UserDataService; import com.appsmith.server.solutions.ApplicationPermission; import com.appsmith.server.solutions.PagePermission; +import io.micrometer.observation.ObservationRegistry; import jakarta.validation.Validator; import lombok.extern.slf4j.Slf4j; import net.minidev.json.JSONObject; @@ -31,6 +32,7 @@ import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import reactor.core.observability.micrometer.Micrometer; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -44,6 +46,10 @@ import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; +import static com.appsmith.external.constants.spans.ce.PageSpanCE.FETCH_PAGE_FROM_DB; +import static com.appsmith.external.constants.spans.ce.PageSpanCE.GET_PAGE; +import static com.appsmith.external.constants.spans.ce.PageSpanCE.GET_PAGE_WITHOUT_BRANCH; +import static com.appsmith.external.constants.spans.ce.PageSpanCE.GET_PAGE_WITH_BRANCH; import static com.appsmith.external.helpers.AppsmithBeanUtils.copyNewFieldValuesIntoOldObject; import static com.appsmith.server.exceptions.AppsmithError.INVALID_PARAMETER; @@ -54,6 +60,7 @@ public class NewPageServiceCEImpl extends BaseService findById(String pageId, AclPermission aclPermission) { - return repository.findById(pageId, aclPermission); + return repository + .findById(pageId, aclPermission) + .name(FETCH_PAGE_FROM_DB) + .tap(Micrometer.observation(observationRegistry)); } @Override @@ -512,11 +524,15 @@ public class NewPageServiceCEImpl extends BaseService findByApplicationId(String applicationId, AclPermission aclPermission) { return queryBuilder() .criteria(getCriterionForFindByApplicationId(applicationId)) .permission(aclPermission) - .all(); + .all() + .name(VIEW_MODE_FETCH_ACTIONS_FROM_DB_QUERY) + .tap(Micrometer.observation(observationRegistry)); } @Override diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CustomNewPageRepositoryCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CustomNewPageRepositoryCEImpl.java index e433f2683a..92148528e0 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CustomNewPageRepositoryCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CustomNewPageRepositoryCEImpl.java @@ -10,6 +10,7 @@ import com.appsmith.server.helpers.ce.bridge.BridgeQuery; import com.appsmith.server.helpers.ce.bridge.BridgeUpdate; import com.appsmith.server.projections.IdOnly; import com.appsmith.server.repositories.BaseAppsmithRepositoryImpl; +import io.micrometer.observation.ObservationRegistry; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.mongodb.core.MongoTemplate; @@ -17,6 +18,7 @@ import org.springframework.data.mongodb.core.aggregation.Aggregation; import org.springframework.data.mongodb.core.aggregation.AggregationOperation; import org.springframework.data.mongodb.core.aggregation.Fields; import org.springframework.data.mongodb.core.query.Criteria; +import reactor.core.observability.micrometer.Micrometer; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; @@ -26,6 +28,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import static com.appsmith.external.constants.spans.ce.PageSpanCE.FETCH_PAGE_FROM_DB; import static com.appsmith.external.helpers.StringUtils.dotted; import static org.springframework.data.mongodb.core.query.Criteria.where; @@ -35,6 +38,7 @@ public class CustomNewPageRepositoryCEImpl extends BaseAppsmithRepositoryImpl findByApplicationId(String applicationId, AclPermission aclPermission) { @@ -160,7 +164,12 @@ public class CustomNewPageRepositoryCEImpl extends BaseAppsmithRepositoryImpl findBranchedPageId(String branchName, String defaultPageId, AclPermission permission) { diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/ConsolidatedAPIServiceCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/ConsolidatedAPIServiceCEImpl.java index abc50e012b..a77916be68 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/ConsolidatedAPIServiceCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/ConsolidatedAPIServiceCEImpl.java @@ -277,6 +277,8 @@ public class ConsolidatedAPIServiceCEImpl implements ConsolidatedAPIServiceCE { if (isViewMode) { /* Get list of all actions in view mode */ fetches.add(branchedApplicationMonoCached + .name(getQualifiedSpanName(APPLICATION_ID_SPAN, mode)) + .tap(Micrometer.observation(observationRegistry)) .flatMap(branchedApplication -> newActionService .getActionsForViewMode(branchedApplication.getId()) .collectList()) diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce_compatible/ApplicationServiceCECompatibleImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce_compatible/ApplicationServiceCECompatibleImpl.java index 47158228e8..5b368903ff 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce_compatible/ApplicationServiceCECompatibleImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce_compatible/ApplicationServiceCECompatibleImpl.java @@ -13,6 +13,7 @@ import com.appsmith.server.solutions.ApplicationPermission; import com.appsmith.server.solutions.DatasourcePermission; import com.appsmith.server.solutions.PolicySolution; import com.appsmith.server.solutions.WorkspacePermission; +import io.micrometer.observation.ObservationRegistry; import jakarta.validation.Validator; import org.springframework.stereotype.Service; @@ -32,7 +33,8 @@ public class ApplicationServiceCECompatibleImpl extends ApplicationServiceCEImpl SessionUserService sessionUserService, UserDataService userDataService, WorkspaceService workspaceService, - WorkspacePermission workspacePermission) { + WorkspacePermission workspacePermission, + ObservationRegistry observationRegistry) { super( validator, repository, @@ -46,6 +48,7 @@ public class ApplicationServiceCECompatibleImpl extends ApplicationServiceCEImpl sessionUserService, userDataService, workspaceService, - workspacePermission); + workspacePermission, + observationRegistry); } }