39 lines
1015 B
Ruby
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
|