aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/edu/brown/cs/student/term/DatabaseQuerier.java6
-rw-r--r--src/main/java/edu/brown/cs/student/term/Main.java95
-rw-r--r--src/main/java/edu/brown/cs/student/term/hub/Holder.java7
-rw-r--r--src/main/java/edu/brown/cs/student/term/hub/HubSearch.java2
-rw-r--r--src/main/java/edu/brown/cs/student/term/hub/LinkMapper.java1
-rw-r--r--src/main/java/edu/brown/cs/student/term/hub/SuspicionRanker.java45
-rw-r--r--src/main/java/edu/brown/cs/student/term/repl/commands/SetupCommand.java28
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;
}