package ru.semiot.services.tsdbservice.rest; import static ru.semiot.services.tsdbservice.rest.ResponseStringOrError.responseStringOrError; import com.datastax.driver.core.ResultSet; import ru.semiot.services.tsdbservice.TSDBClient; import rx.Observable; import java.io.StringReader; import java.util.ArrayList; import java.util.List; import javax.json.Json; import javax.json.JsonArray; import javax.json.JsonObject; import javax.json.JsonReader; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.container.AsyncResponse; import javax.ws.rs.container.Suspended; @Path("/remove") public class RemoveData { private static final String DELETE_OBSERVATION = "DELETE FROM " + "semiot.observation WHERE system_id = '${SYSTEM_ID}' " + "AND sensor_id = '${SENSOR_ID}';"; private static final String DELETE_COMMANDRESULT = "DELETE FROM " + "semiot.commandresult WHERE system_id = '${SYSTEM_ID}' " + "AND process_id = '${PROCESS_ID}';"; private static final String JSON_SYSTEM_ID = "system_id"; private static final String JSON_SENSOR_ID = "sensor_id"; private static final String JSON_PROCESS_ID = "process_id"; @POST public void removeMetric(@Suspended final AsyncResponse response, String message) { StringReader reader = new StringReader(message); JsonReader js = Json.createReader(reader); JsonObject jObj = js.readObject(); JsonArray observations = jObj.getJsonArray("observations"); JsonArray commandresults = jObj.getJsonArray("commandresults"); List<String> queries = new ArrayList<String>(); for (int i = 0; i < observations.size(); i++) { JsonObject val = observations.getJsonObject(i); String system_id = val.getString(JSON_SYSTEM_ID); String sensor_id = val.getString(JSON_SENSOR_ID); queries.add(DELETE_OBSERVATION .replace("${SYSTEM_ID}", system_id) .replace("${SENSOR_ID}", sensor_id)); } for (int i = 0; i < commandresults.size(); i++) { JsonObject val = commandresults.getJsonObject(i); String system_id = val.getString(JSON_SYSTEM_ID); String process_id = val.getString(JSON_PROCESS_ID); queries.add(DELETE_COMMANDRESULT .replace("${SYSTEM_ID}", system_id) .replace("${PROCESS_ID}", process_id)); } if (!queries.isEmpty()) { Observable<ResultSet> rsObs = TSDBClient.getInstance().executeAsync(queries); rsObs.map((result) -> result.toString()).subscribe(responseStringOrError(response)); } } }