diff --git a/.gitignore b/.gitignore index b59e8d5..741d4b5 100644 --- a/.gitignore +++ b/.gitignore @@ -23,4 +23,6 @@ /.DS_Store /doc/gh_sparkline.js /tempodb.csv -/lib/tasks/tempo.rake \ No newline at end of file +/lib/tasks/tempo.rake +/heroku_dumps +heroku_sync.sh \ No newline at end of file diff --git a/.ruby-version b/.ruby-version new file mode 100644 index 0000000..68b3a4c --- /dev/null +++ b/.ruby-version @@ -0,0 +1 @@ +1.9.3-p551 diff --git a/Gemfile b/Gemfile index 07be0bc..815f915 100644 --- a/Gemfile +++ b/Gemfile @@ -2,7 +2,7 @@ source 'https://rubygems.org' ruby "1.9.3" -gem 'rails', '3.2.19' +gem 'rails', '~> 3.2.19' gem 'rack', '~> 1.4.5' gem 'json', '>= 1.7.7' @@ -40,6 +40,8 @@ end gem 'jquery-rails' gem "rspec-rails", :group => [:test, :development] +gem 'dotenv-rails', '~> 0.11', :group => [:test, :development] + group :test do gem "factory_girl_rails" gem "guard-rspec" @@ -110,7 +112,7 @@ end gem 'rubyzip', :require => ["zip/zip"] # Performance metrics -gem "newrelic_rpm", "~> 3.5.5.540.dev", :group => :production +# gem "newrelic_rpm", "~> 3.5.5.540.dev", :group => :production # Pretty form display gem 'simple_form' @@ -121,8 +123,10 @@ gem 'psych' # jQuery file uploader assets gem "jquery-fileupload-rails" -# Time series service -gem 'tempodb' - # Elastic Search # gem 'tire' + +# Metrics +gem "skylight" + +gem 'rollbar', '~> 2.2.1' diff --git a/Gemfile.lock b/Gemfile.lock index 3e48445..a63520a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -65,6 +65,11 @@ GEM execjs coffee-script-source (1.4.0) diff-lcs (1.1.3) + dotenv (0.11.1) + dotenv-deployment (~> 0.0.2) + dotenv-deployment (0.0.2) + dotenv-rails (0.11.1) + dotenv (= 0.11.1) erubis (2.7.0) excon (0.16.10) execjs (1.4.0) @@ -106,7 +111,6 @@ GEM hashie (1.2.0) hike (1.2.3) httpauth (0.2.0) - httpclient (2.3.3) i18n (0.6.11) jeweler (1.8.4) bundler (~> 1.0) @@ -146,7 +150,6 @@ GEM net-scp (1.0.4) net-ssh (>= 1.99.1) net-ssh (2.6.3) - newrelic_rpm (3.5.5.540.dev) nokogiri (1.5.6) oauth2 (0.8.0) faraday (~> 0.8) @@ -225,6 +228,7 @@ GEM redis (>= 2.2.0) rest-client (1.6.7) mime-types (>= 1.16) + rollbar (2.2.1) rspec (2.8.0) rspec-core (~> 2.8.0) rspec-expectations (~> 2.8.0) @@ -256,6 +260,8 @@ GEM simple_form (2.0.4) actionpack (~> 3.0) activemodel (~> 3.0) + skylight (0.8.0) + activesupport (>= 3.0.0) slop (3.3.3) sprockets (2.2.2) hike (~> 1.2) @@ -270,9 +276,6 @@ GEM actionpack (~> 3.0) activemodel (~> 3.0) railties (~> 3.0) - tempodb (0.5.4) - httpclient - json thor (0.19.1) tilt (1.4.1) treetop (1.4.15) @@ -302,6 +305,7 @@ DEPENDENCIES cancan capybara (= 1.1.2) coffee-rails (~> 3.2.1) + dotenv-rails (~> 0.11) factory_girl factory_girl_rails font-awesome-rails @@ -314,7 +318,6 @@ DEPENDENCIES kaminari localeapp morris-rails! - newrelic_rpm (~> 3.5.5.540.dev) omniauth omniauth-allied_modders omniauth-openid @@ -322,10 +325,11 @@ DEPENDENCIES pg psych rack (~> 1.4.5) - rails (= 3.2.19) + rails (~> 3.2.19) raphaeljs-rails redis redis-rails + rollbar (~> 2.2.1) rspec (= 2.8.0) rspec-rails rubyzip @@ -333,9 +337,9 @@ DEPENDENCIES select2-rails selenium-webdriver (= 2.20.0) simple_form + skylight steam-condenser strong_parameters - tempodb turn (= 0.8.2) uglifier (>= 1.0.3) unicorn diff --git a/app/assets/javascripts/metrics.js.coffee b/app/assets/javascripts/metrics.js.coffee deleted file mode 100644 index 951aa6f..0000000 --- a/app/assets/javascripts/metrics.js.coffee +++ /dev/null @@ -1,57 +0,0 @@ - -Metrics = {} - -Metrics.loadUsersGraphs = -> - return if $("#users_chart").size() == 0 - $.ajax "/metrics/users.json", - success: (data) -> - Morris.Area - element: 'users_chart' - data: data.metrics - xkey: 'd' - ykeys: ['u'] - labels: ["Users"] - hideHover: true - continuousLine: true - - Morris.Donut - element: 'users_pie' - data: data.providers - - return - return - -Metrics.loadTranslationsGraph = -> - return if $("#translations_chart").size() == 0 - $.ajax "/metrics/translations.json", - success: (data) -> - Morris.Area - element: 'translations_chart' - data: data.metrics - xkey: 'd' - ykeys: ['w'] - labels: ["Web"] - hideHover: true - continuousLine: true - return - -Metrics.loadPluginsGraph = -> - return if $("#plugins_chart").size() == 0 - $.ajax "/metrics/plugins.json", - success: (data) -> - Morris.Area - element: 'plugins_chart' - data: data.metrics - xkey: 'd' - ykeys: ['p'] - labels: ["Plugins"] - hideHover: true - continuousLine: true - return - - -$(document).ready -> - Metrics.loadTranslationsGraph() - Metrics.loadPluginsGraph() - Metrics.loadUsersGraphs() - return \ No newline at end of file diff --git a/app/assets/javascripts/metrics_graphing.js b/app/assets/javascripts/metrics_graphing.js deleted file mode 100644 index 884875f..0000000 --- a/app/assets/javascripts/metrics_graphing.js +++ /dev/null @@ -1,10 +0,0 @@ -// For Graphing -//= OFF_require raphael/raphael -//= require morris - -//= OFF_require morris.grid -//= OFF_require morris.hover -//= OFF_require morris.area -//= OFF_require morris.line -//= OFF_require morris.bar -//= OFF_require morris.donut diff --git a/app/controllers/metrics_controller.rb b/app/controllers/metrics_controller.rb index 2e515f8..1f1e20a 100644 --- a/app/controllers/metrics_controller.rb +++ b/app/controllers/metrics_controller.rb @@ -3,67 +3,6 @@ class MetricsController < ApplicationController def index end - def translations - - metrics = {} - resp = { - metrics: [] - } - - readkey("translations").each do |point| - time = format_time point.ts - metrics[time] = {t: point.value} - end - - readkey("translations_web").each do |point| - metrics[format_time(point.ts)].merge!({w: point.value}) - end - - # readkey("translations_imported").each do |point| - # metrics[format_time(point.ts)].merge!({i: point.value}) - # end - - metrics.each_pair do |k,v| - resp[:metrics] << v.merge({d: k}) - end - - render :json => resp - end - - - def plugins - resp = { - metrics: [] - } - readkey("plugins").each do |point| - resp[:metrics] << { - d: format_time(point.ts), - p: point.value - } - end - render :json => resp - end - - def users - resp = { - metrics: [], - providers: [] - } - readkey("users").each do |point| - resp[:metrics] << { - d: format_time(point.ts), - u: point.value - } - end - - User.group(:provider).count.each do |provider,num| - resp[:providers] << {label: provider_name(provider), value: num} - end - - render :json => resp - end - - # This should be called in order to log the metrics to tempodb # ?nosave=1 to not save to tempodb # TODO: Maybe some cheesy authentication? param checking? @@ -103,12 +42,9 @@ def update metrics << {key: "tags_used", v: Tag.used.count} metrics << {key: "tags_unused", v: Tag.unused.count} - tempodb.write_bulk timestamp, metrics unless params[:nosave].eql?("1") - response = { timestamp: timestamp, metric_count: metrics.size, - nosave: params[:nosave].eql?("1"), metrics: metrics, } @@ -117,19 +53,11 @@ def update private - def readkey(key) - tempodb.read_key(key, 1.year.ago, Time.now.utc, :interval => "1day").data - end - def format_time(ts) # ts.strftime "%Y-%m-%d %H:00" ts.strftime "%Y-%m-%d" end - def tempodb - @tempodb ||= TempoDB::Client.new(ENV['TEMPODB_API_KEY'], ENV['TEMPODB_API_SECRET']) - end - def provider_name(provider) return "AlliedModders" if provider.eql?("allied_modders") return "Steam" if provider.eql?("steam") diff --git a/app/controllers/sourcemod_plugins_controller.rb b/app/controllers/sourcemod_plugins_controller.rb index 762b963..f86b61b 100644 --- a/app/controllers/sourcemod_plugins_controller.rb +++ b/app/controllers/sourcemod_plugins_controller.rb @@ -20,7 +20,7 @@ def index @sourcemod_plugin.name = params[:name] || '' - search = SourcemodPlugin.includes(:user) + search = SourcemodPlugin.includes(:user, :tags) if !@sourcemod_plugin.name.blank? diff --git a/app/views/metrics/index.html.erb b/app/views/metrics/index.html.erb index f506f35..16c8a50 100644 --- a/app/views/metrics/index.html.erb +++ b/app/views/metrics/index.html.erb @@ -12,7 +12,7 @@ -
+

