package org.fastcatsearch.http.action.management.collections; import java.io.File; import java.io.Writer; import java.util.ArrayList; import java.util.Arrays; import java.util.List; 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.CollectionConfig; import org.fastcatsearch.ir.config.CollectionContext; import org.fastcatsearch.ir.config.CollectionsConfig.Collection; import org.fastcatsearch.ir.config.DataInfo; import org.fastcatsearch.ir.config.DataInfo.RevisionInfo; import org.fastcatsearch.ir.config.DataInfo.SegmentInfo; import org.fastcatsearch.ir.search.CollectionHandler; import org.fastcatsearch.service.ServiceManager; import org.fastcatsearch.util.ResponseWriter; @ActionMapping(value = "/management/collections/collection-info-list", authority = ActionAuthority.Collections, authorityLevel = ActionAuthorityLevel.NONE) public class GetCollectionInfoListAction extends AuthAction { @Override public void doAuthAction(ActionRequest request, ActionResponse response) throws Exception { IRService irService = ServiceManager.getInstance().getService(IRService.class); String collectionListStr = request.getParameter("collectionId", ""); List<String> collections = null; if(!"".equals(collectionListStr)) { collections = Arrays.asList(collectionListStr.replaceAll(" ", "").split(",")); } List<Collection> collectionList = irService.getCollectionList(); Writer writer = response.getWriter(); ResponseWriter responseWriter = getDefaultResponseWriter(writer); responseWriter.object().key("collectionInfoList").array("collectionInfo"); for(Collection collection : collectionList){ String collectionId = collection.getId(); //원하는 컬렉션만 골라낼 때 if (collections != null && !collections.contains(collectionId)) { continue; } CollectionContext collectionContext = irService.collectionContext(collectionId); if(collectionContext == null){ continue; } CollectionHandler collectionHandler = irService.collectionHandler(collectionId); boolean isActive = collectionHandler != null && collectionHandler.isLoaded(); CollectionConfig collectionConfig = collectionContext.collectionConfig(); DataInfo dataInfo = collectionContext.dataInfo(); String revisionUUID = null; SegmentInfo lastSegmentInfo = dataInfo.getLastSegmentInfo(); if(lastSegmentInfo != null){ revisionUUID = lastSegmentInfo.getRevisionInfo().getUuid(); }else{ revisionUUID = ""; } int sequence = collectionContext.indexStatus().getSequence(); responseWriter.object(); {//simple-info responseWriter .key("id").value(collectionId); } {//normal-info responseWriter .key("isActive").value(isActive) .key("name").value(collectionConfig.getName()) .key("sequence").value(sequence) .key("revisionUUID").value(revisionUUID) .key("indexNode").value(collectionConfig.getIndexNode()) .key("dataNodeList").value(join(collectionConfig.getDataNodeList())) .key("searchNodeList").value(join(collectionConfig.getSearchNodeList())); } {//detail-info File indexFileDir = collectionContext.dataFilePaths().indexDirFile(sequence); int documentSize = collectionContext.dataInfo().getDocuments(); int segmentSize = dataInfo.getSegmentSize(); String diskSize = ""; if(indexFileDir.exists()){ long byteCount = FileUtils.sizeOfDirectory(indexFileDir); diskSize = FileUtils.byteCountToDisplaySize(byteCount); } String dataPath = new Path(collectionContext.collectionFilePaths().file()).relativise(indexFileDir).getPath(); String createTime = ""; SegmentInfo segmentInfo = collectionContext.dataInfo().getLastSegmentInfo(); if(segmentInfo != null){ RevisionInfo revisionInfo = segmentInfo.getRevisionInfo(); if(revisionInfo != null){ createTime = revisionInfo.getCreateTime(); } } responseWriter .key("documentSize").value(documentSize) .key("segmentSize").value(segmentSize) .key("diskSize").value(diskSize) .key("dataPath").value(dataPath) .key("createTime").value(createTime); } responseWriter.endObject(); } responseWriter.endArray().endObject(); responseWriter.done(); } public String join(List<String> list) { String joinString = ""; if (list != null) { for (int i = 0; i < list.size(); i++) { if(i > 0){ joinString += ", "; } joinString += list.get(i); } } return joinString; } }