# frozen_string_literal: true require "rack/mock" module Appsignal # {Appsignal::Demo} is a way to send demonstration / test samples for a # exception and a performance issue. # # @example Loading config automatically # Appsignal::Demo.transmit # # @example With custom config # # If another configuration should be used, set it beforehand. # Appsignal.config = Appsignal::Config.new(Dir.pwd, "production") # Appsignal::Demo.transmit # # @since 2.0.0 # @see Appsignal::CLI::Demo # @api private class Demo # Error type used to create demonstration exception. class TestError < StandardError; end class << self # Starts AppSignal and transmits the demonstration samples to AppSignal # using the loaded configuration. # # @return [Boolean] # - returns `false` if Appsignal is not active. def transmit Appsignal.start Appsignal.start_logger return false unless Appsignal.active? create_example_error_request create_example_performance_request true end private def create_example_error_request transaction = Appsignal::Transaction.create( SecureRandom.uuid, Appsignal::Transaction::HTTP_REQUEST, rack_request ) begin raise TestError, "Hello world! This is an error used for demonstration purposes." rescue => error Appsignal.set_error(error) end transaction.set_http_or_background_queue_start transaction.set_metadata("path", "/hello") transaction.set_metadata("method", "GET") transaction.set_action("DemoController#hello") add_demo_metadata_to transaction Appsignal::Transaction.complete_current! end def create_example_performance_request transaction = Appsignal::Transaction.create( SecureRandom.uuid, Appsignal::Transaction::HTTP_REQUEST, rack_request ) Appsignal.instrument "action_view.render", "Render hello.html.erb", "