From ff58ec6e96f3d6977031617eedb7623517d4fb95 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=B6ren=20Henning?= <stu114708@informatik.uni-kiel.de>
Date: Tue, 5 Jul 2016 16:40:07 +0200
Subject: [PATCH] created basic application structure

---
 .../java/kiekpad/vizprovider/Application.java | 13 ++++
 .../controller/MeasurementsController.java    | 59 +++++++++++++++++++
 .../vizprovider/service/CassandraService.java | 26 ++++++++
 3 files changed, 98 insertions(+)
 create mode 100644 src/main/java/kiekpad/vizprovider/Application.java
 create mode 100644 src/main/java/kiekpad/vizprovider/controller/MeasurementsController.java
 create mode 100644 src/main/java/kiekpad/vizprovider/service/CassandraService.java

diff --git a/src/main/java/kiekpad/vizprovider/Application.java b/src/main/java/kiekpad/vizprovider/Application.java
new file mode 100644
index 0000000..2fc5e42
--- /dev/null
+++ b/src/main/java/kiekpad/vizprovider/Application.java
@@ -0,0 +1,13 @@
+package kiekpad.vizprovider;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+	public static void main(final String[] args) {
+		SpringApplication.run(Application.class, args);
+	}
+
+}
diff --git a/src/main/java/kiekpad/vizprovider/controller/MeasurementsController.java b/src/main/java/kiekpad/vizprovider/controller/MeasurementsController.java
new file mode 100644
index 0000000..e38b743
--- /dev/null
+++ b/src/main/java/kiekpad/vizprovider/controller/MeasurementsController.java
@@ -0,0 +1,59 @@
+package kiekpad.vizprovider.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.Row;
+import com.datastax.driver.core.querybuilder.QueryBuilder;
+import com.datastax.driver.core.querybuilder.Select;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+import kiekpad.vizprovider.service.CassandraService;
+
+@RestController
+public class MeasurementsController {
+
+	private final CassandraService cassandraService;
+
+	@Autowired
+	public MeasurementsController(final CassandraService cassandraService) {
+		this.cassandraService = cassandraService;
+	}
+
+	@CrossOrigin // TODO Cross Origin is just for development
+	@RequestMapping("/measurements")
+	public ArrayNode measurements(@RequestParam(value = "after", defaultValue = "0") final long after) {
+
+		JsonNodeFactory jsonNodeFactory = JsonNodeFactory.instance;
+
+		ArrayNode array = jsonNodeFactory.arrayNode();
+
+		final Select statement = QueryBuilder.select("time", "measurement", "prediction", "anomalyscore")
+				.from("measurements")
+				.where(QueryBuilder.eq("series_id", "temp"))
+				.and(QueryBuilder.gt("time", after))
+				.orderBy(QueryBuilder.asc("time"));
+		final ResultSet results = this.cassandraService.getSession().execute(statement);
+
+		for (Row row : results) {
+
+			ObjectNode node = jsonNodeFactory.objectNode();
+			node.set("time", jsonNodeFactory.numberNode(row.getTimestamp("time").toInstant().toEpochMilli()));
+			node.set("measurement", jsonNodeFactory.numberNode(row.getDouble("measurement")));
+			node.set("prediction", jsonNodeFactory.numberNode(row.getDouble("prediction")));
+			node.set("anomalyscore", jsonNodeFactory.numberNode(row.getDouble("anomalyscore")));
+
+			array.add(node);
+
+		}
+
+		return array;
+	}
+
+}
diff --git a/src/main/java/kiekpad/vizprovider/service/CassandraService.java b/src/main/java/kiekpad/vizprovider/service/CassandraService.java
new file mode 100644
index 0000000..60d845a
--- /dev/null
+++ b/src/main/java/kiekpad/vizprovider/service/CassandraService.java
@@ -0,0 +1,26 @@
+package kiekpad.vizprovider.service;
+
+import org.springframework.stereotype.Service;
+
+import com.datastax.driver.core.Cluster;
+import com.datastax.driver.core.Session;
+
+@Service
+public class CassandraService {
+
+	private static final String IP_ADDRESS = "192.168.99.100";
+	private static final int PORT = 32770;
+	private static final String KEYSPACE = "demo3";
+
+	private final Session session;
+
+	public CassandraService() {
+		final Cluster cluster = Cluster.builder().addContactPoint(IP_ADDRESS).withPort(PORT).build();
+		this.session = cluster.connect(KEYSPACE);
+	}
+
+	public Session getSession() {
+		return session;
+	}
+
+}
-- 
GitLab