| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- package cz.senslog.watchdog.provider.ws;
- import com.google.gson.reflect.TypeToken;
- import cz.senslog.watchdog.config.WebServiceConfig;
- import cz.senslog.watchdog.provider.DataProvider;
- import cz.senslog.watchdog.provider.ObservationInfo;
- import cz.senslog.watchdog.provider.Record;
- import cz.senslog.watchdog.util.http.HttpClient;
- import cz.senslog.watchdog.util.http.HttpRequest;
- import cz.senslog.watchdog.util.http.HttpResponse;
- import cz.senslog.watchdog.util.http.URLBuilder;
- import org.apache.logging.log4j.LogManager;
- import org.apache.logging.log4j.Logger;
- import java.lang.reflect.Type;
- import java.time.OffsetDateTime;
- import java.time.format.DateTimeFormatter;
- import java.util.*;
- import static cz.senslog.watchdog.util.json.BasicJson.jsonToObject;
- import static java.time.format.DateTimeFormatter.ofPattern;
- public class WebServiceDataProvider implements DataProvider {
- private static final Logger logger = LogManager.getLogger(WebServiceDataProvider.class);
- private static final DateTimeFormatter PATTERN = ofPattern("yyyy-MM-dd HH:mm:ssX");
- private final HttpClient httpClient = HttpClient.newHttpClient();
- private final WebServiceConfig config;
- public WebServiceDataProvider(WebServiceConfig config) {
- this.config = config;
- }
- @Override
- public List<Record> getLastRecords() {
- HttpRequest request = HttpRequest.newBuilder().GET()
- .url(URLBuilder.newBuilder(config.getUrl(), "/SensorService")
- .addParam("Operation", "GetLastObservations")
- .addParam("group", config.getGroup())
- .addParam("user", config.getUser())
- .build()
- ).build();
- HttpResponse response = httpClient.send(request);
- if (response.isOk()) {
- String jsonBody = response.getBody();
- Type lastObsType = new TypeToken<Collection<Map<String, Object>>>() {}.getType();
- List<Map<String, Object>> lastObservations = jsonToObject(jsonBody, lastObsType);
- List<Record> observations = new ArrayList<>(lastObservations.size());
- for (Map<String, Object> observationMap : lastObservations) {
- long unitId = ((Double)observationMap.get("unitId")).longValue();
- long sensorId = ((Double)observationMap.get("sensorId")).longValue();
- String timestampStr = observationMap.get("timeStamp").toString();
- OffsetDateTime timestamp = OffsetDateTime.parse(timestampStr, PATTERN);
- observations.add(new ObservationInfo(unitId, sensorId, timestamp));
- }
- return observations;
- } else {
- logger.error("code: {}, message: {}", response.getStatus(), response.getBody());
- }
- return Collections.emptyList();
- }
- }
|