/** * Closes the MetricRegistryInstance. */ @Override public void close() { generators_.forEach((g) -> { try { g.close(); } catch (Exception e) { LOG.log(Level.SEVERE, "failed to close group generator " + g, e); } }); if (api_ instanceof AutoCloseable) { try { ((AutoCloseable) api_).close(); } catch (Exception ex) { LOG.log(Level.SEVERE, "unable to close API " + api_.getClass(), ex); } } }
public static Collection<MetricGroup> deref(Collection<CompletableFuture<? extends Collection<? extends MetricGroup>>> futures) throws InterruptedException, ExecutionException { ArrayList<MetricGroup> result = new ArrayList<>(); for (CompletableFuture<? extends Collection<? extends MetricGroup>> future : futures) result.addAll(deref(future)); return result; }
threadpool.execute(() -> { try { toBeClosed.close(); } catch (Exception ex) { LOG.log(Level.WARNING, "unable to close " + toBeClosed, ex); try { for (GroupGenerator generator : generators.values()) results.addAll(generator.getGroups(threadpool, timeout)); } catch (Exception ex) { results.forEach(future -> future.cancel(false));
private synchronized Stream<MutableTimeSeriesValue> streamGroups(DateTime now) { final long t0 = System.nanoTime(); final CompletableFuture<GroupGenerator.TimeoutObject> timeout = new CompletableFuture<>(); Collection<MetricGroup> collections = derefFutures(generators_.stream() .map(generator -> { try { return generator.getGroups(THREADPOOL, timeout); } catch (Exception ex) { CompletableFuture<? extends Collection<? extends MetricGroup>> failure = new CompletableFuture<>(); failure.completeExceptionally(ex); return singleton(failure); } }) .flatMap(Collection::stream) .collect(Collectors.toList()), t0, timeout); /* Measure end time of collections. */ final long t_collections = System.nanoTime(); scrape_duration_ = Optional.of(Duration.millis(TimeUnit.NANOSECONDS.toMillis(t_collections - t0))); Stream<MutableTimeSeriesValue> groups = collections.stream() .collect(Collectors.toMap(MetricGroup::getName, Function.identity(), (x, y) -> y)) // Resolve group-name conflict, such that latest metric wins. .values() .stream() .map((mg) -> new MutableTimeSeriesValue(mg.getName(), Arrays.stream(mg.getMetrics()), Metric::getName, Metric::getValue)); return groups; }
threadpool.execute(() -> { try { toBeClosed.close(); } catch (Exception ex) { LOG.log(Level.WARNING, "unable to close " + toBeClosed, ex); try { for (GroupGenerator generator : generators.values()) results.addAll(generator.getGroups(threadpool, timeout)); } catch (Exception ex) { results.forEach(future -> future.cancel(false));
@Override public void close() throws Exception { Exception thrown = null; try { resolver.close(); } catch (Exception ex) { LOG.log(Level.WARNING, "unable to close resolver " + resolver, ex); if (thrown == null) thrown = ex; else thrown.addSuppressed(ex); } for (GroupGenerator generator : generators.values()) { try { generator.close(); } catch (Exception ex) { LOG.log(Level.WARNING, "unable to close generator " + generator, ex); if (thrown == null) thrown = ex; else thrown.addSuppressed(ex); } } generators.clear(); if (thrown != null) throw thrown; }
public static Collection<MetricGroup> deref(Collection<CompletableFuture<? extends Collection<? extends MetricGroup>>> futures) throws InterruptedException, ExecutionException { ArrayList<MetricGroup> result = new ArrayList<>(); for (CompletableFuture<? extends Collection<? extends MetricGroup>> future : futures) result.addAll(deref(future)); return result; }
@Override public void close() throws Exception { Exception thrown = null; try { resolver.close(); } catch (Exception ex) { LOG.log(Level.WARNING, "unable to close resolver " + resolver, ex); if (thrown == null) thrown = ex; else thrown.addSuppressed(ex); } for (GroupGenerator generator : generators.values()) { try { generator.close(); } catch (Exception ex) { LOG.log(Level.WARNING, "unable to close generator " + generator, ex); if (thrown == null) thrown = ex; else thrown.addSuppressed(ex); } } generators.clear(); if (thrown != null) throw thrown; }