stress test of the jsonserver

This commit is contained in:
Sida Wang 2017-01-20 17:58:48 -08:00
parent 9f1ce55f9f
commit 8cf34edb09
5 changed files with 164 additions and 11 deletions

View File

@ -6,12 +6,10 @@ import java.nio.file.Files;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@ -23,13 +21,10 @@ import org.testng.collections.Lists;
import com.google.common.collect.ImmutableList;
import edu.stanford.nlp.sempre.Master.Options;
import edu.stanford.nlp.sempre.Master.Response;
import edu.stanford.nlp.sempre.interactive.ActionFormula;
import edu.stanford.nlp.sempre.interactive.BlockFn;
import edu.stanford.nlp.sempre.interactive.DefinitionAligner;
import edu.stanford.nlp.sempre.interactive.FlatWorld;
import edu.stanford.nlp.sempre.interactive.DefinitionAligner.Match;
import edu.stanford.nlp.sempre.interactive.GrammarInducer;
import fig.basic.IOUtils;
import fig.basic.LispTree;
@ -191,7 +186,9 @@ public final class ILUtils {
LogInfo.logs("exHead: %s", exHead.getTokens());
exHead.predDerivations = Lists.newArrayList(bodyDeriv);
refEx.value = exHead;
if (refEx != null) {
refEx.value = exHead;
}
return ILUtils.induceRules(exHead.getTokens(),
ILUtils.utterancefromJson(jsonDef), bodyDeriv, state.chartList);
}
@ -304,7 +301,9 @@ public final class ILUtils {
Map<String, Object> json = Json.readMapHard(l);
String command = json.get("log").toString();
Session trainer = master.getSession(json.get("id").toString());
executor.execute(() -> master.handleCommand(trainer, command, master.new Response()));
executor.execute(() -> {
master.handleCommand(trainer, command, master.new Response());
});
});
} else if (fileName.endsWith(".lisp")) {
stream.forEach(l -> {

View File

@ -250,7 +250,7 @@ public class JsonServer {
this.master = master;
}
void run() {
public void run() {
try {
String hostname = fig.basic.SysInfoUtils.getHostName();
HttpServer server = HttpServer.create(new InetSocketAddress(opts.port), 10);
@ -262,7 +262,7 @@ public class JsonServer {
server.createContext("/", new Handler());
server.setExecutor(pool);
server.start();
LogInfo.logs("JSON Server started at http://%s:%s/sempre", hostname, opts.port);
LogInfo.logs("JSON Server (%d threads) started at http://%s:%s/sempre", opts.numThreads, hostname, opts.port);
LogInfo.log("Press Ctrl-D to terminate.");
while (LogInfo.stdin.readLine() != null) { }
LogInfo.log("Shutting down server...");

View File

@ -452,7 +452,7 @@ public class Master {
long approxSeq = ex.getLemmaTokens().stream().filter(s -> s.contains(";")).count();
if (approxSeq >= 8)
response.lines.add("You are taking many actions in one step, consider defining some of them.");
response.lines.add("You are taking many actions in one step, consider defining some of steps as one single step.");
if (approxSeq >= ILUtils.opts.maxSequence)
response.lines.add(String.format("way too many steps in one command (%d), refusing to execute.", approxSeq));

View File

@ -14,7 +14,6 @@ import fig.basic.Option;
/**
* return a block sequencing all the children
*
* @author sidaw
*/
public class BlockFn extends SemanticFn {

View File

@ -0,0 +1,155 @@
package edu.stanford.nlp.sempre.interactive;
import static org.testng.AssertJUnit.assertEquals;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import fig.basic.*;
import edu.stanford.nlp.sempre.*;
import edu.stanford.nlp.sempre.Master.Response;
import edu.stanford.nlp.sempre.Parser.Spec;
import org.testng.Assert;
import org.testng.asserts.SoftAssert;
import org.testng.asserts.Assertion;
import org.testng.annotations.Test;
import org.testng.collections.Lists;
import com.google.common.collect.Sets;
/**
* Test server threading
* @author Sida Wang
*/
public class StressTest {
Assertion hard = new Assertion();
Assertion soft = new SoftAssert();
@Test public void realQueryTest() {
//String fileName = "int-output/interactive.log";
while(true) {
LogInfo.begin_track("setsTest");
//T.printAllRules();
//A.assertAll();
long startTime = System.nanoTime();
String fileName = "/Users/sidaw/turk_acl17/int-output-0119/json/sidaw.log.json";
{
try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
LogInfo.logs("Reading %s", fileName);
if (fileName.endsWith(".json") || fileName.endsWith(".log")) {
stream.forEach(l -> {
Map<String, Object> json = Json.readMapHard(l);
String command = json.get("log").toString();
try {
sempreQuery(command);
//Thread.sleep(10);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
});
}
} catch (IOException e) {
e.printStackTrace();
} finally {
long endTime = System.nanoTime();
LogInfo.logs("Stresstest time = %d ns or %.4f s", (endTime - startTime), (endTime - startTime)/1.0e9);
}
}
LogInfo.end_track();
}
}
@Test public void stressTest() throws IOException, InterruptedException {
LogInfo.begin_track("stressTest");
List<String> queries = Lists.newArrayList("(:q \"add red; add yellow; select left\")",
"(:accept \"add red\" \"(: add red here)\")",
"(:q \"repeat 3 [repeat 3 [select top; add red]]\")"
);
Random rand = new Random();
// continue to spam the server
while (LogInfo.stdin.readLine() != null) {
sempreQuery(queries.get(rand.nextInt(queries.size())));
Thread.sleep(10);
}
LogInfo.end_track();
}
private static void sempreQuery(String query) throws UnsupportedEncodingException {
String params = "q=" + URLEncoder.encode(query, "UTF-8");
// params = URLEncoder.encode(params);
String url = "http://localhost:8410/sempre?";
LogInfo.log(params);
String response = executePost(url + params,"");
LogInfo.log(response);
}
private static String executePost(String targetURL, String urlParameters) {
HttpURLConnection connection = null;
try {
//Create connection
URL url = new URL(targetURL);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
connection.setRequestProperty("Content-Length",
Integer.toString(urlParameters.getBytes().length));
connection.setRequestProperty("Content-Language", "en-US");
connection.setUseCaches(false);
connection.setDoOutput(true);
//Send request
DataOutputStream wr = new DataOutputStream (
connection.getOutputStream());
wr.writeBytes(urlParameters);
wr.close();
//Get Response
InputStream is = connection.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
StringBuilder response = new StringBuilder(); // or StringBuffer if Java version 5+
String line;
while ((line = rd.readLine()) != null) {
response.append(line);
response.append('\r');
}
rd.close();
return response.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (connection != null) {
connection.disconnect();
}
}
}
}