# #python #google-cloud-monitoring #protocol-buffers
Вопрос:
Я пытаюсь обновить политику предупреждений с помощью облачных функций. У меня есть следующие строки кода:
filter = "resource.type = "l7_lb_rule" AND metric.type = "logging.googleapis.com/user/stuff_here"")
alert_policy = {"conditions":[{"condition_absent":{"duration": '1800s',"filter": '{}'.format(filter)}, "displayName":'test'}], "displayName":'test'), "combiner":"OR"}
policy = monitoring_v3.AlertPolicy.from_json(json.dumps(alert_policy))
client_alert.update_alert_policy(policy)
Я запускаю то же обновление с помощью проводника API, и оно работает. Однако облачные функции возвращают мне эту ошибку TypeError: Invalid constructor input for UpdateAlertPolicyRequest: display_name: "test"
Мне также интересно, куда я должен передать имя предупреждения, которое я хочу обновить. Я пытался передать имя в качестве параметра или объекта alert_policy, но оно всегда возвращало мне какие-то ошибки.
Ответ №1:
Проблема в том, что вы передаете в качестве аргумента update_alert_policy
функции то , что, как вы можете видеть в исходном коде библиотеки, считается UpdateAlertPolicyRequest
первым позиционным аргументом. Вам нужно предоставить свою информацию, используя alert_policy
вместо этого аргумент, что-то вроде:
# indicate every field you want to update and provide
# the corresponding values in the policy definition
mask = field_mask.FieldMask(paths=['display_name', 'combiner', 'conditions'])
policy = monitoring_v3.AlertPolicy(
name='your_policy_name',
display_name='test',
combiner='OR',
conditions=[
monitoring_v3.types.AlertPolicy.Condition(
display_name='test',
condition_absent=monitoring_v3.types.AlertPolicy.Condition.MetricAbsence(
duration='1800s',
filter='resource.type = "l7_lb_rule" AND metric.type = "logging.googleapis.com/user/stuff_here"'
)
)
]
)
client.update_alert_policy(alert_policy=policy, update_mask=mask)
Библиотека предоставляет некоторые фрагменты, которые могут оказаться полезными.