Add the RocketGraph SDK to your Gemfile:
gem 'rocketgraph-ruby'
Then run:
bundle install
Add the following code to your Ruby application:
# Rocketgraph
require 'rocketgraph'
use Rocketgraph::ErrorReportingMiddleware, 'https://rocketgraph.io/monitoring', 'sk_your_secret_key_here'
require 'sinatra'
require 'logger'
require 'json'
# Rocketgraph
require 'rocketgraph'
use Rocketgraph::ErrorReportingMiddleware, 'https://rocketgraph.io/monitoring', 'sk_your_secret_key_here'
# Configure Logger
logger = Logger.new(STDOUT)
logger.level = Logger::INFO
# Simulate background task to generate logs (e.g., system checks, metrics)
Thread.new do
loop do
# Generate ~0.5 logs/second (43,200 logs/day)
sleep 2
case rand(1..10)
when 1..8
logger.info("Background task: System health check OK")
when 9
logger.warn("Background task: High memory usage detected")
when 10
logger.error("Background task: Failed to connect to database")
end
rescue StandardError => e
logger.error("Background task error: #{e.message}")
end
end
# HTTP Endpoints
before do
# Log every incoming request
logger.info("Received #{request.request_method} request to #{request.path_info}")
end
get '/' do
logger.info("Homepage accessed")
'Welcome to the Log Generator App!'
end
get '/api/users' do
# Simulate fetching users
users = (1..10).map { |i| { id: i, name: "User#{i}" } }
logger.info("Fetched user list")
# Simulate occasional errors (~10% of requests)
if rand < 0.1
logger.error("Failed to fetch users: Database timeout")
status 500
return { error: 'Internal Server Error' }.to_json
end
content_type :json
users.to_json
end
post '/api/users' do
begin
payload = JSON.parse(request.body.read)
logger.info("Created user: #{payload['name']}")
status 201
{ message: "User #{payload['name']} created" }.to_json
rescue JSON::ParserError
logger.error("Invalid JSON payload")
status 400
{ error: 'Invalid JSON' }.to_json
end
end
# Simulate a heavy endpoint that logs multiple times
get '/api/report' do
10.times do |i|
logger.info("Generating report section #{i + 1}")
sleep 0.1 # Simulate work
end
logger.info("Report generation completed")
content_type :json
{ report: 'Generated successfully' }.to_json
end
# Error handling
error do
logger.error("Unhandled error: #{env['sinatra.error'].message}")
status 500
{ error: 'Something went wrong' }.to_json
end
RocketGraph.track('user_action', {
action: 'login',
user_id: '123',
timestamp: Time.now
})
begin
# Your code here
rescue => e
RocketGraph.capture_exception(e)
raise
end
class MyJob
include RocketGraph::Job
def perform
# Your job code here
end
end