package org.fastcatsearch.http.action.management.collections;
import java.io.Writer;
import java.util.List;
import org.fastcatsearch.cluster.Node;
import org.fastcatsearch.cluster.NodeService;
import org.fastcatsearch.control.ResultFuture;
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.job.management.GetCollectionAnalyzedIndexDataJob;
import org.fastcatsearch.service.ServiceManager;
import org.fastcatsearch.util.ResponseWriter;
import org.fastcatsearch.vo.CollectionAnalyzedIndexData;
import org.fastcatsearch.vo.CollectionIndexData;
import org.fastcatsearch.vo.CollectionIndexData.RowData;
@ActionMapping(value="/management/collections/index-data-analyzed", authority = ActionAuthority.Collections, authorityLevel = ActionAuthorityLevel.READABLE)
public class GetCollectionAnalyzedIndexDataAction extends AuthAction {
@Override
public void doAuthAction(ActionRequest request, ActionResponse response) throws Exception {
String collectionId = request.getParameter("collectionId");
int start = Integer.parseInt(request.getParameter("start", "0"));
int end = Integer.parseInt(request.getParameter("end", "0"));
String pkValue = request.getParameter("pkValue");
Writer writer = response.getWriter();
ResponseWriter resultWriter = getDefaultResponseWriter(writer);
IRService irService = ServiceManager.getInstance().getService(IRService.class);
CollectionContext collectionContext = irService.collectionContext(collectionId);
String indexNodeId = collectionContext.collectionConfig().getIndexNode();
NodeService nodeService = ServiceManager.getInstance().getService(NodeService.class);
Node indexNode = nodeService.getNodeById(indexNodeId);
GetCollectionAnalyzedIndexDataJob job = new GetCollectionAnalyzedIndexDataJob(collectionId, start, end, pkValue);
ResultFuture resultFuture = nodeService.sendRequest(indexNode, job);
CollectionAnalyzedIndexData data = null;
if (resultFuture != null) {
Object obj = resultFuture.take();
if (obj instanceof CollectionIndexData) {
data = (CollectionAnalyzedIndexData) obj;
}
}
resultWriter.object()
.key("collectionId").value(collectionId);
if (data == null || data.getAnalyzedData() == null) {
resultWriter.key("documentSize").value(0)
.key("fieldList").array().endArray()
.key("indexData").array().endArray();
} else {
resultWriter.key("documentSize").value(data.getDocumentSize());
resultWriter.key("fieldList").array();
for(String fieldId : data.getFieldList()) {
resultWriter.value(fieldId);
}
resultWriter.endArray();
resultWriter.key("indexData").array();
List<RowData> indexDataList = data.getIndexData();
List<RowData> pkDataList = data.getPkData();
List<RowData> analyzedDataList = data.getAnalyzedData();
List<Boolean> isDeletedList = data.getIsDeletedList();
for(int i = 0; i < indexDataList.size(); i++) {
RowData pkData = null;
RowData indexData = indexDataList.get(i);
RowData analyzedData = analyzedDataList.get(i);
if(pkDataList != null && pkDataList.size() > 0) {
pkData = pkDataList.get(i);
}
resultWriter.object();
resultWriter.key("segmentId").value(indexData.getSegmentId());
resultWriter.key("primaryKeys").object();
if(pkData != null){
String[][] pkFieldData = pkData.getFieldData();
for(int k = 0; k < pkFieldData.length; k++) {
resultWriter.key(pkFieldData[k][0]).value(pkFieldData[k][1]);
}
}
resultWriter.endObject();
resultWriter.key("row").object();
String[][] fieldData = indexData.getFieldData();
String[][] analyzedFieldData = analyzedData.getFieldData();
for(int k = 0; k < fieldData.length; k++) {
resultWriter.key(fieldData[k][0]).value(fieldData[k][1]);
resultWriter.key(analyzedFieldData[k][0]+"-ANALYZED").value(analyzedFieldData[k][1]);
}
resultWriter.key("isDeleted").value(isDeletedList.get(i));
resultWriter.endObject();
resultWriter.endObject();
}
resultWriter.endArray();
}
resultWriter.endObject();
resultWriter.done();
}
}