WebServiceDataProvider.java 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package cz.senslog.watchdog.provider.ws;
  2. import com.google.gson.reflect.TypeToken;
  3. import cz.senslog.watchdog.config.WebServiceConfig;
  4. import cz.senslog.watchdog.provider.DataProvider;
  5. import cz.senslog.watchdog.provider.ObservationInfo;
  6. import cz.senslog.watchdog.provider.Record;
  7. import cz.senslog.watchdog.util.http.HttpClient;
  8. import cz.senslog.watchdog.util.http.HttpRequest;
  9. import cz.senslog.watchdog.util.http.HttpResponse;
  10. import cz.senslog.watchdog.util.http.URLBuilder;
  11. import org.apache.logging.log4j.LogManager;
  12. import org.apache.logging.log4j.Logger;
  13. import java.lang.reflect.Type;
  14. import java.time.OffsetDateTime;
  15. import java.time.format.DateTimeFormatter;
  16. import java.util.*;
  17. import static cz.senslog.watchdog.util.json.BasicJson.jsonToObject;
  18. import static java.time.format.DateTimeFormatter.ofPattern;
  19. public class WebServiceDataProvider implements DataProvider {
  20. private static final Logger logger = LogManager.getLogger(WebServiceDataProvider.class);
  21. private static final DateTimeFormatter PATTERN = ofPattern("yyyy-MM-dd HH:mm:ssX");
  22. private final HttpClient httpClient = HttpClient.newHttpClient();
  23. private final WebServiceConfig config;
  24. public WebServiceDataProvider(WebServiceConfig config) {
  25. this.config = config;
  26. }
  27. @Override
  28. public List<Record> getLastRecords() {
  29. HttpRequest request = HttpRequest.newBuilder().GET()
  30. .url(URLBuilder.newBuilder(config.getUrl(), "/SensorService")
  31. .addParam("Operation", "GetLastObservations")
  32. .addParam("group", config.getGroup())
  33. .addParam("user", config.getUser())
  34. .build()
  35. ).build();
  36. HttpResponse response = httpClient.send(request);
  37. if (response.isOk()) {
  38. String jsonBody = response.getBody();
  39. Type lastObsType = new TypeToken<Collection<Map<String, Object>>>() {}.getType();
  40. List<Map<String, Object>> lastObservations = jsonToObject(jsonBody, lastObsType);
  41. List<Record> observations = new ArrayList<>(lastObservations.size());
  42. for (Map<String, Object> observationMap : lastObservations) {
  43. long unitId = ((Double)observationMap.get("unitId")).longValue();
  44. long sensorId = ((Double)observationMap.get("sensorId")).longValue();
  45. String timestampStr = observationMap.get("timeStamp").toString();
  46. OffsetDateTime timestamp = OffsetDateTime.parse(timestampStr, PATTERN);
  47. observations.add(new ObservationInfo(unitId, sensorId, timestamp));
  48. }
  49. return observations;
  50. } else {
  51. logger.error("code: {}, message: {}", response.getStatus(), response.getBody());
  52. }
  53. return Collections.emptyList();
  54. }
  55. }