@Override public SortedMap<Long, Double> getGaugeValues(final long start, final long end, final Role role) { return gaugeDataStore.getGaugeValues(new GaugeValuesRequest(start, end, role)); }
@Override public Collection<Role> gauges() { return gaugeDataStore.gauges(); }
@Override public Role findGaugeRole(final String name) { return gaugeDataStore.findGaugeRole(name); }
@Override protected void pushGauges(final Map<Role, Measure> gauges) { for (final Map.Entry<Role, Measure> entry : gauges.entrySet()) { final Role role = entry.getKey(); final Measure measure = entry.getValue(); delegate.createOrNoopGauge(role, marker); delegate.addToGauge(role, measure.getTime(), measure.getValue(), marker); } }
@Override public void addToGauge(final Role role, final long time, final double value, final String marker) { createOrNoopGauge(role, marker); // this implementation doesn't mandates createOrNoopGauge call dataStores.get(marker).addToGauge(role, time, value); }
@Override public void createOrNoopGauge(final Role role, final String marker) { GaugeDataStore gaugeDataStore = dataStores.get(marker); if (gaugeDataStore == null) { gaugeDataStore = newStore(marker); final GaugeDataStore existing = dataStores.putIfAbsent(marker, gaugeDataStore); if (existing != null) { gaugeDataStore = existing; } } gaugeDataStore.createOrNoopGauge(role); }
@Override public void run() { try { pushGauges(snapshot()); } catch (final Exception e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } } }
protected Map<Role, Measure> snapshot() { final long ts = System.currentTimeMillis(); final Map<Role, Measure> snapshot = new HashMap<Role, Measure>(); for (final Gauge gauge : gauges.values()) { final Role role = gauge.role(); final double value = gauge.value(); addToGauge(role, ts, value); snapshot.put(role, new Measure(ts, value)); } return snapshot; }
@Override public void gaugeStopped(final Role gauge) { for (final GaugeDataStore store : dataStores.values()) { store.gaugeStopped(gauge); } }
@Override public Role findGaugeRole(final String name) { for (final GaugeDataStore store : dataStores.values()) { final Role role = store.findGaugeRole(name); if (role != null) { return role; } } return null; }
@Override public void gaugeStopped(final Role gauge) { gauges.remove(gauge); super.gaugeStopped(gauge); }
@Override public void run() { try { pushAggregatedGauges(copyAndClearGauges()); } catch (final Exception e) { LOGGER.log(Level.SEVERE, e.getMessage(), e); } } }
@Override public SortedMap<Long, Double> getGaugeValues(final GaugeValuesRequest gaugeValuesRequest, final String marker) { final GaugeDataStore gaugeDataStore = dataStores.get(marker); if (gaugeDataStore == null) { return new TreeMap<Long, Double>(); } return gaugeDataStore.getGaugeValues(gaugeValuesRequest); }
@Override public Collection<Role> gauges() { final Set<Role> roles = new HashSet<Role>(); for (final GaugeDataStore store : dataStores.values()) { roles.addAll(store.gauges()); } return roles; }
private ConcurrentMap<Role, Value> copyAndClearGauges() { final ConcurrentMap<Role, OptimizedStatistics> copy = new ConcurrentHashMap<Role, OptimizedStatistics>(); copy.putAll(gauges); gauges.clear(); final ConcurrentMap<Role, Value> toPush = new ConcurrentHashMap<Role, Value>(); for (final Map.Entry<Role, OptimizedStatistics> entry : copy.entrySet()) { toPush.put(entry.getKey(), new ValueImpl(entry.getValue())); } return toPush; }
@Override public Collection<Role> gauges() { final Collection<Role> all = new HashSet<Role>(); if (readFromStore) { all.addAll(delegate.gauges()); } all.addAll(super.gauges()); // override by more recent ones return all; }
@Override public void addGauge(final Gauge gauge) { if (GaugeDataStore.class.isInstance(gaugeDataStore)) { GaugeDataStore.class.cast(gaugeDataStore).createOrNoopGauge(gauge.role()); } if (GaugeAware.class.isInstance(gaugeDataStore)) { GaugeAware.class.cast(gaugeDataStore).addGauge(gauge); } }
@Override public void reset() { clearCounters(); nodeStatusDataStore.reset(); for (final Role g : gauges()) { gaugeDataStore.gaugeStopped(g); } }
public CollectorDataStoreFactory() { super( IoCs.findOrCreateInstance( CounterDataStore.class ), // new DelegatedCollectorGaugeDataStore(), // new InMemoryCollectorNodeStatusDataStore(), // new DelegatedCollectorPathTrackingDataStore() ); } }
@Override public void stopGauge(final Gauge gauge) { if (GaugeDataStore.class.isInstance(gaugeDataStore)) { GaugeDataStore.class.cast(gaugeDataStore).gaugeStopped(gauge.role()); } }