Skip to content
Snippets Groups Projects
Commit 306eb6e9 authored by Eugen Rochko's avatar Eugen Rochko
Browse files

Add optional StatsD performance tracking

parent 7cfd5b68
No related branches found
No related tags found
No related merge requests found
......@@ -47,6 +47,7 @@ gem 'sidekiq'
gem 'rails-settings-cached'
gem 'pg_search'
gem 'simple-navigation'
gem 'statsd-instrument'
gem 'react-rails'
gem 'browserify-rails'
......
......@@ -370,6 +370,7 @@ GEM
actionpack (>= 4.0)
activesupport (>= 4.0)
sprockets (>= 3.0.0)
statsd-instrument (2.1.2)
temple (0.7.7)
term-ansicolor (1.4.0)
tins (~> 1.0)
......@@ -463,6 +464,7 @@ DEPENDENCIES
simple-navigation
simple_form
simplecov
statsd-instrument
uglifier (>= 1.3.0)
webmock
will_paginate
......
# frozen_string_literal: true
class StatsDMonitor
def initialize(app)
@app = app
end
def call(env)
@app.call(env)
end
end
......@@ -30,6 +30,8 @@ module Mastodon
config.active_job.queue_adapter = :sidekiq
config.middleware.insert(0, 'StatsDMonitor')
config.middleware.insert_before 0, Rack::Cors do
allow do
origins '*'
......
......@@ -104,4 +104,8 @@ Rails.application.configure do
config.react.variant = :production
config.active_record.logger = nil
config.to_prepare do
StatsD.backend = StatsD::Instrument::Backends::NullBackend if ENV['STATSD_ADDR'].blank?
end
end
......@@ -10,7 +10,6 @@
# inflect.uncountable %w( fish sheep )
# end
# These inflection rules are supported but not enabled by default:
# ActiveSupport::Inflector.inflections(:en) do |inflect|
# inflect.acronym 'RESTful'
# end
ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.acronym 'StatsD'
end
# frozen_string_literal: true
StatsD.prefix = 'mastodon'
StatsD.default_sample_rate = 1
StatsDMonitor.extend(StatsD::Instrument)
StatsDMonitor.statsd_measure(:call, 'request.duration')
STATSD_REQUEST_METRICS = {
'request.status.success' => 200,
'request.status.not_found' => 404,
'request.status.too_many_requests' => 429,
'request.status.internal_server_error' => 500,
}.freeze
STATSD_REQUEST_METRICS.each do |name, code|
StatsDMonitor.statsd_count_if(:call, name) do |status, _env, _body|
status.to_i == code
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment