Rails_performance

Monitor performance of you Rails applications (self-hosted and free)
Alternatives To Rails_performance
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Systeminformer8,883
8 hours ago110mitC
A free, powerful, multi-purpose tool that helps you monitor system resources, debug software and detect malware. Brought to you by Winsider Seminars & Solutions, Inc. @ http://www.windows-internals.com
Stats.js8,182738236a month ago6October 29, 201619mitJavaScript
JavaScript Performance Monitor
Androidperformancemonitor6,517411a year ago10August 31, 201649apache-2.0Java
A transparent ui-block detection library for Android. (known as BlockCanary)
React Intersection Observer3,9221533953 months ago135July 22, 2022mitTypeScript
React implementation of the Intersection Observer API to tell you when an element enters or leaves the viewport.
Easy Monitor2,852878 months ago63March 30, 20201bsd-2-clauseJavaScript
企业级 Node.js 应用性能监控与线上故障定位解决方案
Myperf4j2,796
2 months ago6bsd-3-clauseJava
High performance Java APM. Powered by ASM. Try it. Test it. If you feel its better, use it.
Ios Monitor Platform2,515
5 years ago21mit
:books: iOS 性能监控 SDK —— Wedjat(华狄特)开发过程的调研和整理
Query Monitor1,433
11 days ago92gpl-2.0PHP
The Developer Tools Panel for WordPress
React Cool Inview1,41833 months ago86April 17, 202220mitTypeScript
😎 🖥️ React hook to monitor an element enters or leaves the viewport (or another element).
Httpreports1,15420a year ago99September 26, 20212mitC#
HttpReports is an APM (application performance monitor) system for .Net Core.
Alternatives To Rails_performance
Select To Compare


Alternative Project Comparisons
Readme

Rails Performance

Tests RailsJazz https://www.patreon.com/igorkasyanchuk Listed on OpenSource-Heroes.com

A self-hosted tool to monitor the performance of your Ruby on Rails application.

This is a simple and free alternative to the New Relic APM, Datadog or other similar services.

Demo

It allows you to track:

  • real-time monitoring on the Recent tab
  • throughput report (see amount of RPM (requests per minute))
  • an average response time
  • the slowest controllers & actions
  • total duration of time spent per request, views rendering, DB
  • SQL queries, rendering logs in "Recent Requests" section
  • simple 500-crashes reports
  • Sidekiq jobs
  • Delayed Job jobs
  • Grape API inside Rails app
  • Rake tasks performance
  • Custom events wrapped with RailsPerformance.measure do .. end block
  • works with Rails 4.2+ (and probably 4.1, 4.0 too) and Ruby 2.2+

All data are stored in local Redis and not sent to any 3rd party servers.

Production

Gem is production-ready. At least on my 2 applications with ~800 unique users per day it works perfectly.

Just don't forget to protect performance dashboard with http basic auth or check of current_user.

Usage

1. Add gem to the Gemfile (in appropriate group if needed)
2. Start rails server
3. Make a few requests to your app
4. open localhost:3000/rails/performance
5. Tune the configuration and deploy to production

Default configulation is listed below. But you can overide it.

Create config/initializers/rails_performance.rb in your app:

RailsPerformance.setup do |config|
  config.redis    = Redis::Namespace.new("#{Rails.env}-rails-performance", redis: Redis.new)
  config.duration = 4.hours

  config.debug    = false # currently not used>
  config.enabled  = true

  # default path where to mount gem,
  # alternatively you can mount the RailsPerformance::Engine in your routes.rb
  config.mount_at = '/rails/performance'

  # protect your Performance Dashboard with HTTP BASIC password
  config.http_basic_authentication_enabled   = false
  config.http_basic_authentication_user_name = 'rails_performance'
  config.http_basic_authentication_password  = 'password12'

  # if you need an additional rules to check user permissions
  config.verify_access_proc = proc { |controller| true }
  # for example when you have `current_user`
  # config.verify_access_proc = proc { |controller| controller.current_user && controller.current_user.admin? }

  # store custom data for the request
  # config.custom_data_proc = proc do |env|
  #   request = Rack::Request.new(env)
  #   {
  #     email: request.env['warden'].user&.email, # if you are using Devise for example
  #     user_agent: request.env['HTTP_USER_AGENT']
  #   }
  # end

  # config home button link
  config.home_link = '/'

  config.skipable_rake_tasks = ['webpacker:compile']
