package org.fastcatsearch.http.action.management.collections;
import java.io.Writer;
import java.util.Date;
import java.util.List;
import org.fastcatsearch.db.DBService;
import org.fastcatsearch.db.InternalDBModule.MapperSession;
import org.fastcatsearch.db.mapper.IndexingResultMapper;
import org.fastcatsearch.db.vo.IndexingStatusVO;
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.util.Formatter;
import org.fastcatsearch.service.ServiceManager;
import org.fastcatsearch.util.ResponseWriter;
@ActionMapping(value = "/management/collections/indexing-result", authority = ActionAuthority.Collections, authorityLevel = ActionAuthorityLevel.READABLE)
public class GetIndexingResultAction extends AuthAction {
@Override
public void doAuthAction(ActionRequest request, ActionResponse response) throws Exception {
String collectionId = request.getParameter("collectionId");
// TODO collection의 index node인지 확인하고 해당 노드가 아니면 전달하여 받아온다.
// 해당노드이면 그대로 수행한다.
DBService dbService = ServiceManager.getInstance().getService(DBService.class);
MapperSession<IndexingResultMapper> mapperSession = dbService.getMapperSession(IndexingResultMapper.class);
IndexingResultMapper indexingResultMapper = mapperSession.getMapper();
List<IndexingStatusVO> indexingResultList = indexingResultMapper.getEntryList(collectionId);
Writer writer = response.getWriter();
ResponseWriter resultWriter = getDefaultResponseWriter(writer);
resultWriter.object().key("indexingResult").object();
try {
if (indexingResultList != null) {
for (IndexingStatusVO vo : indexingResultList) {
resultWriter.key(vo.type.name()).object()
.key("collectionId").value(vo.collectionId)
.key("status").value(vo.status.name())
.key("docSize").value(vo.docSize)
.key("insertSize").value(vo.insertSize)
.key("updateSize").value(vo.updateSize)
.key("deleteSize").value(vo.deleteSize)
.key("isScheduled").value(vo.isScheduled ? "Scheduled" : "Manual")
.key("startTime").value(Formatter.formatDate(new Date(vo.startTime.getTime())))
.key("endTime").value(Formatter.formatDate(new Date(vo.endTime.getTime())))
.key("duration").value(Formatter.getFormatTime(vo.duration))
.endObject();
}
}
} finally {
mapperSession.closeSession();
}
resultWriter.endObject().endObject();
resultWriter.done();
}
}