public void emit() { if (emitter == null) { throw new UnsupportedOperationException("Emitter is null, cannot emit."); } emitter.emit(this); } }
public void emit(ServiceEventBuilder builder) { emit(builder.build(serviceDimensions)); }
@Override public void log(final RequestLogLine requestLogLine) throws IOException { emitter.emit(new RequestLogEventBuilder(feed, requestLogLine)); }
@Override public void emit(ServiceEmitter emitter) { checkModifiedFromOwnerThread(); for (Map.Entry<String, Number> metric : metrics.entrySet()) { emitter.emit(builder.build(metric.getKey(), metric.getValue())); } metrics.clear(); } }
@Override public void emitMetrics(ServiceEmitter emitter, ServiceMetricEvent.Builder metricBuilder) { if (delegate instanceof PrioritizedExecutorService) { emitter.emit(metricBuilder.build("segment/scan/pending", ((PrioritizedExecutorService) delegate).getQueueSize())); } }
private void emitTimeCounterMetrics(ServiceEmitter emitter, ConcurrentTimeCounter timeCounter, String metricNameBase) { long timeSumAndCount = timeCounter.getTimeSumAndCountAndReset(); emitter.emit(builder.build(metricNameBase + "timeMsSum", ConcurrentTimeCounter.timeSum(timeSumAndCount))); emitter.emit(builder.build(metricNameBase + "count", ConcurrentTimeCounter.count(timeSumAndCount))); emitter.emit(builder.build(metricNameBase + "maxTimeMs", timeCounter.getAndResetMaxTime())); emitter.emit(builder.build(metricNameBase + "minTimeMs", timeCounter.getAndResetMinTime())); }
@Override public void run() { try { final long tasks = updatesStarted.get(); serviceEmitter.emit( ServiceMetricEvent.builder() .build("namespace/deltaTasksStarted", tasks - priorUpdatesStarted) ); priorUpdatesStarted = tasks; } catch (Exception e) { log.error(e, "Error emitting namespace stats"); if (Thread.currentThread().isInterrupted()) { throw Throwables.propagate(e); } } } },
@Override public boolean doMonitor(ServiceEmitter emitter) { final ServiceMetricEvent.Builder builder = new ServiceMetricEvent.Builder(); MonitorUtils.addDimensionsToBuilder( builder, dimensions ); emitter.emit(builder.build("jetty/numOpenConnections", activeConnections.get())); return true; } }
void emit(ServiceEmitter emitter, Map<String, String[]> dimensions) { final ServiceMetricEvent.Builder builder = builder(); MonitorUtils.addDimensionsToBuilder(builder, dimensions); builder.setDimension("gcGenSpaceName", name); emitter.emit(builder.build("jvm/gc/mem/max", maxCounter.getLong())); emitter.emit(builder.build("jvm/gc/mem/capacity", capacityCounter.getLong())); emitter.emit(builder.build("jvm/gc/mem/used", usedCounter.getLong())); emitter.emit(builder.build("jvm/gc/mem/init", initCounter.getLong())); } }
@Override public boolean doMonitor(ServiceEmitter emitter) { ThreadMXBean threadBean = ManagementFactory.getThreadMXBean(); final ServiceMetricEvent.Builder builder = builder(); MonitorUtils.addDimensionsToBuilder(builder, dimensions); // Because between next two calls on ThreadMXBean new threads can be started we can observe some inconsistency // in counters values and finished counter could be even negative int newLiveThreads = threadBean.getThreadCount(); long newStartedThreads = threadBean.getTotalStartedThreadCount(); long startedThreadsDiff = newStartedThreads - lastStartedThreads; emitter.emit(builder.build("jvm/threads/started", startedThreadsDiff)); emitter.emit(builder.build("jvm/threads/finished", lastLiveThreads + startedThreadsDiff - newLiveThreads)); emitter.emit(builder.build("jvm/threads/live", newLiveThreads)); emitter.emit(builder.build("jvm/threads/liveDaemon", threadBean.getDaemonThreadCount())); emitter.emit(builder.build("jvm/threads/livePeak", threadBean.getPeakThreadCount())); threadBean.resetPeakThreadCount(); lastStartedThreads = newStartedThreads; lastLiveThreads = newLiveThreads; return true; } }
void emit(ServiceEmitter emitter, Map<String, String[]> dimensions) { final ServiceMetricEvent.Builder builder = builder(); MonitorUtils.addDimensionsToBuilder(builder, dimensions); long newInvocations = invocationsCounter.getLong(); emitter.emit(builder.build("jvm/gc/count", newInvocations - lastInvocations)); lastInvocations = newInvocations; long newCpuNanos = cpuCounter.getNanos(); emitter.emit(builder.build("jvm/gc/cpu", newCpuNanos - lastCpuNanos)); lastCpuNanos = newCpuNanos; }
@Override public boolean doMonitor(ServiceEmitter emitter) { final ServiceMetricEvent.Builder builder = new ServiceMetricEvent.Builder(); Map<String, Long> diff = keyedDiff.to( "queryCountStats", ImmutableMap.of("query/success/count", statsProvider.getSuccessfulQueryCount(), "query/failed/count", statsProvider.getFailedQueryCount(), "query/interrupted/count", statsProvider.getInterruptedQueryCount() ) ); if (diff != null) { for (Map.Entry<String, Long> diffEntry : diff.entrySet()) { emitter.emit(builder.build(diffEntry.getKey(), diffEntry.getValue())); } } return true; }
@Override public void doMonitor(ServiceEmitter emitter) { final CacheStats oldStats = priorStats.get(); final CacheStats newStats = cache.stats(); final CacheStats deltaStats = newStats.minus(oldStats); final ServiceMetricEvent.Builder builder = ServiceMetricEvent.builder(); emitter.emit(builder.build("query/cache/caffeine/delta/requests", deltaStats.requestCount())); emitter.emit(builder.build("query/cache/caffeine/total/requests", newStats.requestCount())); emitter.emit(builder.build("query/cache/caffeine/delta/loadTime", deltaStats.totalLoadTime())); emitter.emit(builder.build("query/cache/caffeine/total/loadTime", newStats.totalLoadTime())); emitter.emit(builder.build("query/cache/caffeine/delta/evictionBytes", deltaStats.evictionWeight())); emitter.emit(builder.build("query/cache/caffeine/total/evictionBytes", newStats.evictionWeight())); if (!priorStats.compareAndSet(oldStats, newStats)) { // ISE for stack trace log.warn( new IllegalStateException("Multiple monitors"), "Multiple monitors on the same cache causing race conditions and unreliable stats reporting" ); } }
private void emitTieredStat( final ServiceEmitter emitter, final String metricName, final String tier, final double value ) { emitter.emit( new ServiceMetricEvent.Builder() .setDimension(DruidMetrics.TIER, tier) .build(metricName, value) ); }
@Override public boolean doMonitor(ServiceEmitter emitter) { for (Map.Entry<String, EventReceiverFirehoseMetric> entry : register.getMetrics()) { final String serviceName = entry.getKey(); final EventReceiverFirehoseMetric metric = entry.getValue(); final ServiceMetricEvent.Builder builder = createEventBuilder(serviceName) .setDimension( "bufferCapacity", String.valueOf(metric.getCapacity()) ); emitter.emit(builder.build("ingest/events/buffered", metric.getCurrentBufferSize())); Map<String, Long> diff = keyedDiff.to( serviceName, ImmutableMap.of("ingest/bytes/received", metric.getBytesReceived()) ); if (diff != null) { final ServiceMetricEvent.Builder eventBuilder = createEventBuilder(serviceName); for (Map.Entry<String, Long> diffEntry : diff.entrySet()) { emitter.emit(eventBuilder.build(diffEntry.getKey(), diffEntry.getValue())); } } } return true; }
private void emitDirectMemMetrics(ServiceEmitter emitter) { for (BufferPoolMXBean pool : ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class)) { final ServiceMetricEvent.Builder builder = builder().setDimension("bufferpoolName", pool.getName()); MonitorUtils.addDimensionsToBuilder(builder, dimensions); emitter.emit(builder.build("jvm/bufferpool/capacity", pool.getTotalCapacity())); emitter.emit(builder.build("jvm/bufferpool/used", pool.getMemoryUsed())); emitter.emit(builder.build("jvm/bufferpool/count", pool.getCount())); } }
private void emitStats( ServiceEmitter emitter, final String metricPrefix, CacheStats cacheStats, ServiceMetricEvent.Builder builder ) { if (cache != null) { emitter.emit(builder.build(StringUtils.format("%s/numEntries", metricPrefix), cacheStats.getNumEntries())); emitter.emit(builder.build(StringUtils.format("%s/sizeBytes", metricPrefix), cacheStats.getSizeInBytes())); emitter.emit(builder.build(StringUtils.format("%s/hits", metricPrefix), cacheStats.getNumHits())); emitter.emit(builder.build(StringUtils.format("%s/misses", metricPrefix), cacheStats.getNumMisses())); emitter.emit(builder.build(StringUtils.format("%s/evictions", metricPrefix), cacheStats.getNumEvictions())); emitter.emit(builder.build(StringUtils.format("%s/hitRate", metricPrefix), cacheStats.hitRate())); emitter.emit(builder.build(StringUtils.format("%s/averageBytes", metricPrefix), cacheStats.averageBytes())); emitter.emit(builder.build(StringUtils.format("%s/timeouts", metricPrefix), cacheStats.getNumTimeouts())); emitter.emit(builder.build(StringUtils.format("%s/errors", metricPrefix), cacheStats.getNumErrors())); } } }
@Override public void emit(ServiceEmitter emitter) { for (String dir : dirList) { DirUsage du = null; try { du = sigar.getDirUsage(dir); } catch (SigarException e) { log.error("Failed to get DiskUsage for [%s] due to [%s]", dir, e.getMessage()); } if (du != null) { final Map<String, Long> stats = ImmutableMap.of( "sys/storage/used", du.getDiskUsage() ); final ServiceMetricEvent.Builder builder = builder() .setDimension("fsDirName", dir); // fsDirName because FsStats uses fsDirName MonitorUtils.addDimensionsToBuilder(builder, dimensions); for (Map.Entry<String, Long> entry : stats.entrySet()) { emitter.emit(builder.build(entry.getKey(), entry.getValue())); } } } } }
@Override public void doAudit(AuditEntry auditEntry, Handle handle) throws IOException { emitter.emit( new ServiceMetricEvent.Builder() .setDimension("key", auditEntry.getKey()) .setDimension("type", auditEntry.getType()) .setDimension("author", auditEntry.getAuditInfo().getAuthor()) .build("config/audit", 1) ); handle.createStatement( StringUtils.format( "INSERT INTO %s ( audit_key, type, author, comment, created_date, payload) VALUES (:audit_key, :type, :author, :comment, :created_date, :payload)", getAuditTable() ) ) .bind("audit_key", auditEntry.getKey()) .bind("type", auditEntry.getType()) .bind("author", auditEntry.getAuditInfo().getAuthor()) .bind("comment", auditEntry.getAuditInfo().getComment()) .bind("created_date", auditEntry.getAuditTime().toString()) .bind("payload", jsonMapper.writeValueAsBytes(auditEntry)) .execute(); }