github.com/rancher/types@v0.0.0-20220328215343-4370ff10ecd5/apis/management.cattle.io/v3/alerting_types.go (about) 1 package v3 2 3 import ( 4 "strings" 5 6 "github.com/rancher/norman/types" 7 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 8 ) 9 10 type ClusterAlert struct { 11 types.Namespaced 12 13 metav1.TypeMeta `json:",inline"` 14 // Standard object’s metadata. More info: 15 // https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#metadata 16 metav1.ObjectMeta `json:"metadata,omitempty"` 17 18 Spec ClusterAlertSpec `json:"spec"` 19 // Most recent observed status of the alert. More info: 20 // https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#spec-and-status 21 Status AlertStatus `json:"status"` 22 } 23 24 func (c *ClusterAlert) ObjClusterName() string { 25 return c.Spec.ObjClusterName() 26 } 27 28 type ProjectAlert struct { 29 types.Namespaced 30 31 metav1.TypeMeta `json:",inline"` 32 // Standard object’s metadata. More info: 33 // https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#metadata 34 metav1.ObjectMeta `json:"metadata,omitempty"` 35 36 Spec ProjectAlertSpec `json:"spec"` 37 // Most recent observed status of the alert. More info: 38 // https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#spec-and-status 39 Status AlertStatus `json:"status"` 40 } 41 42 func (p *ProjectAlert) ObjClusterName() string { 43 return p.Spec.ObjClusterName() 44 } 45 46 type AlertCommonSpec struct { 47 DisplayName string `json:"displayName,omitempty" norman:"required"` 48 Description string `json:"description,omitempty"` 49 Severity string `json:"severity,omitempty" norman:"required,options=info|critical|warning,default=critical"` 50 Recipients []Recipient `json:"recipients,omitempty" norman:"required"` 51 InitialWaitSeconds int `json:"initialWaitSeconds,omitempty" norman:"required,default=180,min=0"` 52 RepeatIntervalSeconds int `json:"repeatIntervalSeconds,omitempty" norman:"required,default=3600,min=0"` 53 } 54 55 type ClusterAlertSpec struct { 56 AlertCommonSpec 57 58 ClusterName string `json:"clusterName" norman:"type=reference[cluster]"` 59 TargetNode *TargetNode `json:"targetNode,omitempty"` 60 TargetSystemService *TargetSystemService `json:"targetSystemService,omitempty"` 61 TargetEvent *TargetEvent `json:"targetEvent,omitempty"` 62 } 63 64 func (c *ClusterAlertSpec) ObjClusterName() string { 65 return c.ClusterName 66 } 67 68 type ProjectAlertSpec struct { 69 AlertCommonSpec 70 71 ProjectName string `json:"projectName" norman:"type=reference[project]"` 72 TargetWorkload *TargetWorkload `json:"targetWorkload,omitempty"` 73 TargetPod *TargetPod `json:"targetPod,omitempty"` 74 } 75 76 func (p *ProjectAlertSpec) ObjClusterName() string { 77 if parts := strings.SplitN(p.ProjectName, ":", 2); len(parts) == 2 { 78 return parts[0] 79 } 80 return "" 81 } 82 83 type Recipient struct { 84 Recipient string `json:"recipient,omitempty"` 85 NotifierName string `json:"notifierName,omitempty" norman:"required,type=reference[notifier]"` 86 NotifierType string `json:"notifierType,omitempty" norman:"required,options=slack|email|pagerduty|webhook|wechat|dingtalk|msteams"` 87 } 88 89 type TargetNode struct { 90 NodeName string `json:"nodeName,omitempty" norman:"type=reference[node]"` 91 Selector map[string]string `json:"selector,omitempty"` 92 Condition string `json:"condition,omitempty" norman:"required,options=notready|mem|cpu,default=notready"` 93 MemThreshold int `json:"memThreshold,omitempty" norman:"min=1,max=100,default=70"` 94 CPUThreshold int `json:"cpuThreshold,omitempty" norman:"min=1,default=70"` 95 } 96 97 type TargetPod struct { 98 PodName string `json:"podName,omitempty" norman:"required,type=reference[/v3/projects/schemas/pod]"` 99 Condition string `json:"condition,omitempty" norman:"required,options=notrunning|notscheduled|restarts,default=notrunning"` 100 RestartTimes int `json:"restartTimes,omitempty" norman:"min=1,default=3"` 101 RestartIntervalSeconds int `json:"restartIntervalSeconds,omitempty" norman:"min=1,default=300"` 102 } 103 104 type TargetEvent struct { 105 EventType string `json:"eventType,omitempty" norman:"required,options=Normal|Warning,default=Warning"` 106 ResourceKind string `json:"resourceKind,omitempty" norman:"required,options=Pod|Node|Deployment|StatefulSet|DaemonSet"` 107 } 108 109 type TargetWorkload struct { 110 WorkloadID string `json:"workloadId,omitempty"` 111 Selector map[string]string `json:"selector,omitempty"` 112 AvailablePercentage int `json:"availablePercentage,omitempty" norman:"required,min=1,max=100,default=70"` 113 } 114 115 type TargetSystemService struct { 116 Condition string `json:"condition,omitempty" norman:"required,options=etcd|controller-manager|scheduler,default=scheduler"` 117 } 118 119 type AlertStatus struct { 120 AlertState string `json:"alertState,omitempty" norman:"options=active|inactive|alerting|muted,default=active"` 121 } 122 123 type ClusterAlertGroup struct { 124 types.Namespaced 125 126 metav1.TypeMeta `json:",inline"` 127 // Standard object’s metadata. More info: 128 // https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#metadata 129 metav1.ObjectMeta `json:"metadata,omitempty"` 130 131 Spec ClusterGroupSpec `json:"spec"` 132 // Most recent observed status of the alert. More info: 133 // https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#spec-and-status 134 Status AlertStatus `json:"status"` 135 } 136 137 func (c *ClusterAlertGroup) ObjClusterName() string { 138 return c.Spec.ObjClusterName() 139 } 140 141 type ProjectAlertGroup struct { 142 types.Namespaced 143 144 metav1.TypeMeta `json:",inline"` 145 // Standard object’s metadata. More info: 146 // https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#metadata 147 metav1.ObjectMeta `json:"metadata,omitempty"` 148 149 Spec ProjectGroupSpec `json:"spec"` 150 // Most recent observed status of the alert. More info: 151 // https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#spec-and-status 152 Status AlertStatus `json:"status"` 153 } 154 155 func (p *ProjectAlertGroup) ObjClusterName() string { 156 return p.Spec.ObjClusterName() 157 } 158 159 type ClusterGroupSpec struct { 160 ClusterName string `json:"clusterName" norman:"type=reference[cluster]"` 161 Recipients []Recipient `json:"recipients,omitempty"` 162 CommonGroupField 163 } 164 165 func (c *ClusterGroupSpec) ObjClusterName() string { 166 return c.ClusterName 167 } 168 169 type ProjectGroupSpec struct { 170 ProjectName string `json:"projectName" norman:"type=reference[project]"` 171 Recipients []Recipient `json:"recipients,omitempty"` 172 CommonGroupField 173 } 174 175 func (p *ProjectGroupSpec) ObjClusterName() string { 176 if parts := strings.SplitN(p.ProjectName, ":", 2); len(parts) == 2 { 177 return parts[0] 178 } 179 return "" 180 } 181 182 type ClusterAlertRule struct { 183 types.Namespaced 184 185 metav1.TypeMeta `json:",inline"` 186 // Standard object’s metadata. More info: 187 // https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#metadata 188 metav1.ObjectMeta `json:"metadata,omitempty"` 189 190 Spec ClusterAlertRuleSpec `json:"spec"` 191 // Most recent observed status of the alert. More info: 192 // https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#spec-and-status 193 Status AlertStatus `json:"status"` 194 } 195 196 func (c *ClusterAlertRule) ObjClusterName() string { 197 return c.Spec.ObjClusterName() 198 } 199 200 type ClusterAlertRuleSpec struct { 201 CommonRuleField 202 ClusterName string `json:"clusterName" norman:"type=reference[cluster]"` 203 GroupName string `json:"groupName" norman:"type=reference[clusterAlertGroup]"` 204 NodeRule *NodeRule `json:"nodeRule,omitempty"` 205 EventRule *EventRule `json:"eventRule,omitempty"` 206 SystemServiceRule *SystemServiceRule `json:"systemServiceRule,omitempty"` 207 MetricRule *MetricRule `json:"metricRule,omitempty"` 208 ClusterScanRule *ClusterScanRule `json:"clusterScanRule,omitempty"` 209 } 210 211 func (c *ClusterAlertRuleSpec) ObjClusterName() string { 212 return c.ClusterName 213 } 214 215 type ProjectAlertRule struct { 216 types.Namespaced 217 218 metav1.TypeMeta `json:",inline"` 219 // Standard object’s metadata. More info: 220 // https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#metadata 221 metav1.ObjectMeta `json:"metadata,omitempty"` 222 223 Spec ProjectAlertRuleSpec `json:"spec"` 224 // Most recent observed status of the alert. More info: 225 // https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#spec-and-status 226 Status AlertStatus `json:"status"` 227 } 228 229 func (p *ProjectAlertRule) ObjClusterName() string { 230 return p.Spec.ObjClusterName() 231 } 232 233 type ProjectAlertRuleSpec struct { 234 CommonRuleField 235 ProjectName string `json:"projectName" norman:"type=reference[project]"` 236 GroupName string `json:"groupName" norman:"type=reference[projectAlertGroup]"` 237 PodRule *PodRule `json:"podRule,omitempty"` 238 WorkloadRule *WorkloadRule `json:"workloadRule,omitempty"` 239 MetricRule *MetricRule `json:"metricRule,omitempty"` 240 } 241 242 func (p *ProjectAlertRuleSpec) ObjClusterName() string { 243 if parts := strings.SplitN(p.ProjectName, ":", 2); len(parts) == 2 { 244 return parts[0] 245 } 246 return "" 247 } 248 249 type CommonGroupField struct { 250 DisplayName string `json:"displayName,omitempty" norman:"required"` 251 Description string `json:"description,omitempty"` 252 TimingField 253 } 254 255 type CommonRuleField struct { 256 DisplayName string `json:"displayName,omitempty"` 257 Severity string `json:"severity,omitempty" norman:"required,options=info|critical|warning,default=critical"` 258 Inherited *bool `json:"inherited,omitempty" norman:"default=true"` 259 TimingField 260 } 261 262 type ClusterScanRule struct { 263 ScanRunType ClusterScanRunType `json:"scanRunType,omitempty" norman:"required,options=manual|scheduled,default=scheduled"` 264 FailuresOnly bool `json:"failuresOnly,omitempty"` 265 } 266 267 type MetricRule struct { 268 Expression string `json:"expression,omitempty" norman:"required"` 269 Description string `json:"description,omitempty"` 270 Duration string `json:"duration,omitempty" norman:"required"` 271 Comparison string `json:"comparison,omitempty" norman:"type=enum,options=equal|not-equal|greater-than|less-than|greater-or-equal|less-or-equal|has-value,default=equal"` 272 ThresholdValue float64 `json:"thresholdValue,omitempty" norman:"type=float"` 273 } 274 275 type TimingField struct { 276 GroupWaitSeconds int `json:"groupWaitSeconds,omitempty" norman:"required,default=30,min=1"` 277 GroupIntervalSeconds int `json:"groupIntervalSeconds,omitempty" norman:"required,default=180,min=1"` 278 RepeatIntervalSeconds int `json:"repeatIntervalSeconds,omitempty" norman:"required,default=3600,min=1"` 279 } 280 281 type NodeRule struct { 282 NodeName string `json:"nodeName,omitempty" norman:"type=reference[node]"` 283 Selector map[string]string `json:"selector,omitempty"` 284 Condition string `json:"condition,omitempty" norman:"required,options=notready|mem|cpu,default=notready"` 285 MemThreshold int `json:"memThreshold,omitempty" norman:"min=1,max=100,default=70"` 286 CPUThreshold int `json:"cpuThreshold,omitempty" norman:"min=1,default=70"` 287 } 288 289 type PodRule struct { 290 PodName string `json:"podName,omitempty" norman:"required,type=reference[/v3/projects/schemas/pod]"` 291 Condition string `json:"condition,omitempty" norman:"required,options=notrunning|notscheduled|restarts,default=notrunning"` 292 RestartTimes int `json:"restartTimes,omitempty" norman:"min=1,default=3"` 293 RestartIntervalSeconds int `json:"restartIntervalSeconds,omitempty" norman:"min=1,default=300"` 294 } 295 296 type EventRule struct { 297 EventType string `json:"eventType,omitempty" norman:"required,options=Normal|Warning,default=Warning"` 298 ResourceKind string `json:"resourceKind,omitempty" norman:"required,options=Pod|Node|Deployment|StatefulSet|DaemonSet"` 299 } 300 301 type WorkloadRule struct { 302 WorkloadID string `json:"workloadId,omitempty"` 303 Selector map[string]string `json:"selector,omitempty"` 304 AvailablePercentage int `json:"availablePercentage,omitempty" norman:"required,min=1,max=100,default=70"` 305 } 306 307 type SystemServiceRule struct { 308 Condition string `json:"condition,omitempty" norman:"required,options=etcd|controller-manager|scheduler,default=scheduler"` 309 } 310 311 type Notifier struct { 312 types.Namespaced 313 314 metav1.TypeMeta `json:",inline"` 315 // Standard object’s metadata. More info: 316 // https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#metadata 317 metav1.ObjectMeta `json:"metadata,omitempty"` 318 319 Spec NotifierSpec `json:"spec"` 320 // Most recent observed status of the notifier. More info: 321 // https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#spec-and-status 322 Status NotifierStatus `json:"status"` 323 } 324 325 func (n *Notifier) ObjClusterName() string { 326 return n.Spec.ObjClusterName() 327 } 328 329 type NotifierSpec struct { 330 ClusterName string `json:"clusterName" norman:"type=reference[cluster]"` 331 332 DisplayName string `json:"displayName,omitempty" norman:"required"` 333 Description string `json:"description,omitempty"` 334 SendResolved bool `json:"sendResolved,omitempty"` 335 SMTPConfig *SMTPConfig `json:"smtpConfig,omitempty"` 336 SlackConfig *SlackConfig `json:"slackConfig,omitempty"` 337 PagerdutyConfig *PagerdutyConfig `json:"pagerdutyConfig,omitempty"` 338 WebhookConfig *WebhookConfig `json:"webhookConfig,omitempty"` 339 WechatConfig *WechatConfig `json:"wechatConfig,omitempty"` 340 DingtalkConfig *DingtalkConfig `json:"dingtalkConfig,omitempty"` 341 MSTeamsConfig *MSTeamsConfig `json:"msteamsConfig,omitempty"` 342 } 343 344 func (n *NotifierSpec) ObjClusterName() string { 345 return n.ClusterName 346 } 347 348 type Notification struct { 349 Message string `json:"message,omitempty"` 350 SMTPConfig *SMTPConfig `json:"smtpConfig,omitempty"` 351 SlackConfig *SlackConfig `json:"slackConfig,omitempty"` 352 PagerdutyConfig *PagerdutyConfig `json:"pagerdutyConfig,omitempty"` 353 WebhookConfig *WebhookConfig `json:"webhookConfig,omitempty"` 354 WechatConfig *WechatConfig `json:"wechatConfig,omitempty"` 355 DingtalkConfig *DingtalkConfig `json:"dingtalkConfig,omitempty"` 356 MSTeamsConfig *MSTeamsConfig `json:"msteamsConfig,omitempty"` 357 } 358 359 type SMTPConfig struct { 360 Host string `json:"host,omitempty" norman:"required,type=hostname"` 361 Port int `json:"port,omitempty" norman:"required,min=1,max=65535,default=587"` 362 Username string `json:"username,omitempty"` 363 Password string `json:"password,omitempty" norman:"type=password"` 364 Sender string `json:"sender,omitempty" norman:"required"` 365 DefaultRecipient string `json:"defaultRecipient,omitempty" norman:"required"` 366 TLS *bool `json:"tls,omitempty" norman:"required,default=true"` 367 } 368 369 type SlackConfig struct { 370 DefaultRecipient string `json:"defaultRecipient,omitempty"` 371 URL string `json:"url,omitempty" norman:"required"` 372 *HTTPClientConfig 373 } 374 375 type PagerdutyConfig struct { 376 ServiceKey string `json:"serviceKey,omitempty" norman:"required"` 377 *HTTPClientConfig 378 } 379 380 type WebhookConfig struct { 381 URL string `json:"url,omitempty" norman:"required"` 382 *HTTPClientConfig 383 } 384 385 type DingtalkConfig struct { 386 URL string `json:"url,omitempty" norman:"required"` 387 Secret string `json:"secret,omitempty" norman:"type=password"` 388 *HTTPClientConfig 389 } 390 391 type MSTeamsConfig struct { 392 URL string `json:"url,omitempty" norman:"required"` 393 *HTTPClientConfig 394 } 395 396 type WechatConfig struct { 397 DefaultRecipient string `json:"defaultRecipient,omitempty" norman:"required"` 398 Secret string `json:"secret,omitempty" norman:"type=password,required"` 399 Agent string `json:"agent,omitempty" norman:"required"` 400 Corp string `json:"corp,omitempty" norman:"required"` 401 RecipientType string `json:"recipientType,omitempty" norman:"required,options=tag|party|user,default=party"` 402 APIURL string `json:"apiUrl,omitempty"` 403 *HTTPClientConfig 404 } 405 406 type NotifierStatus struct { 407 SMTPCredentialSecret string `json:"smtpCredentialSecret,omitempty" norman:"nocreate,noupdate"` 408 WechatCredentialSecret string `json:"wechatCredentialSecret,omitempty" norman:"nocreate,noupdate"` 409 DingtalkCredentialSecret string `json:"dingtalkCredentialSecret,omitempty" norman:"nocreate,noupdate"` 410 } 411 412 // HTTPClientConfig configures an HTTP client. 413 type HTTPClientConfig struct { 414 // HTTP proxy server to use to connect to the targets. 415 ProxyURL string `json:"proxyUrl,omitempty"` 416 }