Skip to content

Commit

Permalink
chore: Add execution time for git status API (appsmithorg#25041)
Browse files Browse the repository at this point in the history
Add execution time for the performance improvement for the git status
API
  • Loading branch information
AnaghHegde authored Jul 4, 2023
1 parent c079b37 commit 48bf4a2
Showing 1 changed file with 14 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1555,19 +1555,19 @@ private Mono<GitStatusDTO> getStatus(String defaultApplicationId, String branchN
2. Fetch the current status from local repo
*/

Mono<GitStatusDTO> statusMono = getGitApplicationMetadata(defaultApplicationId)
Mono<GitStatusDTO> statusMono = executionTimeLogging.measureTask("getGitApplicationMetadata", getGitApplicationMetadata(defaultApplicationId))
.flatMap(gitApplicationMetadata -> {

Mono<Tuple2<Application, ApplicationJson>> applicationJsonTuple = applicationService.findByBranchNameAndDefaultApplicationId(finalBranchName, defaultApplicationId, applicationPermission.getEditPermission())
Mono<Tuple2<Application, ApplicationJson>> applicationJsonTuple = executionTimeLogging.measureTask("findByBranchNameAndDefaultApplicationId", applicationService.findByBranchNameAndDefaultApplicationId(finalBranchName, defaultApplicationId, applicationPermission.getEditPermission()))
.onErrorResume(error -> {
//if the branch does not exist in local, checkout remote branch
return checkoutBranch(defaultApplicationId, finalBranchName);
return executionTimeLogging.measureTask("checkoutBranch", checkoutBranch(defaultApplicationId, finalBranchName));
})
.zipWhen(application -> importExportApplicationService.exportApplicationById(application.getId(), SerialiseApplicationObjective.VERSION_CONTROL));
.zipWhen(application -> executionTimeLogging.measureTask( "getStatus->exportApplicationById", importExportApplicationService.exportApplicationById(application.getId(), SerialiseApplicationObjective.VERSION_CONTROL)));

if (Boolean.TRUE.equals(isFileLock)) {
// Add file lock for the status API call to avoid sending wrong info on the status
return redisUtils.addFileLock(gitApplicationMetadata.getDefaultApplicationId())
return executionTimeLogging.measureTask("addFileLock", redisUtils.addFileLock(gitApplicationMetadata.getDefaultApplicationId()))
.retryWhen(Retry.fixedDelay(MAX_RETRIES, RETRY_DELAY).jitter(0.75)
.onRetryExhaustedThrow((retryBackoffSpec, retrySignal) -> {
throw new AppsmithException(AppsmithError.GIT_FILE_IN_USE);
Expand All @@ -1588,7 +1588,7 @@ private Mono<GitStatusDTO> getStatus(String defaultApplicationId, String branchN

try {
return Mono.zip(
fileUtils.saveApplicationToLocalRepo(repoSuffix, applicationJson, finalBranchName),
executionTimeLogging.measureTask("getStatus->saveApplicationToLocalRepo", fileUtils.saveApplicationToLocalRepo(repoSuffix, applicationJson, finalBranchName)),
Mono.just(gitData.getGitAuth()),
Mono.just(repoSuffix)
);
Expand All @@ -1597,15 +1597,15 @@ private Mono<GitStatusDTO> getStatus(String defaultApplicationId, String branchN
}
})
.flatMap(tuple -> {
Mono<GitStatusDTO> branchedStatusMono = gitExecutor.getStatus(tuple.getT1(), finalBranchName).cache();
Mono<GitStatusDTO> branchedStatusMono = executionTimeLogging.measureTask("getStatus->gitExecutor.getStatus", gitExecutor.getStatus(tuple.getT1(), finalBranchName).cache());
try {
return gitExecutor.fetchRemote(tuple.getT1(), tuple.getT2().getPublicKey(), tuple.getT2().getPrivateKey(), true, branchName, false)
return executionTimeLogging.measureTask("getStatus->gitExecutor.fetchRemote", gitExecutor.fetchRemote(tuple.getT1(), tuple.getT2().getPublicKey(), tuple.getT2().getPrivateKey(), true, branchName, false))
.then(branchedStatusMono)
// Remove any files which are copied by hard resetting the repo
.then(gitExecutor.resetToLastCommit(tuple.getT3(), branchName))
.then(executionTimeLogging.measureTask("getStatus->gitExecutor.resetToLastCommit", gitExecutor.resetToLastCommit(tuple.getT3(), branchName)))
.flatMap(gitStatusDTO -> {
if (Boolean.TRUE.equals(isFileLock)) {
return releaseFileLock(defaultApplicationId)
return executionTimeLogging.measureTask("getStatus->releaseFileLock", releaseFileLock(defaultApplicationId))
.then(branchedStatusMono);
}
return branchedStatusMono;
Expand All @@ -1617,7 +1617,10 @@ private Mono<GitStatusDTO> getStatus(String defaultApplicationId, String branchN
});

return Mono.create(sink -> {
statusMono.subscribe(sink::success, sink::error, null, sink.currentContext());
statusMono.map(t -> {
log.debug("Time take, {}\n", executionTimeLogging.print());
return t;
}).subscribe(sink::success, sink::error, null, sink.currentContext());
});
}

Expand Down

0 comments on commit 48bf4a2

Please sign in to comment.