From 445b66126f4a5406f7a18db14552f35a08259ee5 Mon Sep 17 00:00:00 2001 From: Will Abson Date: Tue, 1 Jul 2014 14:58:38 +0000 Subject: [PATCH] Merged HEAD-BUG-FIX (5.0/Cloud) to HEAD (5.0/Cloud) 75000: Merged WAT2 (5.0/Cloud) to HEAD-BUG-FIX (5.0/Cloud) 69908: Initial version of Solr Stats service and webscript git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@75329 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repository/solr/stats.get.desc.xml | 10 +++ .../repository/solr/stats.get.json.ftl | 32 +++++++ .../web-scripts-application-context.xml | 6 ++ .../repo/web/scripts/solr/StatsGet.java | 89 +++++++++++++++++++ 4 files changed, 137 insertions(+) create mode 100644 config/alfresco/templates/webscripts/org/alfresco/repository/solr/stats.get.desc.xml create mode 100644 config/alfresco/templates/webscripts/org/alfresco/repository/solr/stats.get.json.ftl create mode 100644 source/java/org/alfresco/repo/web/scripts/solr/StatsGet.java diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/stats.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/stats.get.desc.xml new file mode 100644 index 0000000000..c4b6bc251e --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/stats.get.desc.xml @@ -0,0 +1,10 @@ + + Get solr statistics + Get some basic statics from solr + /api/solr/site/{siteId}/stats + /api/solr/stats + argument + user + required + SOLR + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/solr/stats.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/stats.get.json.ftl new file mode 100644 index 0000000000..9f1f0d06d5 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/solr/stats.get.json.ftl @@ -0,0 +1,32 @@ +{ + "resultset": [ + <#list result.stats as item> + ["${jsonUtils.encodeJSONString(item.name)}",${item.sum?c}, ${item.count?c}] + <#if item_has_next>, + + ], + "queryInfo": { + "numberFound": "${result.numberFound?c}", + "totalRows": "${resultSize?c}", + "sum": "${result.sum?c}", + "max": "${result.max?c}", + "mean": "${result.mean?c}" + }, + "metadata": [ + { + "colIndex": 0, + "colType": "String", + "colName": "name" + }, + { + "colIndex": 1, + "colType": "Numeric", + "colName": "sum" + }, + { + "colIndex": 2, + "colType": "Numeric", + "colName": "count" + } + ] +} \ No newline at end of file diff --git a/config/alfresco/web-scripts-application-context.xml b/config/alfresco/web-scripts-application-context.xml index 5a4b145b48..f2447120cd 100644 --- a/config/alfresco/web-scripts-application-context.xml +++ b/config/alfresco/web-scripts-application-context.xml @@ -1548,6 +1548,12 @@ + + + + + diff --git a/source/java/org/alfresco/repo/web/scripts/solr/StatsGet.java b/source/java/org/alfresco/repo/web/scripts/solr/StatsGet.java new file mode 100644 index 0000000000..feda7aa54e --- /dev/null +++ b/source/java/org/alfresco/repo/web/scripts/solr/StatsGet.java @@ -0,0 +1,89 @@ +package org.alfresco.repo.web.scripts.solr; + +import java.util.HashMap; +import java.util.Map; + +import org.alfresco.model.ContentModel; +import org.alfresco.repo.security.permissions.AccessDeniedException; +import org.alfresco.service.cmr.search.SearchParameters.SortDefinition; +import org.alfresco.service.cmr.search.SearchService; +import org.alfresco.service.cmr.search.StatsParameters; +import org.alfresco.service.cmr.search.StatsResultSet; +import org.alfresco.service.cmr.search.StatsService; +import org.alfresco.service.cmr.site.SiteInfo; +import org.alfresco.service.cmr.site.SiteService; +import org.alfresco.service.namespace.NamespaceService; +import org.alfresco.service.namespace.QName; +import org.springframework.extensions.webscripts.Cache; +import org.springframework.extensions.webscripts.DeclarativeWebScript; +import org.springframework.extensions.webscripts.Status; +import org.springframework.extensions.webscripts.WebScriptRequest; + +/** + * Gets stats on Solr content + * + * @author Gethin James + */ +public class StatsGet extends DeclarativeWebScript +{ + StatsService stats; + SiteService siteService; + + public void setStats(StatsService stats) + { + this.stats = stats; + } + + public void setSiteService(SiteService siteService) + { + this.siteService = siteService; + } + + @Override + protected Map executeImpl(WebScriptRequest req, Status status, Cache cache) + { + Map templateVars = req.getServiceMatch().getTemplateVars(); + SiteInfo siteInfo = null; + + if (templateVars != null && templateVars.containsKey("siteId") ) + { + siteInfo = siteService.getSite(templateVars.get("siteId")); + if (siteInfo == null) + { + throw new AccessDeniedException("No such site: " + templateVars.get("siteId")); + } + } + + String contentProp = req.getParameter("contentProp"); + if (contentProp == null) contentProp = "created"; //default + + QName prop = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, contentProp); + + String query = buildQuery(siteInfo); + + StatsParameters params = new StatsParameters(SearchService.LANGUAGE_SOLR_FTS_ALFRESCO, query); + params.addSort(new SortDefinition(SortDefinition.SortType.FIELD, "contentsize", false)); + params.addStatsParameter(StatsParameters.PARAM_FIELD, "contentsize"); + params.addStatsParameter(StatsParameters.PARAM_FACET, StatsParameters.FACET_PREFIX+prop.toString()); + + StatsResultSet result = stats.query(params); + + Map model = new HashMap(1, 1.0f); + model.put("result", result); + model.put("resultSize", result.getStats().size()); + return model; + } + + protected String buildQuery(SiteInfo siteInfo) + { + StringBuilder luceneQuery = new StringBuilder(); + luceneQuery.append("TYPE:\"" + ContentModel.TYPE_CONTENT + "\""); + + if (siteInfo != null) + { + luceneQuery.append(" AND ANCESTOR:\""+siteInfo.getNodeRef().toString()+"\""); + } + return luceneQuery.toString(); + } + +}