Skip to content
Snippets Groups Projects
Commit aa0a3109 authored by Sören Henning's avatar Sören Henning
Browse files

throw http exception if database is unavailable

parent c1af4fa6
No related branches found
No related tags found
No related merge requests found
package kiekpad.vizprovider.controller; package kiekpad.vizprovider.controller;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.HttpServerErrorException;
import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row; import com.datastax.driver.core.Row;
import com.datastax.driver.core.exceptions.NoHostAvailableException;
import com.datastax.driver.core.querybuilder.QueryBuilder; import com.datastax.driver.core.querybuilder.QueryBuilder;
import com.datastax.driver.core.querybuilder.Select; import com.datastax.driver.core.querybuilder.Select;
import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ArrayNode;
...@@ -19,6 +22,7 @@ import kiekpad.vizprovider.service.CassandraService; ...@@ -19,6 +22,7 @@ import kiekpad.vizprovider.service.CassandraService;
public class MeasurementsController { public class MeasurementsController {
private final CassandraService cassandraService; private final CassandraService cassandraService;
private final JsonNodeFactory jsonNodeFactory = JsonNodeFactory.instance;
@Autowired @Autowired
public MeasurementsController(final CassandraService cassandraService) { public MeasurementsController(final CassandraService cassandraService) {
...@@ -28,30 +32,32 @@ public class MeasurementsController { ...@@ -28,30 +32,32 @@ public class MeasurementsController {
@RequestMapping("/measurements") @RequestMapping("/measurements")
public ArrayNode measurements(@RequestParam(value = "series") final String series, @RequestParam(value = "after", defaultValue = "0") final long after) { public ArrayNode measurements(@RequestParam(value = "series") final String series, @RequestParam(value = "after", defaultValue = "0") final long after) {
JsonNodeFactory jsonNodeFactory = JsonNodeFactory.instance; ArrayNode measurements = jsonNodeFactory.arrayNode();
ArrayNode array = jsonNodeFactory.arrayNode();
final Select statement = QueryBuilder.select("time", "measurement", "prediction", "anomalyscore") final Select statement = QueryBuilder.select("time", "measurement", "prediction", "anomalyscore")
.from("measurements") .from("measurements")
.where(QueryBuilder.eq("series_id", series)) .where(QueryBuilder.eq("series_id", series))
.and(QueryBuilder.gt("time", after)) .and(QueryBuilder.gt("time", after))
.orderBy(QueryBuilder.asc("time")); .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);
try {
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")));
measurements.add(node);
}
} catch (NoHostAvailableException exception) {
// The database is currently not available
throw new HttpServerErrorException(HttpStatus.SERVICE_UNAVAILABLE);
} }
return array; return measurements;
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment