diff options
author | Filipa Lacerda <filipa@gitlab.com> | 2017-05-09 14:09:07 +0100 |
---|---|---|
committer | Filipa Lacerda <filipa@gitlab.com> | 2017-05-09 14:09:07 +0100 |
commit | 0c3abe3ef92fe4d982b780397e8ace37a51aca45 (patch) | |
tree | 4781ef63fa315d5a2a0edff6340d38e84db8847b /app/models | |
parent | d3b124e473e051d424070b93c1e800fab7c08656 (diff) | |
parent | 387b44103c168d9a1b82997101deb60c61b6aaf1 (diff) | |
download | gitlab-ce-31053-pipeline-ux.tar.gz |
Merge branch 'master' into 31053-pipeline-ux31053-pipeline-ux
* master:
Fallback to default pattern when note does not belong to project
Merge request widget redesign
Fixed focused test in notes spec
Fixed UP arrow key not editing last comment in discussion
Fix skipped manual actions issue in pipeline processing
Fix notify_only_default_branch check for Slack service
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/concerns/mentionable.rb | 2 | ||||
-rw-r--r-- | app/models/deployment.rb | 15 | ||||
-rw-r--r-- | app/models/merge_request.rb | 4 | ||||
-rw-r--r-- | app/models/project_services/chat_notification_service.rb | 2 | ||||
-rw-r--r-- | app/models/project_services/monitoring_service.rb | 2 | ||||
-rw-r--r-- | app/models/project_services/prometheus_service.rb | 25 |
6 files changed, 37 insertions, 13 deletions
diff --git a/app/models/concerns/mentionable.rb b/app/models/concerns/mentionable.rb index 5ac56ac6fa0..6eddeab515e 100644 --- a/app/models/concerns/mentionable.rb +++ b/app/models/concerns/mentionable.rb @@ -92,7 +92,7 @@ module Mentionable # Uses regex to quickly determine if mentionables might be referenced # Allows heavy processing to be skipped def matches_cross_reference_regex? - reference_pattern = if project.default_issues_tracker? + reference_pattern = if !project || project.default_issues_tracker? ReferenceRegexes::DEFAULT_PATTERN else ReferenceRegexes::EXTERNAL_PATTERN 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/chat_notification_service.rb b/app/models/project_services/chat_notification_service.rb index fa782c6fbb7..6464bf3f4a4 100644 --- a/app/models/project_services/chat_notification_service.rb +++ b/app/models/project_services/chat_notification_service.rb @@ -150,7 +150,7 @@ class ChatNotificationService < Service def notify_for_ref?(data) return true if data[:object_attributes][:tag] - return true unless notify_only_default_branch + return true unless notify_only_default_branch? data[:object_attributes][:ref] == project.default_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 } |