summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
authorFilipa Lacerda <filipa@gitlab.com>2017-05-09 14:09:07 +0100
committerFilipa Lacerda <filipa@gitlab.com>2017-05-09 14:09:07 +0100
commit0c3abe3ef92fe4d982b780397e8ace37a51aca45 (patch)
tree4781ef63fa315d5a2a0edff6340d38e84db8847b /app/models
parentd3b124e473e051d424070b93c1e800fab7c08656 (diff)
parent387b44103c168d9a1b82997101deb60c61b6aaf1 (diff)
downloadgitlab-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.rb2
-rw-r--r--app/models/deployment.rb15
-rw-r--r--app/models/merge_request.rb4
-rw-r--r--app/models/project_services/chat_notification_service.rb2
-rw-r--r--app/models/project_services/monitoring_service.rb2
-rw-r--r--app/models/project_services/prometheus_service.rb25
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
}