Users

diff --git a/app/views/pages/changelog.html.erb b/app/views/pages/changelog.html.erb index d866d02..f22e0c5 100644 --- a/app/views/pages/changelog.html.erb +++ b/app/views/pages/changelog.html.erb @@ -5,6 +5,14 @@

I will try to keep this updated with changes I make in each version.

+

0.5.1 - (2015-09-12)

+
    +
  • Added instrumentation to the app to monitor API calls
  • +
  • Removed time-series endpoints
  • +
  • Added exception tracking service
  • +
  • Improved database
  • +
+

0.5.0 - (2013-03-30)

    diff --git a/app/views/sourcemod_plugins/_sourcemod_plugin.html.erb b/app/views/sourcemod_plugins/_sourcemod_plugin.html.erb index 4527af4..edcf8c1 100644 --- a/app/views/sourcemod_plugins/_sourcemod_plugin.html.erb +++ b/app/views/sourcemod_plugins/_sourcemod_plugin.html.erb @@ -16,10 +16,10 @@

    - <% if sourcemod_plugin.tags.count > 0 %> + <% if sourcemod_plugin.tags.size > 0 %> Tags:
      - <% sourcemod_plugin.tags.order("tags.name ASC").each do |tag| %> + <% sourcemod_plugin.tags.sort{|a,b| a.name <=> b.name}.each do |tag| %>
    • <%= link_to tag.name, tagged_sourcemod_plugins_path(tag.name) %>
    • <% end %>
    diff --git a/config/database.yml b/config/database.yml index 88ddc5b..6d99a85 100644 --- a/config/database.yml +++ b/config/database.yml @@ -7,7 +7,7 @@ development: adapter: postgresql username: rails password: rails99 - database: sourcemod_translator_development + database: sourcemod_translator pool: 5 # Warning: The database defined as "test" will be erased and diff --git a/config/environments/development.rb b/config/environments/development.rb index 9ef6cb0..9268cfc 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -27,7 +27,7 @@ # Log the query plan for queries taking more than this (works # with SQLite, MySQL, and PostgreSQL) - config.active_record.auto_explain_threshold_in_seconds = 0.5 + config.active_record.auto_explain_threshold_in_seconds = 1.0 # Do not compress assets config.assets.compress = false diff --git a/config/environments/production.rb b/config/environments/production.rb index f17aa85..50ba7b3 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -43,7 +43,7 @@ # config.cache_store = :mem_cache_store # Enable serving of images, stylesheets, and JavaScripts from an asset server - config.action_controller.asset_host = "//#{ENV['ASSET_DIRECTORY']}.s3.amazonaws.com" + config.action_controller.asset_host = "//#{ENV['ASSET_HOST']}" # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added) config.assets.precompile += %w( bootstrap.js bootstrap.css jquery-fileupload.js uploads.js metrics_graphing.js metrics_graphing.css plugin_stats.js ) diff --git a/config/initializers/rollbar.rb b/config/initializers/rollbar.rb new file mode 100644 index 0000000..34cf595 --- /dev/null +++ b/config/initializers/rollbar.rb @@ -0,0 +1,50 @@ +require 'rollbar/rails' +Rollbar.configure do |config| + # Without configuration, Rollbar is enabled in all environments. + # To disable in specific environments, set config.enabled=false. + + config.access_token = ENV['ROLLBAR_ACCESS_TOKEN'] + + # Here we'll disable in 'test': + if Rails.env.test? || Rails.env.development? + config.enabled = false + end + + # By default, Rollbar will try to call the `current_user` controller method + # to fetch the logged-in user object, and then call that object's `id`, + # `username`, and `email` methods to fetch those properties. To customize: + config.person_method = "current_user" + config.person_id_method = "id" + config.person_username_method = "name" + + # If you want to attach custom data to all exception and message reports, + # provide a lambda like the following. It should return a hash. + # config.custom_data_method = lambda { {:some_key => "some_value" } } + + # Add exception class names to the exception_level_filters hash to + # change the level that exception is reported at. Note that if an exception + # has already been reported and logged the level will need to be changed + # via the rollbar interface. + # Valid levels: 'critical', 'error', 'warning', 'info', 'debug', 'ignore' + # 'ignore' will cause the exception to not be reported at all. + # config.exception_level_filters.merge!('MyCriticalException' => 'critical') + + # You can also specify a callable, which will be called with the exception instance. + # config.exception_level_filters.merge!('MyCriticalException' => lambda { |e| 'critical' }) + + # Enable asynchronous reporting (uses girl_friday or Threading if girl_friday + # is not installed) + # config.use_async = true + # Supply your own async handler: + # config.async_handler = Proc.new { |payload| + # Thread.new { Rollbar.process_payload_safely(payload) } + # } + + # Enable asynchronous reporting (using sucker_punch) + # config.use_sucker_punch + + # Enable delayed reporting (using Sidekiq) + # config.use_sidekiq + # You can supply custom Sidekiq options: + # config.use_sidekiq 'queue' => 'my_queue' +end diff --git a/config/initializers/version.rb b/config/initializers/version.rb index 1f9a85d..0e6721e 100644 --- a/config/initializers/version.rb +++ b/config/initializers/version.rb @@ -1 +1 @@ -$VERSION = "0.5.0" \ No newline at end of file +$VERSION = "0.5.1" \ No newline at end of file diff --git a/config/newrelic.yml b/config/newrelic.yml deleted file mode 100644 index ccf098e..0000000 --- a/config/newrelic.yml +++ /dev/null @@ -1,259 +0,0 @@ -<%unless ENV["NEW_RELIC_LICENSE_KEY"].nil? %> -# Here are the settings that are common to all environments -common: &default_settings - # ============================== LICENSE KEY =============================== - - # You must specify the license key associated with your New Relic - # account. This key binds your Agent's data to your account in the - # New Relic service. - license_key: '<%= ENV["NEW_RELIC_LICENSE_KEY"] %>' - - # Agent Enabled (Rails Only) - # Use this setting to force the agent to run or not run. - # Default is 'auto' which means the agent will install and run only - # if a valid dispatcher such as Mongrel is running. This prevents - # it from running with Rake or the console. Set to false to - # completely turn the agent off regardless of the other settings. - # Valid values are true, false and auto. - # - # agent_enabled: auto - - # Application Name Set this to be the name of your application as - # you'd like it show up in New Relic. The service will then auto-map - # instances of your application into an "application" on your - # dashboard page. If you want to map this instance into multiple - # apps, like "AJAX Requests" and "All UI" then specify a semicolon - # separated list of up to three distinct names, or a yaml list. - # Defaults to the capitalized RAILS_ENV or RACK_ENV (i.e., - # Production, Staging, etc) - # - # Example: - # - # app_name: - # - Ajax Service - # - All Services - # - app_name: <%= ENV["NEW_RELIC_APP_NAME"] %> - - # When "true", the agent collects performance data about your - # application and reports this data to the New Relic service at - # newrelic.com. This global switch is normally overridden for each - # environment below. (formerly called 'enabled') - monitor_mode: true - - # Developer mode should be off in every environment but - # development as it has very high overhead in memory. - developer_mode: false - - # The newrelic agent generates its own log file to keep its logging - # information separate from that of your application. Specify its - # log level here. - log_level: info - - # Optionally set the path to the log file This is expanded from the - # root directory (may be relative or absolute, e.g. 'log/' or - # '/var/log/') The agent will attempt to create this directory if it - # does not exist. - # log_file_path: 'log' - - # Optionally set the name of the log file, defaults to 'newrelic_agent.log' - # log_file_name: 'newrelic_agent.log' - - # The newrelic agent communicates with the service via http by - # default. If you want to communicate via https to increase - # security, then turn on SSL by setting this value to true. Note, - # this will result in increased CPU overhead to perform the - # encryption involved in SSL communication, but this work is done - # asynchronously to the threads that process your application code, - # so it should not impact response times. - ssl: false - - # EXPERIMENTAL: enable verification of the SSL certificate sent by - # the server. This setting has no effect unless SSL is enabled - # above. This may block your application. Only enable it if the data - # you send us needs end-to-end verified certificates. - # - # This means we cannot cache the DNS lookup, so each request to the - # service will perform a lookup. It also means that we cannot - # use a non-blocking lookup, so in a worst case, if you have DNS - # problems, your app may block indefinitely. - # verify_certificate: true - - # Set your application's Apdex threshold value with the 'apdex_t' - # setting, in seconds. The apdex_t value determines the buckets used - # to compute your overall Apdex score. - # Requests that take less than apdex_t seconds to process will be - # classified as Satisfying transactions; more than apdex_t seconds - # as Tolerating transactions; and more than four times the apdex_t - # value as Frustrating transactions. - # For more about the Apdex standard, see - # http://newrelic.com/docs/general/apdex - - apdex_t: 0.5 - - #============================== Browser Monitoring =============================== - # New Relic Real User Monitoring gives you insight into the performance real users are - # experiencing with your website. This is accomplished by measuring the time it takes for - # your users' browsers to download and render your web pages by injecting a small amount - # of JavaScript code into the header and footer of each page. - browser_monitoring: - # By default the agent automatically injects the monitoring JavaScript - # into web pages. Set this attribute to false to turn off this behavior. - auto_instrument: true - - # Proxy settings for connecting to the service. - # - # If a proxy is used, the host setting is required. Other settings - # are optional. Default port is 8080. - # - # proxy_host: hostname - # proxy_port: 8080 - # proxy_user: - # proxy_pass: - - - # Tells transaction tracer and error collector (when enabled) - # whether or not to capture HTTP params. When true, frameworks can - # exclude HTTP parameters from being captured. - # Rails: the RoR filter_parameter_logging excludes parameters - # Java: create a config setting called "ignored_params" and set it to - # a comma separated list of HTTP parameter names. - # ex: ignored_params: credit_card, ssn, password - # capture_params: false - capture_params: true - - - # Transaction tracer captures deep information about slow - # transactions and sends this to the service once a - # minute. Included in the transaction is the exact call sequence of - # the transactions including any SQL statements issued. - transaction_tracer: - - # Transaction tracer is enabled by default. Set this to false to - # turn it off. This feature is only available at the Professional - # and above product levels. - enabled: true - - # Threshold in seconds for when to collect a transaction - # trace. When the response time of a controller action exceeds - # this threshold, a transaction trace will be recorded and sent to - # the service. Valid values are any float value, or (default) - # "apdex_f", which will use the threshold for an dissatisfying - # Apdex controller action - four times the Apdex T value. - transaction_threshold: apdex_f - - # When transaction tracer is on, SQL statements can optionally be - # recorded. The recorder has three modes, "off" which sends no - # SQL, "raw" which sends the SQL statement in its original form, - # and "obfuscated", which strips out numeric and string literals - # record_sql: obfuscated - record_sql: raw - - # Threshold in seconds for when to collect stack trace for a SQL - # call. In other words, when SQL statements exceed this threshold, - # then capture and send the current stack trace. This is - # helpful for pinpointing where long SQL calls originate from - stack_trace_threshold: 0.500 - - # Determines whether the agent will capture query plans for slow - # SQL queries. Only supported in mysql and postgres. Should be - # set to false when using other adapters. - # explain_enabled: true - - # Threshold for query execution time below which query plans will not - # not be captured. Relevant only when `explain_enabled` is true. - # explain_threshold: 0.5 - - # Error collector captures information about uncaught exceptions and - # sends them to the service for viewing - error_collector: - - # Error collector is enabled by default. Set this to false to turn - # it off. This feature is only available at the Professional and above - # product levels - enabled: true - - # Rails Only - tells error collector whether or not to capture a - # source snippet around the place of the error when errors are View - # related. - capture_source: true - - # To stop specific errors from reporting to New Relic, set this property - # to comma separated values. Default is to ignore routing errors - # which are how 404's get triggered. - # - ignore_errors: ActionController::RoutingError - - # (Advanced) Uncomment this to ensure the cpu and memory samplers - # won't run. Useful when you are using the agent to monitor an - # external resource - # disable_samplers: true - - # If you aren't interested in visibility in these areas, you can - # disable the instrumentation to reduce overhead. - # - # disable_view_instrumentation: true - # disable_activerecord_instrumentation: true - # disable_memcache_instrumentation: true - # disable_dj: true - - # If you're interested in capturing memcache keys as though they - # were SQL uncomment this flag. Note that this does increase - # overhead slightly on every memcached call, and can have security - # implications if your memcached keys are sensitive - # capture_memcache_keys: true - - # Certain types of instrumentation such as GC stats will not work if - # you are running multi-threaded. Please let us know. - # multi_threaded = false - -# Application Environments -# ------------------------------------------ -# Environment specific settings are in this section. -# For Rails applications, RAILS_ENV is used to determine the environment -# For Java applications, pass -Dnewrelic.environment to set -# the environment - -# NOTE if your application has other named environments, you should -# provide newrelic configuration settings for these environments here. - -development: - <<: *default_settings - # Turn off communication to New Relic service in development mode (also - # 'enabled'). - # NOTE: for initial evaluation purposes, you may want to temporarily - # turn the agent on in development mode. - monitor_mode: false - - # Rails Only - when running in Developer Mode, the New Relic Agent will - # present performance information on the last 100 transactions you have - # executed since starting the mongrel. - # NOTE: There is substantial overhead when running in developer mode. - # Do not use for production or load testing. - developer_mode: true - - # Enable textmate links - # textmate: true - -test: - <<: *default_settings - # It almost never makes sense to turn on the agent when running - # unit, functional or integration tests or the like. - monitor_mode: false - -# Turn on the agent in production for 24x7 monitoring. NewRelic -# testing shows an average performance impact of < 5 ms per -# transaction, you you can leave this on all the time without -# incurring any user-visible performance degradation. -production: - <<: *default_settings - monitor_mode: true - -# Many applications have a staging environment which behaves -# identically to production. Support for that environment is provided -# here. By default, the staging environment has the agent turned on. -staging: - <<: *default_settings - monitor_mode: true - app_name: <%= ENV["NEW_RELIC_APP_NAME"] %> (Staging) -<%end%> \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 4c04c68..e6816bf 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -52,11 +52,11 @@ get 'changelog', to: 'pages#changelog', as: 'changelog' scope 'metrics' do - get '', to: 'metrics#index', as: :metrics, format: :html + # get '', to: 'metrics#index', as: :metrics, format: :html get 'update', to: 'metrics#update', as: :metrics_update, format: :json - get 'translations', to: 'metrics#translations', as: :metrics_translations, format: :json - get 'plugins', to: 'metrics#plugins', as: :metrics_plugins, format: :json - get 'users', to: 'metrics#users', as: :metrics_users, format: :json + # get 'translations', to: 'metrics#translations', as: :metrics_translations, format: :json + # get 'plugins', to: 'metrics#plugins', as: :metrics_plugins, format: :json + # get 'users', to: 'metrics#users', as: :metrics_users, format: :json end root :to => 'pages#index' diff --git a/config/unicorn.rb b/config/unicorn.rb index 25b147a..f044297 100644 --- a/config/unicorn.rb +++ b/config/unicorn.rb @@ -1,5 +1,5 @@ # number of workers -worker_processes ENV['UNICORN_WORKERS'].to_i +worker_processes ENV['WEB_CONCURRENCY'].to_i # bailout after timeout 30