From fad1e0fc096897f65c8d920c1f88488d368ce736 Mon Sep 17 00:00:00 2001 From: Conor Flynn Date: Sun, 30 Oct 2022 20:10:15 -0400 Subject: [PATCH] Stable version supporting AmberData - aave-protocol-dated --- .../Internal Manual/Packet Spreadsheet.xlsx | Bin 19498 -> 19618 bytes .../src/main/java/org/core/logger/Logger.java | 20 ++ .../org/framework/router/ResponseFactory.java | 7 +- .../org/out/consumers/SocketConsumer.java | 1 - .../java/org/out/socket/SocketManager.java | 6 + .../src/main/java/org/properties/Config.java | 2 +- .../amberdata/AmberDataRequestHandler.java | 227 ++++++++++++++++-- .../amberdata/AmberDataRequestPacket.java | 37 +++ .../connections/AmberDataConnection.java | 36 +-- .../TemplateExternalConnection.java | 6 - .../handler/ExternalStreamConnection.java | 5 +- .../handler/ExternalStreamHandler.java | 9 +- .../handler/ExternalStreamManager.java | 5 +- .../local/handler/LocalStreamConnection.java | 1 + .../local/handler/LocalStreamHandler.java | 49 +--- .../registry/StreamRegistryController.java | 5 +- .../connections/TestAmberDataConnection.java | 28 ++- .../connections/test_amberdata_config.txt | 2 +- .../src/main/java/org/properties/Config.java | 3 +- .../java/org/rest/application/Endpoint.java | 15 +- .../src/test/connection/socket/LocalTest.java | 94 ++++++++ ...ketConnectionTest.java => ServerTest.java} | 18 +- 22 files changed, 458 insertions(+), 118 deletions(-) create mode 100644 DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/amberdata/AmberDataRequestPacket.java create mode 100644 DeFi-Data-Engine/Testing Environment/src/test/connection/socket/LocalTest.java rename DeFi-Data-Engine/Testing Environment/src/test/connection/socket/{SocketConnectionTest.java => ServerTest.java} (75%) diff --git a/Data Engine/Documents/Internal Manual/Packet Spreadsheet.xlsx b/Data Engine/Documents/Internal Manual/Packet Spreadsheet.xlsx index c9026799aa69538e0f6d9cd3c2a6a49842cbbadb..f6cb70fd74de4459af658adfc5ea49f8781d617c 100644 GIT binary patch delta 9941 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 delta 9827 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 NAx8=CCH0T({{VGdo;v^l diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/core/logger/Logger.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/core/logger/Logger.java index 68b0bdfd..4b849f56 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/core/logger/Logger.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/core/logger/Logger.java @@ -8,6 +8,10 @@ public class Logger { + public static final void log(String message) { + System.out.println(messageFormat("INFO", message)); + } + public static final void log(Packet packet) { System.out.println(packetFormat(packet)); } @@ -16,6 +20,10 @@ public static final void log(Response response) { System.out.println(responseFormat(response)); } + public static final void warn(String message) { + System.out.println(messageFormat("WARN", message)); + } + public static final void warn(Packet packet) { System.err.println(packetFormat(packet)); } @@ -24,6 +32,10 @@ public static final void warn(Response response) { System.err.println(responseFormat(response)); } + public static final void terminate(String message) { + System.err.println(messageFormat("ERROR", message)); + } + public static final void terminate(Packet packet) { System.err.println(packetFormat(packet)); System.exit(1); @@ -34,6 +46,14 @@ public static final void terminate(Response response) { System.exit(1); } + private static final String messageFormat(String type, String message) { + return String.format("[%s] [%-10s] %-9s- [%s]", + time(), + Thread.currentThread().getName(), + type, + message); + } + private static final String packetFormat(Packet packet) { return String.format("[%s] [%-10s] PACKET - [%3s -> %3s] [%4s] [%s]", time(), diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/framework/router/ResponseFactory.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/framework/router/ResponseFactory.java index 050e0e2c..0bbc2991 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/framework/router/ResponseFactory.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/framework/router/ResponseFactory.java @@ -1,6 +1,7 @@ package org.framework.router; import java.util.Arrays; +import java.util.HashMap; public class ResponseFactory { @@ -27,7 +28,7 @@ public static Response response200(String data) { } public static Response response220(String hash) { - return Response.create(220, String.format("Stream with generated hash <%s> already exists. Using existing stream for connections.", hash), String.format("true, %s", hash)); + return Response.create(220, String.format("Stream with generated hash <%s> already exists. Using existing stream for connections.", hash), String.format("%s", hash)); } public static Response response400(String router) { @@ -96,6 +97,10 @@ public static Response response429(String hash, String request, String response) return Response.create(429, String.format("Stream with hash <%s> returned an irregular response when attempting to subscribe to <%s>. Response returned is: <%s>", hash, request, response)); } + public static Response response430(HashMap data) { + return Response.create(430, String.format("Stream hash could not be generated with the given properties: <%s>", data)); + } + public static Response response440(String source) { return Response.create(440, String.format("Requested data source <%s> does not exist in cache.", source)); } diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/consumers/SocketConsumer.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/consumers/SocketConsumer.java index 59ea4084..4bd7b97e 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/consumers/SocketConsumer.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/consumers/SocketConsumer.java @@ -59,7 +59,6 @@ public void run() { // extract non-essential data String[] data = Arrays.copyOfRange(input, 2, input.length); - String tag = input[0]; String sub_tag = input[1]; diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/socket/SocketManager.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/socket/SocketManager.java index e32aa95f..7148a737 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/socket/SocketManager.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/socket/SocketManager.java @@ -9,6 +9,8 @@ import java.util.HashSet; import java.util.UUID; +import org.core.logger.Logger; + public class SocketManager { private static final HashMap servers = new HashMap(); @@ -53,6 +55,8 @@ public synchronized static String accept(int port) { out.write(key.getBytes()); out.write(10); + Logger.log("Successfully connected to external socket. Key <" + key + ">"); + if(connections.containsKey(key)) connections.get(key).close(); @@ -100,6 +104,8 @@ public synchronized static boolean accept(int port, String required_key) { if(!synced(key)) throw new Exception("Connection inflow and outflow not synchronized."); + + Logger.log("Successfully connected to reserved socket. Key <" + key + ">"); return true; diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/properties/Config.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/properties/Config.java index c3d199fa..46bd8dc7 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/properties/Config.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/properties/Config.java @@ -44,7 +44,7 @@ public class Config { stream_properties.put("rest.socket.address", "localhost"); stream_properties.put("rest.socket.port", "61100"); stream_properties.put("rest.socket.key", "rest-key-reserved"); - stream_properties.put("output.socket.address", "localhost"); + stream_properties.put("output.socket.address", "defi-de.idea.rpi.edu"); stream_properties.put("output.socket.port", "61200"); stream_properties.put("local.stream.type", "mongo_db"); stream_properties.put("mongodb.properties.uri", "mongodb://localhost:27017"); diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/amberdata/AmberDataRequestHandler.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/amberdata/AmberDataRequestHandler.java index 87116925..b53b038b 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/amberdata/AmberDataRequestHandler.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/amberdata/AmberDataRequestHandler.java @@ -1,10 +1,17 @@ package org.stream.external.connected.amberdata; +import java.io.IOException; import java.lang.reflect.Method; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Calendar; import java.util.HashMap; +import org.core.logger.Logger; import org.framework.router.ResponseFactory; +import org.json.JSONArray; import org.json.JSONObject; +import org.properties.Config; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -23,31 +30,23 @@ public class AmberDataRequestHandler { try { // add all methods to the handler - requests.put("lending-latest", classobj.getMethod("requestLendingLatest", String.class, String.class)); - + requests.put("lending-latest", classobj.getMethod("requestLendingLatest", AmberDataRequestPacket.class)); + requests.put("aave-protocol-dated", classobj.getMethod("requestAaveProtocolDated", AmberDataRequestPacket.class)); } catch (Exception e) { e.printStackTrace(); ResponseFactory.responseNotHandled("Irregular method call for AmberDataRequestHandler."); } } - public static Object[] request(String key, String request) { - String data = request; - int splitIndex = data.indexOf(','); - String type = ""; - if(splitIndex != -1) { - type = data.substring(0, splitIndex).trim(); - data = data.substring(splitIndex + 1).trim(); - } else { - type = data.trim(); - data = ""; - } - - if(!requests.containsKey(type)) - return new Object[] {false, null}; + public static Object[] request(AmberDataRequestPacket packet) { + if(!requests.containsKey(packet.getData("request"))) + return new Object[] {false, "Request does not exist."}; + + if(packet.getKey() == null) + return new Object[] {false, " cannot be null."}; try { - return (Object[])requests.get(type).invoke(null, key, data); + return (Object[])requests.get(packet.getData("request")).invoke(null, packet); } catch (Exception e) { e.printStackTrace(); ResponseFactory.responseNotHandled("Irregular method call for AmberDataRequestHandler."); @@ -55,12 +54,12 @@ public static Object[] request(String key, String request) { } } - public static Object[] requestLendingLatest(String key, String param) { + public static Object[] requestLendingLatest(AmberDataRequestPacket packet) { Request request = new Request.Builder() .url("https://web3api.io/api/v2/market/defi/lending/exchanges/aave/latest") .get() .addHeader("Accept", "application/json") - .addHeader("x-api-key", key) + .addHeader("x-api-key", packet.getData("key")) .build(); try { @@ -79,4 +78,194 @@ public static Object[] requestLendingLatest(String key, String param) { return new Object[] {false, null}; } } + + private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(Config.getProperty("app", "general.data.dateformat")); + public static Object[] requestAaveProtocolDated(AmberDataRequestPacket packet) { + LocalDate next = LocalDate.parse(packet.getData("date"), formatter); + next = next.plusDays(1); + String tmr = next.format(formatter); + + String url = String.format("https://web3api.io/api/v2/defi/lending/aavev2/protocol?startDate=%s&endDate=%s", + packet.getData("date") + "T01:00:00", + tmr + "T01:00:00"); + + OkHttpClient client = new OkHttpClient(); + + Request request = new Request.Builder() + .url(url) + .get() + .addHeader("accept", "application/json") + .addHeader("x-api-key", "UAK7ed69235426c360be22bfc2bde1809b6") + .build(); + + okhttp3.Response response; + try { + response = client.newCall(request).execute(); + JSONObject json = new JSONObject(response.body().string()); + + if(json.toString().equals("") || !json.has("description")) + return new Object[] {false, "JSON Object returned empty or invalid contents."}; + + if(!response.isSuccessful() || json.getInt("status") != 200 + || !json.getString("description").equals("Successful request")) + return new Object[]{false, json.getString("description")}; + + if(!json.has("payload") || !json.getJSONObject("payload").has("data")) + return new Object[] {false, "Malformed Aave packet"}; + + JSONArray arr = json.getJSONObject("payload").getJSONArray("data"); + for(int i = 0; i < arr.length(); i++) { + JSONObject obj = arr.getJSONObject(i); + String action = obj.getString("action"); + switch(action) { + + case "UseReserveAsCollateral": + packet.getConnection().processRequest( + packet.getData("request"), + packet.getData("date"), + format("action", obj.getString("action"), + "timestamp", obj.get("timestamp").toString(), + "blockNumber", obj.getLong("blockNumber"), + "transactionHash", obj.getString("transactionHash"), + "logIndex", obj.getInt("logIndex"), + "assetId", obj.getString("assetId"), + "assetSymbol", obj.getString("assetSymbol"), + "marketId", obj.getString("marketId"), + "market", obj.getString("market"), + "reserveAsCollateralEnabled", obj.getBoolean("reserveAsCollateralEnabled"), + "user", obj.getString("user"))); + break; + + case "Deposit": + packet.getConnection().processRequest( + packet.getData("request"), + packet.getData("date"), + format("action", obj.getString("action"), + "timestamp", obj.get("timestamp").toString(), + "blockNumber", obj.getLong("blockNumber"), + "transactionHash", obj.getString("transactionHash"), + "logIndex", obj.getInt("logIndex"), + "assetId", obj.getString("assetId"), + "assetSymbol", obj.getString("assetSymbol"), + "marketId", obj.getString("marketId"), + "market", obj.getString("market"), + "user", obj.getString("user"), + "onBehalfOf", obj.getString("onBehalfOf"))); + break; + + case "Withdraw": + packet.getConnection().processRequest( + packet.getData("request"), + packet.getData("date"), + format("action", obj.getString("action"), + "timestamp", obj.get("timestamp").toString(), + "blockNumber", obj.getLong("blockNumber"), + "transactionHash", obj.getString("transactionHash"), + "logIndex", obj.getInt("logIndex"), + "assetId", obj.getString("assetId"), + "assetSymbol", obj.getString("assetSymbol"), + "marketId", obj.getString("marketId"), + "market", obj.getString("market"), + "amount", obj.get("amount").toString(), + "user", obj.getString("user"), + "to", obj.getString("to"))); + break; + + case "LiquidationCall": + packet.getConnection().processRequest( + packet.getData("request"), + packet.getData("date"), + format("action", obj.getString("action"), + "timestamp", obj.get("timestamp").toString(), + "blockNumber", obj.getLong("blockNumber"), + "transactionHash", obj.getString("transactionHash"), + "logIndex", obj.getInt("logIndex"), + "collateralAssetId", obj.getString("collateralAssetId"), + "collateralAssetSymbol", obj.getString("collateralAssetSymbol"), + "principalAssetId", obj.getString("principalAssetId"), + "principalAssetSymbol", obj.getString("principalAssetSymbol"), + "principalAmount", obj.get("principalAmount").toString(), + "marketId", obj.getString("marketId"), + "market", obj.getString("market"), + "liquidator", obj.getString("liquidator"))); + break; + + case "Repay": + packet.getConnection().processRequest( + packet.getData("request"), + packet.getData("date"), + format("action", obj.getString("action"), + "timestamp", obj.get("timestamp").toString(), + "blockNumber", obj.getLong("blockNumber"), + "transactionHash", obj.getString("transactionHash"), + "logIndex", obj.getInt("logIndex"), + "assetId", obj.getString("assetId"), + "assetSymbol", obj.getString("assetSymbol"), + "marketId", obj.getString("marketId"), + "market", obj.getString("market"), + "amount", obj.get("amount").toString(), + "user", obj.getString("user"), + "repayer", obj.getString("repayer"))); + break; + + case "Borrow": + packet.getConnection().processRequest( + packet.getData("request"), + packet.getData("date"), + format("action", obj.getString("action"), + "timestamp", obj.get("timestamp").toString(), + "blockNumber", obj.getLong("blockNumber"), + "transactionHash", obj.getString("transactionHash"), + "logIndex", obj.getInt("logIndex"), + "assetId", obj.getString("assetId"), + "assetSymbol", obj.getString("assetSymbol"), + "marketId", obj.getString("marketId"), + "market", obj.getString("market"), + "amount", obj.get("amount").toString(), + "borrowRate", obj.get("borrowRate").toString(), + "debt", obj.get("debt"), + "user", obj.getString("user"), + "onBehalfOf", obj.getString("onBehalfOf"))); + break; + + case "FlashLoan": + packet.getConnection().processRequest( + packet.getData("request"), + packet.getData("date"), + format("action", obj.getString("action"), + "timestamp", obj.get("timestamp").toString(), + "blockNumber", obj.getLong("blockNumber"), + "transactionHash", obj.getString("transactionHash"), + "logIndex", obj.getInt("logIndex"), + "assetId", obj.getString("assetId"), + "assetSymbol", obj.getString("assetSymbol"), + "marketId", obj.getString("marketId"), + "market", obj.getString("market"), + "amount", obj.get("amount").toString(), + "borrowRate", obj.get("totalFee").toString(), + "target", obj.get("target"), + "initiator", obj.getString("initiator"))); + + default: + Logger.warn("Unrecognized transaction type in : " + action); + } + } + + return new Object[] {true, ""}; + } catch (IOException e) { + e.printStackTrace(); + ResponseFactory.responseNotHandled("Unhandled exception cost."); + return new Object[] {false, null}; + } + } + + private static String format(Object... data) { + StringBuilder out = new StringBuilder(); + for(int i = 0; i < data.length; i++) { + out.append(data[i].toString()); + if(i != data.length - 1) + out.append(","); + } + return out.toString(); + } } \ No newline at end of file diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/amberdata/AmberDataRequestPacket.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/amberdata/AmberDataRequestPacket.java new file mode 100644 index 00000000..d6af5459 --- /dev/null +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/amberdata/AmberDataRequestPacket.java @@ -0,0 +1,37 @@ +package org.stream.external.connected.amberdata; + +import java.util.HashMap; + +import org.stream.external.connected.connections.AmberDataConnection; + +public class AmberDataRequestPacket { + + private final String key; + private final AmberDataConnection connection; + private final HashMap request; + + private AmberDataRequestPacket(String key, AmberDataConnection connection, HashMap request) { + this.key = key; + this.connection = connection; + this.request = request; + } + + public final String getKey() { + return key; + } + + public final AmberDataConnection getConnection() { + return connection; + } + + public final String getData(String key) { + if(!request.containsKey(key)) + return null; + + return request.get(key); + } + + public static AmberDataRequestPacket create(String key, AmberDataConnection connection, HashMap request) { + return new AmberDataRequestPacket(key, connection, request); + } +} diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/AmberDataConnection.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/AmberDataConnection.java index cdd57bdb..99bd8cdb 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/AmberDataConnection.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/AmberDataConnection.java @@ -4,9 +4,12 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.HashMap; +import java.util.HashSet; import org.framework.router.ResponseFactory; import org.json.JSONObject; +import org.stream.external.connected.amberdata.AmberDataRequestHandler; +import org.stream.external.connected.amberdata.AmberDataRequestPacket; import org.stream.external.handler.ExternalStreamConnection; import org.stream.external.handler.ExternalStreamManager; @@ -15,6 +18,13 @@ public class AmberDataConnection extends ExternalStreamConnection { + private static final HashSet requestTypes; + +static { + requestTypes = new HashSet<>(); + requestTypes.add("aave-protocol-dated"); +} + private boolean authorized = false; public AmberDataConnection(ExternalStreamManager manager, HashMap data) { @@ -29,7 +39,11 @@ public void init() { } - public String getHash(String data) { + public String getHash(HashMap data) { + if(!data.containsKey("key")) { + return null; + } + try { MessageDigest md = MessageDigest.getInstance("SHA-512"); byte[] bytes = md.digest(("salt" + data).getBytes()); @@ -105,12 +119,6 @@ public boolean stop() { return false; } - @Override - public String getHash(HashMap data) { - // TODO Auto-generated method stub - return null; - } - @Override public boolean containsSubscriptionType(String type) { // TODO Auto-generated method stub @@ -119,19 +127,11 @@ public boolean containsSubscriptionType(String type) { @Override public boolean containsRequestType(String type) { - // TODO Auto-generated method stub - return false; + return requestTypes.contains(type); } - + @Override public Object[] request(HashMap request) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Object[] request(HashMap request, String date) { - // TODO Auto-generated method stub - return null; + return AmberDataRequestHandler.request(AmberDataRequestPacket.create(data.get("key"), this, request)); } } diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/TemplateExternalConnection.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/TemplateExternalConnection.java index b42e47c4..5396f5de 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/TemplateExternalConnection.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/TemplateExternalConnection.java @@ -95,10 +95,4 @@ public Object[] request(HashMap request) { return new Object[] {false, ""}; } - - @Override - public Object[] request(HashMap request, String date) { - // TODO Auto-generated method stub - return null; - } } diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamConnection.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamConnection.java index c934d673..5f9af17f 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamConnection.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamConnection.java @@ -27,9 +27,7 @@ public ExternalStreamConnection(ExternalStreamManager manager, HashMap request); - public abstract Object[] request(HashMap request, String date); public abstract boolean start(); public abstract boolean stop(); diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamHandler.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamHandler.java index 2be7a9af..ba6ca306 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamHandler.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamHandler.java @@ -33,7 +33,6 @@ public Response processEXST(Packet packet) { return ResponseFactory.response200(String.format("%s", manager.containsStream(packet.getData("key")))); } - @SuppressWarnings("deprecation") // source: source of the given stream // auth_data[]: all keys associated with data public Response processINIT(Packet packet) { @@ -45,6 +44,8 @@ public Response processINIT(Packet packet) { // validate data String tempHash = manager.getHash(source, packet.getData()); + if(tempHash == null) + return ResponseFactory.response430(packet.getData()); if(manager.containsStream(tempHash)) return ResponseFactory.response220(tempHash); @@ -166,7 +167,11 @@ public Response processRQST(Packet packet) { return ResponseFactory.response428(key, request); Object[] response = manager.request(key, packet.getData()); - + + if(response == null) + return ResponseFactory.response501("Response from Manager.request should never be null. " + + "Improper implementation of ExternalStreamConnection."); + if((Boolean)response[0]) return ResponseFactory.response200(String.format("%s", (String)response[1])); diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamManager.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamManager.java index e6766035..ce1b8b8f 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamManager.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamManager.java @@ -216,7 +216,6 @@ protected Object[] addStream(String type, HashMap data) { * @param hash Hash of the stream returned by the {@link ExternalStreamConnection#getHash(String)} function. * @return Boolean determining if the removal was successful. */ - @Deprecated protected boolean removeStream(String hash) { if(!streams.containsKey(hash)) return false; @@ -392,8 +391,8 @@ protected void processSubscription(String hash, String subscription, String data * @param request Request which the data was received by. * @param data Data sent by the given subscription. */ - protected void processRequest(String request, String data) { - Response lsh_response = handler.send("LSH", "PUSH", "request", request, "data", data); + protected void processRequest(String collection, String data) { + Response lsh_response = handler.send("LSH", "PUSH", "collection", collection, "data", data); if(lsh_response.code() != 200) Logger.warn(lsh_response); } diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/handler/LocalStreamConnection.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/handler/LocalStreamConnection.java index 11a337e3..5cb1ce31 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/handler/LocalStreamConnection.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/handler/LocalStreamConnection.java @@ -6,6 +6,7 @@ public abstract class LocalStreamConnection implements UUID { + @SuppressWarnings("unused") private final LocalStreamManager manager; public LocalStreamConnection(LocalStreamManager manager) { diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/handler/LocalStreamHandler.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/handler/LocalStreamHandler.java index 49f41cab..5d651632 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/handler/LocalStreamHandler.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/local/handler/LocalStreamHandler.java @@ -1,6 +1,5 @@ package org.stream.local.handler; -import java.util.Arrays; import java.util.Set; import org.framework.router.Packet; import org.framework.router.Response; @@ -67,42 +66,26 @@ public Response processRQST(Packet packet) { if((validate = packet.validate("uuid", "request", "query", "destination")) != null) return ResponseFactory.response500("LocalStreamHandler", validate); - String[] query = packet.getData("query").split(Config.getProperty("app", "general.data.delim")); - - // standard query -// if(data.length == 1) { -// query = data[0].split(Config.getProperty("app", "general.data.delim")); -// } -// -// // date query -// else if(data.length == 2) { -// query = data[1].split(Config.getProperty("app", "general.data.delim")); -// int collection_index = manager.getParameterTranslation(query[0], "collection"); -// if(collection_index == -1) -// return ResponseFactory.response501("Collection index is invalid."); -// -// // insert dated request into collection index -// query[collection_index] = data[0].trim(); -// -// } - String request; String delim = Config.getProperty("app", "general.collection.delim"); if(packet.containsKey("date")) { - request = "uuid" + delim + packet.getData("request") + delim + packet.getData("date"); + request = packet.getData("uuid") + delim + packet.getData("request") + delim + packet.getData("date"); } else { - request = "uuid" + delim + packet.getData("request"); + request = packet.getData("uuid") + delim + packet.getData("request"); } - if(query == null) - return ResponseFactory.response501("Query array was null when attempting to process."); + //String[] query = packet.getData("query").split(Config.getProperty("app", "general.data.delim")); + String[] query = new String[] {"get_all", request}; + +// if(query == null) +// return ResponseFactory.response501("Query array was null when attempting to process."); if(request == null || request.isEmpty()) return ResponseFactory.response501("Request was null when attempting to process."); if(!manager.validate(query)) return ResponseFactory.response445(manager.streamType(), packet.getData("query")); - System.out.println(Arrays.toString(query)); + if(!manager.scan(query)) return ResponseFactory.response446(manager.streamType(), packet.getData("query")); @@ -144,22 +127,6 @@ public Response processSTAT(Packet packet) { return ResponseFactory.response200(state.toString()); } -// public Response processMODI(Packet packet) { -// return ResponseFactory.response501(); -// if(packet.getData().isEmpty()) -// return ResponseFactory.response500("LocalStreamHandler", "query"); -// -// if(!manager.isReady()) -// return ResponseFactory.response441(manager.streamType()); -// -// if(!manager.validate(packet.getData())) -// return ResponseFactory.response445(manager.streamType(), packet.getData()); -// -// if(!manager.scan(packet.getData())) -// return ResponseFactory.response446(manager.streamType(), packet.getData()); -// -// } - public Response processPUSH(Packet packet) { // data format: data, location... String validate; diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/registry/StreamRegistryController.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/registry/StreamRegistryController.java index 7e5d83e2..e76ba263 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/registry/StreamRegistryController.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/registry/StreamRegistryController.java @@ -136,6 +136,9 @@ else if(dated) { return lsh_response; } + // send end response + return send("SRC", "EDAT", "data", "<<>>", "destination", packet.getData("destination")); + } catch(Exception e) { return ResponseFactory.response503(Config.getProperty("app", "general.data.dateformat"), packet.getData("start_date"), packet.getData("end_date")); } @@ -145,7 +148,5 @@ else if(dated) { else { return ResponseFactory.response501("Boolean set to non binary value in cache."); } - - return ResponseFactory.response200(); } } \ No newline at end of file diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/test/java/test/stream/external/connected/connections/TestAmberDataConnection.java b/DeFi-Data-Engine/DeFi Data Engine/src/test/java/test/stream/external/connected/connections/TestAmberDataConnection.java index cb6b21fe..b0c41ae4 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/test/java/test/stream/external/connected/connections/TestAmberDataConnection.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/test/java/test/stream/external/connected/connections/TestAmberDataConnection.java @@ -4,6 +4,7 @@ import java.io.File; import java.io.FileNotFoundException; +import java.io.IOException; import java.util.Scanner; import org.apache.log4j.Level; @@ -12,6 +13,7 @@ import org.framework.router.Response; import org.junit.BeforeClass; import org.junit.Test; +import org.stream.external.connected.amberdata.AmberDataRequestHandler; public class TestAmberDataConnection { @@ -31,7 +33,7 @@ public static void init() throws FileNotFoundException { s.close(); } - @Test + //@Test public void TestAuthorization() { Core core = new Core(); @@ -42,7 +44,7 @@ public void TestAuthorization() { assertEquals(422, core.send("SRC", "INIT", "amber_data, does_not_exist").code()); } - @Test + //@Test public void TestRequest() { Core core = new Core(); @@ -59,4 +61,26 @@ public void TestRequest() { Response invalid = core.send("SRC", "RQST", String.format("%s, %s", key, "does_not_exist")); assertEquals(428, invalid.code()); } + + @Test + public void TestAaveProtocolDated() throws IOException { +// HashMap params = new HashMap(); +// params.put("start_date", "2022-09-01"); +// params.put("end_date", "2022-09-05"); +// System.out.println(AmberDataRequestHandler.requestAaveProtocolDated("2022-09-01", "2022-09-05", "UAK7ed69235426c360be22bfc2bde1809b6")[1]); + //System.out.println(AmberDataRequestHandler.requestLendingLatest(apikey, "")[1]); + //System.out.println(AmberDataRequestHandler.request("aave-protocol-dated", apikey, params)[1]); + +// OkHttpClient client = new OkHttpClient(); +// +// Request request = new Request.Builder() +// .url("https://web3api.io/api/v2/defi/lending/aavev2/protocol?startDate=2022-09-01T01:00:00&endDate=2022-09-05T01:00:00") +// .get() +// .addHeader("accept", "application/json") +// .addHeader("x-api-key", "UAK7ed69235426c360be22bfc2bde1809b6") +// .build(); +// +// okhttp3.Response response = client.newCall(request).execute(); +// System.out.println(response.body().string().substring(0, 1000)); + } } diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/test/resources/test/stream/external/connected/connections/test_amberdata_config.txt b/DeFi-Data-Engine/DeFi Data Engine/src/test/resources/test/stream/external/connected/connections/test_amberdata_config.txt index 8fd4b506..dd0c70a9 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/test/resources/test/stream/external/connected/connections/test_amberdata_config.txt +++ b/DeFi-Data-Engine/DeFi Data Engine/src/test/resources/test/stream/external/connected/connections/test_amberdata_config.txt @@ -1 +1 @@ -UAKf8aa75af12e064b9b28f51c9a83d02ed \ No newline at end of file +UAK7ed69235426c360be22bfc2bde1809b6 \ No newline at end of file diff --git a/DeFi-Data-Engine/Rest Application/src/main/java/org/properties/Config.java b/DeFi-Data-Engine/Rest Application/src/main/java/org/properties/Config.java index a8790e99..7bb68a6b 100644 --- a/DeFi-Data-Engine/Rest Application/src/main/java/org/properties/Config.java +++ b/DeFi-Data-Engine/Rest Application/src/main/java/org/properties/Config.java @@ -36,7 +36,8 @@ public class Config { app_properties.put("general.transfer.delim", "&&&"); app_properties.put("general.data.dateformat", "yyyy-MM-dd"); app_properties.put("spring.server.port", "8080"); - app_properties.put("spring.server.address", "localhost"); + //app_properties.put("spring.server.address", "localhost"); + app_properties.put("spring.server.address", "defi-de.idea.rpi.edu"); app_properties.put("rest.socket.address", "localhost"); app_properties.put("rest.socket.port", "61100"); app_properties.put("rest.socket.key", "rest-key-reserved"); diff --git a/DeFi-Data-Engine/Rest Application/src/main/java/org/rest/application/Endpoint.java b/DeFi-Data-Engine/Rest Application/src/main/java/org/rest/application/Endpoint.java index f3171e1e..ec545745 100644 --- a/DeFi-Data-Engine/Rest Application/src/main/java/org/rest/application/Endpoint.java +++ b/DeFi-Data-Engine/Rest Application/src/main/java/org/rest/application/Endpoint.java @@ -47,7 +47,20 @@ public String getStreamExists(@RequestParam String key) { @GetMapping(path="/defi/v1/rest/initialize") public String getInitialize(@RequestParam String source, @RequestParam String auth_data) { - return request("SRC", "INIT", "source", source, "auth_data", auth_data); + String[] auth = auth_data.split(","); + if(auth.length % 2 != 0) + return new JSONObject() + .put("response", "500") + .put("message", "Malformed parameters. must be a list of " + + " pairs. Cannot process given response.") + .toString(); + + String[] params = new String[2 + auth.length]; + params[0] = "source"; + params[1] = source; + for(int i = 2; i < params.length; i++) + params[i] = auth[i - 2]; + return request("SRC", "INIT", params); } @GetMapping(path="/defi/v1/rest/is_authorized") diff --git a/DeFi-Data-Engine/Testing Environment/src/test/connection/socket/LocalTest.java b/DeFi-Data-Engine/Testing Environment/src/test/connection/socket/LocalTest.java new file mode 100644 index 00000000..323cafcf --- /dev/null +++ b/DeFi-Data-Engine/Testing Environment/src/test/connection/socket/LocalTest.java @@ -0,0 +1,94 @@ +package test.connection.socket; + +import java.io.BufferedReader; +import java.io.DataInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.Socket; +import java.net.URL; +import java.net.UnknownHostException; + +import javax.net.SocketFactory; + +import org.json.JSONObject; + +public class LocalTest { + + public static void main(String[] args) throws UnknownHostException, IOException { + final Socket socket = SocketFactory.getDefault().createSocket("localhost", 61200); + final DataInputStream in = new DataInputStream(socket.getInputStream()); + + String destination = readLine(in); + + Thread thread = new Thread() { + public void run() { + try { + while(true) { + System.out.println(readLine(in)); + } + } catch(Exception e) { + e.printStackTrace(); + System.exit(1); + } + } + }; + thread.start(); + + String init = request("http://localhost:8080/defi/v1/rest/initialize?" + + "source=amber_data&" + + "auth_data=key,UAK7ed69235426c360be22bfc2bde1809b6"); + System.out.println(init); + JSONObject json_init = new JSONObject(init); + String key = json_init.getString("data"); + + long s = System.nanoTime(); + String rqst = request(String.format("http://localhost:8080/defi/v1/rest/request_dated?" + + "destination=%s&" + + "key=%s&" + + "request=aave-protocol-dated&" + + "query=get_all,aave_protocol-dated&" + + "start_date=%s&" + + "end_date=%s", + destination, + key, + "2021-09-01", + "2022-09-01")); + long e = System.nanoTime(); + System.out.println(rqst); + System.out.println(e - s); + } + + public static String request(String str) throws IOException { + URL obj = new URL(str); + HttpURLConnection con = (HttpURLConnection) obj.openConnection(); + con.setRequestMethod("GET"); + int responseCode = con.getResponseCode(); + if (responseCode == HttpURLConnection.HTTP_OK) { // success + BufferedReader in = new BufferedReader(new InputStreamReader( + con.getInputStream())); + String inputLine; + StringBuffer response = new StringBuffer(); + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + + return response.toString(); + } else { + System.err.println(String.format("Request Failure code <%d> url <%s>\nmsg <%s>", responseCode, obj.toString(), con.toString())); + System.exit(1); + } + return ""; + } + + public static final String readLine(DataInputStream in) throws IOException { + StringBuilder out = new StringBuilder(); + char c = 0; + while((c = (char)in.read()) != 10) + out.append(c); + + return out.toString(); + } +} \ No newline at end of file diff --git a/DeFi-Data-Engine/Testing Environment/src/test/connection/socket/SocketConnectionTest.java b/DeFi-Data-Engine/Testing Environment/src/test/connection/socket/ServerTest.java similarity index 75% rename from DeFi-Data-Engine/Testing Environment/src/test/connection/socket/SocketConnectionTest.java rename to DeFi-Data-Engine/Testing Environment/src/test/connection/socket/ServerTest.java index 29df1025..fa162d29 100644 --- a/DeFi-Data-Engine/Testing Environment/src/test/connection/socket/SocketConnectionTest.java +++ b/DeFi-Data-Engine/Testing Environment/src/test/connection/socket/ServerTest.java @@ -11,9 +11,7 @@ import javax.net.SocketFactory; -import org.json.JSONObject; - -public class SocketConnectionTest { +public class ServerTest { public static void main(String[] args) throws UnknownHostException, IOException { final Socket socket = SocketFactory.getDefault().createSocket("defi-de.idea.rpi.edu", 61200); @@ -35,19 +33,9 @@ public void run() { } }; thread.start(); - - String rqst = request("http://128.113.28.46:8080/defi/v1/rest/initialize?source=polygon&auth_data=vtTMMRtEywJ_owkHdqoRUmv9vf2hWkrV"); - JSONObject init = new JSONObject(rqst); - System.out.println(rqst); - String hash = init.getString("data"); - System.out.println("RESPONSE: " + request( - String.format("http://128.113.28.46:8080/defi/v1/rest/request_dated?destination=%s" - + "&key=%s" - + "&request=bar-AAPL-15m" - + "&query=get_all,bar-AAPL-15m" - + "&start_date=2022-09-20" - + "&end_date=2022-09-23", key, hash))); + String sample = request("http://defi-de.idea.rpi.edu:8080/defi/v1/rest/source_exists?source=amber_data"); + System.out.println(sample); } public static String request(String str) throws IOException {