153 lines
3.4 KiB
Ruby
153 lines
3.4 KiB
Ruby
# frozen_string_literal: true
|
|
require 'ffaker'
|
|
|
|
FactoryBot.define do
|
|
factory :alert_management_alert, class: 'AlertManagement::Alert' do
|
|
triggered
|
|
project
|
|
title { FFaker::Lorem.sentence }
|
|
started_at { Time.current }
|
|
|
|
trait :with_validation_errors do
|
|
after(:create) do |alert|
|
|
too_many_hosts = Array.new(AlertManagement::Alert::HOSTS_MAX_LENGTH + 1) { |_| 'host' }
|
|
alert.update_columns(hosts: too_many_hosts)
|
|
end
|
|
end
|
|
|
|
trait :with_issue do
|
|
after(:create) do |alert|
|
|
create(:issue, alert_management_alert: alert, project: alert.project)
|
|
end
|
|
end
|
|
|
|
trait :with_assignee do |alert|
|
|
after(:create) do |alert|
|
|
alert.alert_assignees.create!(assignee: create(:user))
|
|
end
|
|
end
|
|
|
|
trait :with_fingerprint do
|
|
fingerprint { SecureRandom.hex }
|
|
end
|
|
|
|
trait :with_service do
|
|
service { FFaker::Product.product_name }
|
|
end
|
|
|
|
trait :with_monitoring_tool do
|
|
monitoring_tool { FFaker::AWS.product_description }
|
|
end
|
|
|
|
trait :with_description do
|
|
description { FFaker::Lorem.sentence }
|
|
end
|
|
|
|
trait :with_host do
|
|
hosts { [FFaker::Internet.ip_v4_address] }
|
|
end
|
|
|
|
trait :without_ended_at do
|
|
ended_at { nil }
|
|
end
|
|
|
|
trait :triggered do
|
|
status { AlertManagement::Alert.status_value(:triggered) }
|
|
without_ended_at
|
|
end
|
|
|
|
trait :acknowledged do
|
|
status { AlertManagement::Alert.status_value(:acknowledged) }
|
|
without_ended_at
|
|
end
|
|
|
|
trait :resolved do
|
|
status { AlertManagement::Alert.status_value(:resolved) }
|
|
ended_at { Time.current }
|
|
end
|
|
|
|
trait :ignored do
|
|
status { AlertManagement::Alert.status_value(:ignored) }
|
|
without_ended_at
|
|
end
|
|
|
|
trait :critical do
|
|
severity { 'critical' }
|
|
end
|
|
|
|
trait :high do
|
|
severity { 'high' }
|
|
end
|
|
|
|
trait :medium do
|
|
severity { 'medium' }
|
|
end
|
|
|
|
trait :low do
|
|
severity { 'low' }
|
|
end
|
|
|
|
trait :info do
|
|
severity { 'info' }
|
|
end
|
|
|
|
trait :unknown do
|
|
severity { 'unknown' }
|
|
end
|
|
|
|
trait :threat_monitoring do
|
|
domain { :threat_monitoring }
|
|
end
|
|
|
|
trait :prometheus do
|
|
monitoring_tool { Gitlab::AlertManagement::Payload::MONITORING_TOOLS[:prometheus] }
|
|
payload do
|
|
{
|
|
annotations: {
|
|
title: 'This is a prometheus error',
|
|
summary: 'Summary of the error',
|
|
description: 'Description of the error'
|
|
},
|
|
startsAt: started_at
|
|
}.with_indifferent_access
|
|
end
|
|
end
|
|
|
|
trait :cilium do
|
|
monitoring_tool { Gitlab::AlertManagement::Payload::MONITORING_TOOLS[:cilium] }
|
|
payload do
|
|
{
|
|
annotations: {
|
|
title: 'This is a cilium alert',
|
|
summary: 'Summary of the alert',
|
|
description: 'Description of the alert'
|
|
},
|
|
startsAt: started_at
|
|
}.with_indifferent_access
|
|
end
|
|
end
|
|
|
|
trait :all_fields do
|
|
with_issue
|
|
with_assignee
|
|
with_fingerprint
|
|
with_service
|
|
with_monitoring_tool
|
|
with_host
|
|
with_description
|
|
low
|
|
end
|
|
|
|
trait :from_payload do
|
|
after(:build) do |alert|
|
|
alert_params = ::Gitlab::AlertManagement::Payload.parse(
|
|
alert.project,
|
|
alert.payload,
|
|
monitoring_tool: alert.monitoring_tool
|
|
).alert_params
|
|
|
|
alert.assign_attributes(alert_params)
|
|
end
|
|
end
|
|
end
|
|
end
|