diff options
author | Pawel Chojnacki <pawel@chojnacki.ws> | 2017-04-26 22:09:03 +0200 |
---|---|---|
committer | Pawel Chojnacki <pawel@chojnacki.ws> | 2017-05-11 23:07:12 +0200 |
commit | 4f824d2aecf4fec46febd767fa7f7d747c732112 (patch) | |
tree | 09b0b6458b7ec4fc414431f1d323b01bb68265ef /app | |
parent | e7b53dd67815a306dfb57cb7545d06391bc12aa7 (diff) | |
download | gitlab-ce-4f824d2aecf4fec46febd767fa7f7d747c732112.tar.gz |
Custom queries for prometheus
- Tests for prometheus queries
- fix rubocop warnings
- Remove unused method. Add more queries to deployment queries.
- Wrap BaseQuery in module hierarchy
Renname Prometheus class to PrometheusClient
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/projects/deployments_controller.rb | 2 | ||||
-rw-r--r-- | app/models/deployment.rb | 8 | ||||
-rw-r--r-- | app/models/environment.rb | 2 | ||||
-rw-r--r-- | app/models/project_services/monitoring_service.rb | 7 | ||||
-rw-r--r-- | app/models/project_services/prometheus_service.rb | 35 |
5 files changed, 19 insertions, 35 deletions
diff --git a/app/controllers/projects/deployments_controller.rb b/app/controllers/projects/deployments_controller.rb index f06a4d943f3..83e9c7a3f1d 100644 --- a/app/controllers/projects/deployments_controller.rb +++ b/app/controllers/projects/deployments_controller.rb @@ -11,7 +11,7 @@ class Projects::DeploymentsController < Projects::ApplicationController end def metrics - @metrics = deployment.metrics(1.hour) + @metrics = deployment.metrics if @metrics&.any? render json: @metrics, status: :ok diff --git a/app/models/deployment.rb b/app/models/deployment.rb index f83d9e8edee..f4751dc5334 100644 --- a/app/models/deployment.rb +++ b/app/models/deployment.rb @@ -103,14 +103,10 @@ class Deployment < ActiveRecord::Base project.monitoring_service.present? end - def metrics(timeframe) + def metrics return {} unless has_metrics? - half_timeframe = timeframe / 2 - timeframe_start = created_at - half_timeframe - timeframe_end = created_at + half_timeframe - - metrics = project.monitoring_service.metrics(environment, timeframe_start: timeframe_start, timeframe_end: timeframe_end) + metrics = project.monitoring_service.deployment_metrics(self) metrics&.merge(deployment_time: created_at.to_i) || {} end diff --git a/app/models/environment.rb b/app/models/environment.rb index 61efc1b2d17..61572d8d69a 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -150,7 +150,7 @@ class Environment < ActiveRecord::Base end def metrics - project.monitoring_service.metrics(self) if has_metrics? + project.monitoring_service.environment_metrics(self) if has_metrics? end # An environment name is not necessarily suitable for use in URLs, DNS diff --git a/app/models/project_services/monitoring_service.rb b/app/models/project_services/monitoring_service.rb index 59776552540..ee9cd78327a 100644 --- a/app/models/project_services/monitoring_service.rb +++ b/app/models/project_services/monitoring_service.rb @@ -9,8 +9,11 @@ class MonitoringService < Service %w() end - # Environments have a number of metrics - def metrics(environment, timeframe_start: nil, timeframe_end: nil) + def environment_metrics(environment) + raise NotImplementedError + end + + def deployment_metrics(deployment) raise NotImplementedError end end diff --git a/app/models/project_services/prometheus_service.rb b/app/models/project_services/prometheus_service.rb index 6a4479c4dbc..23e19bedf3f 100644 --- a/app/models/project_services/prometheus_service.rb +++ b/app/models/project_services/prometheus_service.rb @@ -63,45 +63,30 @@ class PrometheusService < MonitoringService { success: false, result: err } end - def metrics(environment, timeframe_start: nil, timeframe_end: nil) - with_reactive_cache(environment.slug, timeframe_start, timeframe_end) do |data| - data - end + def environment_metrics(environment, **args) + with_reactive_cache(Gitlab::Prometheus::Queries::EnvironmentQuery.name, environment.id, &:itself) + end + + def deployment_metrics(deployment) + with_reactive_cache(Gitlab::Prometheus::Queries::DeploymentQuery.name, deployment.id, &:itself) end # Cache metrics for specific environment - def calculate_reactive_cache(environment_slug, timeframe_start, timeframe_end) + def calculate_reactive_cache(query_class_name, *args) return unless active? && project && !project.pending_delete? - timeframe_start = Time.parse(timeframe_start) if timeframe_start - timeframe_end = Time.parse(timeframe_end) if timeframe_end - - timeframe_start ||= 8.hours.ago - timeframe_end ||= Time.now - - memory_query = %{(sum(container_memory_usage_bytes{container_name!="POD",environment="#{environment_slug}"}) / count(container_memory_usage_bytes{container_name!="POD",environment="#{environment_slug}"})) /1024/1024} - cpu_query = %{sum(rate(container_cpu_usage_seconds_total{container_name!="POD",environment="#{environment_slug}"}[2m])) / count(container_cpu_usage_seconds_total{container_name!="POD",environment="#{environment_slug}"}) * 100} + metrics = Kernel.const_get(query_class_name).new(client).query(*args) { success: true, - metrics: { - # Average Memory used in MB - memory_values: client.query_range(memory_query, start: timeframe_start, stop: timeframe_end), - memory_current: client.query(memory_query, time: timeframe_end), - memory_previous: client.query(memory_query, time: timeframe_start), - # Average CPU Utilization - cpu_values: client.query_range(cpu_query, start: timeframe_start, stop: timeframe_end), - cpu_current: client.query(cpu_query, time: timeframe_end), - cpu_previous: client.query(cpu_query, time: timeframe_start) - }, + metrics: metrics, last_update: Time.now.utc } - rescue Gitlab::PrometheusError => err { success: false, result: err.message } end def client - @prometheus ||= Gitlab::Prometheus.new(api_url: api_url) + @prometheus ||= Gitlab::PrometheusClient.new(api_url: api_url) end end |