diff --git a/src/main/java/kiekpad/vizprovider/Application.java b/src/main/java/kiekpad/vizprovider/Application.java new file mode 100644 index 0000000000000000000000000000000000000000..2fc5e420a5818928d946635108dd1b41188416f6 --- /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 0000000000000000000000000000000000000000..e38b7432995fb81356be3565253e7a0fd3c7d45a --- /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 0000000000000000000000000000000000000000..60d845a9eab43caae3c2b80eff409257889c7a95 --- /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; + } + +}