client: regenerate from hanzo-inc/cloud@fb00f045f9 (8.5.509)

Co-authored-by: Hanzo Dev <[email protected]>
This commit is contained in:
2026-10-02 01:44:08 +00:00
co-authored by Hanzo Dev
parent 8dba6bb845
commit f6cc56fbc0
8 changed files with 351 additions and 7 deletions
+2
View File
@@ -1638,6 +1638,7 @@ __all__ = [
"O11yGroupByKey",
"O11yHTTPClientConfig",
"O11yHaving",
"O11yHeartbeat",
"O11yHost",
"O11yHostFilter",
"O11yHostListRecord",
@@ -4668,6 +4669,7 @@ from hanzoai.cloud.models.o11y_google_chat_receiver_config import O11yGoogleChat
from hanzoai.cloud.models.o11y_group_by_key import O11yGroupByKey as O11yGroupByKey
from hanzoai.cloud.models.o11y_http_client_config import O11yHTTPClientConfig as O11yHTTPClientConfig
from hanzoai.cloud.models.o11y_having import O11yHaving as O11yHaving
from hanzoai.cloud.models.o11y_heartbeat import O11yHeartbeat as O11yHeartbeat
from hanzoai.cloud.models.o11y_host import O11yHost as O11yHost
from hanzoai.cloud.models.o11y_host_filter import O11yHostFilter as O11yHostFilter
from hanzoai.cloud.models.o11y_host_list_record import O11yHostListRecord as O11yHostListRecord
+254 -3
View File
@@ -34,6 +34,7 @@ from hanzoai.cloud.models.o11y_create_queue_req import O11yCreateQueueReq
from hanzoai.cloud.models.o11y_daemon_set_list_request import O11yDaemonSetListRequest
from hanzoai.cloud.models.o11y_deployment_list_request import O11yDeploymentListRequest
from hanzoai.cloud.models.o11y_filter_attribute_value_request import O11yFilterAttributeValueRequest
from hanzoai.cloud.models.o11y_heartbeat import O11yHeartbeat
from hanzoai.cloud.models.o11y_host_list_request import O11yHostListRequest
from hanzoai.cloud.models.o11y_install_integration_request import O11yInstallIntegrationRequest
from hanzoai.cloud.models.o11y_job_list_request import O11yJobListRequest
@@ -22403,6 +22404,256 @@ class O11yApi:
@validate_call
def get_o11y_alerts_heartbeat(
self,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> O11yHeartbeat:
"""Reports whether the alert path's heartbeat is still arriving: the dead-man's switch for paging.
Reports whether the alert path's heartbeat is still arriving: the dead-man's switch for paging. The o11y ruler fires one alert forever, labelled watchdog=\"true\", and every notification of it that reaches this process is a heartbeat — recorded as ALERT-HEARTBEAT, never sent to a human. It answers 200 with the heartbeat's age while one arrived within the last 15 minutes, and 503 once none has. A 503 means the path from the ruler to this receiver stopped — the ruler, its Alertmanager, or this process — which nothing inside the cluster can be trusted to say, so something OUTSIDE it polls this and pages on the 503. Process-local, like the replay ring: a restart starts the clock again rather than answering 503 before the first beat can arrive.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._get_o11y_alerts_heartbeat_serialize(
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "O11yHeartbeat",
'202': "Approval",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
).data
@validate_call
def get_o11y_alerts_heartbeat_with_http_info(
self,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> ApiResponse[O11yHeartbeat]:
"""Reports whether the alert path's heartbeat is still arriving: the dead-man's switch for paging.
Reports whether the alert path's heartbeat is still arriving: the dead-man's switch for paging. The o11y ruler fires one alert forever, labelled watchdog=\"true\", and every notification of it that reaches this process is a heartbeat — recorded as ALERT-HEARTBEAT, never sent to a human. It answers 200 with the heartbeat's age while one arrived within the last 15 minutes, and 503 once none has. A 503 means the path from the ruler to this receiver stopped — the ruler, its Alertmanager, or this process — which nothing inside the cluster can be trusted to say, so something OUTSIDE it polls this and pages on the 503. Process-local, like the replay ring: a restart starts the clock again rather than answering 503 before the first beat can arrive.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._get_o11y_alerts_heartbeat_serialize(
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "O11yHeartbeat",
'202': "Approval",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
response_data.read()
return self.api_client.response_deserialize(
response_data=response_data,
response_types_map=_response_types_map,
)
@validate_call
def get_o11y_alerts_heartbeat_without_preload_content(
self,
_request_timeout: Union[
None,
Annotated[StrictFloat, Field(gt=0)],
Tuple[
Annotated[StrictFloat, Field(gt=0)],
Annotated[StrictFloat, Field(gt=0)]
]
] = None,
_request_auth: Optional[Dict[StrictStr, Any]] = None,
_content_type: Optional[StrictStr] = None,
_headers: Optional[Dict[StrictStr, Any]] = None,
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
) -> RESTResponseType:
"""Reports whether the alert path's heartbeat is still arriving: the dead-man's switch for paging.
Reports whether the alert path's heartbeat is still arriving: the dead-man's switch for paging. The o11y ruler fires one alert forever, labelled watchdog=\"true\", and every notification of it that reaches this process is a heartbeat — recorded as ALERT-HEARTBEAT, never sent to a human. It answers 200 with the heartbeat's age while one arrived within the last 15 minutes, and 503 once none has. A 503 means the path from the ruler to this receiver stopped — the ruler, its Alertmanager, or this process — which nothing inside the cluster can be trusted to say, so something OUTSIDE it polls this and pages on the 503. Process-local, like the replay ring: a restart starts the clock again rather than answering 503 before the first beat can arrive.
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:type _request_timeout: int, tuple(int, int), optional
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the
authentication in the spec for a single request.
:type _request_auth: dict, optional
:param _content_type: force content-type for the request.
:type _content_type: str, Optional
:param _headers: set to override the headers for a single
request; this effectively ignores the headers
in the spec for a single request.
:type _headers: dict, optional
:param _host_index: set to override the host_index for a single
request; this effectively ignores the host_index
in the spec for a single request.
:type _host_index: int, optional
:return: Returns the result object.
""" # noqa: E501
_param = self._get_o11y_alerts_heartbeat_serialize(
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "O11yHeartbeat",
'202': "Approval",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _get_o11y_alerts_heartbeat_serialize(
self,
_request_auth,
_content_type,
_headers,
_host_index,
) -> RequestSerialized:
_host = None
_collection_formats: Dict[str, str] = {
}
_path_params: Dict[str, str] = {}
_query_params: List[Tuple[str, str]] = []
_header_params: Dict[str, Optional[str]] = _headers or {}
_form_params: List[Tuple[str, str]] = []
_files: Dict[
str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
] = {}
_body_params: Optional[bytes] = None
# process the path parameters
# process the query parameters
# process the header parameters
# process the form parameters
# process the body parameter
# set the HTTP header `Accept`
if 'Accept' not in _header_params:
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/json',
'application/problem+json'
]
)
# authentication setting
_auth_settings: List[str] = [
'bearer'
]
return self.api_client.param_serialize(
method='GET',
resource_path='/v1/o11y/alerts/heartbeat',
path_params=_path_params,
query_params=_query_params,
header_params=_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
auth_settings=_auth_settings,
collection_formats=_collection_formats,
_host=_host,
_request_auth=_request_auth
)
@validate_call
def get_o11y_alerts_last(
self,
@@ -67321,7 +67572,7 @@ class O11yApi:
) -> None:
"""Take an Alertmanager notification and page a human
Records one Alertmanager webhook delivery and pages the on-call. Each alert prints an `ALERT-RECEIVED` line and joins the replay ring, then the batch is carried out of the process by the egress chain: the org's KMS-custodied Slack bot token first (the ONE product Slack egress, not a second webhook credential), then an email to `CLOUD_ALERTS_EMAIL_TO` on the org's own notify credential, then a plain POST to `CLOUD_ALERTS_WEBHOOK_URL` — which needs no Slack connection and so works in exactly the state that silences the first. Resolved notifications page too: \"it recovered\" is the half of an incident people are actually waiting for. THE STATUS CODE REPORTS DELIVERY, NOT ARRIVAL. 200 `ok` means an egress accepted the batch. If none did — including when none is configured at all — it answers **503** naming the failure, so Alertmanager retries and counts it in `alertmanager_notifications_failed_total`. An alert nobody could be told about must never answer the same way as one that was delivered. A body that will not parse is still recorded (with empty fields) rather than rejected: the delivery happened, which is the fact being recorded, and a 400 would make Alertmanager retry a malformed payload forever. The receiver segment is Alertmanager's own receiver name, a parameter rather than a hand-listed route because the receiver set is config, not code.
Records one Alertmanager webhook delivery and pages the on-call. Each alert prints an `ALERT-RECEIVED` line and joins the replay ring, then the batch is carried out of the process by the egress chain: the org's KMS-custodied Slack bot token first (the ONE product Slack egress, not a second webhook credential), then an email to `CLOUD_ALERTS_EMAIL_TO` on the org's own notify credential, then a plain POST to `CLOUD_ALERTS_WEBHOOK_URL` — which needs no Slack connection and so works in exactly the state that silences the first. Resolved notifications page too: \"it recovered\" is the half of an incident people are actually waiting for. An alert labelled `watchdog=\"true\"` is the path's heartbeat (see `GET /v1/o11y/alerts/heartbeat`) and pages nobody. THE STATUS CODE REPORTS DELIVERY, NOT ARRIVAL. 200 `ok` means an egress accepted the batch. If none did — including when none is configured at all — it answers **503** naming the failure, so Alertmanager retries and counts it in `alertmanager_notifications_failed_total`. An alert nobody could be told about must never answer the same way as one that was delivered. A body that will not parse is still recorded (with empty fields) rather than rejected: the delivery happened, which is the fact being recorded, and a 400 would make Alertmanager retry a malformed payload forever. The receiver segment is Alertmanager's own receiver name, a parameter rather than a hand-listed route because the receiver set is config, not code.
:param receiver: (required)
:type receiver: str
@@ -67387,7 +67638,7 @@ class O11yApi:
) -> ApiResponse[None]:
"""Take an Alertmanager notification and page a human
Records one Alertmanager webhook delivery and pages the on-call. Each alert prints an `ALERT-RECEIVED` line and joins the replay ring, then the batch is carried out of the process by the egress chain: the org's KMS-custodied Slack bot token first (the ONE product Slack egress, not a second webhook credential), then an email to `CLOUD_ALERTS_EMAIL_TO` on the org's own notify credential, then a plain POST to `CLOUD_ALERTS_WEBHOOK_URL` — which needs no Slack connection and so works in exactly the state that silences the first. Resolved notifications page too: \"it recovered\" is the half of an incident people are actually waiting for. THE STATUS CODE REPORTS DELIVERY, NOT ARRIVAL. 200 `ok` means an egress accepted the batch. If none did — including when none is configured at all — it answers **503** naming the failure, so Alertmanager retries and counts it in `alertmanager_notifications_failed_total`. An alert nobody could be told about must never answer the same way as one that was delivered. A body that will not parse is still recorded (with empty fields) rather than rejected: the delivery happened, which is the fact being recorded, and a 400 would make Alertmanager retry a malformed payload forever. The receiver segment is Alertmanager's own receiver name, a parameter rather than a hand-listed route because the receiver set is config, not code.
Records one Alertmanager webhook delivery and pages the on-call. Each alert prints an `ALERT-RECEIVED` line and joins the replay ring, then the batch is carried out of the process by the egress chain: the org's KMS-custodied Slack bot token first (the ONE product Slack egress, not a second webhook credential), then an email to `CLOUD_ALERTS_EMAIL_TO` on the org's own notify credential, then a plain POST to `CLOUD_ALERTS_WEBHOOK_URL` — which needs no Slack connection and so works in exactly the state that silences the first. Resolved notifications page too: \"it recovered\" is the half of an incident people are actually waiting for. An alert labelled `watchdog=\"true\"` is the path's heartbeat (see `GET /v1/o11y/alerts/heartbeat`) and pages nobody. THE STATUS CODE REPORTS DELIVERY, NOT ARRIVAL. 200 `ok` means an egress accepted the batch. If none did — including when none is configured at all — it answers **503** naming the failure, so Alertmanager retries and counts it in `alertmanager_notifications_failed_total`. An alert nobody could be told about must never answer the same way as one that was delivered. A body that will not parse is still recorded (with empty fields) rather than rejected: the delivery happened, which is the fact being recorded, and a 400 would make Alertmanager retry a malformed payload forever. The receiver segment is Alertmanager's own receiver name, a parameter rather than a hand-listed route because the receiver set is config, not code.
:param receiver: (required)
:type receiver: str
@@ -67453,7 +67704,7 @@ class O11yApi:
) -> RESTResponseType:
"""Take an Alertmanager notification and page a human
Records one Alertmanager webhook delivery and pages the on-call. Each alert prints an `ALERT-RECEIVED` line and joins the replay ring, then the batch is carried out of the process by the egress chain: the org's KMS-custodied Slack bot token first (the ONE product Slack egress, not a second webhook credential), then an email to `CLOUD_ALERTS_EMAIL_TO` on the org's own notify credential, then a plain POST to `CLOUD_ALERTS_WEBHOOK_URL` — which needs no Slack connection and so works in exactly the state that silences the first. Resolved notifications page too: \"it recovered\" is the half of an incident people are actually waiting for. THE STATUS CODE REPORTS DELIVERY, NOT ARRIVAL. 200 `ok` means an egress accepted the batch. If none did — including when none is configured at all — it answers **503** naming the failure, so Alertmanager retries and counts it in `alertmanager_notifications_failed_total`. An alert nobody could be told about must never answer the same way as one that was delivered. A body that will not parse is still recorded (with empty fields) rather than rejected: the delivery happened, which is the fact being recorded, and a 400 would make Alertmanager retry a malformed payload forever. The receiver segment is Alertmanager's own receiver name, a parameter rather than a hand-listed route because the receiver set is config, not code.
Records one Alertmanager webhook delivery and pages the on-call. Each alert prints an `ALERT-RECEIVED` line and joins the replay ring, then the batch is carried out of the process by the egress chain: the org's KMS-custodied Slack bot token first (the ONE product Slack egress, not a second webhook credential), then an email to `CLOUD_ALERTS_EMAIL_TO` on the org's own notify credential, then a plain POST to `CLOUD_ALERTS_WEBHOOK_URL` — which needs no Slack connection and so works in exactly the state that silences the first. Resolved notifications page too: \"it recovered\" is the half of an incident people are actually waiting for. An alert labelled `watchdog=\"true\"` is the path's heartbeat (see `GET /v1/o11y/alerts/heartbeat`) and pages nobody. THE STATUS CODE REPORTS DELIVERY, NOT ARRIVAL. 200 `ok` means an egress accepted the batch. If none did — including when none is configured at all — it answers **503** naming the failure, so Alertmanager retries and counts it in `alertmanager_notifications_failed_total`. An alert nobody could be told about must never answer the same way as one that was delivered. A body that will not parse is still recorded (with empty fields) rather than rejected: the delivery happened, which is the fact being recorded, and a 400 would make Alertmanager retry a malformed payload forever. The receiver segment is Alertmanager's own receiver name, a parameter rather than a hand-listed route because the receiver set is config, not code.
:param receiver: (required)
:type receiver: str
+1
View File
@@ -1501,6 +1501,7 @@ from hanzoai.cloud.models.o11y_google_chat_receiver_config import O11yGoogleChat
from hanzoai.cloud.models.o11y_group_by_key import O11yGroupByKey
from hanzoai.cloud.models.o11y_http_client_config import O11yHTTPClientConfig
from hanzoai.cloud.models.o11y_having import O11yHaving
from hanzoai.cloud.models.o11y_heartbeat import O11yHeartbeat
from hanzoai.cloud.models.o11y_host import O11yHost
from hanzoai.cloud.models.o11y_host_filter import O11yHostFilter
from hanzoai.cloud.models.o11y_host_list_record import O11yHostListRecord
@@ -0,0 +1,89 @@
# coding: utf-8
"""
Hanzo Cloud API
The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
The version of the OpenAPI document: v1
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictInt
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class O11yHeartbeat(BaseModel):
"""
O11yHeartbeat
""" # noqa: E501
age_seconds: Optional[StrictInt] = Field(default=None, description="AgeSeconds is how long ago the last heartbeat arrived — or this process started, before its first.", alias="ageSeconds")
limit_seconds: Optional[StrictInt] = Field(default=None, description="LimitSeconds is how old the heartbeat may get before this answers 503.", alias="limitSeconds")
__properties: ClassVar[List[str]] = ["ageSeconds", "limitSeconds"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of O11yHeartbeat from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
"""
excluded_fields: Set[str] = set([
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of O11yHeartbeat from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"ageSeconds": obj.get("ageSeconds"),
"limitSeconds": obj.get("limitSeconds")
})
return _obj