【发布时间】:2021-12-25 12:48:09
【问题描述】:
当文件上传到谷歌云计算引擎时,如何使用 python 脚本从 Pub sub 发送电子邮件通知。
【问题讨论】:
标签: python google-cloud-platform google-compute-engine google-cloud-pubsub email-notifications
当文件上传到谷歌云计算引擎时,如何使用 python 脚本从 Pub sub 发送电子邮件通知。
【问题讨论】:
标签: python google-cloud-platform google-compute-engine google-cloud-pubsub email-notifications
def restore(project_name, backup_filename):
print(
"Loading alert policies and notification channels from {}.".format(
backup_filename
)
)
record = json.load(open(backup_filename, "rt"))
is_same_project = project_name == record["project_name"]
# Convert dicts to AlertPolicies.
policies_json = [json.dumps(policy) for policy in record["policies"]]
policies = [
monitoring_v3.AlertPolicy.from_json(policy_json)
for policy_json in policies_json
]
# Convert dicts to NotificationChannels
channels_json = [json.dumps(channel) for channel in record["channels"]]
channels = [
monitoring_v3.NotificationChannel.from_json(channel_json)
for channel_json in channels_json
]
# Restore the channels.
channel_client = monitoring_v3.NotificationChannelServiceClient()
channel_name_map = {}
for channel in channels:
updated = False
print("Updating channel", channel.display_name)
# This field is immutable and it is illegal to specify a
# non-default value (UNVERIFIED or VERIFIED) in the
# Create() or Update() operations.
channel.verification_status = (
monitoring_v3.NotificationChannel.VerificationStatus.VERIFICATION_STATUS_UNSPECIFIED
)
if is_same_project:
try:
channel_client.update_notification_channel(notification_channel=channel)
updated = True
except google.api_core.exceptions.NotFound:
pass # The channel was deleted. Create it below.
if not updated:
# The channel no longer exists. Recreate it.
old_name = channel.name
del channel.name
new_channel = channel_client.create_notification_channel(
name=project_name, notification_channel=channel
)
channel_name_map[old_name] = new_channel.name
# Restore the alerts
alert_client = monitoring_v3.AlertPolicyServiceClient()
for policy in policies:
print("Updating policy", policy.display_name)
# These two fields cannot be set directly, so clear them.
del policy.creation_record
del policy.mutation_record
# Update old channel names with new channel names.
for i, channel in enumerate(policy.notification_channels):
new_channel = channel_name_map.get(channel)
if new_channel:
policy.notification_channels[i] = new_channel
updated = False
if is_same_project:
try:
alert_client.update_alert_policy(alert_policy=policy)
updated = True
except google.api_core.exceptions.NotFound:
pass # The policy was deleted. Create it below.
except google.api_core.exceptions.InvalidArgument:
# Annoying that API throws InvalidArgument when the policy
# does not exist. Seems like it should throw NotFound.
pass # The policy was deleted. Create it below.
if not updated:
# The policy no longer exists. Recreate it.
old_name = policy.name
del policy.name
for condition in policy.conditions:
del condition.name
policy = alert_client.create_alert_policy(
name=project_name, alert_policy=policy
)
print("Updated", policy.name)
有关更多信息,我建议您阅读以下有关 Managing notification channels by API 的文档
此产品或功能受 Google Cloud 服务条款的 Pre-GA 产品条款的约束。 Pre-GA 产品和功能的支持可能有限,对 pre-GA 产品和功能的更改可能与其他 pre-GA 版本不兼容。有关详细信息,请参阅启动阶段说明。
此外,您还想查看有关 Setting up a messaging app 的信息,该信息描述了如何使用 Pub/Sub 和 Cloud Functions 为 SendGrid 电子邮件 API、Slack 和 WebEx Teams 启用近乎实时的通知
【讨论】: