/** * Gets specs for all entities requested in the request. If the retrieval of any one of them * fails, the whole request will fail, giving an internal error. */ @Override public void getEntities( GetEntitiesRequest request, StreamObserver<GetEntitiesResponse> responseObserver) { long now = System.currentTimeMillis(); statsDClient.increment("get_entities_request_count"); try { List<EntitySpec> entitySpecs = specService .getEntities(request.getIdsList()) .stream() .map(EntityInfo::getEntitySpec) .collect(Collectors.toList()); GetEntitiesResponse response = GetEntitiesResponse.newBuilder().addAllEntities(entitySpecs).build(); responseObserver.onNext(response); responseObserver.onCompleted(); statsDClient.increment("get_entities_request_success"); } catch (RetrievalException | IllegalArgumentException e) { statsDClient.increment("get_entities_request_failed"); log.error("Error in getEntities: {}", e); responseObserver.onError(getRuntimeException(e)); } finally { long duration = System.currentTimeMillis() - now; statsDClient.gauge("get_entities_latency_ms", duration); } }