package com.cadrlife.devsearch.agent.service.analysis;
import com.cadrlife.devsearch.agent.AgentModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
public class JavaReferenceFinderTestMain {
public static final String INDEX = "devsearch";
TimeValue keepAlive = new TimeValue(5, TimeUnit.MINUTES);
public static void main(String[] args) {
AgentModule agentModule = new AgentModule();
agentModule.setConfigFile("C:/temp/dev-search/dev-search-agent.properties");
agentModule.setCheckoutPath("C:/temp/dev-search/checkout");
Injector injector = Guice.createInjector(agentModule);
Client esClient = injector.getInstance(Client.class);
try {
new JavaReferenceFinderTestMain().go(esClient);
} finally {
esClient.close();
}
esClient.close();
}
private void go(Client esClient) {
JavaReferenceFinder javaReferenceFinder = new JavaReferenceFinder(esClient, INDEX);
SearchResponse searchResp = esClient.prepareSearch(INDEX)
.setTypes("doc")
.setSearchType(SearchType.SCAN)
.setQuery(QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("repo", "Stash-PG"))
.must(QueryBuilders.termQuery("project", "Vinzilla"))
.must(QueryBuilders.termQuery("javaName", "OdometerCompositeRule"))
)
.setScroll(keepAlive)
.setSize(50)
.execute().actionGet();
System.out.println(searchResp);
long totalHits = searchResp.getHits().getTotalHits();
long hitsComplete = 0;
while(true) {
SearchResponse scrollResp = esClient.prepareSearchScroll(searchResp.getScrollId())
.setScroll(keepAlive)
.execute()
.actionGet();
BulkRequestBuilder bulk = esClient.prepareBulk();
if (scrollResp.getHits().getHits().length == 0) {
break;
}
System.out.println((totalHits - hitsComplete) +" remaining");
for (SearchHit hit : scrollResp.getHits()) {
Map<String, Object> source = hit.getSource();
System.out.println("Found " + source.get("filePath"));
Object javaName = source.get("javaName");
System.out.println("JavaName " + javaName);
Object javaImports = source.get("javaImports");
if (null != javaImports && javaImports instanceof Iterable) {
List<String> references = new ArrayList<>();
javaReferenceFinder.extractImportsToReferences((Iterable) javaImports, references);
javaReferenceFinder.addSamePackageReferences(source.get("javaPackage").toString(), javaName.toString(), source.get("content").toString(), references);
// System.out.println(references);
bulk.add(esClient.prepareUpdate(INDEX, JavaReferenceFinder.DOC_INDEX, hit.getId())
.setDoc("references", references));
}
// findByJavaName(javaName.toString());
// }
// if (null != javaName) {
// findByJavaName(javaName.toString());
// }
// bulk.add(client.prepareIndex("devsearch",hit.type(),hit.getId()).setSource(hit.getSource()));
}
hitsComplete += scrollResp.getHits().hits().length;
if (bulk.numberOfActions() > 0) {
BulkResponse bulkResponse = bulk.execute().actionGet();
if (bulkResponse.hasFailures()) {
System.out.println("Bulk failed" + bulkResponse.buildFailureMessage());
break;
}
}
}
}
}