chore: added metrics around actions api view mode (#35416)
## Description This PR adds perf metrics around consolidated view API -> actions section. These metrics will help us understand which parts of the code are taking the longest which can help us in improving it further. Fixes #35338 _or_ Fixes `Issue URL` > [!WARNING] > _If no issue exists, please create an issue first, and check with the maintainers if the issue is valid._ ## Automation /ok-to-test tags="@tag.All" ### 🔍 Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/10301401346> > Commit: e89901b15e648e6d466665c637be01572ccc963e > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=10301401346&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Thu, 08 Aug 2024 12:29:57 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Introduced new constants for action spans to improve tracking of user interactions in the view mode. - Added a new class for page spans, enhancing organization and clarity of API span naming conventions. - **Bug Fixes** - Improved integration with existing components for better observability and performance monitoring. - **Chores** - Updated naming conventions for span identifiers to promote consistency across the application. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: “sneha122” <“sneha@appsmith.com”>
This commit is contained in:
parent
f0059fe894
commit
2e3791a967
|
|
@ -0,0 +1,5 @@
|
|||
package com.appsmith.external.constants.spans;
|
||||
|
||||
import com.appsmith.external.constants.spans.ce.ApplicationSpanCE;
|
||||
|
||||
public class ApplicationSpan extends ApplicationSpanCE {}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
package com.appsmith.external.constants.spans;
|
||||
|
||||
import com.appsmith.external.constants.spans.ce.PageSpanCE;
|
||||
|
||||
public class PageSpan extends PageSpanCE {}
|
||||
|
|
@ -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";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
}
|
||||
|
|
@ -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";
|
||||
}
|
||||
|
|
@ -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<ApplicationRepository,
|
|||
private final UserDataService userDataService;
|
||||
private final WorkspaceService workspaceService;
|
||||
private final WorkspacePermission workspacePermission;
|
||||
private final ObservationRegistry observationRegistry;
|
||||
|
||||
private static final Integer MAX_RETRIES = 5;
|
||||
|
||||
|
|
@ -101,7 +105,8 @@ public class ApplicationServiceCEImpl extends BaseService<ApplicationRepository,
|
|||
SessionUserService sessionUserService,
|
||||
UserDataService userDataService,
|
||||
WorkspaceService workspaceService,
|
||||
WorkspacePermission workspacePermission) {
|
||||
WorkspacePermission workspacePermission,
|
||||
ObservationRegistry observationRegistry) {
|
||||
|
||||
super(validator, repository, analyticsService);
|
||||
this.policySolution = policySolution;
|
||||
|
|
@ -114,6 +119,7 @@ public class ApplicationServiceCEImpl extends BaseService<ApplicationRepository,
|
|||
this.userDataService = userDataService;
|
||||
this.workspaceService = workspaceService;
|
||||
this.workspacePermission = workspacePermission;
|
||||
this.observationRegistry = observationRegistry;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -1042,6 +1048,8 @@ public class ApplicationServiceCEImpl extends BaseService<ApplicationRepository,
|
|||
: applicationPermission.getEditPermission();
|
||||
|
||||
return findById(branchedApplicationId, permissionForApplication)
|
||||
.name(APPLICATION_FETCH_FROM_DB)
|
||||
.tap(Micrometer.observation(observationRegistry))
|
||||
.switchIfEmpty(Mono.error(new AppsmithException(
|
||||
AppsmithError.NO_RESOURCE_FOUND, FieldName.APPLICATION, branchedApplicationId)));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
|
@ -34,7 +35,8 @@ public class ApplicationServiceImpl extends ApplicationServiceCECompatibleImpl i
|
|||
SessionUserService sessionUserService,
|
||||
UserDataService userDataService,
|
||||
WorkspaceService workspaceService,
|
||||
WorkspacePermission workspacePermission) {
|
||||
WorkspacePermission workspacePermission,
|
||||
ObservationRegistry observationRegistry) {
|
||||
super(
|
||||
validator,
|
||||
repository,
|
||||
|
|
@ -48,6 +50,7 @@ public class ApplicationServiceImpl extends ApplicationServiceCECompatibleImpl i
|
|||
sessionUserService,
|
||||
userDataService,
|
||||
workspaceService,
|
||||
workspacePermission);
|
||||
workspacePermission,
|
||||
observationRegistry);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,6 +79,14 @@ import java.util.function.Function;
|
|||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.appsmith.external.constants.spans.ActionSpan.GET_ACTION_REPOSITORY_CALL;
|
||||
import static com.appsmith.external.constants.spans.ce.ActionSpanCE.VIEW_MODE_FETCH_ACTIONS_FROM_DB;
|
||||
import static com.appsmith.external.constants.spans.ce.ActionSpanCE.VIEW_MODE_FETCH_PLUGIN_FROM_DB;
|
||||
import static com.appsmith.external.constants.spans.ce.ActionSpanCE.VIEW_MODE_FILTER_ACTION;
|
||||
import static com.appsmith.external.constants.spans.ce.ActionSpanCE.VIEW_MODE_FINAL_ACTION;
|
||||
import static com.appsmith.external.constants.spans.ce.ActionSpanCE.VIEW_MODE_INITIAL_ACTION;
|
||||
import static com.appsmith.external.constants.spans.ce.ActionSpanCE.VIEW_MODE_SANITISE_ACTION;
|
||||
import static com.appsmith.external.constants.spans.ce.ActionSpanCE.VIEW_MODE_SET_PLUGIN_ID_AND_TYPE_ACTION;
|
||||
import static com.appsmith.external.constants.spans.ce.ActionSpanCE.VIEW_MODE_SET_PLUGIN_ID_AND_TYPE_JS;
|
||||
import static com.appsmith.external.helpers.AppsmithBeanUtils.copyNestedNonNullProperties;
|
||||
import static com.appsmith.external.helpers.PluginUtils.setValueSafelyInFormData;
|
||||
import static com.appsmith.server.acl.AclPermission.EXECUTE_DATASOURCES;
|
||||
|
|
@ -97,7 +105,6 @@ public class NewActionServiceCEImpl extends BaseService<NewActionRepository, New
|
|||
public static final String NATIVE_QUERY_PATH_STATUS = NATIVE_QUERY_PATH + "." + STATUS;
|
||||
public static final PluginType JS_PLUGIN_TYPE = PluginType.JS;
|
||||
public static final String JS_PLUGIN_PACKAGE_NAME = "js-plugin";
|
||||
|
||||
protected final NewActionRepository repository;
|
||||
private final DatasourceService datasourceService;
|
||||
private final PluginService pluginService;
|
||||
|
|
@ -731,6 +738,8 @@ public class NewActionServiceCEImpl extends BaseService<NewActionRepository, New
|
|||
String applicationId, Boolean viewMode, AclPermission permission, Sort sort) {
|
||||
return repository
|
||||
.findByApplicationId(applicationId, permission, sort)
|
||||
.name(VIEW_MODE_FETCH_ACTIONS_FROM_DB)
|
||||
.tap(Micrometer.observation(observationRegistry))
|
||||
// In case of view mode being true, filter out all the actions which haven't been published
|
||||
.flatMap(action -> {
|
||||
if (Boolean.TRUE.equals(viewMode)) {
|
||||
|
|
@ -745,7 +754,11 @@ public class NewActionServiceCEImpl extends BaseService<NewActionRepository, New
|
|||
|
||||
return Mono.just(action);
|
||||
})
|
||||
.flatMap(this::sanitizeAction);
|
||||
.name(VIEW_MODE_FILTER_ACTION)
|
||||
.tap(Micrometer.observation(observationRegistry))
|
||||
.flatMap(this::sanitizeAction)
|
||||
.name(VIEW_MODE_SANITISE_ACTION)
|
||||
.tap(Micrometer.observation(observationRegistry));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -782,8 +795,12 @@ public class NewActionServiceCEImpl extends BaseService<NewActionRepository, New
|
|||
// fetch the published actions by applicationId
|
||||
// No need to sort the results
|
||||
return findAllByApplicationIdAndViewMode(applicationId, true, actionPermission.getExecutePermission(), null)
|
||||
.name(VIEW_MODE_INITIAL_ACTION)
|
||||
.tap(Micrometer.observation(observationRegistry))
|
||||
.filter(newAction -> !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<NewActionRepository, New
|
|||
*/
|
||||
Datasource datasource = actionDTO.getDatasource();
|
||||
if (actionDTO.getCollectionId() != null) {
|
||||
return setPluginIdAndTypeForJSAction(action);
|
||||
return setPluginIdAndTypeForJSAction(action)
|
||||
.name(VIEW_MODE_SET_PLUGIN_ID_AND_TYPE_JS)
|
||||
.tap(Micrometer.observation(observationRegistry));
|
||||
} else if (datasource != null && datasource.getPluginId() != null) {
|
||||
String pluginId = datasource.getPluginId();
|
||||
action.setPluginId(pluginId);
|
||||
|
||||
return setPluginTypeFromId(action, pluginId);
|
||||
return setPluginTypeFromId(action, pluginId)
|
||||
.name(VIEW_MODE_SET_PLUGIN_ID_AND_TYPE_ACTION)
|
||||
.tap(Micrometer.observation(observationRegistry));
|
||||
}
|
||||
|
||||
return Mono.just(action);
|
||||
}
|
||||
|
||||
private Mono<NewAction> 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<NewAction> 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
|
||||
|
|
|
|||
|
|
@ -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<NewPageRepository, NewPage
|
|||
private final UserDataService userDataService;
|
||||
private final ApplicationPermission applicationPermission;
|
||||
private final PagePermission pagePermission;
|
||||
private final ObservationRegistry observationRegistry;
|
||||
|
||||
@Autowired
|
||||
public NewPageServiceCEImpl(
|
||||
|
|
@ -63,12 +70,14 @@ public class NewPageServiceCEImpl extends BaseService<NewPageRepository, NewPage
|
|||
ApplicationService applicationService,
|
||||
UserDataService userDataService,
|
||||
ApplicationPermission applicationPermission,
|
||||
PagePermission pagePermission) {
|
||||
PagePermission pagePermission,
|
||||
ObservationRegistry observationRegistry) {
|
||||
super(validator, repository, analyticsService);
|
||||
this.applicationService = applicationService;
|
||||
this.userDataService = userDataService;
|
||||
this.applicationPermission = applicationPermission;
|
||||
this.pagePermission = pagePermission;
|
||||
this.observationRegistry = observationRegistry;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -107,7 +116,10 @@ public class NewPageServiceCEImpl extends BaseService<NewPageRepository, NewPage
|
|||
|
||||
@Override
|
||||
public Mono<NewPage> 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<NewPageRepository, NewPage
|
|||
return Mono.error(new AppsmithException(AppsmithError.INVALID_PARAMETER, FieldName.PAGE_ID));
|
||||
} else if (!StringUtils.hasText(branchName)) {
|
||||
return this.findById(basePageId, permission)
|
||||
.name(GET_PAGE_WITHOUT_BRANCH)
|
||||
.tap(Micrometer.observation(observationRegistry))
|
||||
.switchIfEmpty(Mono.error(
|
||||
new AppsmithException(AppsmithError.NO_RESOURCE_FOUND, FieldName.PAGE, basePageId)));
|
||||
}
|
||||
return repository
|
||||
.findPageByBranchNameAndBasePageId(branchName, basePageId, permission)
|
||||
.name(GET_PAGE_WITH_BRANCH)
|
||||
.tap(Micrometer.observation(observationRegistry))
|
||||
.switchIfEmpty(Mono.error(new AppsmithException(
|
||||
AppsmithError.NO_RESOURCE_FOUND, FieldName.PAGE, basePageId + ", " + branchName)));
|
||||
}
|
||||
|
|
@ -532,7 +548,9 @@ public class NewPageServiceCEImpl extends BaseService<NewPageRepository, NewPage
|
|||
permission = pagePermission.getReadPermission();
|
||||
}
|
||||
|
||||
return this.findByBranchNameAndBasePageId(branchName, basePageId, permission);
|
||||
return this.findByBranchNameAndBasePageId(branchName, basePageId, permission)
|
||||
.name(GET_PAGE)
|
||||
.tap(Micrometer.observation(observationRegistry));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import com.appsmith.server.services.AnalyticsService;
|
|||
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 org.springframework.stereotype.Service;
|
||||
|
|
@ -21,7 +22,8 @@ public class NewPageServiceImpl extends NewPageServiceCEImpl implements NewPageS
|
|||
ApplicationService applicationService,
|
||||
UserDataService userDataService,
|
||||
ApplicationPermission applicationPermission,
|
||||
PagePermission pagePermission) {
|
||||
PagePermission pagePermission,
|
||||
ObservationRegistry observationRegistry) {
|
||||
super(
|
||||
validator,
|
||||
repository,
|
||||
|
|
@ -29,6 +31,7 @@ public class NewPageServiceImpl extends NewPageServiceCEImpl implements NewPageS
|
|||
applicationService,
|
||||
userDataService,
|
||||
applicationPermission,
|
||||
pagePermission);
|
||||
pagePermission,
|
||||
observationRegistry);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.appsmith.server.repositories;
|
||||
|
||||
import com.appsmith.server.repositories.ce.CustomNewActionRepositoryCEImpl;
|
||||
import io.micrometer.observation.ObservationRegistry;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.data.mongodb.core.ReactiveMongoOperations;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
|
@ -10,7 +11,8 @@ import org.springframework.stereotype.Component;
|
|||
public class CustomNewActionRepositoryImpl extends CustomNewActionRepositoryCEImpl
|
||||
implements CustomNewActionRepository {
|
||||
|
||||
public CustomNewActionRepositoryImpl(ReactiveMongoOperations mongoOperations) {
|
||||
super(mongoOperations);
|
||||
public CustomNewActionRepositoryImpl(
|
||||
ReactiveMongoOperations mongoOperations, ObservationRegistry observationRegistry) {
|
||||
super(mongoOperations, observationRegistry);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.appsmith.server.repositories;
|
||||
|
||||
import com.appsmith.server.repositories.ce.CustomNewPageRepositoryCEImpl;
|
||||
import io.micrometer.observation.ObservationRegistry;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
|
@ -9,7 +10,7 @@ import org.springframework.stereotype.Component;
|
|||
@Slf4j
|
||||
public class CustomNewPageRepositoryImpl extends CustomNewPageRepositoryCEImpl implements CustomNewPageRepository {
|
||||
|
||||
public CustomNewPageRepositoryImpl(MongoTemplate mongoTemplate) {
|
||||
super(mongoTemplate);
|
||||
public CustomNewPageRepositoryImpl(MongoTemplate mongoTemplate, ObservationRegistry observationRepository) {
|
||||
super(mongoTemplate, observationRepository);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import com.appsmith.server.helpers.ce.bridge.Bridge;
|
|||
import com.appsmith.server.helpers.ce.bridge.BridgeQuery;
|
||||
import com.appsmith.server.helpers.ce.bridge.BridgeUpdate;
|
||||
import com.appsmith.server.repositories.BaseAppsmithRepositoryImpl;
|
||||
import io.micrometer.observation.ObservationRegistry;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.bson.types.ObjectId;
|
||||
|
|
@ -21,6 +22,7 @@ import org.springframework.data.mongodb.core.aggregation.GroupOperation;
|
|||
import org.springframework.data.mongodb.core.aggregation.MatchOperation;
|
||||
import org.springframework.data.mongodb.core.aggregation.ProjectionOperation;
|
||||
import org.springframework.data.mongodb.core.query.Criteria;
|
||||
import reactor.core.observability.micrometer.Micrometer;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
|
|
@ -29,6 +31,7 @@ import java.util.List;
|
|||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
import static com.appsmith.external.constants.spans.ce.ActionSpanCE.VIEW_MODE_FETCH_ACTIONS_FROM_DB_QUERY;
|
||||
import static org.springframework.data.mongodb.core.aggregation.Aggregation.group;
|
||||
import static org.springframework.data.mongodb.core.aggregation.Aggregation.match;
|
||||
import static org.springframework.data.mongodb.core.aggregation.Aggregation.newAggregation;
|
||||
|
|
@ -42,12 +45,16 @@ public class CustomNewActionRepositoryCEImpl extends BaseAppsmithRepositoryImpl<
|
|||
|
||||
private final ReactiveMongoOperations mongoOperations;
|
||||
|
||||
private final ObservationRegistry observationRegistry;
|
||||
|
||||
@Override
|
||||
public Flux<NewAction> 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
|
||||
|
|
|
|||
|
|
@ -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<Ne
|
|||
implements CustomNewPageRepositoryCE {
|
||||
|
||||
private final MongoTemplate mongoTemplate;
|
||||
private final ObservationRegistry observationRegistry;
|
||||
|
||||
@Override
|
||||
public Flux<NewPage> findByApplicationId(String applicationId, AclPermission aclPermission) {
|
||||
|
|
@ -160,7 +164,12 @@ public class CustomNewPageRepositoryCEImpl extends BaseAppsmithRepositoryImpl<Ne
|
|||
q.isNull(NewPage.Fields.branchName);
|
||||
}
|
||||
|
||||
return queryBuilder().criteria(q).permission(permission).one();
|
||||
return queryBuilder()
|
||||
.criteria(q)
|
||||
.permission(permission)
|
||||
.one()
|
||||
.name(FETCH_PAGE_FROM_DB)
|
||||
.tap(Micrometer.observation(observationRegistry));
|
||||
}
|
||||
|
||||
public Mono<String> findBranchedPageId(String branchName, String defaultPageId, AclPermission permission) {
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user