summaryrefslogtreecommitdiff
path: root/app/graphql/types/alert_management/alert_type.rb
blob: 5784c7a48726b89274b5abcc452906cb31c7defd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
# frozen_string_literal: true

module Types
  module AlertManagement
    class AlertType < BaseObject
      graphql_name 'AlertManagementAlert'
      description "Describes an alert from the project's Alert Management"

      present_using ::AlertManagement::AlertPresenter

      implements(Types::Notes::NoteableInterface)
      implements(Types::TodoableInterface)

      authorize :read_alert_management_alert

      field :id,
            GraphQL::Types::ID,
            null: false,
            description: 'ID of the alert.'

      field :iid,
            GraphQL::Types::ID,
            null: false,
            description: 'Internal ID of the alert.'

      field :issue_iid,
            GraphQL::Types::ID,
            null: true,
            deprecated: { reason: 'Use issue field', milestone: '13.10' },
            description: 'Internal ID of the GitLab issue attached to the alert.'

      field :issue,
            Types::IssueType,
            null: true,
            description: 'Issue attached to the alert.'

      field :title,
            GraphQL::Types::String,
            null: true,
            description: 'Title of the alert.'

      field :description,
            GraphQL::Types::String,
            null: true,
            description: 'Description of the alert.'

      field :severity,
            AlertManagement::SeverityEnum,
            null: true,
            description: 'Severity of the alert.'

      field :status,
            AlertManagement::StatusEnum,
            null: true,
            description: 'Status of the alert.',
            method: :status_name

      field :service,
            GraphQL::Types::String,
            null: true,
            description: 'Service the alert came from.'

      field :monitoring_tool,
            GraphQL::Types::String,
            null: true,
            description: 'Monitoring tool the alert came from.'

      field :hosts,
            [GraphQL::Types::String],
            null: true,
            description: 'List of hosts the alert came from.'

      field :started_at,
            Types::TimeType,
            null: true,
            description: 'Timestamp the alert was raised.'

      field :ended_at,
            Types::TimeType,
            null: true,
            description: 'Timestamp the alert ended.'

      field :environment,
            Types::EnvironmentType,
            null: true,
            description: 'Environment for the alert.'

      field :event_count,
            GraphQL::Types::Int,
            null: true,
            description: 'Number of events of this alert.',
            method: :events

      field :details, # rubocop:disable Graphql/JSONType
            GraphQL::Types::JSON,
            null: true,
            description: 'Alert details.'

      field :created_at,
            Types::TimeType,
            null: true,
            description: 'Timestamp the alert was created.'

      field :updated_at,
            Types::TimeType,
            null: true,
            description: 'Timestamp the alert was last updated.'

      field :assignees,
            Types::UserType.connection_type,
            null: true,
            description: 'Assignees of the alert.'

      field :metrics_dashboard_url,
            GraphQL::Types::String,
            null: true,
            description: 'URL for metrics embed for the alert.',
            deprecated: { reason: 'Returns no data. Underlying feature was removed in 16.0',
                          milestone: '16.0' }

      field :runbook,
            GraphQL::Types::String,
            null: true,
            description: 'Runbook for the alert as defined in alert details.'

      field :todos,
            Types::TodoType.connection_type,
            description: 'To-do items of the current user for the alert.',
            resolver: Resolvers::TodosResolver

      field :details_url,
            GraphQL::Types::String,
            null: false,
            description: 'URL of the alert detail page.'

      field :prometheus_alert,
            Types::PrometheusAlertType,
            null: true,
            description: 'Alert condition for Prometheus.'

      field :web_url,
            GraphQL::Types::String,
            method: :details_url,
            null: false,
            description: 'URL of the alert.'

      def notes
        object.ordered_notes
      end

      def metrics_dashboard_url
        return if Feature.enabled?(:remove_monitor_metrics)

        object.metrics_dashboard_url
      end
    end
  end
end