Sha256: d751498ac585a62e9d65db85c426bf8775fa29d80d76b8ac4efd0d7e1f0a1812

Contents?: true

Size: 1.84 KB

Versions: 10

Compression:

Stored size: 1.84 KB

Contents

# frozen_string_literal: true

module PrometheusExporter::Server

  class ProcessCollector < TypeCollector
    MAX_PROCESS_METRIC_AGE = 60
    PROCESS_GAUGES = {
      heap_free_slots: "Free ruby heap slots.",
      heap_live_slots: "Used ruby heap slots.",
      v8_heap_size: "Total JavaScript V8 heap size (bytes).",
      v8_used_heap_size: "Total used JavaScript V8 heap size (bytes).",
      v8_physical_size: "Physical size consumed by V8 heaps.",
      v8_heap_count: "Number of V8 contexts running.",
      rss: "Total RSS used by process.",
    }

    PROCESS_COUNTERS = {
      major_gc_ops_total: "Major GC operations by process.",
      minor_gc_ops_total: "Minor GC operations by process.",
      allocated_objects_total: "Total number of allocated objects by process.",
    }

    def initialize
      @process_metrics = []
    end

    def type
      "process"
    end

    def metrics
      return [] if @process_metrics.length == 0

      metrics = {}

      @process_metrics.map do |m|
        metric_key = { pid: m["pid"], type: m["process_type"] }

        PROCESS_GAUGES.map do |k, help|
          k = k.to_s
          if v = m[k]
            g = metrics[k] ||= PrometheusExporter::Metric::Gauge.new(k, help)
            g.observe(v, metric_key)
          end
        end

        PROCESS_COUNTERS.map do |k, help|
          k = k.to_s
          if v = m[k]
            c = metrics[k] ||= PrometheusExporter::Metric::Counter.new(k, help)
            c.observe(v, metric_key)
          end
        end
      end

      metrics.values
    end

    def collect(obj)
      now = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC)

      obj["created_at"] = now

      @process_metrics.delete_if do |current|
        obj["pid"] == current["pid"] || (current["created_at"] + MAX_PROCESS_METRIC_AGE < now)
      end
      @process_metrics << obj
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
prometheus_exporter-0.4.4 lib/prometheus_exporter/server/process_collector.rb
prometheus_exporter-0.4.3 lib/prometheus_exporter/server/process_collector.rb
prometheus_exporter-0.4.2 lib/prometheus_exporter/server/process_collector.rb
prometheus_exporter-0.4.1 lib/prometheus_exporter/server/process_collector.rb
prometheus_exporter-0.4.0 lib/prometheus_exporter/server/process_collector.rb
prometheus_exporter-0.3.4 lib/prometheus_exporter/server/process_collector.rb
prometheus_exporter-0.3.3 lib/prometheus_exporter/server/process_collector.rb
prometheus_exporter-0.3.1 lib/prometheus_exporter/server/process_collector.rb
prometheus_exporter-0.3.0 lib/prometheus_exporter/server/process_collector.rb
prometheus_exporter-0.2.0 lib/prometheus_exporter/server/process_collector.rb