package org.fastcatsearch.http.action.management.collections; import java.io.File; import java.io.Writer; import org.apache.commons.io.FileUtils; import org.fastcatsearch.env.Path; import org.fastcatsearch.http.ActionAuthority; import org.fastcatsearch.http.ActionAuthorityLevel; import org.fastcatsearch.http.ActionMapping; import org.fastcatsearch.http.action.ActionRequest; import org.fastcatsearch.http.action.ActionResponse; import org.fastcatsearch.http.action.AuthAction; import org.fastcatsearch.ir.IRService; import org.fastcatsearch.ir.config.CollectionContext; import org.fastcatsearch.ir.config.DataInfo; import org.fastcatsearch.ir.config.DataInfo.RevisionInfo; import org.fastcatsearch.ir.config.DataInfo.SegmentInfo; import org.fastcatsearch.service.ServiceManager; import org.fastcatsearch.util.ResponseWriter; @ActionMapping(value = "/management/collections/indexing-status", authority = ActionAuthority.Collections, authorityLevel = ActionAuthorityLevel.READABLE) public class GetIndexingStatusAction extends AuthAction { @Override public void doAuthAction(ActionRequest request, ActionResponse response) throws Exception { String collectionId = request.getParameter("collectionId"); IRService irService = ServiceManager.getInstance().getService(IRService.class); CollectionContext collectionContext = irService.collectionContext(collectionId); Writer writer = response.getWriter(); ResponseWriter responseWriter = getDefaultResponseWriter(writer); responseWriter.object() .key("collectionId").value(collectionId); DataInfo dataInfo = collectionContext.dataInfo(); int segmentSize = dataInfo.getSegmentSize(); String revisionUUID = null; SegmentInfo lastSegmentInfo = dataInfo.getLastSegmentInfo(); if(lastSegmentInfo != null){ revisionUUID = lastSegmentInfo.getRevisionInfo().getUuid(); }else{ revisionUUID = ""; } responseWriter.key("segmentSize").value(segmentSize) .key("revisionUUID").value(revisionUUID); int sequence = collectionContext.indexStatus().getSequence(); File indexFileDir = collectionContext.dataFilePaths().indexDirFile(sequence); String dataPath = new Path(collectionContext.collectionFilePaths().file()).relativise(indexFileDir).getPath(); responseWriter.key("sequence").value(sequence) .key("dataPath").value(dataPath); String diskSize = ""; if(indexFileDir.exists()){ long byteCount = FileUtils.sizeOfDirectory(indexFileDir); diskSize = FileUtils.byteCountToDisplaySize(byteCount); } responseWriter.key("diskSize").value(diskSize); int documentSize = collectionContext.dataInfo().getDocuments(); responseWriter.key("documentSize").value(documentSize); String createTime = ""; SegmentInfo segmentInfo = collectionContext.dataInfo().getLastSegmentInfo(); if(segmentInfo != null){ RevisionInfo revisionInfo = segmentInfo.getRevisionInfo(); if(revisionInfo != null){ createTime = revisionInfo.getCreateTime(); } } responseWriter.key("createTime").value(createTime); responseWriter.endObject(); responseWriter.done(); } }