// ********************************************************************** // // Copyright (c) 2003-2013 ZeroC, Inc. All rights reserved. // // This copy of Ice is licensed to you under the terms described in the // ICE_LICENSE file included in this distribution. // // ********************************************************************** package IceMX; import IceInternal.MetricsMap; public class Observer extends IceUtilInternal.StopWatch implements Ice.Instrumentation.Observer { public interface MetricsUpdate { void update(T m); }; public void attach() { if(!isStarted()) { start(); } } public void detach() { long lifetime = _previousDelay + stop(); for(MetricsMap.Entry e : _objects) { e.detach(lifetime); } } public void failed(String exceptionName) { for(MetricsMap.Entry e : _objects) { e.failed(exceptionName); } } public void forEach(MetricsUpdate u) { for(MetricsMap.Entry e : _objects) { e.execute(u); } } public void init(MetricsHelper helper, java.util.List.Entry> objects, Observer previous) { _objects = objects; if(previous == null) { return; } _previousDelay = previous._previousDelay + previous.delay(); // // Detach entries from previous observer which are no longer // attached to this new observer. // for(MetricsMap.Entry p : previous._objects) { if(!_objects.contains(p)) { p.detach(_previousDelay); } } } public > ObserverImpl getObserver(String mapName, MetricsHelper helper, Class mcl, Class ocl) { java.util.List.Entry> metricsObjects = null; for(MetricsMap.Entry entry : _objects) { MetricsMap.Entry e = entry.getMatching(mapName, helper, mcl); if(e != null) { if(metricsObjects == null) { metricsObjects = new java.util.ArrayList.Entry>(_objects.size()); } metricsObjects.add(e); } } if(metricsObjects == null) { return null; } try { ObserverImpl obsv = ocl.newInstance(); obsv.init(helper, metricsObjects, null); return obsv; } catch(Exception ex) { assert(false); return null; } } public MetricsMap.Entry getEntry(MetricsMap map) { for(MetricsMap.Entry e : _objects) { if(e.getMap() == map) { return e; } } return null; } private java.util.List.Entry> _objects; private long _previousDelay = 0; };