Files
cloudpods/pkg/apis/notify/template.go
2023-10-12 15:30:00 +08:00

505 lines
20 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Copyright 2019 Yunion
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package notify
import "yunion.io/x/onecloud/pkg/apis"
type TemplateCreateInput struct {
apis.StandaloneAnonResourceCreateInput
// description: Contact type, specifically, setting it to all means all contact type
// require: true
// example: email
ContactType string `json:"contact_type"`
// description: Template type
// enum: title,content,remote
// example: title
TemplateType string `json:"template_type"`
// description: Template topic
// required: true
// example: IMAGE_ACTIVE
Topic string `json:"topic"`
// description: Template content
// required: true
// example: 镜像 {{.name}} 上传完成
Content string `json:"content"`
// description: Example for using this template
// required: true
// example: {"name": "centos7.6"}
Example string `json:"example"`
// description: Language
// enum: cn,en
Lang string `json:"lang"`
}
type TemplateManagerSaveInput struct {
ContactType string
Templates []TemplateCreateInput
Force bool
}
type TemplateListInput struct {
apis.StandaloneAnonResourceListInput
// description: Contact type, specifically, setting it to all means all contact type
// require: true
// example: email
ContactType string `json:"contact_type"`
// description: Template type
// enum: title,content,remote
// example: title
TemplateType string `json:"template_type"`
// description: template topic
// required: true
// example: IMAGE_ACTIVE
Topic string `json:"topic"`
// description: Language
// enum: cn,en
Lang string `json:"lang"`
}
type TemplateUpdateInput struct {
apis.StandaloneAnonResourceBaseUpdateInput
// description: template content
// required: true
// example: 镜像 {{.name}} 上传完成
Content string `json:"content"`
// description: all example for using this template
// required: true
// example: {"name": "centos7.6"}
Example string `json:"example"`
}
type TemplateDetails struct {
apis.StandaloneResourceDetails
STemplate
}
// 密码即将失效通知
const (
PWD_EXPIRE_SOON_TITLE_CN = `{{- $d := .resource_details -}}
{{ $d.account }}:您的密码有效期将过`
PWD_EXPIRE_SOON_TITLE_EN = `{{- $d := .resource_details -}}
{{ $d.account }}:Your password is valid and will expire soon`
PWD_EXPIRE_SOON_CONTENT_CN = `{{- $d := .resource_details -}}
{{ $d.account }}:您的密码将在{{ .advance_days }} 天后失效,请及时登录平台更新密码。`
PWD_EXPIRE_SOON_CONTENT_EN = `{{- $d := .resource_details -}}
{{ $d.account }}:Your password will expire in {{ .advance_days }} days. Please log in to the platform in time to update your password.`
)
// 资源即将到期通知
const (
EXPIRED_RELEASE_TITLE_CN = `{{- $d := .resource_details -}}
{{ $d.project }}项目的
{{ .resource_type_display }}{{ $d.name }}即将到期`
EXPIRED_RELEASE_TITLE_EN = `{{- $d := .resource_details -}}
{{ .resource_type }} {{ $d.name }} {{ if $d.project -}} in project {{ $d.project }} {{ end -}} expiration`
EXPIRED_RELEASE_CONTENT_CN = `{{- $d := .resource_details -}}
您在{{ $d.project }}项目的
{{- if $d.brand -}}
{{ $d.brand }}平台
{{- end -}}
{{- if $d.private_dns -}}
,内网地址为{{ $d.private_dns }}:{{ $d.private_connect_port }}
{{- end -}}
{{- if $d.public_dns -}}
,外网地址为{{ $d.public_dns }}:{{ $d.public_connect_port }}
{{- end -}}
{{ .resource_type_display }}{{ $d.name }}将在{{ .advance_days }}天后到期释放,{{ if $d.auto_renew }}到期已开启自动续费,{{ end }}如有其它变更,请尽快前往控制台处理`
EXPIRED_RELEASE_CONTENT_EN = `{{- $d := .resource_details -}}
Your {{ if $d.brand -}} {{ $d.brand }} {{ end -}} {{ .resource_type }} {{ $d.name }} {{ if $d.public_dns -}} with external address {{ $d.public_dns }}:{{ $d.public_connect_port }} {{ end -}} {{ if $d.project -}} in project {{ $d.project }} {{ end -}} will expire and be released in {{ .advance_days }} days. {{ if $d.auto_renew }}It has turned on automatic renewal. {{ end }}If there are other changes, please go to the console as soon as possible.`
)
// 服务崩溃通知
const (
PANIC_TITLE_CN = `{{- $d := .resource_details -}}
{{ .resource_type }} {{ $d.task_name }} 崩溃了`
PANIC_TITLE_EN = `{{- $d := .resource_details -}}
{{ .resource_type }} {{ $d.task_name }} PANIC`
PANIC_CONTENT_CN = `{{- $d := .resource_details -}}
{{ .resource_type }} {{ $d.task_name }} PANIC {{- if $d.error -}} 错误: {{ $d.error }} {{- end -}}
堆栈信息:
{{ $d.stack }}`
PANIC_CONTENT_EN = `{{- $d := .resource_details -}}
{{ .resource_type }} {{ $d.task_name }} PANIC {{- if $d.error -}} Error: {{ $d.error }} {{- end -}}
Stack Info:
{{ $d.stack }}`
)
// 日志容量超限通知
const (
ACTION_LOG_EXCEED_COUNT_TITLE_CN = `{{- $d := .resource_details -}}
操作日志超出设置数量{{ $d.exceed_count }}条,当前{{ $d.current_count }}`
ACTION_LOG_EXCEED_COUNT_TITLE_EN = `{{- $d := .resource_details -}}
Action logs excced expected count {{ $d.exceed_count }}, current count is {{ $d.current_count }}`
ACTION_LOG_EXCEED_COUNT_CONTENT_CN = `{{- $d := .resource_details.action -}}
当前日志 ID: {{ $d.id }}`
ACTION_LOG_EXCEED_COUNT_CONTENT_EN = `{{- $d := .resource_details.action -}}
Current log ID: {{ $d.id }}`
)
// 完整性校验失败通知
const (
CHECKSUM_TEST_FAILED_TITLE_CN = `{{- $d := .resource_details -}}
{{- if eq .resource_type "cloudpods_component" }}
{{ $d.title }}
{{- else -}}
{{ .resource_type_display }}完整性校验失败
{{- end -}}`
CHECKSUM_TEST_FAILED_TITLE_EN = `{{- $d := .resource_details -}}
{{- if eq .resource_type "cloudpods_component" }}
{{ $d.title }}
{{- else -}}
The checksum of {{ .resource_type_display }} test failed
{{- end -}}`
CHECKSUM_TEST_FAILED_CONTENT_CN = `{{- $d := .resource_details -}}
{{- if eq .resource_type "db_table_record" }}
{{ $d.table_name }}记录{{ $d.name }}被修改,完整性校验失败。期望校验和({{ $d.expected_checksum }}) != 计算校验和({{ $d.calculated_checksum }})。
{{- end -}}
{{- if eq .resource_type "cloudpods_component" }}
{{ $d.details }}
{{- end -}}
{{- if eq .resource_type "snapshot" }}
快照{{ $d.name }}的内存快照完整性校验失败
{{- end -}}
{{- if eq .resource_type "image" }}
镜像{{ $d.name }}完整性校验失败
{{- end -}}
{{- if eq .resource_type "vm_integrity" }}
主机{{ $d.name }}完整性校验失败
{{- end -}}`
CHECKSUM_TEST_FAILED_CONTENT_EN = `{{- $d := .resource_details -}}
{{- if eq .resource_type "db_table_record" }}
The record {{ $d.name }} in table {{ $d.table_name }} of the database {{ $d.db_name }} has been modified because the checksum test failed. Expected_checksum({{ $d.expected_checksum }}) != Calculated_checksum({{ $d.calculated_checksum }}).
{{- end -}}
{{- if eq .resource_type "cloudpods_component" }}
{{ $d.details }}
{{- end -}}
{{- if eq .resource_type "snapshot" }}
The checksum of the memory snapshot of the snapshot {{ $d.name }} test failed.
{{- end -}}
{{- if eq .resource_type "image" }}
The checksum of the image {{ $d.name }} test failed.
{{- end -}}`
)
// 通用通知
const (
COMMON_TITLE_CN = `{{- $d := .resource_details -}}
{{- if $d.project -}}
{{ $d.project }}项目的
{{- end -}}
{{ .resource_type_display }}{{ $d.name }}{{ .action_display }}{{ .result_display }}`
COMMON_TITLE_EN = `{{- $d := .resource_details -}}
The {{ .resource_type_display }} {{ .Name }} {{ if $d.project }} in poject {{ $d.project }} {{ end -}} {{ .action_display }} {{ .result_display }}`
COMMON_CONTENT_CN = `{{- $d := .resource_details -}}
{{- if $d.project -}}
{{ $d.project }}项目
{{- end -}}
{{- if $d.brand -}}
{{ $d.brand }}平台
{{- end -}}
{{ .resource_type_display }}{{ $d.name }}{{ .action_display }}{{.result_display}}
{{- if eq .result "failed" -}}
,请尽快前往控制台进行处理
{{- end -}}`
COMMON_CONTENT_EN = `{{- $d := .resource_details -}}
Your {{- if $d.brand -}} {{ $d.brand }} {{ end -}} {{ .resource_type_display }} {{ $d.name }} {{ if $d.project -}} in project {{ $d.project }} {{ end -}} has been {{ .action_display }} {{ .result_display }}
{{- if eq .result "failed" -}}
. And please go to the console as soon as possible to process.
{{- end -}}`
)
// 服务组件异常通知
const (
EXCEPTION_TITLE_CN = `{{- $d := .resource_details -}}
{{ .resource_type }} {{ $d.name }} 发生异常: {{ $d.message }}`
EXCEPTION_TITLE_EN = `{{- $d := .resource_details -}}
{{ .resource_type }} {{ $d.name }} exception occurs: {{ $d.message }}`
EXCEPTION_CONTENT_CN = `{{- $d := .resource_details -}}
{{ .resource_type }} {{ $d.name }} 发生异常: {{ $d.message }}`
EXCEPTION_CONTENT_EN = `{{- $d := .resource_details -}}
{{ .resource_type }} {{ $d.name }} exception occurs: {{ $d.message }}`
)
// 数据库主从同步不一致通知
const (
MYSQL_OUT_OF_SYNC_TITLE_CN = `{{- $d := .resource_details -}}
数据库 {{$d.ip}} 的主从同步不一致,请及时检查。`
MYSQL_OUT_OF_SYNC_TITLE_EN = `{{- $d := .resource_details -}}
The primary and secondary synchronization of the database ({{ $d.ip }}) is inconsistent, please check in time.`
MYSQL_OUT_OF_SYNC_CONTENT_CN = `{{- $d := .resource_details -}}
数据库 {{$d.ip}} 的主从同步不一致,请及时检查。
{{ range $status := $d.status }}
数据库 {{$status.ip}} 状态:
{{- if not $status.operator_error }}
- Slave_IO_Running: {{$status.slave_io_running}}
- Slave_SQL_Running: {{$status.slave_sql_running}}
{{- if $status.last_error }}
- Last_Error: {{$status.last_error}}
{{- end -}}
{{- if $status.last_io_error }}
- Last_IO_Error: {{$status.last_io_error}}
{{- end }}
{{else}}
- Operator_Error: {{$status.operator_error}}
{{- end}}
{{end}}`
MYSQL_OUT_OF_SYNC_CONTENT_EN = `{{- $d := .resource_details -}}
The primary and secondary synchronization of the database ({{ $d.ip }}) is inconsistent, please check in time.
{{ range $status := $d.status }}
Database {{$status.ip}} status:
{{- if not $status.operator_error }}
- Slave_IO_Running: {{$status.slave_io_running}}
- Slave_SQL_Running: {{$status.slave_sql_running}}
{{- if $status.last_error }}
- Last_Error: {{$status.last_error}}
{{- end -}}
{{- if $status.last_io_error }}
- Last_IO_Error: {{$status.last_io_error}}
{{- end }}
{{else}}
- Operator_Error: {{$status.operator_error}}
{{- end}}
{{end}}`
)
// 网络拓扑不一致通知
const (
NET_OUT_OF_SYNC_TITLE_CN = `{{- $d := .resource_details -}}
{{ $d.service_name }}服务的网络拓扑信息同步不一致,请及时检查。 `
NET_OUT_OF_SYNC_TITLE_EN = `{{- $d := .resource_details -}}
{{ $d.service_name }}: The network topology information of the service is inconsistent, please check in time.`
NET_OUT_OF_SYNC_CONTENT_CN = `{{- $d := .resource_details -}}
{{ $d.service_name }}服务的网络拓扑信息同步不一致,请及时检查。 `
NET_OUT_OF_SYNC_CONTENT_EN = `{{- $d := .resource_details -}}
{{ $d.service_name }}: The network topology information of the service is inconsistent, please check in time.`
)
// 离线通知
const (
OFFLINE_TITLE_CN = `{{- $d := .resource_details -}}
{{ .resource_type }} {{ $d.name }} 离线`
OFFLINE_TITLE_EN = `{{- $d := .resource_details -}}
The {{ .resource_type }} {{ $d.name }} Offline `
OFFLINE_CONTENT_CN = `{{- $d := .resource_details -}}
{{ .resource_type }} {{ $d.name }} 离线 {{- if $d.reason -}} 原因: {{ $d.reason }} {{- end -}}`
OFFLINE_CONTENT_EN = `{{- $d := .resource_details -}}
The {{ .resource_type }} {{ $d.name }} Offline {{- if $d.reason -}} Reason: {{ $d.reason }}{{- end -}}`
)
// 资源加入回收站通知
const (
PENDING_DELETE_TITLE_CN = `{{- $d := .resource_details -}}
{{- if $d.project -}}
{{ $d.project }}项目的
{{- end -}}
{{ .resource_type_display }}{{ $d.name }}成功加入回收站`
PENDING_DELETE_TITLE_EN = `{{- $d := .resource_details -}}
The {{ .resource_type_display }} {{ .Name }} {{ if $d.project }} in poject {{ $d.project }} {{ end -}} has been added to recycle bin successfully`
PENDING_DELETE_CONTENT_CN = `{{- $d := .resource_details -}}
您在{{ $d.project }}项目的
{{- if $d.ips -}}
IP地址为{{ $d.ips }}
{{- end -}}
{{- if $d.ip_addr -}}
IP地址为{{ $d.ip_addr }}
{{- end -}}
{{- if $d.brand -}}
{{ $d.brand }}平台
{{- end -}}
{{ .resource_type_display }}{{ $d.name }}成功加入回收站`
PENDING_DELETE_CONTENT_EN = `{{- $d := .resource_details -}}
Your {{ if $d.brand -}} {{ $d.brand }} {{ end -}} {{ .resource_type_display }} {{ $d.name }}
{{ if $d.project -}} in project {{ $d.project }} {{ end -}} has been added to recycle bin successfully
{{- if $d.private_dns -}}
, the intranet address is {{ $d.private_dns }}:{{ $d.private_connect_port }}
{{- end -}}
{{- if $d.public_dns -}}
, the external address is {{ $d.public_dns }}:{{ $d.public_connect_port }}
{{- end -}}
{{- if and $d.address_type $d.address -}}
, the service address is {{ $d.address_type }}{{ $d.address }}
{{- end -}}
{{- if $d.ips -}}
, the IP address is {{ $d.ips }}
{{- end -}}
{{- if $d.ip_addr -}}
, the IP address is {{ $d.ip_addr }}
{{- end -}}`
)
// 虚拟机崩溃通知
const (
SERVER_PANICKED_TITLE_CN = `{{- $d := .resource_details -}}
您在{{ $d.project }}项目的虚拟机{{ $d.name }}崩溃了`
SERVER_PANICKED_TITLE_EN = `{{- $d := .resource_details -}}
{{ .resource_type }} {{ $d.task_name }} PANIC`
SERVER_PANICKED_CONTENT_CN = `{{- $d := .resource_details -}}
您在{{ $d.project }}项目的虚拟机{{ $d.name }}崩溃了`
SERVER_PANICKED_CONTENT_EN = `{{- $d := .resource_details -}}
The server {{ $d.name }} in project {{ $d.project }} panicked.`
)
// 资源定时调度任务通知
const (
SCHEDULEDTASK_EXECUTE_TITLE_CN = `{{- $d := .resource_details -}}
您在{{ $d.project }}项目的定时任务执行成功`
SCHEDULEDTASK_EXECUTE_TITLE_EN = `{{- $d := .resource_details -}}
The scheduled task in {{ $d.project }} execute successfully`
SCHEDULEDTASK_EXECUTE_CONTENT_CN = `{{- $d := .resource_details -}}
您在{{ $d.project }}项目的定时任务执行成功`
SCHEDULEDTASK_EXECUTE_CONTENT_EN = `{{- $d := .resource_details -}}
The scheduled task in {{ $d.project }} successfully {{ $d.operation_display }} the {{ $d.resource_type_display }} {{ $d.resource_name }}`
)
// 服务异常通知
const (
SERVICE_ABNORMAL_TITLE_CN = `{{- $d := .resource_details -}}
服务{{ $d.service_name }}异常`
SERVICE_ABNORMAL_TITLE_EN = `{{- $d := .resource_details -}}
Server {{ $d.service_name }} abnormal`
SERVICE_ABNORMAL_CONTENT_CN = `{{- $d := .resource_details -}}
服务: {{ $d.service_name }} 异常。
方法: {{ $d.method }}
路径: {{ $d.path }}
{{- if $d.body }}
请求: {{ $d.body -}}
{{ end }}
错误: {{ $d.error }}`
SERVICE_ABNORMAL_CONTENT_EN = `{{- $d := .resource_details -}}
Service: {{ $d.service_name }} abnormal
Method: {{ $d.method }}
Path: {{ $d.path }}
{{- if $d.body }}
Body: {{ $d.body -}}
{{ end }}
Error: {{ $d.error }}`
)
// 弹性伸缩组策略生效通知
const (
SCALINGPOLICY_EXECUTE_TITLE_CN = `{{- $d := .resource_details -}}
{{ $d.project }}项目的弹性伸缩组{{ $d.scaling_group }}中的伸缩策略{{ $d.name }}满足触发条件`
SCALINGPOLICY_EXECUTE_TITLE_EN = `{{- $d := .resource_details -}}
The scaling policy {{ $d.name }} in the scaling group {{ $d.scaling_group }} triggered`
SCALINGPOLICY_EXECUTE_CONTENT_CN = `{{- $d := .resource_details -}}
您在{{ $d.project }}项目的弹性伸缩组{{ $d.scaling_group }}中的{{ $d.trigger_type_display }}类型伸缩策略{{ $d.name }}满足触发条件,成功{{ $d.action_display }}{{ $d.number }}{{ $d.unit_display }}实例`
SCALINGPOLICY_EXECUTE_CONTENT_EN = `{{- $d := .resource_details -}}
The {{ $d.trigger_type_display }} type scaling policy {{ $d.name }} in the scaling group {{ $d.scaling_group }} of the {{ $d.project }} project satisfies the trigger conditions, and {{ $d.action_display }} {{ $d.number }}{{ $d.unit_display }} instances successfully`
)
// 自动快照策略生效通知
const (
SNAPSHOTPOLICY_EXECUTE_TITLE_CN = `{{- $d := .resource_details -}}
{{ $d.project }}项目的自动快照策略{{ $d.name }}生效`
SNAPSHOTPOLICY_EXECUTE_TITLE_EN = `{{- $d := .resource_details -}}
The snapshot policy {{ $d.name }} in the {{ $d.project }} project executed`
SNAPSHOTPOLICY_EXECUTE_CONTENT_CN = `{{- $d := .resource_details -}}
您在{{ $d.project }}项目的自动快照策略{{ $d.name }}为硬盘{{ $d.disk }}创建快照成功`
SNAPSHOTPOLICY_EXECUTE_CONTENT_EN = `{{- $d := .resource_details -}}
The snapshot policy {{ $d.name }} in the {{ $d.project }} project successfully creates a snapshot for the disk {{ $d.disk }}`
)
// 资源变更通知
const (
UPDATE_TITLE_CN = `{{- $d := .resource_details -}}
{{- if $d.project -}}
{{ $d.project }}项目的
{{- end -}}
{{ .resource_type_display }}{{ $d.name }}{{ .action_display }}成功`
UPDATE_TITLE_EN = `{{- $d := .resource_details -}}
The {{ .resource_type }} {{ $d.name }} {{ if $d.project -}} in project {{ $d.project }} {{ end -}} {{ .action_display }} successfully`
UPDATE_CONTENT_CN = `{{- $d := .resource_details -}}
{{- if $d.project -}}
{{ $d.project }}项目
{{- end -}}
{{- if $d.brand -}}
{{ $d.brand }}平台
{{- end -}}
{{ .resource_type_display }}{{ $d.name }}{{ .action_display }}成功
{{- if $d.account -}}
,帐号为{{ $d.account }}
{{- end -}}
{{- if $d.password -}}
,密码为{{ $d.password }}
{{- end -}}
,更多信息请前往控制台进行查看`
UPDATE_CONTENT_EN = `{{- $d := .resource_details -}}
Your {{ if $d.brand -}} {{ $d.brand }} {{ end -}} {{ .resource_type }} {{ $d.name }} {{ if $d.project -}} in project {{ $d.project }} {{ end -}} has been {{ .action_display }} successfully
{{- if $d.account -}}
, the acount is {{ $d.account }}
{{- end -}}
{{- if $d.password -}}
, the password is {{ $d.password }}
{{- end -}}
, and please go to the console to view more information`
)
// 用户锁定通知
const (
USER_LOCK_TITLE_CN = `{{- $d := .resource_details -}}
账号{{ $d.name }}已被锁定`
USER_LOCK_TITLE_EN = `{{- $d := .resource_details -}}
Account {{ $d.name }} has been locked`
USER_LOCK_CONTENT_CN = `{{- $d := .resource_details -}}
账号{{ $d.name }}由于异常登录已被锁定,请核实情况,如果需要为用户解锁,请到用户列表启用该用户。`
USER_LOCK_CONTENT_EN = `{{- $d := .resource_details -}}
The account {{ $d.name }} has been locked due to abnormal login. Please verify the situation. If you need to unlock the user, please go to the user list to enable the user.`
)
// 云账号状态异常通知
const (
SYNC_ACCOUNT_STATUS_TITLE_CN = `{{- $d := .resource_details -}}
云账号{{ $d.name}}状态异常`
SYNC_ACCOUNT_STATUS_TITLE_EN = `{{- $d := .resource_details -}}
The account {{ $d.name }} status is abnormal`
SYNC_ACCOUNT_STATUS_CONTENT_CN = `{{- $d := .resource_details -}}
云账号{{ $d.name }}状态异常,请及时检查。`
SYNC_ACCOUNT_STATUS_CONTENT_EN = `{{- $d := .resource_details -}}
The account {{ $d.name }} status is abnormal. Please check in time.`
)
// work阻塞通知
const (
WORK_BLOCK_TITLE_CN = `{{- $d := .resource_details -}}
服务{{ d.service_name}} worker阻塞半小时请及时检查。`
WORK_BLOCK_TITLE_EN = `{{- $d := .resource_details -}}
The service: {{ d.service_name}} worker has been block 30 minutes.Please verify the service in time.`
WORK_BLOCK_CONTENT_CN = `{{- $d := .resource_details -}}
服务{{ d.service_name}} worker阻塞半小时请及时检查。`
WORK_BLOCK_CONTENT_EN = `{{- $d := .resource_details -}}
The service: {{ d.service_name}} worker has been block 30 minutes.Please verify the service in time.`
)