end if defined?(RailsPerformance)

Installation

Add this line to your application's Gemfile:

gem 'rails_performance'

# or

group :development, :production do
  gem 'rails_performance'
end

And then execute:

$ bundle

Create default configuration file:

$ rails generate rails_performance:install

Have a look at config/initializers/rails_performance.rb and adjust the configuration to your needs.

You must also have installed Redis server, because this gem is storing data into it.

After installation and configuration, start your Rails application, make a few requests, and open https://localhost:3000/rails/performance URL.

Alternative: Mounting the engine yourself

If you, for whatever reason (company policy, devise, ...) need to mount RailsPerformance yourself, feel free to do so by using the following snippet as inspiration. You can skip the mount_at and http_basic_authentication_* configurations then, if you like.

# config/routes.rb
Rails.application.routes.draw do
  ...
  # example for usage with Devise
  authenticate :user, -> (user) { user.admin? } do
    mount RailsPerformance::Engine, at: 'rails/performance'
  end
end

Custom data

You need to configure config.custom_data_proc. And you can capture current_user, HTTP User Agent, etc. This proc is executed inside middleware, and you have access to Rack "env".

Custom Data

Custom events

RailsPerformance.measure("some label", "some namespace") do
   # your code
end

How it works

Schema

In addition it's wrapping gems internal methods and collecting performance information. See ./lib/rails_performance/gems/* for more information.

Limitations

  • it doesn't track params of POST/PUT requests
  • it doesn't track Redis/ElasticSearch or other apps
  • it can't compare historical data
  • depending on your load you may need to reduce time of for how long you store data, because all calculations are done in memory and it could take some time for high-load apps

Redis

Gem is using Redis. This is the only one dependency.

All information is stored into Redis. The default expiration time is set to config.duration from the configuration.

Development & Testing

Just clone the repo, setup dummy app (rails db:migrate).

After this:

  • rails s
  • rake test

Like a regular web development.

Please note that to simplify integration with other apps all CSS/JS are bundled inside, and delivered in body of the request. This is to avoid integration with assets pipeline or webpacker.

For UI changes you need to use Bulma CSS (https://bulma.io/documentation).

Why

The idea of this gem grew from curriosity how many RPM my app receiving per day. Later it evolutionated to something more powerful.

TODO

  • documentation in Readme?
  • capture stacktrace of 500 errors and show in side panel
  • time/zone config?
  • connected charts on dashboard, when zoom, when hover?
  • ability to zoom to see requests withing specific datetime range
  • better hints?
  • export to csv
  • better stats tooltip, do not show if nothing to show
  • dark mode toggle? save to the cookies?
  • integration with elastic search? or other?
  • monitor active job?
  • better logo?
  • number of requests last 24 hours, hour, etc.
  • collect deprecation.rails
  • fix misspellings?
  • show "loading banner" until jquery is loaded?
  • better UI on smaller screens? Recent requests when URL's are long? Truncate with CSS?
  • rules for highlighting durations? how many ms to show warning, alert
  • elastic search
  • searchkiq
  • sinatra?
  • tests to check what is actually stored in redis db after request

Contributing

You are welcome to contribute. I've a big list of TODO.

If "schema" how records are stored i Redis is changed, and this is a breacking change, update: RailsPerformance::SCHEMA to a newer value.

Big thanks to contributors

License

The gem is available as open source under the terms of the MIT License.

Popular Performance Projects
Popular Monitor Projects
Popular Software Performance Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Ruby
Ruby On Rails
Redis
Monitor
Performance
Apm
Sidekiq
Datadog
Performance Monitoring
Monitor Performance