diff options
author | Jacob Schatz <jschatz@gitlab.com> | 2017-05-09 07:15:36 +0300 |
---|---|---|
committer | Regis <boudinot.regis@yahoo.com> | 2017-05-10 02:19:42 +0300 |
commit | 1ba06c8c4b7b8dc4db509adddbaddf34cd80eacc (patch) | |
tree | 5a90650d70161bf20764e6be85240c1499fc083c /app/models | |
parent | 379c90834c4f64245985268cdec3d35c84a00117 (diff) |
Merge branch 'mr-widget-redesign-review' into 'master'
Merge request widget redesign
Closes #25424 and #27950
See merge request !10319
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/deployment.rb | 15 | ||||
-rw-r--r-- | app/models/merge_request.rb | 4 | ||||
-rw-r--r-- | app/models/project_services/monitoring_service.rb | 2 | ||||
-rw-r--r-- | app/models/project_services/prometheus_service.rb | 25 |
4 files changed, 35 insertions, 11 deletions
diff --git a/app/models/deployment.rb b/app/models/deployment.rb index 37adfb4de73..f83d9e8edee 100644 --- a/app/models/deployment.rb +++ b/app/models/deployment.rb @@ -99,6 +99,21 @@ class Deployment < ActiveRecord::Base created_at.to_time.in_time_zone.to_s(:medium) end + def has_metrics? + project.monitoring_service.present? + end + + def metrics(timeframe) + 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&.merge(deployment_time: created_at.to_i) || {} + end + private def ref_path diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 35231bab12e..1b6904aa077 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -864,7 +864,7 @@ class MergeRequest < ActiveRecord::Base end def can_be_cherry_picked? - merge_commit + merge_commit.present? end def has_complete_diff_refs? @@ -908,6 +908,8 @@ class MergeRequest < ActiveRecord::Base end def conflicts_can_be_resolved_by?(user) + return false unless source_project + access = ::Gitlab::UserAccess.new(user, project: source_project) access.can_push_to_branch?(source_branch) end diff --git a/app/models/project_services/monitoring_service.rb b/app/models/project_services/monitoring_service.rb index ea585721e8f..59776552540 100644 --- a/app/models/project_services/monitoring_service.rb +++ b/app/models/project_services/monitoring_service.rb @@ -10,7 +10,7 @@ class MonitoringService < Service end # Environments have a number of metrics - def metrics(environment) + def metrics(environment, timeframe_start: nil, timeframe_end: nil) raise NotImplementedError end end diff --git a/app/models/project_services/prometheus_service.rb b/app/models/project_services/prometheus_service.rb index 6854d2243d7..6a4479c4dbc 100644 --- a/app/models/project_services/prometheus_service.rb +++ b/app/models/project_services/prometheus_service.rb @@ -1,7 +1,6 @@ class PrometheusService < MonitoringService - include ReactiveCaching + include ReactiveService - self.reactive_cache_key = ->(service) { [service.class.model_name.singular, service.project_id] } self.reactive_cache_lease_timeout = 30.seconds self.reactive_cache_refresh_interval = 30.seconds self.reactive_cache_lifetime = 1.minute @@ -64,16 +63,22 @@ class PrometheusService < MonitoringService { success: false, result: err } end - def metrics(environment) - with_reactive_cache(environment.slug) do |data| + def metrics(environment, timeframe_start: nil, timeframe_end: nil) + with_reactive_cache(environment.slug, timeframe_start, timeframe_end) do |data| data end end # Cache metrics for specific environment - def calculate_reactive_cache(environment_slug) + def calculate_reactive_cache(environment_slug, timeframe_start, timeframe_end) 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} @@ -81,11 +86,13 @@ class PrometheusService < MonitoringService success: true, metrics: { # Average Memory used in MB - memory_values: client.query_range(memory_query, start: 8.hours.ago), - memory_current: client.query(memory_query), + 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: 8.hours.ago), - cpu_current: client.query(cpu_query) + 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) }, last_update: Time.now.utc } |