diff options
Diffstat (limited to 'src')
7 files changed, 90 insertions, 94 deletions
diff --git a/src/main/java/edu/brown/cs/student/term/DatabaseQuerier.java b/src/main/java/edu/brown/cs/student/term/DatabaseQuerier.java index f4be9b3..3cb6c79 100644 --- a/src/main/java/edu/brown/cs/student/term/DatabaseQuerier.java +++ b/src/main/java/edu/brown/cs/student/term/DatabaseQuerier.java @@ -49,6 +49,9 @@ public class DatabaseQuerier{ while(rs.next()){ stocks.add(rs.getString(1)); } + + rs.close(); + prep.close(); return stocks; } @@ -84,6 +87,9 @@ public class DatabaseQuerier{ rs.getDouble(8))); } + rs.close(); + prep.close(); + return trades; } } diff --git a/src/main/java/edu/brown/cs/student/term/Main.java b/src/main/java/edu/brown/cs/student/term/Main.java index 55efbce..b61d80f 100644 --- a/src/main/java/edu/brown/cs/student/term/Main.java +++ b/src/main/java/edu/brown/cs/student/term/Main.java @@ -1,8 +1,10 @@ package edu.brown.cs.student.term; +import com.google.common.collect.ImmutableMap; import edu.brown.cs.student.term.hub.Holder; import edu.brown.cs.student.term.hub.HubSearch; import edu.brown.cs.student.term.hub.LinkMapper; +import edu.brown.cs.student.term.hub.SuspicionRanker; import edu.brown.cs.student.term.repl.Command; import edu.brown.cs.student.term.repl.REPL; import edu.brown.cs.student.term.repl.commands.LoadCommand; @@ -10,30 +12,12 @@ import edu.brown.cs.student.term.repl.commands.SetupCommand; import joptsimple.OptionParser; import joptsimple.OptionSet; -import java.sql.Connection; -import java.sql.Date; -import java.sql.DriverManager; -import java.sql.SQLException; -import java.sql.Statement; import java.time.Instant; import java.util.HashMap; -import java.io.*; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import joptsimple.OptionParser; -import joptsimple.OptionSet; import spark.*; import spark.template.freemarker.FreeMarkerEngine; - -import java.io.BufferedReader; -import java.io.InputStreamReader; - -import com.google.common.collect.ImmutableMap; - import freemarker.template.Configuration; //fix @@ -41,46 +25,19 @@ import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; -import java.sql.ResultSet; -import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.*; -import com.google.common.collect.ImmutableMap; import com.google.gson.Gson; -import joptsimple.OptionParser; -import joptsimple.OptionSet; -import spark.ExceptionHandler; -import spark.ModelAndView; -import spark.QueryParamsMap; -import spark.Request; -import spark.Response; -import spark.Route; -import spark.Filter; -import spark.Spark; -import spark.TemplateViewRoute; -import spark.template.freemarker.FreeMarkerEngine; - -import freemarker.template.Configuration; - import org.json.JSONObject; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; -import java.sql.Statement; - /** * The Main class of our project. This is where execution begins. */ public final class Main { - // TODO: fix temproary solution public static JSONObject xmlLinks = null; - - private static final Gson GSON = new Gson(); private static final int DEFAULT_PORT = 4567; @@ -109,6 +66,9 @@ public final class Main { if (options.has("gui")) { runSparkServer((int) options.valueOf("port")); + //will auto connect to correct db when running gui! + SetupCommand setConnection = new SetupCommand(); + setConnection.run(new String[]{"data/trades.sqlite3"}); } HashMap<String, Command> commandHashMap = new HashMap<>(); @@ -156,31 +116,40 @@ public final class Main { return "OK"; }); - - Spark.before((request, response) -> response.header("Access-Control-Allow-Origin", "*")); +<<<<<<< HEAD + Spark.post("/data", new SuspicionRankHandler()); +======= Spark.post("/data", new DataHandler()); Spark.post("/profit", new ProfitQueryHandler()); +>>>>>>> 73ad5303d59cd93a115401b1bac4aad87dfb1cb7 } - - private static class DataHandler implements Route { + /** + * Gets the list of holders with id, name, and suspicion rank + */ + private static class SuspicionRankHandler implements Route { @Override + /** + * Expects that the request will contain two longs that are the start/end + * dates for the suspicion rank to run on as epoch time in milliseconds + */ public Object handle(Request request, Response response) throws Exception { - String str = request.body(); - xmlLinks = new JSONObject(str); //this is all the filedAt times and xml files - + //String str = request.body(); + //xmlLinks = new JSONObject(str); //this is all the filedAt times and xml files try { - DatabaseQuerier db = new DatabaseQuerier("data/trades.sqlite3"); - LinkMapper lm = new LinkMapper(db); - - Instant start = Instant.parse("2021-03-30T05:00:00.00Z"); - //12 am on 3/28 in UTC - Instant end = Instant.parse("2021-04-12T05:00:00.00Z"); - lm.makeFollowerLinks(start, end); - HubSearch hub = new HubSearch(lm); - Map<Holder, Double> him = hub.runHubSearch(start, end); - return GSON.toJson(him); + DatabaseQuerier db = SetupCommand.getDq(); + SuspicionRanker ranker = new SuspicionRanker(db); + + JSONObject data = new JSONObject(request.body()); + + long startMilli = data.getLong("start"); + long endMilli = data.getLong("end"); + Instant start = Instant.ofEpochMilli(startMilli); + Instant end = Instant.ofEpochMilli(endMilli); + List<Holder> suspiciousHolders = ranker.getSuspicionScoreList(start, end); + Map<String, Object> variables = ImmutableMap.of("holders", suspiciousHolders); + return GSON.toJson(variables); } catch (Exception e) { System.out.println("DBQuerier Test, couldn't connect to db???"); return "Error"; @@ -222,6 +191,4 @@ public final class Main { res.body(stacktrace.toString()); } } - - }
\ No newline at end of file diff --git a/src/main/java/edu/brown/cs/student/term/hub/Holder.java b/src/main/java/edu/brown/cs/student/term/hub/Holder.java index abe59df..66def5e 100644 --- a/src/main/java/edu/brown/cs/student/term/hub/Holder.java +++ b/src/main/java/edu/brown/cs/student/term/hub/Holder.java @@ -5,6 +5,7 @@ import java.util.Objects; public class Holder { private int id; private String name; + private double suspicionScore; public Holder(int id, String name){ this.id = id; @@ -15,6 +16,12 @@ public class Holder { return id; } + public void setSuspicionScore(double sus){ + this.suspicionScore = sus; + } + + public double getSuspicionScore(){return suspicionScore;} + public String getName() { return name; } diff --git a/src/main/java/edu/brown/cs/student/term/hub/HubSearch.java b/src/main/java/edu/brown/cs/student/term/hub/HubSearch.java index 4d5755c..baee5af 100644 --- a/src/main/java/edu/brown/cs/student/term/hub/HubSearch.java +++ b/src/main/java/edu/brown/cs/student/term/hub/HubSearch.java @@ -11,12 +11,10 @@ public class HubSearch { LinkMapper mapper; Map<Holder, Set<Holder>> followerToLeaderMap = new HashMap<>(); - //TODO: Make this just take in a map from holder -> set of holder public HubSearch(LinkMapper mapper){ this.mapper = mapper; } - //TODO: reevaluate this basic version and tweak to customize public Map<Holder, Double> runHubSearch(Instant start, Instant end){ followerToLeaderMap = mapper.makeFollowerLinks(start, end); int numHolders = followerToLeaderMap.size(); diff --git a/src/main/java/edu/brown/cs/student/term/hub/LinkMapper.java b/src/main/java/edu/brown/cs/student/term/hub/LinkMapper.java index 8bc8cf9..f4bc2c4 100644 --- a/src/main/java/edu/brown/cs/student/term/hub/LinkMapper.java +++ b/src/main/java/edu/brown/cs/student/term/hub/LinkMapper.java @@ -54,6 +54,7 @@ public class LinkMapper { return followerToLeaders; } + //leader => follower => List of trades in common //TODO: Try to create both leader => follower and follower => leader map at once //only if necessary tho! diff --git a/src/main/java/edu/brown/cs/student/term/hub/SuspicionRanker.java b/src/main/java/edu/brown/cs/student/term/hub/SuspicionRanker.java index a1196d8..7cb7e32 100644 --- a/src/main/java/edu/brown/cs/student/term/hub/SuspicionRanker.java +++ b/src/main/java/edu/brown/cs/student/term/hub/SuspicionRanker.java @@ -1,4 +1,49 @@ package edu.brown.cs.student.term.hub; +import edu.brown.cs.student.term.DatabaseQuerier; +import edu.brown.cs.student.term.ProfitCalculation; +import edu.brown.cs.student.term.hub.Holder; +import edu.brown.cs.student.term.hub.HubSearch; +import edu.brown.cs.student.term.hub.LinkMapper; +import edu.brown.cs.student.term.repl.Command; + +import java.sql.SQLException; +import java.time.Instant; +import java.sql.Date; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + public class SuspicionRanker { + + DatabaseQuerier querier; + public SuspicionRanker(DatabaseQuerier db){ + this.querier = db; + } + + public List<Holder> getSuspicionScoreList(Instant start, Instant end){ + List<Holder> suspicionList = new ArrayList<>(); + try { + LinkMapper lm = new LinkMapper(querier); + HubSearch hub = new HubSearch(lm); + Map<Holder, Double> holderToHubScore = hub.runHubSearch(start, end); + + ProfitCalculation pc = new ProfitCalculation(DatabaseQuerier.getConn(), "", + new Date(start.toEpochMilli()), + new Date(end.toEpochMilli())); + + Map<Integer, Double> profitMap = pc.getProfitMap(); + + for(Holder guy: holderToHubScore.keySet()){ + Double profitScore = profitMap.get(guy.getId()); + Double suspicionScore = (holderToHubScore.get(guy)*0.2 + + profitScore * 0.8) * 100; + guy.setSuspicionScore(suspicionScore); + suspicionList.add(guy); + } + } catch (Exception e) { + System.out.println("ERROR: Could not connect to database querier"); + } + return suspicionList; + } } diff --git a/src/main/java/edu/brown/cs/student/term/repl/commands/SetupCommand.java b/src/main/java/edu/brown/cs/student/term/repl/commands/SetupCommand.java index e19117c..a6ef1f0 100644 --- a/src/main/java/edu/brown/cs/student/term/repl/commands/SetupCommand.java +++ b/src/main/java/edu/brown/cs/student/term/repl/commands/SetupCommand.java @@ -34,34 +34,6 @@ public class SetupCommand implements Command { System.out.println(error); return error; } - - try{ - /** Just for testing purposes **/ - //12 am on 3/12 in UTC - Instant start = Instant.parse("2021-03-12T05:00:00.00Z"); - //12 am on 3/27 in UTC - Instant end = Instant.parse("2021-03-27T05:00:00.00Z"); - - System.out.println(end.toEpochMilli()); - System.out.println(start.getEpochSecond()); - - ZonedDateTime zdt = ZonedDateTime.ofInstant(start, ZoneId.of("America/New_York")); - System.out.println(zdt.toString()); - List<List<Trade>> trades = dq.getAllTradesByStock(start, end); - - int sum = 0; - for(List<Trade> t: trades){ - System.out.println(t); - sum += t.size(); - } - - System.out.println("num of trades: " + sum); - - - } catch(Exception e){ - e.printStackTrace(); - } - return error; } |