From c57ec0c9ae61afe17d33e8ee92d3712fbbf6988a Mon Sep 17 00:00:00 2001
From: IsolatedSushi <simen.vanherpt@gmail.com>
Date: Thu, 29 Oct 2020 00:57:48 +0100
Subject: [PATCH] Read/Parse file, send over grpc and update server

---
 DATA/data.csv                                 |   3 +
 backend/server.js                             |   2 +
 frontend/src/components/ScatterPlot.vue       |   4 +
 .../src/components/gRPCProjectorClient.vue    | 111 +++++++++++++-----
 4 files changed, 91 insertions(+), 29 deletions(-)
 create mode 100644 DATA/data.csv

diff --git a/DATA/data.csv b/DATA/data.csv
new file mode 100644
index 0000000..7e0ad5d
--- /dev/null
+++ b/DATA/data.csv
@@ -0,0 +1,3 @@
+1,18.0,25.0,12.0
+2,12.0,12.0,24.0
+3,9.0,13.0,3.0
diff --git a/backend/server.js b/backend/server.js
index 269b4fc..6d19042 100644
--- a/backend/server.js
+++ b/backend/server.js
@@ -29,6 +29,8 @@ function sendPoint(call, callback) {
 
 //Route the grpc function to the microservice
 function sendPointStream(call) {
+  console.log(call.request.modelid)
+  console.log(call.request.rows)
   http.get("http://localhost:8090/generatePointStream", res =>{
 
     res.on("data", data =>{
diff --git a/frontend/src/components/ScatterPlot.vue b/frontend/src/components/ScatterPlot.vue
index 4b32273..f54bf2e 100644
--- a/frontend/src/components/ScatterPlot.vue
+++ b/frontend/src/components/ScatterPlot.vue
@@ -85,6 +85,10 @@ export default {
         x: point.getX(),
         y: point.getY()
       });
+
+      if(this.dataPoints.length > 5){
+        return;
+      }
       this.plot();
     }
   },
diff --git a/frontend/src/components/gRPCProjectorClient.vue b/frontend/src/components/gRPCProjectorClient.vue
index d2024e1..5e83524 100644
--- a/frontend/src/components/gRPCProjectorClient.vue
+++ b/frontend/src/components/gRPCProjectorClient.vue
@@ -8,7 +8,8 @@
       transition="scale-transition"
       dismissible
       close-icon="mdi-delete"
-    >Cannot connect to server</v-alert>
+      >Cannot connect to server</v-alert
+    >
 
     <v-alert
       v-if="launched"
@@ -17,61 +18,113 @@
       transition="scale-transition"
       dismissible
       close-icon="mdi-delete"
-    >Connected to the server!</v-alert>
+      >Connected to the server!</v-alert
+    >
     <h1>Dapr grpc</h1>
     <h1 class="my-10">Check the developer console for the messages</h1>
 
     <v-layout row>
       <v-spacer></v-spacer>
 
-      <v-file-input show-size counter dense label="File input"></v-file-input>
+      <v-file-input
+        show-size
+        counter
+        dense
+        label="File input"
+        v-model="file"
+      ></v-file-input>
+      <v-btn color="primary" text @click="submitFiles">SUBMIT</v-btn>
       <v-spacer></v-spacer>
     </v-layout>
   </div>
 </template>
 
 <script>
-
-
-const { TrainingSet } = require("../generated/projector_pb");
+const { TrainingSet, TrainingSetRow } = require("../generated/projector_pb");
 const { ProjectorClient } = require("../generated/projector_grpc_web_pb");
-
+var os = require("os");
 export default {
   name: "gRPCProjectorClient",
 
   data() {
     return {
       succesAlert: false,
-      launched: false
+      launched: false,
+      file: null,
+      client: null,
     };
   },
 
   created: function () {
     //Setup the server
     const connectURL = "http://" + window.location.hostname + ":8080";
-    var client = new ProjectorClient(connectURL, null, null);
-    var param = new TrainingSet();
-
-    //Call the stream
-    var stream = client.getProjectionPoints(param);
-
-    stream.on("data", (response) => {
-      this.succesAlert = true;
-      this.launched = true;
-      this.$emit("newPoint", response);
-    });
-    
-    stream.on("error", (err) => {
-      this.succesAlert = false
-      this.launched = true;
-
-      console.log(
-        `Unexpected stream error: code = ${err.code}` +
-          `, message = "${err.message}"`
-      );
-    });
+    this.client = new ProjectorClient(connectURL, null, null);
   },
   methods: {
+    startStream(trainingSet) {
+      //Call the stream
+      var stream = this.client.getProjectionPoints(trainingSet);
+
+      stream.on("data", (response) => {
+        this.succesAlert = true;
+        this.launched = true;
+        this.$emit("newPoint", response);
+      });
+
+      stream.on("error", (err) => {
+        this.succesAlert = false;
+        this.launched = true;
+
+        console.log(
+          `Unexpected stream error: code = ${err.code}` +
+            `, message = "${err.message}"`
+        );
+      });
+    },
+    parseFile(lines) {
+      var dataRows = [];
+      for (var i = 0; i < lines.length - 1; i++) {
+        var hdvector = [];
+
+        var dataPoints = lines[i].split(",");
+        var trainingRow = new TrainingSetRow();
+        trainingRow.setId(i.toString());
+        dataPoints.forEach((el) => {
+          hdvector.push(parseFloat(el));
+        });
+        trainingRow.setHdvectorList(hdvector);
+
+        dataRows.push(trainingRow);
+      }
+
+      return dataRows;
+    },
+
+    submitFiles() {
+      //Start up normal connection
+      if (!this.file) {
+        console.log("there is no file.");
+        this.startStream(new TrainingSet());
+        return;
+      }
+
+      //Read in file
+      let reader = new FileReader();
+      reader.readAsText(this.file, "UTF-8");
+      reader.onload = (evt) => {
+
+        var tokens = evt.target.result.split(os.EOL);
+
+        //Create the set
+        var trainingSet = new TrainingSet();
+        trainingSet.setModelid("testComputer");
+
+        var rows = this.parseFile(tokens);
+        trainingSet.setRowsList(rows);
+
+        this.startStream(trainingSet);
+      };
+    },
   },
 };
 </script>
\ No newline at end of file
-- 
GitLab