summaryrefslogtreecommitdiff
path: root/lib/api
diff options
context:
space:
mode:
authorPatricio Cano <suprnova32@gmail.com>2016-06-14 11:45:45 -0500
committerPatricio Cano <suprnova32@gmail.com>2016-06-14 11:45:45 -0500
commit06e0ef07bcb92925e6819cbe1e33cdcf645b736b (patch)
treeca7e2bfc6017a88b22f6265955ec8429dbe68260 /lib/api
parentc6cc7680e7da89c145b7e2075266791a3f594eec (diff)
downloadgitlab-ce-06e0ef07bcb92925e6819cbe1e33cdcf645b736b.tar.gz
Added API endpoint for Sidekiq Metrics
Diffstat (limited to 'lib/api')
-rw-r--r--lib/api/api.rb1
-rw-r--r--lib/api/sidekiq_metrics.rb90
2 files changed, 91 insertions, 0 deletions
diff --git a/lib/api/api.rb b/lib/api/api.rb
index 6cd909f6115..51ddd0dbfc4 100644
--- a/lib/api/api.rb
+++ b/lib/api/api.rb
@@ -59,5 +59,6 @@ module API
mount ::API::Licenses
mount ::API::Subscriptions
mount ::API::Gitignores
+ mount ::API::SidekiqMetrics
end
end
diff --git a/lib/api/sidekiq_metrics.rb b/lib/api/sidekiq_metrics.rb
new file mode 100644
index 00000000000..f99cdb7a948
--- /dev/null
+++ b/lib/api/sidekiq_metrics.rb
@@ -0,0 +1,90 @@
+require 'sidekiq/api'
+
+module API
+ class SidekiqMetrics < Grape::API
+ before { authenticated_as_admin! }
+
+ helpers do
+ def queue_metrics
+ Sidekiq::Queue.all.each_with_object({}) do |queue, hash|
+ hash[queue.name] = {
+ backlog: queue.size,
+ latency: queue.latency.to_i
+ }
+ end
+ end
+
+ def process_metrics
+ Sidekiq::ProcessSet.new.map do |process|
+ {
+ hostname: process['hostname'],
+ pid: process['pid'],
+ tag: process['tag'],
+ started_at: Time.at(process['started_at']),
+ queues: process['queues'],
+ labels: process['labels'],
+ concurrency: process['concurrency'],
+ busy: process['busy']
+ }
+ end
+ end
+
+ def job_stats
+ stats = Sidekiq::Stats.new
+ {
+ processed: stats.processed,
+ failed: stats.failed,
+ enqueued: stats.enqueued
+ }
+ end
+ end
+
+ # Get Sidekiq Queue metrics
+ #
+ # Parameters:
+ # None
+ #
+ # Example:
+ # GET /sidekiq/queue_metrics
+ #
+ get 'sidekiq/queue_metrics' do
+ { queues: queue_metrics }
+ end
+
+ # Get Sidekiq Process metrics
+ #
+ # Parameters:
+ # None
+ #
+ # Example:
+ # GET /sidekiq/process_metrics
+ #
+ get 'sidekiq/process_metrics' do
+ { processes: process_metrics }
+ end
+
+ # Get Sidekiq Job statistics
+ #
+ # Parameters:
+ # None
+ #
+ # Example:
+ # GET /sidekiq/job_stats
+ #
+ get 'sidekiq/job_stats' do
+ { jobs: job_stats }
+ end
+
+ # Get Sidekiq Compound metrics. Includes all previous metrics
+ #
+ # Parameters:
+ # None
+ #
+ # Example:
+ # GET /sidekiq/compound_metrics
+ #
+ get 'sidekiq/compound_metrics' do
+ { queues: queue_metrics, processes: process_metrics, jobs: job_stats }
+ end
+ end
+end \ No newline at end of file