lib/gladys/cli.rb
# frozen_string_literal: true module Gladys class CLI < Thor include ActiveSupport::NumberHelper def self.exit_on_failure? true end desc "help", "show help" def help super Gladys::Help.message end desc "cleanup SCRIPT", "cleanup a script" option :database_url, type: :string, required: true option :debug, type: :boolean, default: false option :"option-set", type: :string, default: nil def cleanup(script) Gladys::Client.load_config(options) build_workload(script).cleanup(options) say "Done cleaning up #{script}." end desc "prepare SCRIPT", "prepare a script for benchmarking" option :database_url, type: :string, required: true option :threads, type: :numeric, default: 1 option :debug, type: :boolean, default: false option :"option-set", type: :string, default: nil def prepare(script) Gladys::Client.load_config(options) report = build_workload(script).prepare(options) say "Done preparing #{script} with #{options[:threads]} thread(s)." say "Database size: #{number_to_human_size(report.database_size)}" say "\t`gladys cleanup #{script}` to clean up the data." say "\t`gladys benchmark #{script}` to run the benchmark." end desc "benchmark SCRIPT", "run a script" option :database_url, type: :string, required: true option :threads, type: :numeric, default: 1 option :time, type: :numeric, default: 60 option :json, type: :boolean, default: false option :debug, type: :boolean, default: false option :"option-set", type: :string, default: nil def benchmark(script) Gladys::Client.load_config(options) report = build_workload(script).benchmark(options) if options[:json] say report.build_json else say report.build_text end end private def build_workload(name) script = Gladys::Script.load(name, option_set: options[:"option-set"]) database = Gladys::Database.connect(options[:database_url], threads: options[:threads]) Gladys::Workload.new(script, database) end end end