[feature/MNT-24127-EndpointToCalculateFolderSize] Added Endpoint to calculate folder size

This commit is contained in:
Mohit Singh
2024-08-01 16:31:40 +05:30
parent 51f8142fd1
commit 7a16e30f30
3 changed files with 13 additions and 21 deletions

View File

@@ -1126,9 +1126,5 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi
{ {
return URL_NODES + "/" + nodeId + "/" + URL_CALCULATEFOLDERSIZE; return URL_NODES + "/" + nodeId + "/" + URL_CALCULATEFOLDERSIZE;
} }
protected String getFolderSizeDataUrl(String nodeId)
{
return URL_NODES + "/" + nodeId + "/";
}
} }

View File

@@ -30,11 +30,7 @@ import org.alfresco.rest.api.model.NodeTarget;
import org.alfresco.rest.api.model.Site; import org.alfresco.rest.api.model.Site;
import org.alfresco.rest.api.nodes.NodesEntityResource; import org.alfresco.rest.api.nodes.NodesEntityResource;
import org.alfresco.rest.api.tests.client.HttpResponse; import org.alfresco.rest.api.tests.client.HttpResponse;
import org.alfresco.rest.api.tests.client.PublicApiHttpClient;
import org.alfresco.rest.api.tests.util.RestApiUtil; import org.alfresco.rest.api.tests.util.RestApiUtil;
import org.alfresco.service.cmr.repository.MimetypeService;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.site.SiteVisibility; import org.alfresco.service.cmr.site.SiteVisibility;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
@@ -46,7 +42,6 @@ import org.junit.runners.MethodSorters;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.File;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
@@ -68,13 +63,7 @@ public class NodeFolderSizeApiTest extends AbstractBaseApiTest
*/ */
private Site userOneN1Site; private Site userOneN1Site;
protected PermissionService permissionService; private String folderId;
private NodeService nodeService;
private MimetypeService mimeTypeService;
private static String folderId;
/** /**
* The logger * The logger
@@ -100,9 +89,6 @@ public class NodeFolderSizeApiTest extends AbstractBaseApiTest
public void setup() throws Exception public void setup() throws Exception
{ {
super.setup(); super.setup();
permissionService = applicationContext.getBean("permissionService", PermissionService.class);
nodeService = applicationContext.getBean("NodeService", NodeService.class);
mimeTypeService = applicationContext.getBean("MimetypeService", MimetypeService.class);
setRequestContext(user1); setRequestContext(user1);
@@ -154,7 +140,7 @@ public class NodeFolderSizeApiTest extends AbstractBaseApiTest
AuthenticationUtil.setFullyAuthenticatedUser(user1); AuthenticationUtil.setFullyAuthenticatedUser(user1);
// Check if response and JSON parsing were successful // Check if response and JSON parsing were successful
HttpResponse response = getSingle(getFolderSizeDataUrl(folderId), "get-folder-size", 200); HttpResponse response = getSingle(NodesEntityResource.class, folderId+"/get-folder-size", null, 200);
String jsonResponse = String.valueOf(response.getJsonResponse()); String jsonResponse = String.valueOf(response.getJsonResponse());
assertNotNull("JSON response should not be null", jsonResponse); assertNotNull("JSON response should not be null", jsonResponse);

View File

@@ -37,6 +37,7 @@ import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.search.ResultSet; import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.SearchParameters; import org.alfresco.service.cmr.search.SearchParameters;
import org.alfresco.service.cmr.search.SearchService; import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.util.Pair;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -64,6 +65,7 @@ public class NodeSizeActionExecuter extends ActionExecuterAbstractBase
public static final String PAGE_SIZE = "page-size"; public static final String PAGE_SIZE = "page-size";
public static final String RESULT = "size-result"; public static final String RESULT = "size-result";
public static final String ERROR = "exception"; public static final String ERROR = "exception";
public static final String FIELD_FACET = "content.size";
private NodeService nodeService; private NodeService nodeService;
private SearchService searchService; private SearchService searchService;
@@ -127,6 +129,7 @@ public class NodeSizeActionExecuter extends ActionExecuterAbstractBase
NodeRef nodeRef = actionedUponNodeRef; NodeRef nodeRef = actionedUponNodeRef;
long totalSize = 0; long totalSize = 0;
long totalSizeFromFacet = 0;
ResultSet results; ResultSet results;
boolean isCalculationCompleted = false; boolean isCalculationCompleted = false;
@@ -142,13 +145,19 @@ public class NodeSizeActionExecuter extends ActionExecuterAbstractBase
searchParameters.addFacetQuery("content.size:[10240 TO 102400]\", \"label\": \"small\", \"group\":\"Size\""); searchParameters.addFacetQuery("content.size:[10240 TO 102400]\", \"label\": \"small\", \"group\":\"Size\"");
searchParameters.addFacetQuery("content.size:[102400 TO 1048576]\", \"label\": \"medium\",\"group\":\"Size\""); searchParameters.addFacetQuery("content.size:[102400 TO 1048576]\", \"label\": \"medium\",\"group\":\"Size\"");
searchParameters.addFacetQuery("content.size:[1048576 TO 16777216]\", \"label\": \"large\",\"group\":\"Size\""); searchParameters.addFacetQuery("content.size:[1048576 TO 16777216]\", \"label\": \"large\",\"group\":\"Size\"");
final SearchParameters.FieldFacet ff = new SearchParameters.FieldFacet("content.size"); final SearchParameters.FieldFacet ff = new SearchParameters.FieldFacet(FIELD_FACET);
searchParameters.addFieldFacet(ff); searchParameters.addFieldFacet(ff);
try try
{ {
// executing Alfresco FTS query. // executing Alfresco FTS query.
results = searchService.query(searchParameters); results = searchService.query(searchParameters);
List<Pair<String, Integer>> fieldData = results.getFieldFacet(FIELD_FACET);
totalSizeFromFacet = fieldData.stream()
.filter(pairData -> pairData.getSecond() > 0)
.mapToLong(pairData -> Long.valueOf(pairData.getFirst()) * pairData.getSecond())
.sum();
int skipCount = 0; int skipCount = 0;
int totalItems; int totalItems;
totalItems = Math.min(results.getNodeRefs().size(), maxItems); totalItems = Math.min(results.getNodeRefs().size(), maxItems);
@@ -200,6 +209,7 @@ public class NodeSizeActionExecuter extends ActionExecuterAbstractBase
String formattedTimestamp = eventTimestamp.format(formatter); String formattedTimestamp = eventTimestamp.format(formatter);
response.put("id", nodeRef.getId()); response.put("id", nodeRef.getId());
response.put("size", totalSize); response.put("size", totalSize);
response.put("sizeFromFacet", totalSizeFromFacet);
response.put("calculatedAt", formattedTimestamp); response.put("calculatedAt", formattedTimestamp);
response.put("numberOfFiles", results != null ? results.getNodeRefs().size() : 0); response.put("numberOfFiles", results != null ? results.getNodeRefs().size() : 0);