@Override public ScheduledExecutors.Signal call() { // Run one more time even if the monitor was removed, in case there's some extra data to flush if (monitor.monitor(emitter) && hasMonitor(monitor)) { return ScheduledExecutors.Signal.REPEAT; } else { removeMonitor(monitor); return ScheduledExecutors.Signal.STOP; } } }
@Override public boolean doMonitor(ServiceEmitter emitter) { emitJvmMemMetrics(emitter); emitDirectMemMetrics(emitter); emitGcMetrics(emitter); emitThreadAllocationMetrics(emitter); return true; }
@Override public boolean doMonitor(ServiceEmitter emitter) { for (Stats stats : statsList) { stats.emit(emitter); } return true; }
@Test public void testDefaultFeed() { StubServiceEmitter emitter = new StubServiceEmitter("dev/monitor-test", "localhost:0000"); Monitor m = Monitors.createCompoundJvmMonitor(ImmutableMap.of()); m.start(); m.monitor(emitter); m.stop(); checkEvents(emitter.getEvents(), "metrics"); }
private void emitThreadAllocationMetrics(ServiceEmitter emitter) { final ServiceMetricEvent.Builder builder = builder(); MonitorUtils.addDimensionsToBuilder(builder, dimensions); if (collector != null) { long delta = collector.calculateDelta(); emitter.emit(builder.build("jvm/heapAlloc/bytes", delta)); } }
@Override public boolean monitor(final ServiceEmitter emitter) { return shouldReschedule(Lists.transform(monitors, monitor -> monitor.monitor(emitter))); }
@Override public boolean monitor(ServiceEmitter emitter) { if (started) { return doMonitor(emitter); } return false; }
public JvmMonitor(Map<String, String[]> dimensions, String feed, PidDiscoverer pidDiscoverer) { super(feed); Preconditions.checkNotNull(dimensions); this.dimensions = ImmutableMap.copyOf(dimensions); this.pid = Preconditions.checkNotNull(pidDiscoverer).getPid(); this.collector = AllocationMetricCollectors.getAllocationMetricCollector(); }
@Override public void stop() { for (Monitor monitor : monitors) { monitor.stop(); } }
@Override public long getPid() { return SigarUtil.getCurrentProcessId(); } }
@Override public void start() { for (Monitor monitor : monitors) { monitor.start(); } }
public JvmMonitor(Map<String, String[]> dimensions, String feed) { this(dimensions, feed, JvmPidDiscoverer.instance()); }
/** * Creates a JVM monitor, configured with the given dimensions, that gathers all currently available JVM-wide * monitors. Emitted events have default feed {@link FeedDefiningMonitor#DEFAULT_METRICS_FEED} * See: {@link Monitors#createCompoundJvmMonitor(Map, String)} * * @param dimensions common dimensions to configure the JVM monitor with * * @return a universally useful JVM-wide monitor */ public static Monitor createCompoundJvmMonitor(Map<String, String[]> dimensions) { return createCompoundJvmMonitor(dimensions, FeedDefiningMonitor.DEFAULT_METRICS_FEED); }
public HttpPostEmitterMonitor( String feed, HttpPostEmitter httpPostEmitter, ImmutableMap<String, String> extraDimensions ) { super(feed); this.httpPostEmitter = httpPostEmitter; this.extraDimensions = extraDimensions; this.builder = builder(); }
void emit(ServiceEmitter emitter, Map<String, String[]> dimensions) { for (GcGeneration generation : generations) { generation.emit(emitter, dimensions); } } }
private void emitGcMetrics(ServiceEmitter emitter) { gcCounters.emit(emitter, dimensions); }
boolean gcSeen() { return oldGcSeen() || youngGcSeen(); }
@Test public void testSetFeed() { String feed = "testFeed"; StubServiceEmitter emitter = new StubServiceEmitter("dev/monitor-test", "localhost:0000"); Monitor m = Monitors.createCompoundJvmMonitor(ImmutableMap.of(), feed); m.start(); m.monitor(emitter); m.stop(); checkEvents(emitter.getEvents(), feed); }
@Override public void doMonitor(ServiceEmitter emitter) { monitor.doMonitor(emitter); } }
@Override public boolean doMonitor(ServiceEmitter serviceEmitter) { return delegate.doMonitor(serviceEmitter); } }