lib/gladys.rb



# frozen_string_literal: true

# Performance optimizations for Ruby
if RUBY_ENGINE == "ruby"
  # Optimize GC for high-throughput scenarios
  GC.start(full_mark: true, immediate_sweep: true) if GC.respond_to?(:start)

  # Configure for better concurrent performance
  if defined?(GC.compact)
    at_exit { GC.compact }
  end
end

require "bundler/setup"
Bundler.require(:default)

$LOAD_PATH.unshift File.dirname(__FILE__)

require "active_support"
require "active_support/core_ext/numeric/bytes"
require "active_support/number_helper"
require "active_support/time"
require "benchmark"
require "concurrent"
require "pg"
require "sequel"
require "socket"
require "thor"
require "json"
require "securerandom"
require "dry-configurable"
require "pgvector"
require "enumerable-stats"

module Gladys
  require "gladys/help"

  require "gladys/time_series/counter"
  require "gladys/time_series/percentile"

  require "gladys/helpers/default"

  require "gladys/database"
  require "gladys/option_set"
  require "gladys/errors"
  require "gladys/client"
  require "gladys/metrics"
  require "gladys/workload"
  require "gladys/script"
  require "gladys/report"
  require "gladys/context"
  require "gladys/cli"
  require "gladys/container"

  require "gladys/actions/base"
  require "gladys/actions/benchmark"
  require "gladys/actions/cleanup"
  require "gladys/actions/prepare"

  def self.logger
    Client.logger
  end

  def self.log(message)
    logger.info message
  end

  def self.log_debug(message)
    logger.debug(message)
  end

  def self.report_script_error(script, error)
    raise error if Client.raise_on_error?

    logger.error("Error in script: #{script.name}")
    logger.error(error.message)
    logger.error(error.backtrace.select { |line| line.include?(script.path) }.join("\n\t"))
  end

  def self.report_error(error)
    raise error if Client.raise_on_error?

    logger.error(error.message)
    logger.debug(error.backtrace.join("\n\t"))
  end
end