Files

39 lines
1015 B
Ruby

# frozen_string_literal: true
require 'prometheus_exporter'
require 'prometheus_exporter/client'
class PrometheusProfiler
def initialize(site)
@site = site
@client = PrometheusExporter::Client.default
@gauge = @client.register :gauge, 'jekyll_profiler', 'Jekyll profiler'
end
def profile_process
%i[reset read generate render cleanup write].each do |job|
start_time = Time.now
@site.send(job)
begin
@gauge.observe((Time.now - start_time).round(4), instance: @site.config['hostname'], job:, theme: @site.config['theme'])
rescue StandardError => e
Jekyll.logger.warn 'Prometheus:', e.message
end
end
begin
@client.stop(wait_timeout_seconds: 1)
rescue StandardError => e
Jekyll.logger.warn 'Prometheus:', e.message
end
end
end
Jekyll::Hooks.register :site, :after_init, priority: 100 do |site|
next unless Jekyll.env == 'production'
site.instance_variable_set :@profiler, PrometheusProfiler.new(site)
end