@Override public void process(String deviceId, String country, byte[] imageData) { Map<String, Object> imageMetadata = ImmutableMap.of("deviceId", deviceId); String imageId = connector.fromBus("document.save", imageMetadata, String.class, arguments(CAMERA_IMAGE_COLLECTION)); connector.toBusAndWait("binary.store", imageData, arguments(imageId)); connector.toBus("camera.processPlate", arguments(imageId, country)); }
public static Header header(String key, Object value) { return new Header(key, value); }
public static Header[] arguments(Object... arguments) { Header[] headers = new Header[arguments.length]; for(int i = 0; i < arguments.length; i++) { headers[i] = header("RHIOT_ARG" + i, arguments[i]); } return headers; }
public void toBusAndWait(String channel, Object payload, Header... headers) { Map<String, Object> collectedHeaders = new HashMap<>(); for(Header header : headers) { collectedHeaders.put(header.key(), header.value()); } byte[] busResponse = producerTemplate.requestBodyAndHeaders("amqp:" + channel, encodedPayload(payload), collectedHeaders, byte[].class); payloadEncoding.decode(busResponse); }
private void rotateImages() { long imagesCount = connector.fromBus("document.count", long.class, arguments("CameraImage")); if (imagesCount * 10 > storageQuota * 1024) { Map<String, Object> query = ImmutableMap.of("query", ImmutableMap.of(), "page", 0, "size", 1000, "orderBy", Arrays.asList("id")); List<Map<String, Object>> imagesMetadata = connector.fromBus("document.findByQuery", query, List.class, arguments("CameraImage")); for(Map<String, Object> imageMetadata : imagesMetadata) { connector.toBusAndWait("binary.delete", imageMetadata.get("id")); connector.toBus("document.remove", arguments("CameraImage", imageMetadata.get("id"))); } } }
public <T> T fromBus(String channel, Class<T> responseType, Header... headers) { byte[] busResponse = producerTemplate.requestBodyAndHeaders("amqp:" + channel, null, arguments(headers), byte[].class); return decodedPayload(busResponse, responseType); }
public void toBus(String channel, Object payload, Header... headers) { producerTemplate.sendBodyAndHeaders("amqp:" + channel, encodedPayload(payload), arguments(headers)); }
@Override public void processPlate(String imageId, String country) { byte[] imageData = connector.fromBus("binary.read", imageId, byte[].class); List<PlateMatch> matches = recognizePlate(country, imageData); CameraImage imageMetadata = connector.fromBus("document.findOne", CameraImage.class, arguments(CAMERA_IMAGE_COLLECTION, imageId)); imageMetadata.setPlateMatches(matches); connector.toBus("document.save", imageMetadata, arguments("CameraImage")); }
public <T> T fromBus(String channel, Object payload, Class<T> responseType, Header... headers) { byte[] busResponse = producerTemplate.requestBodyAndHeaders("amqp:" + channel, encodedPayload(payload), arguments(headers), byte[].class); return decodedPayload(busResponse, responseType); }
@Override public Object read(String deviceId, String metric) { Device device = deviceRegistry.get(deviceId); if (device == null) { return null; } if (device.getAddress() != null) { Object metricValue = connector.fromBus("deviceMetricsPoll.read", Object.class, arguments(deviceId, metric)); if (metricValue != null) { write(deviceId, metric, metricValue); return metricValue; } } return doRead(deviceId, metric); }