Compare commits

...

5 Commits
2.16.0 ... main

Author SHA1 Message Date
Miguel Pragosa
e4068d6142
[GitHub Bot] Generated python SDK (#119)
Some checks failed
Python CI / build (push) Has been cancelled
Co-authored-by: API Team <api-team@thousandeyes.com>
2025-12-02 11:32:03 +00:00
Miguel Pragosa
ebbdbcbac7
[GitHub Bot] Generated python SDK (#117)
Some checks failed
Python CI / build (push) Has been cancelled
Co-authored-by: API Team <api-team@thousandeyes.com>
2025-11-11 12:19:25 +00:00
Miguel Pragosa
d44cc6b392
[GitHub Bot] Generated python SDK (#116)
Some checks failed
Python CI / build (push) Has been cancelled
Co-authored-by: API Team <api-team@thousandeyes.com>
2025-10-21 16:42:32 +01:00
Ting
df1bc2ab2f
[GitHub Bot] Generated python SDK (#114)
Some checks failed
Python CI / build (push) Has been cancelled
Co-authored-by: API Team <api-team@thousandeyes.com>
2025-09-30 14:36:04 +01:00
Ting
99f801db6d
[GitHub Bot] Generated python SDK (#113)
Some checks failed
Python CI / build (push) Has been cancelled
Co-authored-by: API Team <api-team@thousandeyes.com>
2025-09-16 14:58:43 +01:00
332 changed files with 3674 additions and 330 deletions

View File

@ -14,6 +14,7 @@ docs/AuditUserEvents.md
docs/BaseRole.md
docs/CloudEnterpriseAgentType.md
docs/ClusterMember.md
docs/Coordinates.md
docs/CreatedAccountGroup.md
docs/CreatedUser.md
docs/EnterpriseAgent.md
@ -78,6 +79,7 @@ src/thousandeyes_sdk/administrative/models/audit_user_events.py
src/thousandeyes_sdk/administrative/models/base_role.py
src/thousandeyes_sdk/administrative/models/cloud_enterprise_agent_type.py
src/thousandeyes_sdk/administrative/models/cluster_member.py
src/thousandeyes_sdk/administrative/models/coordinates.py
src/thousandeyes_sdk/administrative/models/created_account_group.py
src/thousandeyes_sdk/administrative/models/created_user.py
src/thousandeyes_sdk/administrative/models/enterprise_agent.py

View File

@ -12,7 +12,7 @@ This API provides the following operations to manage your organization:
This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
- API version: 7.0.58
- API version: 7.0.68
- Generator version: 7.6.0
- Build package: com.thousandeyes.api.codegen.ThousandeyesPythonGenerator
@ -138,6 +138,7 @@ Class | Method | HTTP request | Description
- [BaseRole](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-administrative/docs/BaseRole.md)
- [CloudEnterpriseAgentType](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-administrative/docs/CloudEnterpriseAgentType.md)
- [ClusterMember](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-administrative/docs/ClusterMember.md)
- [Coordinates](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-administrative/docs/Coordinates.md)
- [CreatedAccountGroup](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-administrative/docs/CreatedAccountGroup.md)
- [CreatedUser](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-administrative/docs/CreatedUser.md)
- [EnterpriseAgent](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-administrative/docs/EnterpriseAgent.md)

View File

@ -12,6 +12,7 @@ Name | Type | Description | Notes
**agent_name** | **str** | Name of the agent. | [optional]
**location** | **str** | Location of the agent. | [optional] [readonly]
**country_id** | **str** | 2-digit ISO country code | [optional] [readonly]
**coordinates** | [**Coordinates**](Coordinates.md) | | [optional]
**enabled** | **bool** | Flag indicating if the agent is enabled. | [optional]
**prefix** | **str** | Prefix containing agents public IP address. | [optional] [readonly]
**verify_ssl_certificates** | **bool** | Flag indicating if has normal SSL operations or if instead it&#39;s set to ignore SSL errors on browserbot-based tests. | [optional] [readonly]

View File

@ -0,0 +1,31 @@
# Coordinates
Geographic coordinates for agent location.
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**latitude** | **float** | The latitude of the agent location in decimal degrees | [optional] [readonly]
**longitude** | **float** | The longitude of the agent location in decimal degrees | [optional] [readonly]
## Example
```python
from thousandeyes_sdk.administrative.models.coordinates import Coordinates
# TODO update the JSON string below
json = "{}"
# create an instance of Coordinates from a JSON string
coordinates_instance = Coordinates.from_json(json)
# print the JSON string representation of the object
print(Coordinates.to_json())
# convert the object into a dict
coordinates_dict = coordinates_instance.to_dict()
# create an instance of Coordinates from a dict
coordinates_from_dict = Coordinates.from_dict(coordinates_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

View File

@ -13,6 +13,7 @@ Name | Type | Description | Notes
**agent_name** | **str** | Name of the agent. | [optional]
**location** | **str** | Location of the agent. | [optional] [readonly]
**country_id** | **str** | 2-digit ISO country code | [optional] [readonly]
**coordinates** | [**Coordinates**](Coordinates.md) | | [optional]
**enabled** | **bool** | Flag indicating if the agent is enabled. | [optional]
**prefix** | **str** | Prefix containing agents public IP address. | [optional] [readonly]
**verify_ssl_certificates** | **bool** | Flag indicating if has normal SSL operations or if instead it&#39;s set to ignore SSL errors on browserbot-based tests. | [optional] [readonly]

View File

@ -12,6 +12,7 @@ Name | Type | Description | Notes
**agent_name** | **str** | Name of the agent. | [optional]
**location** | **str** | Location of the agent. | [optional] [readonly]
**country_id** | **str** | 2-digit ISO country code | [optional] [readonly]
**coordinates** | [**Coordinates**](Coordinates.md) | | [optional]
**enabled** | **bool** | Flag indicating if the agent is enabled. | [optional]
**prefix** | **str** | Prefix containing agents public IP address. | [optional] [readonly]
**verify_ssl_certificates** | **bool** | Flag indicating if has normal SSL operations or if instead it&#39;s set to ignore SSL errors on browserbot-based tests. | [optional] [readonly]

View File

@ -34,6 +34,7 @@ from thousandeyes_sdk.administrative.models.audit_user_events import AuditUserEv
from thousandeyes_sdk.administrative.models.base_role import BaseRole
from thousandeyes_sdk.administrative.models.cloud_enterprise_agent_type import CloudEnterpriseAgentType
from thousandeyes_sdk.administrative.models.cluster_member import ClusterMember
from thousandeyes_sdk.administrative.models.coordinates import Coordinates
from thousandeyes_sdk.administrative.models.created_account_group import CreatedAccountGroup
from thousandeyes_sdk.administrative.models.created_user import CreatedUser
from thousandeyes_sdk.administrative.models.enterprise_agent import EnterpriseAgent

View File

@ -25,6 +25,7 @@ from thousandeyes_sdk.administrative.models.audit_user_events import AuditUserEv
from thousandeyes_sdk.administrative.models.base_role import BaseRole
from thousandeyes_sdk.administrative.models.cloud_enterprise_agent_type import CloudEnterpriseAgentType
from thousandeyes_sdk.administrative.models.cluster_member import ClusterMember
from thousandeyes_sdk.administrative.models.coordinates import Coordinates
from thousandeyes_sdk.administrative.models.created_account_group import CreatedAccountGroup
from thousandeyes_sdk.administrative.models.created_user import CreatedUser
from thousandeyes_sdk.administrative.models.enterprise_agent import EnterpriseAgent

View File

@ -19,6 +19,7 @@ import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from thousandeyes_sdk.administrative.models.cloud_enterprise_agent_type import CloudEnterpriseAgentType
from thousandeyes_sdk.administrative.models.coordinates import Coordinates
from typing import Optional, Set
from typing_extensions import Self
@ -33,11 +34,12 @@ class AgentResponse(BaseModel):
agent_name: Optional[StrictStr] = Field(default=None, description="Name of the agent.", alias="agentName")
location: Optional[StrictStr] = Field(default=None, description="Location of the agent.")
country_id: Optional[StrictStr] = Field(default=None, description="2-digit ISO country code", alias="countryId")
coordinates: Optional[Coordinates] = None
enabled: Optional[StrictBool] = Field(default=None, description="Flag indicating if the agent is enabled.")
prefix: Optional[StrictStr] = Field(default=None, description="Prefix containing agents public IP address.")
verify_ssl_certificates: Optional[StrictBool] = Field(default=None, description="Flag indicating if has normal SSL operations or if instead it's set to ignore SSL errors on browserbot-based tests.", alias="verifySslCertificates")
agent_type: CloudEnterpriseAgentType = Field(alias="agentType")
__properties: ClassVar[List[str]] = ["ipAddresses", "publicIpAddresses", "network", "agentId", "agentName", "location", "countryId", "enabled", "prefix", "verifySslCertificates", "agentType"]
__properties: ClassVar[List[str]] = ["ipAddresses", "publicIpAddresses", "network", "agentId", "agentName", "location", "countryId", "coordinates", "enabled", "prefix", "verifySslCertificates", "agentType"]
model_config = ConfigDict(
populate_by_name=True,
@ -95,6 +97,9 @@ class AgentResponse(BaseModel):
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of coordinates
if self.coordinates:
_dict['coordinates'] = self.coordinates.to_dict()
return _dict
@classmethod
@ -114,6 +119,7 @@ class AgentResponse(BaseModel):
"agentName": obj.get("agentName"),
"location": obj.get("location"),
"countryId": obj.get("countryId"),
"coordinates": Coordinates.from_dict(obj["coordinates"]) if obj.get("coordinates") is not None else None,
"enabled": obj.get("enabled"),
"prefix": obj.get("prefix"),
"verifySslCertificates": obj.get("verifySslCertificates"),

View File

@ -0,0 +1,93 @@
# coding: utf-8
"""
Administrative API
Manage users, accounts, and account groups in the ThousandEyes platform using the Administrative API. This API provides the following operations to manage your organization: * `/account-groups`: Account groups are used to divide an organization into different sections. These operations can be used to create, retrieve, update and delete account groups. * `/users`: Create, retrieve, update and delete users within an organization. * `/roles`: Create, retrieve and update roles for the current user. * `/permissions`: Retrieve all assignable permissions. Used in the context of modifying roles. * `/audit-user-events`: Retrieve all activity log events. For more information about the administrative models, see [Account Management](https://docs.thousandeyes.com/product-documentation/user-management).
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, StrictFloat, StrictInt
from typing import Any, ClassVar, Dict, List, Optional, Union
from typing import Optional, Set
from typing_extensions import Self
class Coordinates(BaseModel):
"""
Geographic coordinates for agent location.
""" # noqa: E501
latitude: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="The latitude of the agent location in decimal degrees")
longitude: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="The longitude of the agent location in decimal degrees")
__properties: ClassVar[List[str]] = ["latitude", "longitude"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
extra="allow",
)
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 self.model_dump_json(by_alias=True, exclude_unset=True, exclude_none=True)
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Coordinates 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.
* OpenAPI `readOnly` fields are excluded.
* OpenAPI `readOnly` fields are excluded.
"""
excluded_fields: Set[str] = set([
"latitude",
"longitude",
])
_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 Coordinates from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"latitude": obj.get("latitude"),
"longitude": obj.get("longitude")
})
return _obj

View File

@ -22,6 +22,7 @@ from typing import Any, ClassVar, Dict, List, Optional
from thousandeyes_sdk.administrative.models.account_group import AccountGroup
from thousandeyes_sdk.administrative.models.cloud_enterprise_agent_type import CloudEnterpriseAgentType
from thousandeyes_sdk.administrative.models.cluster_member import ClusterMember
from thousandeyes_sdk.administrative.models.coordinates import Coordinates
from thousandeyes_sdk.administrative.models.enterprise_agent_ipv6_policy import EnterpriseAgentIpv6Policy
from thousandeyes_sdk.administrative.models.enterprise_agent_state import EnterpriseAgentState
from thousandeyes_sdk.administrative.models.error_detail import ErrorDetail
@ -42,6 +43,7 @@ class EnterpriseAgent(BaseModel):
agent_name: Optional[StrictStr] = Field(default=None, description="Name of the agent.", alias="agentName")
location: Optional[StrictStr] = Field(default=None, description="Location of the agent.")
country_id: Optional[StrictStr] = Field(default=None, description="2-digit ISO country code", alias="countryId")
coordinates: Optional[Coordinates] = None
enabled: Optional[StrictBool] = Field(default=None, description="Flag indicating if the agent is enabled.")
prefix: Optional[StrictStr] = Field(default=None, description="Prefix containing agents public IP address.")
verify_ssl_certificates: Optional[StrictBool] = Field(default=None, description="Flag indicating if has normal SSL operations or if instead it's set to ignore SSL errors on browserbot-based tests.", alias="verifySslCertificates")
@ -60,7 +62,7 @@ class EnterpriseAgent(BaseModel):
target_for_tests: Optional[StrictStr] = Field(default=None, description="Test target IP address.", alias="targetForTests")
local_resolution_prefixes: Optional[List[StrictStr]] = Field(default=None, description="To perform rDNS lookups for public IP ranges, this field represents the public IP ranges. The range must be in CIDR notation; for example, 10.1.1.0/24. Maximum of 5 prefixes allowed (Enterprise Agents and Enterprise Agent clusters only).", alias="localResolutionPrefixes")
interface_ip_mapping: Optional[List[InterfaceIpMapping]] = Field(default=None, alias="interfaceIpMapping")
__properties: ClassVar[List[str]] = ["agentType", "ipAddresses", "publicIpAddresses", "network", "agentId", "agentName", "location", "countryId", "enabled", "prefix", "verifySslCertificates", "testIds", "tests", "clusterMembers", "utilization", "accountGroups", "ipv6Policy", "errorDetails", "hostname", "lastSeen", "agentState", "keepBrowserCache", "createdDate", "targetForTests", "localResolutionPrefixes", "interfaceIpMapping"]
__properties: ClassVar[List[str]] = ["agentType", "ipAddresses", "publicIpAddresses", "network", "agentId", "agentName", "location", "countryId", "coordinates", "enabled", "prefix", "verifySslCertificates", "testIds", "tests", "clusterMembers", "utilization", "accountGroups", "ipv6Policy", "errorDetails", "hostname", "lastSeen", "agentState", "keepBrowserCache", "createdDate", "targetForTests", "localResolutionPrefixes", "interfaceIpMapping"]
model_config = ConfigDict(
populate_by_name=True,
@ -134,6 +136,9 @@ class EnterpriseAgent(BaseModel):
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of coordinates
if self.coordinates:
_dict['coordinates'] = self.coordinates.to_dict()
# override the default output from pydantic by calling `to_dict()` of each item in tests (list)
_items = []
if self.tests:
@ -189,6 +194,7 @@ class EnterpriseAgent(BaseModel):
"agentName": obj.get("agentName"),
"location": obj.get("location"),
"countryId": obj.get("countryId"),
"coordinates": Coordinates.from_dict(obj["coordinates"]) if obj.get("coordinates") is not None else None,
"enabled": obj.get("enabled"),
"prefix": obj.get("prefix"),
"verifySslCertificates": obj.get("verifySslCertificates"),

View File

@ -18,6 +18,7 @@ import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from thousandeyes_sdk.administrative.models.coordinates import Coordinates
from typing import Optional, Set
from typing_extensions import Self
@ -32,10 +33,11 @@ class SimpleAgent(BaseModel):
agent_name: Optional[StrictStr] = Field(default=None, description="Name of the agent.", alias="agentName")
location: Optional[StrictStr] = Field(default=None, description="Location of the agent.")
country_id: Optional[StrictStr] = Field(default=None, description="2-digit ISO country code", alias="countryId")
coordinates: Optional[Coordinates] = None
enabled: Optional[StrictBool] = Field(default=None, description="Flag indicating if the agent is enabled.")
prefix: Optional[StrictStr] = Field(default=None, description="Prefix containing agents public IP address.")
verify_ssl_certificates: Optional[StrictBool] = Field(default=None, description="Flag indicating if has normal SSL operations or if instead it's set to ignore SSL errors on browserbot-based tests.", alias="verifySslCertificates")
__properties: ClassVar[List[str]] = ["ipAddresses", "publicIpAddresses", "network", "agentId", "agentName", "location", "countryId", "enabled", "prefix", "verifySslCertificates"]
__properties: ClassVar[List[str]] = ["ipAddresses", "publicIpAddresses", "network", "agentId", "agentName", "location", "countryId", "coordinates", "enabled", "prefix", "verifySslCertificates"]
model_config = ConfigDict(
populate_by_name=True,
@ -93,6 +95,9 @@ class SimpleAgent(BaseModel):
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of coordinates
if self.coordinates:
_dict['coordinates'] = self.coordinates.to_dict()
return _dict
@classmethod
@ -112,6 +117,7 @@ class SimpleAgent(BaseModel):
"agentName": obj.get("agentName"),
"location": obj.get("location"),
"countryId": obj.get("countryId"),
"coordinates": Coordinates.from_dict(obj["coordinates"]) if obj.get("coordinates") is not None else None,
"enabled": obj.get("enabled"),
"prefix": obj.get("prefix"),
"verifySslCertificates": obj.get("verifySslCertificates")

View File

@ -176,6 +176,10 @@ class TestAccountGroupsApi(unittest.TestCase):
"keepBrowserCache" : true,
"agentState" : "online",
"localResolutionPrefixes" : [ "10.2.3.3/24", "10.2.3.3/24" ],
"coordinates" : {
"latitude" : 37.77493,
"longitude" : -122.41942
},
"agentName" : "thousandeyes-stg-va-254",
"utilization" : 25,
"testIds" : [ 281474976710706 ],
@ -317,6 +321,10 @@ class TestAccountGroupsApi(unittest.TestCase):
"keepBrowserCache" : true,
"agentState" : "online",
"localResolutionPrefixes" : [ "10.2.3.3/24", "10.2.3.3/24" ],
"coordinates" : {
"latitude" : 37.77493,
"longitude" : -122.41942
},
"agentName" : "thousandeyes-stg-va-254",
"utilization" : 25,
"testIds" : [ 281474976710706 ],
@ -571,6 +579,10 @@ class TestAccountGroupsApi(unittest.TestCase):
"keepBrowserCache" : true,
"agentState" : "online",
"localResolutionPrefixes" : [ "10.2.3.3/24", "10.2.3.3/24" ],
"coordinates" : {
"latitude" : 37.77493,
"longitude" : -122.41942
},
"agentName" : "thousandeyes-stg-va-254",
"utilization" : 25,
"testIds" : [ 281474976710706 ],
@ -712,6 +724,10 @@ class TestAccountGroupsApi(unittest.TestCase):
"keepBrowserCache" : true,
"agentState" : "online",
"localResolutionPrefixes" : [ "10.2.3.3/24", "10.2.3.3/24" ],
"coordinates" : {
"latitude" : 37.77493,
"longitude" : -122.41942
},
"agentName" : "thousandeyes-stg-va-254",
"utilization" : 25,
"testIds" : [ 281474976710706 ],

View File

@ -27,6 +27,7 @@ docs/CloudEnterpriseAgent.md
docs/CloudEnterpriseAgentType.md
docs/CloudEnterpriseAgents.md
docs/ClusterMember.md
docs/Coordinates.md
docs/EnterpriseAgent.md
docs/EnterpriseAgentClusterApi.md
docs/EnterpriseAgentClusterDetail.md
@ -91,6 +92,7 @@ src/thousandeyes_sdk/agents/models/cloud_enterprise_agent.py
src/thousandeyes_sdk/agents/models/cloud_enterprise_agent_type.py
src/thousandeyes_sdk/agents/models/cloud_enterprise_agents.py
src/thousandeyes_sdk/agents/models/cluster_member.py
src/thousandeyes_sdk/agents/models/coordinates.py
src/thousandeyes_sdk/agents/models/enterprise_agent.py
src/thousandeyes_sdk/agents/models/enterprise_agent_cluster_detail.py
src/thousandeyes_sdk/agents/models/enterprise_agent_data.py

View File

@ -5,7 +5,7 @@ Manage Cloud and Enterprise Agents available to your account in ThousandEyes.
This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
- API version: 7.0.58
- API version: 7.0.68
- Generator version: 7.6.0
- Build package: com.thousandeyes.api.codegen.ThousandeyesPythonGenerator
@ -135,6 +135,7 @@ Class | Method | HTTP request | Description
- [CloudEnterpriseAgentType](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-agents/docs/CloudEnterpriseAgentType.md)
- [CloudEnterpriseAgents](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-agents/docs/CloudEnterpriseAgents.md)
- [ClusterMember](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-agents/docs/ClusterMember.md)
- [Coordinates](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-agents/docs/Coordinates.md)
- [EnterpriseAgent](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-agents/docs/EnterpriseAgent.md)
- [EnterpriseAgentClusterDetail](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-agents/docs/EnterpriseAgentClusterDetail.md)
- [EnterpriseAgentData](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-agents/docs/EnterpriseAgentData.md)

View File

@ -12,6 +12,7 @@ Name | Type | Description | Notes
**agent_name** | **str** | Name of the agent. | [optional]
**location** | **str** | Location of the agent. | [optional] [readonly]
**country_id** | **str** | 2-digit ISO country code | [optional] [readonly]
**coordinates** | [**Coordinates**](Coordinates.md) | | [optional]
**enabled** | **bool** | Flag indicating if the agent is enabled. | [optional]
**prefix** | **str** | Prefix containing agents public IP address. | [optional] [readonly]
**verify_ssl_certificates** | **bool** | Flag indicating if has normal SSL operations or if instead it&#39;s set to ignore SSL errors on browserbot-based tests. | [optional] [readonly]

View File

@ -12,6 +12,7 @@ Name | Type | Description | Notes
**agent_name** | **str** | Name of the agent. | [optional]
**location** | **str** | Location of the agent. | [optional] [readonly]
**country_id** | **str** | 2-digit ISO country code | [optional] [readonly]
**coordinates** | [**Coordinates**](Coordinates.md) | | [optional]
**enabled** | **bool** | Flag indicating if the agent is enabled. | [optional]
**prefix** | **str** | Prefix containing agents public IP address. | [optional] [readonly]
**verify_ssl_certificates** | **bool** | Flag indicating if has normal SSL operations or if instead it&#39;s set to ignore SSL errors on browserbot-based tests. | [optional] [readonly]

View File

@ -12,6 +12,7 @@ Name | Type | Description | Notes
**agent_name** | **str** | Name of the agent. | [optional]
**location** | **str** | Location of the agent. | [optional] [readonly]
**country_id** | **str** | 2-digit ISO country code | [optional] [readonly]
**coordinates** | [**Coordinates**](Coordinates.md) | | [optional]
**enabled** | **bool** | Flag indicating if the agent is enabled. | [optional]
**prefix** | **str** | Prefix containing agents public IP address. | [optional] [readonly]
**verify_ssl_certificates** | **bool** | Flag indicating if has normal SSL operations or if instead it&#39;s set to ignore SSL errors on browserbot-based tests. | [optional] [readonly]

View File

@ -13,6 +13,7 @@ Name | Type | Description | Notes
**agent_name** | **str** | Name of the agent. | [optional]
**location** | **str** | Location of the agent. | [optional] [readonly]
**country_id** | **str** | 2-digit ISO country code | [optional] [readonly]
**coordinates** | [**Coordinates**](Coordinates.md) | | [optional]
**enabled** | **bool** | Flag indicating if the agent is enabled. | [optional]
**prefix** | **str** | Prefix containing agents public IP address. | [optional] [readonly]
**verify_ssl_certificates** | **bool** | Flag indicating if has normal SSL operations or if instead it&#39;s set to ignore SSL errors on browserbot-based tests. | [optional] [readonly]

View File

@ -0,0 +1,31 @@
# Coordinates
Geographic coordinates for agent location.
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**latitude** | **float** | The latitude of the agent location in decimal degrees | [optional] [readonly]
**longitude** | **float** | The longitude of the agent location in decimal degrees | [optional] [readonly]
## Example
```python
from thousandeyes_sdk.agents.models.coordinates import Coordinates
# TODO update the JSON string below
json = "{}"
# create an instance of Coordinates from a JSON string
coordinates_instance = Coordinates.from_json(json)
# print the JSON string representation of the object
print(Coordinates.to_json())
# convert the object into a dict
coordinates_dict = coordinates_instance.to_dict()
# create an instance of Coordinates from a dict
coordinates_from_dict = Coordinates.from_dict(coordinates_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

View File

@ -13,6 +13,7 @@ Name | Type | Description | Notes
**agent_name** | **str** | Name of the agent. | [optional]
**location** | **str** | Location of the agent. | [optional] [readonly]
**country_id** | **str** | 2-digit ISO country code | [optional] [readonly]
**coordinates** | [**Coordinates**](Coordinates.md) | | [optional]
**enabled** | **bool** | Flag indicating if the agent is enabled. | [optional]
**prefix** | **str** | Prefix containing agents public IP address. | [optional] [readonly]
**verify_ssl_certificates** | **bool** | Flag indicating if has normal SSL operations or if instead it&#39;s set to ignore SSL errors on browserbot-based tests. | [optional] [readonly]

View File

@ -12,6 +12,7 @@ Name | Type | Description | Notes
**agent_name** | **str** | Name of the agent. | [optional]
**location** | **str** | Location of the agent. | [optional] [readonly]
**country_id** | **str** | 2-digit ISO country code | [optional] [readonly]
**coordinates** | [**Coordinates**](Coordinates.md) | | [optional]
**enabled** | **bool** | Flag indicating if the agent is enabled. | [optional]
**prefix** | **str** | Prefix containing agents public IP address. | [optional] [readonly]
**verify_ssl_certificates** | **bool** | Flag indicating if has normal SSL operations or if instead it&#39;s set to ignore SSL errors on browserbot-based tests. | [optional] [readonly]

View File

@ -12,6 +12,7 @@ Name | Type | Description | Notes
**agent_name** | **str** | Name of the agent. | [optional]
**location** | **str** | Location of the agent. | [optional] [readonly]
**country_id** | **str** | 2-digit ISO country code | [optional] [readonly]
**coordinates** | [**Coordinates**](Coordinates.md) | | [optional]
**enabled** | **bool** | Flag indicating if the agent is enabled. | [optional]
**prefix** | **str** | Prefix containing agents public IP address. | [optional] [readonly]
**verify_ssl_certificates** | **bool** | Flag indicating if has normal SSL operations or if instead it&#39;s set to ignore SSL errors on browserbot-based tests. | [optional] [readonly]

View File

@ -12,6 +12,7 @@ Name | Type | Description | Notes
**agent_name** | **str** | Name of the agent. | [optional]
**location** | **str** | Location of the agent. | [optional] [readonly]
**country_id** | **str** | 2-digit ISO country code | [optional] [readonly]
**coordinates** | [**Coordinates**](Coordinates.md) | | [optional]
**enabled** | **bool** | Flag indicating if the agent is enabled. | [optional]
**prefix** | **str** | Prefix containing agents public IP address. | [optional] [readonly]
**verify_ssl_certificates** | **bool** | Flag indicating if has normal SSL operations or if instead it&#39;s set to ignore SSL errors on browserbot-based tests. | [optional] [readonly]

View File

@ -12,6 +12,7 @@ Name | Type | Description | Notes
**agent_name** | **str** | Name of the agent. | [optional]
**location** | **str** | Location of the agent. | [optional] [readonly]
**country_id** | **str** | 2-digit ISO country code | [optional] [readonly]
**coordinates** | [**Coordinates**](Coordinates.md) | | [optional]
**enabled** | **bool** | Flag indicating if the agent is enabled. | [optional]
**prefix** | **str** | Prefix containing agents public IP address. | [optional] [readonly]
**verify_ssl_certificates** | **bool** | Flag indicating if has normal SSL operations or if instead it&#39;s set to ignore SSL errors on browserbot-based tests. | [optional] [readonly]

View File

@ -45,6 +45,7 @@ from thousandeyes_sdk.agents.models.cloud_enterprise_agent import CloudEnterpris
from thousandeyes_sdk.agents.models.cloud_enterprise_agent_type import CloudEnterpriseAgentType
from thousandeyes_sdk.agents.models.cloud_enterprise_agents import CloudEnterpriseAgents
from thousandeyes_sdk.agents.models.cluster_member import ClusterMember
from thousandeyes_sdk.agents.models.coordinates import Coordinates
from thousandeyes_sdk.agents.models.enterprise_agent import EnterpriseAgent
from thousandeyes_sdk.agents.models.enterprise_agent_cluster_detail import EnterpriseAgentClusterDetail
from thousandeyes_sdk.agents.models.enterprise_agent_data import EnterpriseAgentData

View File

@ -36,6 +36,7 @@ from thousandeyes_sdk.agents.models.cloud_enterprise_agent import CloudEnterpris
from thousandeyes_sdk.agents.models.cloud_enterprise_agent_type import CloudEnterpriseAgentType
from thousandeyes_sdk.agents.models.cloud_enterprise_agents import CloudEnterpriseAgents
from thousandeyes_sdk.agents.models.cluster_member import ClusterMember
from thousandeyes_sdk.agents.models.coordinates import Coordinates
from thousandeyes_sdk.agents.models.enterprise_agent import EnterpriseAgent
from thousandeyes_sdk.agents.models.enterprise_agent_cluster_detail import EnterpriseAgentClusterDetail
from thousandeyes_sdk.agents.models.enterprise_agent_data import EnterpriseAgentData

View File

@ -19,6 +19,7 @@ import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from thousandeyes_sdk.agents.models.cloud_enterprise_agent_type import CloudEnterpriseAgentType
from thousandeyes_sdk.agents.models.coordinates import Coordinates
from typing import Optional, Set
from typing_extensions import Self
@ -33,11 +34,12 @@ class AgentResponse(BaseModel):
agent_name: Optional[StrictStr] = Field(default=None, description="Name of the agent.", alias="agentName")
location: Optional[StrictStr] = Field(default=None, description="Location of the agent.")
country_id: Optional[StrictStr] = Field(default=None, description="2-digit ISO country code", alias="countryId")
coordinates: Optional[Coordinates] = None
enabled: Optional[StrictBool] = Field(default=None, description="Flag indicating if the agent is enabled.")
prefix: Optional[StrictStr] = Field(default=None, description="Prefix containing agents public IP address.")
verify_ssl_certificates: Optional[StrictBool] = Field(default=None, description="Flag indicating if has normal SSL operations or if instead it's set to ignore SSL errors on browserbot-based tests.", alias="verifySslCertificates")
agent_type: CloudEnterpriseAgentType = Field(alias="agentType")
__properties: ClassVar[List[str]] = ["ipAddresses", "publicIpAddresses", "network", "agentId", "agentName", "location", "countryId", "enabled", "prefix", "verifySslCertificates", "agentType"]
__properties: ClassVar[List[str]] = ["ipAddresses", "publicIpAddresses", "network", "agentId", "agentName", "location", "countryId", "coordinates", "enabled", "prefix", "verifySslCertificates", "agentType"]
model_config = ConfigDict(
populate_by_name=True,
@ -95,6 +97,9 @@ class AgentResponse(BaseModel):
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of coordinates
if self.coordinates:
_dict['coordinates'] = self.coordinates.to_dict()
return _dict
@classmethod
@ -114,6 +119,7 @@ class AgentResponse(BaseModel):
"agentName": obj.get("agentName"),
"location": obj.get("location"),
"countryId": obj.get("countryId"),
"coordinates": Coordinates.from_dict(obj["coordinates"]) if obj.get("coordinates") is not None else None,
"enabled": obj.get("enabled"),
"prefix": obj.get("prefix"),
"verifySslCertificates": obj.get("verifySslCertificates"),

View File

@ -20,6 +20,7 @@ from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr, field_
from typing import Any, ClassVar, Dict, List, Optional
from typing_extensions import Annotated
from thousandeyes_sdk.agents.models.agent_label import AgentLabel
from thousandeyes_sdk.agents.models.coordinates import Coordinates
from thousandeyes_sdk.agents.models.self_links import SelfLinks
from thousandeyes_sdk.agents.models.simple_test import SimpleTest
from typing import Optional, Set
@ -36,6 +37,7 @@ class CloudAgentDetail(BaseModel):
agent_name: Optional[StrictStr] = Field(default=None, description="Name of the agent.", alias="agentName")
location: Optional[StrictStr] = Field(default=None, description="Location of the agent.")
country_id: Optional[StrictStr] = Field(default=None, description="2-digit ISO country code", alias="countryId")
coordinates: Optional[Coordinates] = None
enabled: Optional[StrictBool] = Field(default=None, description="Flag indicating if the agent is enabled.")
prefix: Optional[StrictStr] = Field(default=None, description="Prefix containing agents public IP address.")
verify_ssl_certificates: Optional[StrictBool] = Field(default=None, description="Flag indicating if has normal SSL operations or if instead it's set to ignore SSL errors on browserbot-based tests.", alias="verifySslCertificates")
@ -43,7 +45,7 @@ class CloudAgentDetail(BaseModel):
tests: Optional[List[SimpleTest]] = Field(default=None, description="List of tests. See `/tests` for more information.")
labels: Optional[List[AgentLabel]] = Field(default=None, description="List of labels - see `/labels` for more information.")
links: Optional[SelfLinks] = Field(default=None, alias="_links")
__properties: ClassVar[List[str]] = ["ipAddresses", "publicIpAddresses", "network", "agentId", "agentName", "location", "countryId", "enabled", "prefix", "verifySslCertificates", "agentType", "tests", "labels", "_links"]
__properties: ClassVar[List[str]] = ["ipAddresses", "publicIpAddresses", "network", "agentId", "agentName", "location", "countryId", "coordinates", "enabled", "prefix", "verifySslCertificates", "agentType", "tests", "labels", "_links"]
@field_validator('agent_type')
def agent_type_validate_regular_expression(cls, value):
@ -110,6 +112,9 @@ class CloudAgentDetail(BaseModel):
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of coordinates
if self.coordinates:
_dict['coordinates'] = self.coordinates.to_dict()
# override the default output from pydantic by calling `to_dict()` of each item in tests (list)
_items = []
if self.tests:
@ -146,6 +151,7 @@ class CloudAgentDetail(BaseModel):
"agentName": obj.get("agentName"),
"location": obj.get("location"),
"countryId": obj.get("countryId"),
"coordinates": Coordinates.from_dict(obj["coordinates"]) if obj.get("coordinates") is not None else None,
"enabled": obj.get("enabled"),
"prefix": obj.get("prefix"),
"verifySslCertificates": obj.get("verifySslCertificates"),

View File

@ -0,0 +1,93 @@
# coding: utf-8
"""
Agents API
## Overview Manage Cloud and Enterprise Agents available to your account in ThousandEyes.
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, StrictFloat, StrictInt
from typing import Any, ClassVar, Dict, List, Optional, Union
from typing import Optional, Set
from typing_extensions import Self
class Coordinates(BaseModel):
"""
Geographic coordinates for agent location.
""" # noqa: E501
latitude: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="The latitude of the agent location in decimal degrees")
longitude: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="The longitude of the agent location in decimal degrees")
__properties: ClassVar[List[str]] = ["latitude", "longitude"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
extra="allow",
)
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 self.model_dump_json(by_alias=True, exclude_unset=True, exclude_none=True)
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Coordinates 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.
* OpenAPI `readOnly` fields are excluded.
* OpenAPI `readOnly` fields are excluded.
"""
excluded_fields: Set[str] = set([
"latitude",
"longitude",
])
_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 Coordinates from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"latitude": obj.get("latitude"),
"longitude": obj.get("longitude")
})
return _obj

View File

@ -22,6 +22,7 @@ from typing import Any, ClassVar, Dict, List, Optional
from thousandeyes_sdk.agents.models.account_group import AccountGroup
from thousandeyes_sdk.agents.models.cloud_enterprise_agent_type import CloudEnterpriseAgentType
from thousandeyes_sdk.agents.models.cluster_member import ClusterMember
from thousandeyes_sdk.agents.models.coordinates import Coordinates
from thousandeyes_sdk.agents.models.enterprise_agent_ipv6_policy import EnterpriseAgentIpv6Policy
from thousandeyes_sdk.agents.models.enterprise_agent_state import EnterpriseAgentState
from thousandeyes_sdk.agents.models.error_detail import ErrorDetail
@ -42,6 +43,7 @@ class EnterpriseAgent(BaseModel):
agent_name: Optional[StrictStr] = Field(default=None, description="Name of the agent.", alias="agentName")
location: Optional[StrictStr] = Field(default=None, description="Location of the agent.")
country_id: Optional[StrictStr] = Field(default=None, description="2-digit ISO country code", alias="countryId")
coordinates: Optional[Coordinates] = None
enabled: Optional[StrictBool] = Field(default=None, description="Flag indicating if the agent is enabled.")
prefix: Optional[StrictStr] = Field(default=None, description="Prefix containing agents public IP address.")
verify_ssl_certificates: Optional[StrictBool] = Field(default=None, description="Flag indicating if has normal SSL operations or if instead it's set to ignore SSL errors on browserbot-based tests.", alias="verifySslCertificates")
@ -60,7 +62,7 @@ class EnterpriseAgent(BaseModel):
target_for_tests: Optional[StrictStr] = Field(default=None, description="Test target IP address.", alias="targetForTests")
local_resolution_prefixes: Optional[List[StrictStr]] = Field(default=None, description="To perform rDNS lookups for public IP ranges, this field represents the public IP ranges. The range must be in CIDR notation; for example, 10.1.1.0/24. Maximum of 5 prefixes allowed (Enterprise Agents and Enterprise Agent clusters only).", alias="localResolutionPrefixes")
interface_ip_mapping: Optional[List[InterfaceIpMapping]] = Field(default=None, alias="interfaceIpMapping")
__properties: ClassVar[List[str]] = ["agentType", "ipAddresses", "publicIpAddresses", "network", "agentId", "agentName", "location", "countryId", "enabled", "prefix", "verifySslCertificates", "testIds", "tests", "clusterMembers", "utilization", "accountGroups", "ipv6Policy", "errorDetails", "hostname", "lastSeen", "agentState", "keepBrowserCache", "createdDate", "targetForTests", "localResolutionPrefixes", "interfaceIpMapping"]
__properties: ClassVar[List[str]] = ["agentType", "ipAddresses", "publicIpAddresses", "network", "agentId", "agentName", "location", "countryId", "coordinates", "enabled", "prefix", "verifySslCertificates", "testIds", "tests", "clusterMembers", "utilization", "accountGroups", "ipv6Policy", "errorDetails", "hostname", "lastSeen", "agentState", "keepBrowserCache", "createdDate", "targetForTests", "localResolutionPrefixes", "interfaceIpMapping"]
model_config = ConfigDict(
populate_by_name=True,
@ -134,6 +136,9 @@ class EnterpriseAgent(BaseModel):
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of coordinates
if self.coordinates:
_dict['coordinates'] = self.coordinates.to_dict()
# override the default output from pydantic by calling `to_dict()` of each item in tests (list)
_items = []
if self.tests:
@ -189,6 +194,7 @@ class EnterpriseAgent(BaseModel):
"agentName": obj.get("agentName"),
"location": obj.get("location"),
"countryId": obj.get("countryId"),
"coordinates": Coordinates.from_dict(obj["coordinates"]) if obj.get("coordinates") is not None else None,
"enabled": obj.get("enabled"),
"prefix": obj.get("prefix"),
"verifySslCertificates": obj.get("verifySslCertificates"),

View File

@ -23,6 +23,7 @@ from typing_extensions import Annotated
from thousandeyes_sdk.agents.models.account_group import AccountGroup
from thousandeyes_sdk.agents.models.agent_label import AgentLabel
from thousandeyes_sdk.agents.models.cluster_member import ClusterMember
from thousandeyes_sdk.agents.models.coordinates import Coordinates
from thousandeyes_sdk.agents.models.enterprise_agent_ipv6_policy import EnterpriseAgentIpv6Policy
from thousandeyes_sdk.agents.models.enterprise_agent_state import EnterpriseAgentState
from thousandeyes_sdk.agents.models.error_detail import ErrorDetail
@ -44,6 +45,7 @@ class EnterpriseAgentClusterDetail(BaseModel):
agent_name: Optional[StrictStr] = Field(default=None, description="Name of the agent.", alias="agentName")
location: Optional[StrictStr] = Field(default=None, description="Location of the agent.")
country_id: Optional[StrictStr] = Field(default=None, description="2-digit ISO country code", alias="countryId")
coordinates: Optional[Coordinates] = None
enabled: Optional[StrictBool] = Field(default=None, description="Flag indicating if the agent is enabled.")
prefix: Optional[StrictStr] = Field(default=None, description="Prefix containing agents public IP address.")
verify_ssl_certificates: Optional[StrictBool] = Field(default=None, description="Flag indicating if has normal SSL operations or if instead it's set to ignore SSL errors on browserbot-based tests.", alias="verifySslCertificates")
@ -66,7 +68,7 @@ class EnterpriseAgentClusterDetail(BaseModel):
labels: Optional[List[AgentLabel]] = Field(default=None, description="List of labels. See `/labels` for more information.")
agent_type: Annotated[str, Field(strict=True)] = Field(description="Enterprise Cluster agent type.", alias="agentType")
links: Optional[SelfLinks] = Field(default=None, alias="_links")
__properties: ClassVar[List[str]] = ["ipAddresses", "publicIpAddresses", "network", "agentId", "agentName", "location", "countryId", "enabled", "prefix", "verifySslCertificates", "testIds", "tests", "clusterMembers", "utilization", "accountGroups", "ipv6Policy", "errorDetails", "hostname", "lastSeen", "agentState", "keepBrowserCache", "createdDate", "targetForTests", "localResolutionPrefixes", "interfaceIpMapping", "notificationRules", "labels", "agentType", "_links"]
__properties: ClassVar[List[str]] = ["ipAddresses", "publicIpAddresses", "network", "agentId", "agentName", "location", "countryId", "coordinates", "enabled", "prefix", "verifySslCertificates", "testIds", "tests", "clusterMembers", "utilization", "accountGroups", "ipv6Policy", "errorDetails", "hostname", "lastSeen", "agentState", "keepBrowserCache", "createdDate", "targetForTests", "localResolutionPrefixes", "interfaceIpMapping", "notificationRules", "labels", "agentType", "_links"]
@field_validator('agent_type')
def agent_type_validate_regular_expression(cls, value):
@ -149,6 +151,9 @@ class EnterpriseAgentClusterDetail(BaseModel):
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of coordinates
if self.coordinates:
_dict['coordinates'] = self.coordinates.to_dict()
# override the default output from pydantic by calling `to_dict()` of each item in tests (list)
_items = []
if self.tests:
@ -220,6 +225,7 @@ class EnterpriseAgentClusterDetail(BaseModel):
"agentName": obj.get("agentName"),
"location": obj.get("location"),
"countryId": obj.get("countryId"),
"coordinates": Coordinates.from_dict(obj["coordinates"]) if obj.get("coordinates") is not None else None,
"enabled": obj.get("enabled"),
"prefix": obj.get("prefix"),
"verifySslCertificates": obj.get("verifySslCertificates"),

View File

@ -23,6 +23,7 @@ from typing_extensions import Annotated
from thousandeyes_sdk.agents.models.account_group import AccountGroup
from thousandeyes_sdk.agents.models.agent_label import AgentLabel
from thousandeyes_sdk.agents.models.cluster_member import ClusterMember
from thousandeyes_sdk.agents.models.coordinates import Coordinates
from thousandeyes_sdk.agents.models.enterprise_agent_ipv6_policy import EnterpriseAgentIpv6Policy
from thousandeyes_sdk.agents.models.enterprise_agent_state import EnterpriseAgentState
from thousandeyes_sdk.agents.models.error_detail import ErrorDetail
@ -44,6 +45,7 @@ class EnterpriseAgentDetail(BaseModel):
agent_name: Optional[StrictStr] = Field(default=None, description="Name of the agent.", alias="agentName")
location: Optional[StrictStr] = Field(default=None, description="Location of the agent.")
country_id: Optional[StrictStr] = Field(default=None, description="2-digit ISO country code", alias="countryId")
coordinates: Optional[Coordinates] = None
enabled: Optional[StrictBool] = Field(default=None, description="Flag indicating if the agent is enabled.")
prefix: Optional[StrictStr] = Field(default=None, description="Prefix containing agents public IP address.")
verify_ssl_certificates: Optional[StrictBool] = Field(default=None, description="Flag indicating if has normal SSL operations or if instead it's set to ignore SSL errors on browserbot-based tests.", alias="verifySslCertificates")
@ -66,7 +68,7 @@ class EnterpriseAgentDetail(BaseModel):
labels: Optional[List[AgentLabel]] = Field(default=None, description="List of labels. See `/labels` for more information.")
agent_type: Annotated[str, Field(strict=True)] = Field(description="Enterprise agent type.", alias="agentType")
links: Optional[SelfLinks] = Field(default=None, alias="_links")
__properties: ClassVar[List[str]] = ["ipAddresses", "publicIpAddresses", "network", "agentId", "agentName", "location", "countryId", "enabled", "prefix", "verifySslCertificates", "testIds", "tests", "clusterMembers", "utilization", "accountGroups", "ipv6Policy", "errorDetails", "hostname", "lastSeen", "agentState", "keepBrowserCache", "createdDate", "targetForTests", "localResolutionPrefixes", "interfaceIpMapping", "notificationRules", "labels", "agentType", "_links"]
__properties: ClassVar[List[str]] = ["ipAddresses", "publicIpAddresses", "network", "agentId", "agentName", "location", "countryId", "coordinates", "enabled", "prefix", "verifySslCertificates", "testIds", "tests", "clusterMembers", "utilization", "accountGroups", "ipv6Policy", "errorDetails", "hostname", "lastSeen", "agentState", "keepBrowserCache", "createdDate", "targetForTests", "localResolutionPrefixes", "interfaceIpMapping", "notificationRules", "labels", "agentType", "_links"]
@field_validator('agent_type')
def agent_type_validate_regular_expression(cls, value):
@ -149,6 +151,9 @@ class EnterpriseAgentDetail(BaseModel):
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of coordinates
if self.coordinates:
_dict['coordinates'] = self.coordinates.to_dict()
# override the default output from pydantic by calling `to_dict()` of each item in tests (list)
_items = []
if self.tests:
@ -220,6 +225,7 @@ class EnterpriseAgentDetail(BaseModel):
"agentName": obj.get("agentName"),
"location": obj.get("location"),
"countryId": obj.get("countryId"),
"coordinates": Coordinates.from_dict(obj["coordinates"]) if obj.get("coordinates") is not None else None,
"enabled": obj.get("enabled"),
"prefix": obj.get("prefix"),
"verifySslCertificates": obj.get("verifySslCertificates"),

View File

@ -18,6 +18,7 @@ import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from thousandeyes_sdk.agents.models.coordinates import Coordinates
from typing import Optional, Set
from typing_extensions import Self
@ -32,10 +33,11 @@ class SimpleAgent(BaseModel):
agent_name: Optional[StrictStr] = Field(default=None, description="Name of the agent.", alias="agentName")
location: Optional[StrictStr] = Field(default=None, description="Location of the agent.")
country_id: Optional[StrictStr] = Field(default=None, description="2-digit ISO country code", alias="countryId")
coordinates: Optional[Coordinates] = None
enabled: Optional[StrictBool] = Field(default=None, description="Flag indicating if the agent is enabled.")
prefix: Optional[StrictStr] = Field(default=None, description="Prefix containing agents public IP address.")
verify_ssl_certificates: Optional[StrictBool] = Field(default=None, description="Flag indicating if has normal SSL operations or if instead it's set to ignore SSL errors on browserbot-based tests.", alias="verifySslCertificates")
__properties: ClassVar[List[str]] = ["ipAddresses", "publicIpAddresses", "network", "agentId", "agentName", "location", "countryId", "enabled", "prefix", "verifySslCertificates"]
__properties: ClassVar[List[str]] = ["ipAddresses", "publicIpAddresses", "network", "agentId", "agentName", "location", "countryId", "coordinates", "enabled", "prefix", "verifySslCertificates"]
model_config = ConfigDict(
populate_by_name=True,
@ -93,6 +95,9 @@ class SimpleAgent(BaseModel):
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of coordinates
if self.coordinates:
_dict['coordinates'] = self.coordinates.to_dict()
return _dict
@classmethod
@ -112,6 +117,7 @@ class SimpleAgent(BaseModel):
"agentName": obj.get("agentName"),
"location": obj.get("location"),
"countryId": obj.get("countryId"),
"coordinates": Coordinates.from_dict(obj["coordinates"]) if obj.get("coordinates") is not None else None,
"enabled": obj.get("enabled"),
"prefix": obj.get("prefix"),
"verifySslCertificates": obj.get("verifySslCertificates")

View File

@ -21,6 +21,7 @@ from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, Strict
from typing import Any, ClassVar, Dict, List, Optional
from thousandeyes_sdk.agents.models.account_group import AccountGroup
from thousandeyes_sdk.agents.models.cluster_member import ClusterMember
from thousandeyes_sdk.agents.models.coordinates import Coordinates
from thousandeyes_sdk.agents.models.enterprise_agent_ipv6_policy import EnterpriseAgentIpv6Policy
from thousandeyes_sdk.agents.models.enterprise_agent_state import EnterpriseAgentState
from thousandeyes_sdk.agents.models.error_detail import ErrorDetail
@ -40,6 +41,7 @@ class SimpleEnterpriseAgent(BaseModel):
agent_name: Optional[StrictStr] = Field(default=None, description="Name of the agent.", alias="agentName")
location: Optional[StrictStr] = Field(default=None, description="Location of the agent.")
country_id: Optional[StrictStr] = Field(default=None, description="2-digit ISO country code", alias="countryId")
coordinates: Optional[Coordinates] = None
enabled: Optional[StrictBool] = Field(default=None, description="Flag indicating if the agent is enabled.")
prefix: Optional[StrictStr] = Field(default=None, description="Prefix containing agents public IP address.")
verify_ssl_certificates: Optional[StrictBool] = Field(default=None, description="Flag indicating if has normal SSL operations or if instead it's set to ignore SSL errors on browserbot-based tests.", alias="verifySslCertificates")
@ -58,7 +60,7 @@ class SimpleEnterpriseAgent(BaseModel):
target_for_tests: Optional[StrictStr] = Field(default=None, description="Test target IP address.", alias="targetForTests")
local_resolution_prefixes: Optional[List[StrictStr]] = Field(default=None, description="To perform rDNS lookups for public IP ranges, this field represents the public IP ranges. The range must be in CIDR notation; for example, 10.1.1.0/24. Maximum of 5 prefixes allowed (Enterprise Agents and Enterprise Agent clusters only).", alias="localResolutionPrefixes")
interface_ip_mapping: Optional[List[InterfaceIpMapping]] = Field(default=None, alias="interfaceIpMapping")
__properties: ClassVar[List[str]] = ["ipAddresses", "publicIpAddresses", "network", "agentId", "agentName", "location", "countryId", "enabled", "prefix", "verifySslCertificates", "testIds", "tests", "clusterMembers", "utilization", "accountGroups", "ipv6Policy", "errorDetails", "hostname", "lastSeen", "agentState", "keepBrowserCache", "createdDate", "targetForTests", "localResolutionPrefixes", "interfaceIpMapping"]
__properties: ClassVar[List[str]] = ["ipAddresses", "publicIpAddresses", "network", "agentId", "agentName", "location", "countryId", "coordinates", "enabled", "prefix", "verifySslCertificates", "testIds", "tests", "clusterMembers", "utilization", "accountGroups", "ipv6Policy", "errorDetails", "hostname", "lastSeen", "agentState", "keepBrowserCache", "createdDate", "targetForTests", "localResolutionPrefixes", "interfaceIpMapping"]
model_config = ConfigDict(
populate_by_name=True,
@ -132,6 +134,9 @@ class SimpleEnterpriseAgent(BaseModel):
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of coordinates
if self.coordinates:
_dict['coordinates'] = self.coordinates.to_dict()
# override the default output from pydantic by calling `to_dict()` of each item in tests (list)
_items = []
if self.tests:
@ -186,6 +191,7 @@ class SimpleEnterpriseAgent(BaseModel):
"agentName": obj.get("agentName"),
"location": obj.get("location"),
"countryId": obj.get("countryId"),
"coordinates": Coordinates.from_dict(obj["coordinates"]) if obj.get("coordinates") is not None else None,
"enabled": obj.get("enabled"),
"prefix": obj.get("prefix"),
"verifySslCertificates": obj.get("verifySslCertificates"),

View File

@ -99,6 +99,10 @@ class TestCloudAndEnterpriseAgentNotificationRulesApi(unittest.TestCase):
"agentType" : "enterprise-cluster",
"publicIpAddresses" : [ "192.168.1.78", "f9b2:3a21:f25c:d300:03f4:586d:f8d6:4e1c" ],
"prefix" : "99.128.0.0/11",
"coordinates" : {
"latitude" : 37.77493,
"longitude" : -122.41942
},
"agentName" : "thousandeyes-stg-va-254",
"ipAddresses" : [ "99.139.65.220", "9bbd:8a0a:a257:5876:288b:6cb2:3f36:64ce" ],
"location" : "San Francisco Bay Area",
@ -111,6 +115,10 @@ class TestCloudAndEnterpriseAgentNotificationRulesApi(unittest.TestCase):
"agentType" : "enterprise-cluster",
"publicIpAddresses" : [ "192.168.1.78", "f9b2:3a21:f25c:d300:03f4:586d:f8d6:4e1c" ],
"prefix" : "99.128.0.0/11",
"coordinates" : {
"latitude" : 37.77493,
"longitude" : -122.41942
},
"agentName" : "thousandeyes-stg-va-254",
"ipAddresses" : [ "99.139.65.220", "9bbd:8a0a:a257:5876:288b:6cb2:3f36:64ce" ],
"location" : "San Francisco Bay Area",

View File

@ -52,6 +52,10 @@ class TestCloudAndEnterpriseAgentsApi(unittest.TestCase):
}
},
"prefix" : "99.128.0.0/11",
"coordinates" : {
"latitude" : 37.77493,
"longitude" : -122.41942
},
"agentName" : "thousandeyes-stg-va-254",
"countryId" : "US",
"enabled" : true,
@ -158,6 +162,10 @@ class TestCloudAndEnterpriseAgentsApi(unittest.TestCase):
"agentType" : "enterprise-cluster",
"publicIpAddresses" : [ "192.168.1.78", "f9b2:3a21:f25c:d300:03f4:586d:f8d6:4e1c" ],
"prefix" : "99.128.0.0/11",
"coordinates" : {
"latitude" : 37.77493,
"longitude" : -122.41942
},
"agentName" : "thousandeyes-stg-va-254",
"ipAddresses" : [ "99.139.65.220", "9bbd:8a0a:a257:5876:288b:6cb2:3f36:64ce" ],
"location" : "San Francisco Bay Area",
@ -170,6 +178,10 @@ class TestCloudAndEnterpriseAgentsApi(unittest.TestCase):
"agentType" : "enterprise-cluster",
"publicIpAddresses" : [ "192.168.1.78", "f9b2:3a21:f25c:d300:03f4:586d:f8d6:4e1c" ],
"prefix" : "99.128.0.0/11",
"coordinates" : {
"latitude" : 37.77493,
"longitude" : -122.41942
},
"agentName" : "thousandeyes-stg-va-254",
"ipAddresses" : [ "99.139.65.220", "9bbd:8a0a:a257:5876:288b:6cb2:3f36:64ce" ],
"location" : "San Francisco Bay Area",
@ -219,6 +231,10 @@ class TestCloudAndEnterpriseAgentsApi(unittest.TestCase):
}
},
"prefix" : "99.128.0.0/11",
"coordinates" : {
"latitude" : 37.77493,
"longitude" : -122.41942
},
"agentName" : "thousandeyes-stg-va-254",
"countryId" : "US",
"enabled" : true,

View File

@ -56,6 +56,10 @@ class TestEnterpriseAgentClusterApi(unittest.TestCase):
}
},
"prefix" : "99.128.0.0/11",
"coordinates" : {
"latitude" : 37.77493,
"longitude" : -122.41942
},
"agentName" : "thousandeyes-stg-va-254",
"countryId" : "US",
"enabled" : true,
@ -170,6 +174,10 @@ class TestEnterpriseAgentClusterApi(unittest.TestCase):
"agentType" : "enterprise-cluster",
"publicIpAddresses" : [ "192.168.1.78", "f9b2:3a21:f25c:d300:03f4:586d:f8d6:4e1c" ],
"prefix" : "99.128.0.0/11",
"coordinates" : {
"latitude" : 37.77493,
"longitude" : -122.41942
},
"agentName" : "thousandeyes-stg-va-254",
"ipAddresses" : [ "99.139.65.220", "9bbd:8a0a:a257:5876:288b:6cb2:3f36:64ce" ],
"location" : "San Francisco Bay Area",
@ -182,6 +190,10 @@ class TestEnterpriseAgentClusterApi(unittest.TestCase):
"agentType" : "enterprise-cluster",
"publicIpAddresses" : [ "192.168.1.78", "f9b2:3a21:f25c:d300:03f4:586d:f8d6:4e1c" ],
"prefix" : "99.128.0.0/11",
"coordinates" : {
"latitude" : 37.77493,
"longitude" : -122.41942
},
"agentName" : "thousandeyes-stg-va-254",
"ipAddresses" : [ "99.139.65.220", "9bbd:8a0a:a257:5876:288b:6cb2:3f36:64ce" ],
"location" : "San Francisco Bay Area",

View File

@ -56,6 +56,10 @@ class TestTestsAssignmentOnAgentsApi(unittest.TestCase):
}
},
"prefix" : "99.128.0.0/11",
"coordinates" : {
"latitude" : 37.77493,
"longitude" : -122.41942
},
"agentName" : "thousandeyes-stg-va-254",
"countryId" : "US",
"enabled" : true,
@ -168,6 +172,10 @@ class TestTestsAssignmentOnAgentsApi(unittest.TestCase):
}
},
"prefix" : "99.128.0.0/11",
"coordinates" : {
"latitude" : 37.77493,
"longitude" : -122.41942
},
"agentName" : "thousandeyes-stg-va-254",
"countryId" : "US",
"enabled" : true,
@ -280,6 +288,10 @@ class TestTestsAssignmentOnAgentsApi(unittest.TestCase):
}
},
"prefix" : "99.128.0.0/11",
"coordinates" : {
"latitude" : 37.77493,
"longitude" : -122.41942
},
"agentName" : "thousandeyes-stg-va-254",
"countryId" : "US",
"enabled" : true,

View File

@ -4,6 +4,7 @@ README.md
docs/Alert.md
docs/AlertDetail.md
docs/AlertDirection.md
docs/AlertEmbedded.md
docs/AlertGroupType.md
docs/AlertLinks.md
docs/AlertMeta.md
@ -22,6 +23,7 @@ docs/AlertTestType.md
docs/AlertType.md
docs/Alerts.md
docs/AlertsApi.md
docs/Asn.md
docs/BaseAlert.md
docs/BaseAlertSuppressionWindow.md
docs/BaseRule.md
@ -73,6 +75,7 @@ src/thousandeyes_sdk/alerts/models/__init__.py
src/thousandeyes_sdk/alerts/models/alert.py
src/thousandeyes_sdk/alerts/models/alert_detail.py
src/thousandeyes_sdk/alerts/models/alert_direction.py
src/thousandeyes_sdk/alerts/models/alert_embedded.py
src/thousandeyes_sdk/alerts/models/alert_group_type.py
src/thousandeyes_sdk/alerts/models/alert_links.py
src/thousandeyes_sdk/alerts/models/alert_meta.py
@ -88,6 +91,7 @@ src/thousandeyes_sdk/alerts/models/alert_suppression_windows.py
src/thousandeyes_sdk/alerts/models/alert_test_type.py
src/thousandeyes_sdk/alerts/models/alert_type.py
src/thousandeyes_sdk/alerts/models/alerts.py
src/thousandeyes_sdk/alerts/models/asn.py
src/thousandeyes_sdk/alerts/models/base_alert.py
src/thousandeyes_sdk/alerts/models/base_alert_suppression_window.py
src/thousandeyes_sdk/alerts/models/base_rule.py

View File

@ -12,7 +12,7 @@ For more information about the alerts, see [Alerts](https://docs.thousandeyes.co
This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
- API version: 7.0.58
- API version: 7.0.68
- Generator version: 7.6.0
- Build package: com.thousandeyes.api.codegen.ThousandeyesPythonGenerator
@ -123,6 +123,7 @@ Class | Method | HTTP request | Description
- [Alert](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-alerts/docs/Alert.md)
- [AlertDetail](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-alerts/docs/AlertDetail.md)
- [AlertDirection](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-alerts/docs/AlertDirection.md)
- [AlertEmbedded](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-alerts/docs/AlertEmbedded.md)
- [AlertGroupType](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-alerts/docs/AlertGroupType.md)
- [AlertLinks](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-alerts/docs/AlertLinks.md)
- [AlertMeta](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-alerts/docs/AlertMeta.md)
@ -138,6 +139,7 @@ Class | Method | HTTP request | Description
- [AlertTestType](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-alerts/docs/AlertTestType.md)
- [AlertType](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-alerts/docs/AlertType.md)
- [Alerts](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-alerts/docs/Alerts.md)
- [Asn](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-alerts/docs/Asn.md)
- [BaseAlert](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-alerts/docs/BaseAlert.md)
- [BaseAlertSuppressionWindow](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-alerts/docs/BaseAlertSuppressionWindow.md)
- [BaseRule](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-alerts/docs/BaseRule.md)

View File

@ -19,6 +19,7 @@ Name | Type | Description | Notes
**alert_state** | [**State**](State.md) | | [optional]
**alert_severity** | [**Severity**](Severity.md) | | [optional]
**details** | [**List[AlertMetricDetail]**](AlertMetricDetail.md) | | [optional]
**embedded** | [**AlertEmbedded**](AlertEmbedded.md) | | [optional]
## Example

View File

@ -0,0 +1,30 @@
# AlertEmbedded
Container for embedded resources in alert responses (HATEOAS).
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**asn** | [**Asn**](Asn.md) | | [optional]
## Example
```python
from thousandeyes_sdk.alerts.models.alert_embedded import AlertEmbedded
# TODO update the JSON string below
json = "{}"
# create an instance of AlertEmbedded from a JSON string
alert_embedded_instance = AlertEmbedded.from_json(json)
# print the JSON string representation of the object
print(AlertEmbedded.to_json())
# convert the object into a dict
alert_embedded_dict = alert_embedded_instance.to_dict()
# create an instance of AlertEmbedded from a dict
alert_embedded_from_dict = AlertEmbedded.from_dict(alert_embedded_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

View File

@ -0,0 +1,32 @@
# Asn
Autonomous System Number (ASN) information for network outage alerts.
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**id** | **str** | ASN identifier. | [optional]
**name** | **str** | Autonomous system name. | [optional]
**type** | **str** | Resource type. | [optional]
## Example
```python
from thousandeyes_sdk.alerts.models.asn import Asn
# TODO update the JSON string below
json = "{}"
# create an instance of Asn from a JSON string
asn_instance = Asn.from_json(json)
# print the JSON string representation of the object
print(Asn.to_json())
# convert the object into a dict
asn_dict = asn_instance.to_dict()
# create an instance of Asn from a dict
asn_from_dict = Asn.from_dict(asn_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

View File

@ -18,7 +18,7 @@ Name | Type | Description | Notes
**minimum_sources_pct** | **int** | The minimum percentage of all assigned agents or monitors that must meet the specified criteria to trigger the alert. | [optional]
**rounds_violating_mode** | [**AlertRoundsViolationMode**](AlertRoundsViolationMode.md) | | [optional]
**rounds_violating_out_of** | **int** | Specifies the divisor (y value) in the “X of Y times” condition. |
**rounds_violating_required** | **int** | Specifies the numerator (x value) in the “X of Y times” condition. |
**rounds_violating_required** | **int** | Specifies the numerator (x value) in the “X of Y times” condition. | [optional]
**include_covered_prefixes** | **bool** | Set true to include covered prefixes in the BGP alert rule. Only applicable to BGP alert rules. | [optional]
**sensitivity_level** | [**SensitivityLevel**](SensitivityLevel.md) | | [optional]
**severity** | [**Severity**](Severity.md) | | [optional]

View File

@ -18,7 +18,7 @@ Name | Type | Description | Notes
**minimum_sources_pct** | **int** | The minimum percentage of all assigned agents or monitors that must meet the specified criteria to trigger the alert. | [optional]
**rounds_violating_mode** | [**AlertRoundsViolationMode**](AlertRoundsViolationMode.md) | | [optional]
**rounds_violating_out_of** | **int** | Specifies the divisor (y value) in the “X of Y times” condition. |
**rounds_violating_required** | **int** | Specifies the numerator (x value) in the “X of Y times” condition. |
**rounds_violating_required** | **int** | Specifies the numerator (x value) in the “X of Y times” condition. | [optional]
**include_covered_prefixes** | **bool** | Set true to include covered prefixes in the BGP alert rule. Only applicable to BGP alert rules. | [optional]
**sensitivity_level** | [**SensitivityLevel**](SensitivityLevel.md) | | [optional]
**severity** | [**Severity**](Severity.md) | | [optional]

View File

@ -18,7 +18,7 @@ Name | Type | Description | Notes
**minimum_sources_pct** | **int** | The minimum percentage of all assigned agents or monitors that must meet the specified criteria to trigger the alert. | [optional]
**rounds_violating_mode** | [**AlertRoundsViolationMode**](AlertRoundsViolationMode.md) | | [optional]
**rounds_violating_out_of** | **int** | Specifies the divisor (y value) in the “X of Y times” condition. |
**rounds_violating_required** | **int** | Specifies the numerator (x value) in the “X of Y times” condition. |
**rounds_violating_required** | **int** | Specifies the numerator (x value) in the “X of Y times” condition. | [optional]
**include_covered_prefixes** | **bool** | Set true to include covered prefixes in the BGP alert rule. Only applicable to BGP alert rules. | [optional]
**sensitivity_level** | [**SensitivityLevel**](SensitivityLevel.md) | | [optional]
**severity** | [**Severity**](Severity.md) | | [optional]

View File

@ -18,7 +18,7 @@ Name | Type | Description | Notes
**minimum_sources_pct** | **int** | The minimum percentage of all assigned agents or monitors that must meet the specified criteria to trigger the alert. | [optional]
**rounds_violating_mode** | [**AlertRoundsViolationMode**](AlertRoundsViolationMode.md) | | [optional]
**rounds_violating_out_of** | **int** | Specifies the divisor (y value) in the “X of Y times” condition. |
**rounds_violating_required** | **int** | Specifies the numerator (x value) in the “X of Y times” condition. |
**rounds_violating_required** | **int** | Specifies the numerator (x value) in the “X of Y times” condition. | [optional]
**include_covered_prefixes** | **bool** | Set true to include covered prefixes in the BGP alert rule. Only applicable to BGP alert rules. | [optional]
**sensitivity_level** | [**SensitivityLevel**](SensitivityLevel.md) | | [optional]
**severity** | [**Severity**](Severity.md) | | [optional]

View File

@ -23,6 +23,7 @@ from thousandeyes_sdk.alerts.api.alerts_api import AlertsApi
from thousandeyes_sdk.alerts.models.alert import Alert
from thousandeyes_sdk.alerts.models.alert_detail import AlertDetail
from thousandeyes_sdk.alerts.models.alert_direction import AlertDirection
from thousandeyes_sdk.alerts.models.alert_embedded import AlertEmbedded
from thousandeyes_sdk.alerts.models.alert_group_type import AlertGroupType
from thousandeyes_sdk.alerts.models.alert_links import AlertLinks
from thousandeyes_sdk.alerts.models.alert_meta import AlertMeta
@ -38,6 +39,7 @@ from thousandeyes_sdk.alerts.models.alert_suppression_windows import AlertSuppre
from thousandeyes_sdk.alerts.models.alert_test_type import AlertTestType
from thousandeyes_sdk.alerts.models.alert_type import AlertType
from thousandeyes_sdk.alerts.models.alerts import Alerts
from thousandeyes_sdk.alerts.models.asn import Asn
from thousandeyes_sdk.alerts.models.base_alert import BaseAlert
from thousandeyes_sdk.alerts.models.base_alert_suppression_window import BaseAlertSuppressionWindow
from thousandeyes_sdk.alerts.models.base_rule import BaseRule

View File

@ -16,6 +16,7 @@
from thousandeyes_sdk.alerts.models.alert import Alert
from thousandeyes_sdk.alerts.models.alert_detail import AlertDetail
from thousandeyes_sdk.alerts.models.alert_direction import AlertDirection
from thousandeyes_sdk.alerts.models.alert_embedded import AlertEmbedded
from thousandeyes_sdk.alerts.models.alert_group_type import AlertGroupType
from thousandeyes_sdk.alerts.models.alert_links import AlertLinks
from thousandeyes_sdk.alerts.models.alert_meta import AlertMeta
@ -31,6 +32,7 @@ from thousandeyes_sdk.alerts.models.alert_suppression_windows import AlertSuppre
from thousandeyes_sdk.alerts.models.alert_test_type import AlertTestType
from thousandeyes_sdk.alerts.models.alert_type import AlertType
from thousandeyes_sdk.alerts.models.alerts import Alerts
from thousandeyes_sdk.alerts.models.asn import Asn
from thousandeyes_sdk.alerts.models.base_alert import BaseAlert
from thousandeyes_sdk.alerts.models.base_alert_suppression_window import BaseAlertSuppressionWindow
from thousandeyes_sdk.alerts.models.base_rule import BaseRule

View File

@ -19,6 +19,7 @@ import json
from datetime import datetime
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from thousandeyes_sdk.alerts.models.alert_embedded import AlertEmbedded
from thousandeyes_sdk.alerts.models.alert_links import AlertLinks
from thousandeyes_sdk.alerts.models.alert_meta import AlertMeta
from thousandeyes_sdk.alerts.models.alert_metric_detail import AlertMetricDetail
@ -46,7 +47,8 @@ class AlertDetail(BaseModel):
alert_state: Optional[State] = Field(default=None, alias="alertState")
alert_severity: Optional[Severity] = Field(default=None, alias="alertSeverity")
details: Optional[List[AlertMetricDetail]] = None
__properties: ClassVar[List[str]] = ["id", "alertType", "startDate", "endDate", "violationCount", "duration", "suppressed", "meta", "_links", "state", "severity", "alertState", "alertSeverity", "details"]
embedded: Optional[AlertEmbedded] = Field(default=None, alias="_embedded")
__properties: ClassVar[List[str]] = ["id", "alertType", "startDate", "endDate", "violationCount", "duration", "suppressed", "meta", "_links", "state", "severity", "alertState", "alertSeverity", "details", "_embedded"]
model_config = ConfigDict(
populate_by_name=True,
@ -107,6 +109,9 @@ class AlertDetail(BaseModel):
if _item:
_items.append(_item.to_dict())
_dict['details'] = _items
# override the default output from pydantic by calling `to_dict()` of embedded
if self.embedded:
_dict['_embedded'] = self.embedded.to_dict()
return _dict
@classmethod
@ -132,7 +137,8 @@ class AlertDetail(BaseModel):
"severity": obj.get("severity"),
"alertState": obj.get("alertState"),
"alertSeverity": obj.get("alertSeverity"),
"details": [AlertMetricDetail.from_dict(_item) for _item in obj["details"]] if obj.get("details") is not None else None
"details": [AlertMetricDetail.from_dict(_item) for _item in obj["details"]] if obj.get("details") is not None else None,
"_embedded": AlertEmbedded.from_dict(obj["_embedded"]) if obj.get("_embedded") is not None else None
})
return _obj

View File

@ -0,0 +1,91 @@
# coding: utf-8
"""
Alerts API
You can manage the following alert functionalities on the ThousandEyes platform using the Alerts API: * **Alerts**: Retrieve alert details. Alerts are assigned to tests through alert rules. * **Alert Rules**: Conditions that you configure in order to highlight or be notified of events of interest in your ThousandEyes tests. When an alert rules conditions are met, the associated alert is triggered and the alert becomes active. It remains active until the alert is cleared. Alert rules are reusable across multiple tests.. * **Alert Suppression Windows**: Suppress alerts for tests during periods such as planned maintenance. Windows can be one-time events or recurring events to handle periodic occurrences such as monthly downtime for maintenance. For more information about the alerts, see [Alerts](https://docs.thousandeyes.com/product-documentation/alerts).
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
from typing import Any, ClassVar, Dict, List, Optional
from thousandeyes_sdk.alerts.models.asn import Asn
from typing import Optional, Set
from typing_extensions import Self
class AlertEmbedded(BaseModel):
"""
Container for embedded resources in alert responses (HATEOAS).
""" # noqa: E501
asn: Optional[Asn] = None
__properties: ClassVar[List[str]] = ["asn"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
extra="allow",
)
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 self.model_dump_json(by_alias=True, exclude_unset=True, exclude_none=True)
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of AlertEmbedded 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,
)
# override the default output from pydantic by calling `to_dict()` of asn
if self.asn:
_dict['asn'] = self.asn.to_dict()
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of AlertEmbedded from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"asn": Asn.from_dict(obj["asn"]) if obj.get("asn") is not None else None
})
return _obj

View File

@ -0,0 +1,91 @@
# coding: utf-8
"""
Alerts API
You can manage the following alert functionalities on the ThousandEyes platform using the Alerts API: * **Alerts**: Retrieve alert details. Alerts are assigned to tests through alert rules. * **Alert Rules**: Conditions that you configure in order to highlight or be notified of events of interest in your ThousandEyes tests. When an alert rules conditions are met, the associated alert is triggered and the alert becomes active. It remains active until the alert is cleared. Alert rules are reusable across multiple tests.. * **Alert Suppression Windows**: Suppress alerts for tests during periods such as planned maintenance. Windows can be one-time events or recurring events to handle periodic occurrences such as monthly downtime for maintenance. For more information about the alerts, see [Alerts](https://docs.thousandeyes.com/product-documentation/alerts).
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, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing import Optional, Set
from typing_extensions import Self
class Asn(BaseModel):
"""
Autonomous System Number (ASN) information for network outage alerts.
""" # noqa: E501
id: Optional[StrictStr] = Field(default=None, description="ASN identifier.")
name: Optional[StrictStr] = Field(default=None, description="Autonomous system name.")
type: Optional[StrictStr] = Field(default=None, description="Resource type.")
__properties: ClassVar[List[str]] = ["id", "name", "type"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
extra="allow",
)
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 self.model_dump_json(by_alias=True, exclude_unset=True, exclude_none=True)
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Asn 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 Asn from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"id": obj.get("id"),
"name": obj.get("name"),
"type": obj.get("type")
})
return _obj

View File

@ -44,7 +44,7 @@ class BaseRule(BaseModel):
minimum_sources_pct: Optional[StrictInt] = Field(default=None, description="The minimum percentage of all assigned agents or monitors that must meet the specified criteria to trigger the alert.", alias="minimumSourcesPct")
rounds_violating_mode: Optional[AlertRoundsViolationMode] = Field(default=None, alias="roundsViolatingMode")
rounds_violating_out_of: StrictInt = Field(description="Specifies the divisor (y value) in the “X of Y times” condition.", alias="roundsViolatingOutOf")
rounds_violating_required: StrictInt = Field(description="Specifies the numerator (x value) in the “X of Y times” condition.", alias="roundsViolatingRequired")
rounds_violating_required: Optional[StrictInt] = Field(default=None, description="Specifies the numerator (x value) in the “X of Y times” condition.", alias="roundsViolatingRequired")
include_covered_prefixes: Optional[StrictBool] = Field(default=None, description="Set true to include covered prefixes in the BGP alert rule. Only applicable to BGP alert rules.", alias="includeCoveredPrefixes")
sensitivity_level: Optional[SensitivityLevel] = Field(default=None, alias="sensitivityLevel")
severity: Optional[Severity] = None

View File

@ -46,7 +46,7 @@ class Rule(BaseModel):
minimum_sources_pct: Optional[StrictInt] = Field(default=None, description="The minimum percentage of all assigned agents or monitors that must meet the specified criteria to trigger the alert.", alias="minimumSourcesPct")
rounds_violating_mode: Optional[AlertRoundsViolationMode] = Field(default=None, alias="roundsViolatingMode")
rounds_violating_out_of: StrictInt = Field(description="Specifies the divisor (y value) in the “X of Y times” condition.", alias="roundsViolatingOutOf")
rounds_violating_required: StrictInt = Field(description="Specifies the numerator (x value) in the “X of Y times” condition.", alias="roundsViolatingRequired")
rounds_violating_required: Optional[StrictInt] = Field(default=None, description="Specifies the numerator (x value) in the “X of Y times” condition.", alias="roundsViolatingRequired")
include_covered_prefixes: Optional[StrictBool] = Field(default=None, description="Set true to include covered prefixes in the BGP alert rule. Only applicable to BGP alert rules.", alias="includeCoveredPrefixes")
sensitivity_level: Optional[SensitivityLevel] = Field(default=None, alias="sensitivityLevel")
severity: Optional[Severity] = None

View File

@ -47,7 +47,7 @@ class RuleDetail(BaseModel):
minimum_sources_pct: Optional[StrictInt] = Field(default=None, description="The minimum percentage of all assigned agents or monitors that must meet the specified criteria to trigger the alert.", alias="minimumSourcesPct")
rounds_violating_mode: Optional[AlertRoundsViolationMode] = Field(default=None, alias="roundsViolatingMode")
rounds_violating_out_of: StrictInt = Field(description="Specifies the divisor (y value) in the “X of Y times” condition.", alias="roundsViolatingOutOf")
rounds_violating_required: StrictInt = Field(description="Specifies the numerator (x value) in the “X of Y times” condition.", alias="roundsViolatingRequired")
rounds_violating_required: Optional[StrictInt] = Field(default=None, description="Specifies the numerator (x value) in the “X of Y times” condition.", alias="roundsViolatingRequired")
include_covered_prefixes: Optional[StrictBool] = Field(default=None, description="Set true to include covered prefixes in the BGP alert rule. Only applicable to BGP alert rules.", alias="includeCoveredPrefixes")
sensitivity_level: Optional[SensitivityLevel] = Field(default=None, alias="sensitivityLevel")
severity: Optional[Severity] = None

View File

@ -45,7 +45,7 @@ class RuleDetailUpdate(BaseModel):
minimum_sources_pct: Optional[StrictInt] = Field(default=None, description="The minimum percentage of all assigned agents or monitors that must meet the specified criteria to trigger the alert.", alias="minimumSourcesPct")
rounds_violating_mode: Optional[AlertRoundsViolationMode] = Field(default=None, alias="roundsViolatingMode")
rounds_violating_out_of: StrictInt = Field(description="Specifies the divisor (y value) in the “X of Y times” condition.", alias="roundsViolatingOutOf")
rounds_violating_required: StrictInt = Field(description="Specifies the numerator (x value) in the “X of Y times” condition.", alias="roundsViolatingRequired")
rounds_violating_required: Optional[StrictInt] = Field(default=None, description="Specifies the numerator (x value) in the “X of Y times” condition.", alias="roundsViolatingRequired")
include_covered_prefixes: Optional[StrictBool] = Field(default=None, description="Set true to include covered prefixes in the BGP alert rule. Only applicable to BGP alert rules.", alias="includeCoveredPrefixes")
sensitivity_level: Optional[SensitivityLevel] = Field(default=None, alias="sensitivityLevel")
severity: Optional[Severity] = None

View File

@ -81,6 +81,13 @@ class TestAlertsApi(unittest.TestCase):
"alertSeverity" : "major",
"duration" : 60,
"violationCount" : 2,
"_embedded" : {
"asn" : {
"name" : "Cisco Webex LLC",
"id" : "13445",
"type" : "asn"
}
},
"meta" : {
"version" : 1
},

View File

@ -9,7 +9,7 @@ For more information about monitors, see [Inside-Out BGP Visibility](https://doc
This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
- API version: 7.0.58
- API version: 7.0.68
- Generator version: 7.6.0
- Build package: com.thousandeyes.api.codegen.ThousandeyesPythonGenerator

View File

@ -13,7 +13,7 @@ For more information about credentials, see [Working With Secure Credentials](ht
This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
- API version: 7.0.58
- API version: 7.0.68
- Generator version: 7.6.0
- Build package: com.thousandeyes.api.codegen.ThousandeyesPythonGenerator

View File

@ -32,6 +32,7 @@ docs/ApiDuration.md
docs/ApiGeoMapWidget.md
docs/ApiGraphletPoint.md
docs/ApiGroupedBarchartWidget.md
docs/ApiListWidget.md
docs/ApiMultiMetricColumn.md
docs/ApiMultiMetricColumnData.md
docs/ApiMultiMetricTableWidget.md
@ -93,6 +94,7 @@ docs/LegacyDurationUnit.md
docs/LegacyWidgetSortDirection.md
docs/LegacyWidgetSortProperty.md
docs/Link.md
docs/ListDatasource.md
docs/MetricGroup.md
docs/MultiMetricsTableDatasource.md
docs/NumbersCardDatasource.md
@ -154,6 +156,7 @@ src/thousandeyes_sdk/dashboards/models/api_duration.py
src/thousandeyes_sdk/dashboards/models/api_geo_map_widget.py
src/thousandeyes_sdk/dashboards/models/api_graphlet_point.py
src/thousandeyes_sdk/dashboards/models/api_grouped_barchart_widget.py
src/thousandeyes_sdk/dashboards/models/api_list_widget.py
src/thousandeyes_sdk/dashboards/models/api_multi_metric_column.py
src/thousandeyes_sdk/dashboards/models/api_multi_metric_column_data.py
src/thousandeyes_sdk/dashboards/models/api_multi_metric_table_widget.py
@ -212,6 +215,7 @@ src/thousandeyes_sdk/dashboards/models/legacy_duration_unit.py
src/thousandeyes_sdk/dashboards/models/legacy_widget_sort_direction.py
src/thousandeyes_sdk/dashboards/models/legacy_widget_sort_property.py
src/thousandeyes_sdk/dashboards/models/link.py
src/thousandeyes_sdk/dashboards/models/list_datasource.py
src/thousandeyes_sdk/dashboards/models/metric_group.py
src/thousandeyes_sdk/dashboards/models/multi_metrics_table_datasource.py
src/thousandeyes_sdk/dashboards/models/numbers_card_datasource.py

View File

@ -3,7 +3,7 @@ Manage ThousandEyes Dashboards.
This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
- API version: 7.0.58
- API version: 7.0.68
- Generator version: 7.6.0
- Build package: com.thousandeyes.api.codegen.ThousandeyesPythonGenerator
@ -106,6 +106,8 @@ Class | Method | HTTP request | Description
*DashboardsApi* | [**get_dashboard**](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-dashboards/docs/DashboardsApi.md#get_dashboard) | **GET** /dashboards/{dashboardId} | Retrieve dashboard
*DashboardsApi* | [**get_dashboard_widget_data**](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-dashboards/docs/DashboardsApi.md#get_dashboard_widget_data) | **GET** /dashboards/{dashboardId}/widgets/{widgetId} | Retrieve dashboard widget data
*DashboardsApi* | [**get_dashboards**](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-dashboards/docs/DashboardsApi.md#get_dashboards) | **GET** /dashboards | List dashboards
*DashboardsApi* | [**get_individual_card_data**](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-dashboards/docs/DashboardsApi.md#get_individual_card_data) | **GET** /dashboards/{dashboardId}/widgets/{widgetId}/cards/{cardId} | Retrieve individual card data from numbers widget
*DashboardsApi* | [**get_individual_column_data**](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-dashboards/docs/DashboardsApi.md#get_individual_column_data) | **GET** /dashboards/{dashboardId}/widgets/{widgetId}/columns/{columnId} | Retrieve individual column data from multi-metric table widget
*DashboardsApi* | [**update_dashboard**](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-dashboards/docs/DashboardsApi.md#update_dashboard) | **PUT** /dashboards/{dashboardId} | Update dashboard
*DashboardsFiltersApi* | [**create_dashboard_filter**](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-dashboards/docs/DashboardsFiltersApi.md#create_dashboard_filter) | **POST** /dashboards/filters | Create dashboard filter
*DashboardsFiltersApi* | [**delete_dashboard_filter**](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-dashboards/docs/DashboardsFiltersApi.md#delete_dashboard_filter) | **DELETE** /dashboards/filters/{id} | Delete dashboard filter
@ -147,6 +149,7 @@ Class | Method | HTTP request | Description
- [ApiGeoMapWidget](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-dashboards/docs/ApiGeoMapWidget.md)
- [ApiGraphletPoint](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-dashboards/docs/ApiGraphletPoint.md)
- [ApiGroupedBarchartWidget](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-dashboards/docs/ApiGroupedBarchartWidget.md)
- [ApiListWidget](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-dashboards/docs/ApiListWidget.md)
- [ApiMultiMetricColumn](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-dashboards/docs/ApiMultiMetricColumn.md)
- [ApiMultiMetricColumnData](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-dashboards/docs/ApiMultiMetricColumnData.md)
- [ApiMultiMetricTableWidget](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-dashboards/docs/ApiMultiMetricTableWidget.md)
@ -205,6 +208,7 @@ Class | Method | HTTP request | Description
- [LegacyWidgetSortDirection](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-dashboards/docs/LegacyWidgetSortDirection.md)
- [LegacyWidgetSortProperty](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-dashboards/docs/LegacyWidgetSortProperty.md)
- [Link](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-dashboards/docs/Link.md)
- [ListDatasource](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-dashboards/docs/ListDatasource.md)
- [MetricGroup](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-dashboards/docs/MetricGroup.md)
- [MultiMetricsTableDatasource](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-dashboards/docs/MultiMetricsTableDatasource.md)
- [NumbersCardDatasource](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-dashboards/docs/NumbersCardDatasource.md)

View File

@ -1,5 +1,6 @@
# ApiAlertListWidget
A widget that displays a list of alerts based on specified criteria, such as alert type and time frame.
## Properties

View File

@ -30,6 +30,8 @@ Name | Type | Description | Notes
**limit** | **int** | Limit configured in the widget. | [optional]
**sort_by** | [**LegacyWidgetSortProperty**](LegacyWidgetSortProperty.md) | | [optional]
**sort_direction** | [**LegacyWidgetSortDirection**](LegacyWidgetSortDirection.md) | | [optional]
**sort_group_by** | [**LegacyWidgetSortProperty**](LegacyWidgetSortProperty.md) | | [optional]
**sort_group_direction** | [**LegacyWidgetSortDirection**](LegacyWidgetSortDirection.md) | | [optional]
**data_source** | [**ColorGridDatasource**](ColorGridDatasource.md) | | [optional]
## Example

View File

@ -0,0 +1,47 @@
# ApiListWidget
A widget that displays a list of items, such as events. It can use a time range to limit the items shown.
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**id** | **str** | Identifier of the widget. | [optional] [readonly]
**title** | **str** | Title of the widget | [optional]
**visual_mode** | [**VisualMode**](VisualMode.md) | | [optional]
**embed_url** | **str** | When &#x60;isEmbedded&#x60; is set to &#x60;true&#x60;, an &#x60;embedUrl&#x60; is provided. | [optional] [readonly]
**is_embedded** | **bool** | Set to &#x60;true&#x60; if widget is marked as embedded; otherwise, set to &#x60;false&#x60;. | [optional]
**metric_group** | [**MetricGroup**](MetricGroup.md) | | [optional]
**direction** | [**DashboardMetricDirection**](DashboardMetricDirection.md) | | [optional]
**metric** | [**DashboardMetric**](DashboardMetric.md) | | [optional]
**filters** | **Dict[str, List[object]]** | (Optional) Specifies the filters applied to the widget. When present, the &#x60;filters&#x60; property displays. Each filter object has two properties: &#x60;filterProperty&#x60; and &#x60;filterValue&#x60;. The &#x60;filterProperty&#x60; can be values like &#x60;AGENT&#x60;, &#x60;ENDPOINT_MACHINE_ID&#x60;, &#x60;TEST&#x60;, &#x60;MONITOR&#x60;, etc. The &#x60;filterValue&#x60; represents an identifier array of the selected property. | [optional]
**measure** | [**ApiWidgetMeasure**](ApiWidgetMeasure.md) | | [optional]
**fixed_timespan** | [**ApiDuration**](ApiDuration.md) | | [optional]
**api_link** | **str** | | [optional] [readonly]
**should_exclude_alert_suppression_windows** | **bool** | Excludes alert suppression window data if set to &#x60;true&#x60;. | [optional]
**links** | [**SelfLinks**](SelfLinks.md) | | [optional]
**type** | **str** | List widget type. Currently supports only &#x60;List&#x60;. |
**sort_direction** | [**LegacyWidgetSortDirection**](LegacyWidgetSortDirection.md) | | [optional]
**active_within** | [**ActiveWithin**](ActiveWithin.md) | | [optional]
**data_source** | [**ListDatasource**](ListDatasource.md) | | [optional]
## Example
```python
from thousandeyes_sdk.dashboards.models.api_list_widget import ApiListWidget
# TODO update the JSON string below
json = "{}"
# create an instance of ApiListWidget from a JSON string
api_list_widget_instance = ApiListWidget.from_json(json)
# print the JSON string representation of the object
print(ApiListWidget.to_json())
# convert the object into a dict
api_list_widget_dict = api_list_widget_instance.to_dict()
# create an instance of ApiListWidget from a dict
api_list_widget_from_dict = ApiListWidget.from_dict(api_list_widget_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

View File

@ -13,6 +13,7 @@ Name | Type | Description | Notes
**metric** | [**DashboardMetric**](DashboardMetric.md) | | [optional]
**filters** | **Dict[str, List[object]]** | (Optional) Specifies the filters applied to the widget. When present, the &#x60;filters&#x60; property displays. Each filter object has two properties: &#x60;filterProperty&#x60; and &#x60;filterValue&#x60;. The &#x60;filterProperty&#x60; can be values like &#x60;AGENT&#x60;, &#x60;ENDPOINT_MACHINE_ID&#x60;, &#x60;TEST&#x60;, &#x60;MONITOR&#x60;, etc. The &#x60;filterValue&#x60; represents an identifier array of the selected property. | [optional]
**measure** | [**ApiWidgetMeasure**](ApiWidgetMeasure.md) | | [optional]
**links** | [**SelfLinks**](SelfLinks.md) | | [optional]
## Example

View File

@ -11,6 +11,7 @@ Name | Type | Description | Notes
**points** | [**List[ApiWidgetDataPoint]**](ApiWidgetDataPoint.md) | | [optional]
**status** | **str** | Message for not fully configured card or no data. | [optional]
**alert_suppression_windows** | [**List[ApiDashboardAsw]**](ApiDashboardAsw.md) | | [optional]
**links** | [**SelfLinks**](SelfLinks.md) | | [optional]
## Example

View File

@ -20,6 +20,7 @@ Name | Type | Description | Notes
**direction** | [**DashboardMetricDirection**](DashboardMetricDirection.md) | | [optional]
**metric** | [**DashboardMetric**](DashboardMetric.md) | | [optional]
**filters** | **Dict[str, List[object]]** | (Optional) Specifies the filters applied to the widget. When present, the &#x60;filters&#x60; property displays. Each filter object has two properties: &#x60;filterProperty&#x60; and &#x60;filterValue&#x60;. The &#x60;filterProperty&#x60; can be values like &#x60;AGENT&#x60;, &#x60;ENDPOINT_MACHINE_ID&#x60;, &#x60;TEST&#x60;, &#x60;MONITOR&#x60;, etc. The &#x60;filterValue&#x60; represents an identifier array of the selected property. | [optional]
**links** | [**SelfLinks**](SelfLinks.md) | | [optional]
## Example

View File

@ -16,6 +16,7 @@ Name | Type | Description | Notes
**value** | **float** | Aggregated value. | [optional]
**status** | **str** | Message for not fully configured card or no data. | [optional]
**alert_suppression_windows** | [**List[ApiDashboardAsw]**](ApiDashboardAsw.md) | | [optional]
**links** | [**SelfLinks**](SelfLinks.md) | | [optional]
## Example

View File

@ -36,6 +36,8 @@ Name | Type | Description | Notes
**limit** | **int** | Limit configured in the widget. | [optional]
**sort_by** | [**LegacyWidgetSortProperty**](LegacyWidgetSortProperty.md) | | [optional]
**sort_direction** | [**LegacyWidgetSortDirection**](LegacyWidgetSortDirection.md) | | [optional]
**sort_group_by** | [**LegacyWidgetSortProperty**](LegacyWidgetSortProperty.md) | | [optional]
**sort_group_direction** | [**LegacyWidgetSortDirection**](LegacyWidgetSortDirection.md) | | [optional]
**is_geo_map_per_test** | **bool** | Indicates whether a separate map is displayed for each test within the widget. When set to true, individual maps are generated. | [optional]
**axis_group_by** | [**ApiAggregateProperty**](ApiAggregateProperty.md) | | [optional]
**show_labels** | **bool** | | [optional]

View File

@ -9,6 +9,8 @@ Method | HTTP request | Description
[**get_dashboard**](DashboardsApi.md#get_dashboard) | **GET** /dashboards/{dashboardId} | Retrieve dashboard
[**get_dashboard_widget_data**](DashboardsApi.md#get_dashboard_widget_data) | **GET** /dashboards/{dashboardId}/widgets/{widgetId} | Retrieve dashboard widget data
[**get_dashboards**](DashboardsApi.md#get_dashboards) | **GET** /dashboards | List dashboards
[**get_individual_card_data**](DashboardsApi.md#get_individual_card_data) | **GET** /dashboards/{dashboardId}/widgets/{widgetId}/cards/{cardId} | Retrieve individual card data from numbers widget
[**get_individual_column_data**](DashboardsApi.md#get_individual_column_data) | **GET** /dashboards/{dashboardId}/widgets/{widgetId}/columns/{columnId} | Retrieve individual column data from multi-metric table widget
[**update_dashboard**](DashboardsApi.md#update_dashboard) | **PUT** /dashboards/{dashboardId} | Update dashboard
@ -454,6 +456,198 @@ Name | Type | Description | Notes
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **get_individual_card_data**
> ApiNumbersCardData get_individual_card_data(dashboard_id, widget_id, card_id, aid=aid, window=window, start_date=start_date, end_date=end_date)
Retrieve individual card data from numbers widget
Returns the raw data for an individual card within a numbers widget in the dashboard.
### Example
* Bearer Authentication (BearerAuth):
```python
import thousandeyes_sdk.dashboards
from thousandeyes_sdk.dashboards.models.api_numbers_card_data import ApiNumbersCardData
from thousandeyes_sdk.dashboards.rest import ApiException
from pprint import pprint
# Defining the host is optional and defaults to https://api.thousandeyes.com/v7
# See configuration.py for a list of all supported configuration parameters.
configuration = thousandeyes_sdk.core.Configuration(
host = "https://api.thousandeyes.com/v7"
)
# The client must configure the authentication and authorization parameters
# in accordance with the API server security policy.
# Examples for each auth method are provided below, use the example that
# satisfies your auth use case.
# Configure Bearer authorization: BearerAuth
configuration = thousandeyes_sdk.core.Configuration(
access_token = os.environ["BEARER_TOKEN"]
)
# Enter a context with an instance of the API client
with thousandeyes_sdk.core.ApiClient(configuration) as api_client:
# Create an instance of the API class
api_instance = thousandeyes_sdk.dashboards.DashboardsApi(api_client)
dashboard_id = '646f4d2ce3c99b0536c3821e' # str | A Identifier for a dashboard which can be obtained from the `/dashboards` endpoint.
widget_id = 'unpmg' # str | A Identifier for a widget.
card_id = 'rvwgs' # str | An identifier for a card within the numbers widget.
aid = '1234' # str | A unique identifier associated with your account group. You can retrieve your `AccountGroupId` from the `/account-groups` endpoint. Note that you must be assigned to the target account group. Specifying this parameter without being assigned to the target account group will result in an error response. (optional)
window = '12h' # str | A dynamic time interval up to the current time of the request. Specify the interval as a number followed by an optional type: `s` for seconds (default if no type is specified), `m` for minutes, `h` for hours, `d` for days, and `w` for weeks. For a precise date range, use `startDate` and `endDate`. (optional)
start_date = '2022-07-17T22:00:54Z' # datetime | Use with the `endDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`. (optional)
end_date = '2022-07-18T22:00:54Z' # datetime | Defaults to current time the request is made. Use with the `startDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`. (optional)
try:
# Retrieve individual card data from numbers widget
api_response = api_instance.get_individual_card_data(dashboard_id, widget_id, card_id, aid=aid, window=window, start_date=start_date, end_date=end_date)
print("The response of DashboardsApi->get_individual_card_data:\n")
pprint(api_response)
except Exception as e:
print("Exception when calling DashboardsApi->get_individual_card_data: %s\n" % e)
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**dashboard_id** | **str**| A Identifier for a dashboard which can be obtained from the &#x60;/dashboards&#x60; endpoint. |
**widget_id** | **str**| A Identifier for a widget. |
**card_id** | **str**| An identifier for a card within the numbers widget. |
**aid** | **str**| A unique identifier associated with your account group. You can retrieve your &#x60;AccountGroupId&#x60; from the &#x60;/account-groups&#x60; endpoint. Note that you must be assigned to the target account group. Specifying this parameter without being assigned to the target account group will result in an error response. | [optional]
**window** | **str**| A dynamic time interval up to the current time of the request. Specify the interval as a number followed by an optional type: &#x60;s&#x60; for seconds (default if no type is specified), &#x60;m&#x60; for minutes, &#x60;h&#x60; for hours, &#x60;d&#x60; for days, and &#x60;w&#x60; for weeks. For a precise date range, use &#x60;startDate&#x60; and &#x60;endDate&#x60;. | [optional]
**start_date** | **datetime**| Use with the &#x60;endDate&#x60; parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can&#39;t be used with &#x60;window&#x60;. | [optional]
**end_date** | **datetime**| Defaults to current time the request is made. Use with the &#x60;startDate&#x60; parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can&#39;t be used with &#x60;window&#x60;. | [optional]
### Return type
[**ApiNumbersCardData**](ApiNumbersCardData.md)
### Authorization
[BearerAuth](../README.md#BearerAuth)
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: application/hal+json, application/json, application/problem+json
### HTTP response details
| Status code | Description | Response headers |
|-------------|-------------|------------------|
**200** | OK | - |
**400** | Bad Request | - |
**401** | Unauthorized | - |
**403** | Insufficient permissions to query endpoint | - |
**404** | Not found | - |
**429** | Exhausted rate limit for the organization | - |
**500** | Internal server error | - |
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **get_individual_column_data**
> ApiMultiMetricColumnData get_individual_column_data(dashboard_id, widget_id, column_id, aid=aid, window=window, start_date=start_date, end_date=end_date)
Retrieve individual column data from multi-metric table widget
Returns the raw data for an individual column within a multi-metric table widget in the dashboard.
### Example
* Bearer Authentication (BearerAuth):
```python
import thousandeyes_sdk.dashboards
from thousandeyes_sdk.dashboards.models.api_multi_metric_column_data import ApiMultiMetricColumnData
from thousandeyes_sdk.dashboards.rest import ApiException
from pprint import pprint
# Defining the host is optional and defaults to https://api.thousandeyes.com/v7
# See configuration.py for a list of all supported configuration parameters.
configuration = thousandeyes_sdk.core.Configuration(
host = "https://api.thousandeyes.com/v7"
)
# The client must configure the authentication and authorization parameters
# in accordance with the API server security policy.
# Examples for each auth method are provided below, use the example that
# satisfies your auth use case.
# Configure Bearer authorization: BearerAuth
configuration = thousandeyes_sdk.core.Configuration(
access_token = os.environ["BEARER_TOKEN"]
)
# Enter a context with an instance of the API client
with thousandeyes_sdk.core.ApiClient(configuration) as api_client:
# Create an instance of the API class
api_instance = thousandeyes_sdk.dashboards.DashboardsApi(api_client)
dashboard_id = '646f4d2ce3c99b0536c3821e' # str | A Identifier for a dashboard which can be obtained from the `/dashboards` endpoint.
widget_id = 'unpmg' # str | A Identifier for a widget.
column_id = 'col123' # str | An identifier for a column within the multi-metric table widget.
aid = '1234' # str | A unique identifier associated with your account group. You can retrieve your `AccountGroupId` from the `/account-groups` endpoint. Note that you must be assigned to the target account group. Specifying this parameter without being assigned to the target account group will result in an error response. (optional)
window = '12h' # str | A dynamic time interval up to the current time of the request. Specify the interval as a number followed by an optional type: `s` for seconds (default if no type is specified), `m` for minutes, `h` for hours, `d` for days, and `w` for weeks. For a precise date range, use `startDate` and `endDate`. (optional)
start_date = '2022-07-17T22:00:54Z' # datetime | Use with the `endDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`. (optional)
end_date = '2022-07-18T22:00:54Z' # datetime | Defaults to current time the request is made. Use with the `startDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`. (optional)
try:
# Retrieve individual column data from multi-metric table widget
api_response = api_instance.get_individual_column_data(dashboard_id, widget_id, column_id, aid=aid, window=window, start_date=start_date, end_date=end_date)
print("The response of DashboardsApi->get_individual_column_data:\n")
pprint(api_response)
except Exception as e:
print("Exception when calling DashboardsApi->get_individual_column_data: %s\n" % e)
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**dashboard_id** | **str**| A Identifier for a dashboard which can be obtained from the &#x60;/dashboards&#x60; endpoint. |
**widget_id** | **str**| A Identifier for a widget. |
**column_id** | **str**| An identifier for a column within the multi-metric table widget. |
**aid** | **str**| A unique identifier associated with your account group. You can retrieve your &#x60;AccountGroupId&#x60; from the &#x60;/account-groups&#x60; endpoint. Note that you must be assigned to the target account group. Specifying this parameter without being assigned to the target account group will result in an error response. | [optional]
**window** | **str**| A dynamic time interval up to the current time of the request. Specify the interval as a number followed by an optional type: &#x60;s&#x60; for seconds (default if no type is specified), &#x60;m&#x60; for minutes, &#x60;h&#x60; for hours, &#x60;d&#x60; for days, and &#x60;w&#x60; for weeks. For a precise date range, use &#x60;startDate&#x60; and &#x60;endDate&#x60;. | [optional]
**start_date** | **datetime**| Use with the &#x60;endDate&#x60; parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can&#39;t be used with &#x60;window&#x60;. | [optional]
**end_date** | **datetime**| Defaults to current time the request is made. Use with the &#x60;startDate&#x60; parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can&#39;t be used with &#x60;window&#x60;. | [optional]
### Return type
[**ApiMultiMetricColumnData**](ApiMultiMetricColumnData.md)
### Authorization
[BearerAuth](../README.md#BearerAuth)
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: application/hal+json, application/json, application/problem+json
### HTTP response details
| Status code | Description | Response headers |
|-------------|-------------|------------------|
**200** | OK | - |
**400** | Bad Request | - |
**401** | Unauthorized | - |
**403** | Insufficient permissions to query endpoint | - |
**404** | Not found | - |
**429** | Exhausted rate limit for the organization | - |
**500** | Internal server error | - |
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **update_dashboard**
> Dashboard update_dashboard(dashboard_id, dashboard, aid=aid)

View File

@ -1,6 +1,6 @@
# EndpointIpVersionTemplate
# ListDatasource
IP version the test should use for network tests.
Data source for the list widget.
## Properties

View File

@ -51,6 +51,7 @@ from thousandeyes_sdk.dashboards.models.api_duration import ApiDuration
from thousandeyes_sdk.dashboards.models.api_geo_map_widget import ApiGeoMapWidget
from thousandeyes_sdk.dashboards.models.api_graphlet_point import ApiGraphletPoint
from thousandeyes_sdk.dashboards.models.api_grouped_barchart_widget import ApiGroupedBarchartWidget
from thousandeyes_sdk.dashboards.models.api_list_widget import ApiListWidget
from thousandeyes_sdk.dashboards.models.api_multi_metric_column import ApiMultiMetricColumn
from thousandeyes_sdk.dashboards.models.api_multi_metric_column_data import ApiMultiMetricColumnData
from thousandeyes_sdk.dashboards.models.api_multi_metric_table_widget import ApiMultiMetricTableWidget
@ -109,6 +110,7 @@ from thousandeyes_sdk.dashboards.models.legacy_duration_unit import LegacyDurati
from thousandeyes_sdk.dashboards.models.legacy_widget_sort_direction import LegacyWidgetSortDirection
from thousandeyes_sdk.dashboards.models.legacy_widget_sort_property import LegacyWidgetSortProperty
from thousandeyes_sdk.dashboards.models.link import Link
from thousandeyes_sdk.dashboards.models.list_datasource import ListDatasource
from thousandeyes_sdk.dashboards.models.metric_group import MetricGroup
from thousandeyes_sdk.dashboards.models.multi_metrics_table_datasource import MultiMetricsTableDatasource
from thousandeyes_sdk.dashboards.models.numbers_card_datasource import NumbersCardDatasource

View File

@ -23,6 +23,8 @@ from pydantic import Field, StrictFloat, StrictInt, StrictStr, field_validator
from typing import List, Optional, Union
from typing_extensions import Annotated
from thousandeyes_sdk.dashboards.models.api_dashboard import ApiDashboard
from thousandeyes_sdk.dashboards.models.api_multi_metric_column_data import ApiMultiMetricColumnData
from thousandeyes_sdk.dashboards.models.api_numbers_card_data import ApiNumbersCardData
from thousandeyes_sdk.dashboards.models.api_widget_data_response import ApiWidgetDataResponse
from thousandeyes_sdk.dashboards.models.dashboard import Dashboard
from thousandeyes_sdk.dashboards.models.dashboard_order import DashboardOrder
@ -1680,6 +1682,798 @@ class DashboardsApi:
@validate_call
def get_individual_card_data(
self,
dashboard_id: Annotated[StrictStr, Field(description="A Identifier for a dashboard which can be obtained from the `/dashboards` endpoint.")],
widget_id: Annotated[StrictStr, Field(description="A Identifier for a widget.")],
card_id: Annotated[StrictStr, Field(description="An identifier for a card within the numbers widget.")],
aid: Annotated[Optional[StrictStr], Field(description="A unique identifier associated with your account group. You can retrieve your `AccountGroupId` from the `/account-groups` endpoint. Note that you must be assigned to the target account group. Specifying this parameter without being assigned to the target account group will result in an error response.")] = None,
window: Annotated[Optional[Annotated[str, Field(strict=True)]], Field(description="A dynamic time interval up to the current time of the request. Specify the interval as a number followed by an optional type: `s` for seconds (default if no type is specified), `m` for minutes, `h` for hours, `d` for days, and `w` for weeks. For a precise date range, use `startDate` and `endDate`.")] = None,
start_date: Annotated[Optional[datetime], Field(description="Use with the `endDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.")] = None,
end_date: Annotated[Optional[datetime], Field(description="Defaults to current time the request is made. Use with the `startDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.")] = None,
_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,
) -> ApiNumbersCardData:
"""Retrieve individual card data from numbers widget
Returns the raw data for an individual card within a numbers widget in the dashboard.
:param dashboard_id: A Identifier for a dashboard which can be obtained from the `/dashboards` endpoint. (required)
:type dashboard_id: str
:param widget_id: A Identifier for a widget. (required)
:type widget_id: str
:param card_id: An identifier for a card within the numbers widget. (required)
:type card_id: str
:param aid: A unique identifier associated with your account group. You can retrieve your `AccountGroupId` from the `/account-groups` endpoint. Note that you must be assigned to the target account group. Specifying this parameter without being assigned to the target account group will result in an error response.
:type aid: str
:param window: A dynamic time interval up to the current time of the request. Specify the interval as a number followed by an optional type: `s` for seconds (default if no type is specified), `m` for minutes, `h` for hours, `d` for days, and `w` for weeks. For a precise date range, use `startDate` and `endDate`.
:type window: str
:param start_date: Use with the `endDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.
:type start_date: datetime
:param end_date: Defaults to current time the request is made. Use with the `startDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.
:type end_date: datetime
: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_individual_card_data_serialize(
dashboard_id=dashboard_id,
widget_id=widget_id,
card_id=card_id,
aid=aid,
window=window,
start_date=start_date,
end_date=end_date,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ApiNumbersCardData",
'400': "ValidationError",
'401': "UnauthorizedError",
'403': "Error",
'404': "Error",
'429': "Error",
'500': "Error",
}
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,
models=thousandeyes_sdk.dashboards.models,
).data
@validate_call
def get_individual_card_data_with_http_info(
self,
dashboard_id: Annotated[StrictStr, Field(description="A Identifier for a dashboard which can be obtained from the `/dashboards` endpoint.")],
widget_id: Annotated[StrictStr, Field(description="A Identifier for a widget.")],
card_id: Annotated[StrictStr, Field(description="An identifier for a card within the numbers widget.")],
aid: Annotated[Optional[StrictStr], Field(description="A unique identifier associated with your account group. You can retrieve your `AccountGroupId` from the `/account-groups` endpoint. Note that you must be assigned to the target account group. Specifying this parameter without being assigned to the target account group will result in an error response.")] = None,
window: Annotated[Optional[Annotated[str, Field(strict=True)]], Field(description="A dynamic time interval up to the current time of the request. Specify the interval as a number followed by an optional type: `s` for seconds (default if no type is specified), `m` for minutes, `h` for hours, `d` for days, and `w` for weeks. For a precise date range, use `startDate` and `endDate`.")] = None,
start_date: Annotated[Optional[datetime], Field(description="Use with the `endDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.")] = None,
end_date: Annotated[Optional[datetime], Field(description="Defaults to current time the request is made. Use with the `startDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.")] = None,
_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[ApiNumbersCardData]:
"""Retrieve individual card data from numbers widget
Returns the raw data for an individual card within a numbers widget in the dashboard.
:param dashboard_id: A Identifier for a dashboard which can be obtained from the `/dashboards` endpoint. (required)
:type dashboard_id: str
:param widget_id: A Identifier for a widget. (required)
:type widget_id: str
:param card_id: An identifier for a card within the numbers widget. (required)
:type card_id: str
:param aid: A unique identifier associated with your account group. You can retrieve your `AccountGroupId` from the `/account-groups` endpoint. Note that you must be assigned to the target account group. Specifying this parameter without being assigned to the target account group will result in an error response.
:type aid: str
:param window: A dynamic time interval up to the current time of the request. Specify the interval as a number followed by an optional type: `s` for seconds (default if no type is specified), `m` for minutes, `h` for hours, `d` for days, and `w` for weeks. For a precise date range, use `startDate` and `endDate`.
:type window: str
:param start_date: Use with the `endDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.
:type start_date: datetime
:param end_date: Defaults to current time the request is made. Use with the `startDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.
:type end_date: datetime
: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_individual_card_data_serialize(
dashboard_id=dashboard_id,
widget_id=widget_id,
card_id=card_id,
aid=aid,
window=window,
start_date=start_date,
end_date=end_date,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ApiNumbersCardData",
'400': "ValidationError",
'401': "UnauthorizedError",
'403': "Error",
'404': "Error",
'429': "Error",
'500': "Error",
}
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,
models=thousandeyes_sdk.dashboards.models,
)
@validate_call
def get_individual_card_data_without_preload_content(
self,
dashboard_id: Annotated[StrictStr, Field(description="A Identifier for a dashboard which can be obtained from the `/dashboards` endpoint.")],
widget_id: Annotated[StrictStr, Field(description="A Identifier for a widget.")],
card_id: Annotated[StrictStr, Field(description="An identifier for a card within the numbers widget.")],
aid: Annotated[Optional[StrictStr], Field(description="A unique identifier associated with your account group. You can retrieve your `AccountGroupId` from the `/account-groups` endpoint. Note that you must be assigned to the target account group. Specifying this parameter without being assigned to the target account group will result in an error response.")] = None,
window: Annotated[Optional[Annotated[str, Field(strict=True)]], Field(description="A dynamic time interval up to the current time of the request. Specify the interval as a number followed by an optional type: `s` for seconds (default if no type is specified), `m` for minutes, `h` for hours, `d` for days, and `w` for weeks. For a precise date range, use `startDate` and `endDate`.")] = None,
start_date: Annotated[Optional[datetime], Field(description="Use with the `endDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.")] = None,
end_date: Annotated[Optional[datetime], Field(description="Defaults to current time the request is made. Use with the `startDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.")] = None,
_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:
"""Retrieve individual card data from numbers widget
Returns the raw data for an individual card within a numbers widget in the dashboard.
:param dashboard_id: A Identifier for a dashboard which can be obtained from the `/dashboards` endpoint. (required)
:type dashboard_id: str
:param widget_id: A Identifier for a widget. (required)
:type widget_id: str
:param card_id: An identifier for a card within the numbers widget. (required)
:type card_id: str
:param aid: A unique identifier associated with your account group. You can retrieve your `AccountGroupId` from the `/account-groups` endpoint. Note that you must be assigned to the target account group. Specifying this parameter without being assigned to the target account group will result in an error response.
:type aid: str
:param window: A dynamic time interval up to the current time of the request. Specify the interval as a number followed by an optional type: `s` for seconds (default if no type is specified), `m` for minutes, `h` for hours, `d` for days, and `w` for weeks. For a precise date range, use `startDate` and `endDate`.
:type window: str
:param start_date: Use with the `endDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.
:type start_date: datetime
:param end_date: Defaults to current time the request is made. Use with the `startDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.
:type end_date: datetime
: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_individual_card_data_serialize(
dashboard_id=dashboard_id,
widget_id=widget_id,
card_id=card_id,
aid=aid,
window=window,
start_date=start_date,
end_date=end_date,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ApiNumbersCardData",
'400': "ValidationError",
'401': "UnauthorizedError",
'403': "Error",
'404': "Error",
'429': "Error",
'500': "Error",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _get_individual_card_data_serialize(
self,
dashboard_id,
widget_id,
card_id,
aid,
window,
start_date,
end_date,
_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]] = {}
_body_params: Optional[bytes] = None
# process the path parameters
if dashboard_id is not None:
_path_params['dashboardId'] = dashboard_id
if widget_id is not None:
_path_params['widgetId'] = widget_id
if card_id is not None:
_path_params['cardId'] = card_id
# process the query parameters
if aid is not None:
_query_params.append(('aid', aid))
if window is not None:
_query_params.append(('window', window))
if start_date is not None:
if isinstance(start_date, datetime):
_query_params.append(
(
'startDate',
start_date.strftime(
self.api_client.configuration.datetime_format
)
)
)
else:
_query_params.append(('startDate', start_date))
if end_date is not None:
if isinstance(end_date, datetime):
_query_params.append(
(
'endDate',
end_date.strftime(
self.api_client.configuration.datetime_format
)
)
)
else:
_query_params.append(('endDate', end_date))
# process the header parameters
# process the form parameters
# process the body parameter
# set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/hal+json',
'application/json',
'application/problem+json'
]
)
# authentication setting
_auth_settings: List[str] = [
'BearerAuth'
]
return self.api_client.param_serialize(
method='GET',
resource_path='/dashboards/{dashboardId}/widgets/{widgetId}/cards/{cardId}',
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_individual_column_data(
self,
dashboard_id: Annotated[StrictStr, Field(description="A Identifier for a dashboard which can be obtained from the `/dashboards` endpoint.")],
widget_id: Annotated[StrictStr, Field(description="A Identifier for a widget.")],
column_id: Annotated[StrictStr, Field(description="An identifier for a column within the multi-metric table widget.")],
aid: Annotated[Optional[StrictStr], Field(description="A unique identifier associated with your account group. You can retrieve your `AccountGroupId` from the `/account-groups` endpoint. Note that you must be assigned to the target account group. Specifying this parameter without being assigned to the target account group will result in an error response.")] = None,
window: Annotated[Optional[Annotated[str, Field(strict=True)]], Field(description="A dynamic time interval up to the current time of the request. Specify the interval as a number followed by an optional type: `s` for seconds (default if no type is specified), `m` for minutes, `h` for hours, `d` for days, and `w` for weeks. For a precise date range, use `startDate` and `endDate`.")] = None,
start_date: Annotated[Optional[datetime], Field(description="Use with the `endDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.")] = None,
end_date: Annotated[Optional[datetime], Field(description="Defaults to current time the request is made. Use with the `startDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.")] = None,
_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,
) -> ApiMultiMetricColumnData:
"""Retrieve individual column data from multi-metric table widget
Returns the raw data for an individual column within a multi-metric table widget in the dashboard.
:param dashboard_id: A Identifier for a dashboard which can be obtained from the `/dashboards` endpoint. (required)
:type dashboard_id: str
:param widget_id: A Identifier for a widget. (required)
:type widget_id: str
:param column_id: An identifier for a column within the multi-metric table widget. (required)
:type column_id: str
:param aid: A unique identifier associated with your account group. You can retrieve your `AccountGroupId` from the `/account-groups` endpoint. Note that you must be assigned to the target account group. Specifying this parameter without being assigned to the target account group will result in an error response.
:type aid: str
:param window: A dynamic time interval up to the current time of the request. Specify the interval as a number followed by an optional type: `s` for seconds (default if no type is specified), `m` for minutes, `h` for hours, `d` for days, and `w` for weeks. For a precise date range, use `startDate` and `endDate`.
:type window: str
:param start_date: Use with the `endDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.
:type start_date: datetime
:param end_date: Defaults to current time the request is made. Use with the `startDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.
:type end_date: datetime
: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_individual_column_data_serialize(
dashboard_id=dashboard_id,
widget_id=widget_id,
column_id=column_id,
aid=aid,
window=window,
start_date=start_date,
end_date=end_date,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ApiMultiMetricColumnData",
'400': "ValidationError",
'401': "UnauthorizedError",
'403': "Error",
'404': "Error",
'429': "Error",
'500': "Error",
}
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,
models=thousandeyes_sdk.dashboards.models,
).data
@validate_call
def get_individual_column_data_with_http_info(
self,
dashboard_id: Annotated[StrictStr, Field(description="A Identifier for a dashboard which can be obtained from the `/dashboards` endpoint.")],
widget_id: Annotated[StrictStr, Field(description="A Identifier for a widget.")],
column_id: Annotated[StrictStr, Field(description="An identifier for a column within the multi-metric table widget.")],
aid: Annotated[Optional[StrictStr], Field(description="A unique identifier associated with your account group. You can retrieve your `AccountGroupId` from the `/account-groups` endpoint. Note that you must be assigned to the target account group. Specifying this parameter without being assigned to the target account group will result in an error response.")] = None,
window: Annotated[Optional[Annotated[str, Field(strict=True)]], Field(description="A dynamic time interval up to the current time of the request. Specify the interval as a number followed by an optional type: `s` for seconds (default if no type is specified), `m` for minutes, `h` for hours, `d` for days, and `w` for weeks. For a precise date range, use `startDate` and `endDate`.")] = None,
start_date: Annotated[Optional[datetime], Field(description="Use with the `endDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.")] = None,
end_date: Annotated[Optional[datetime], Field(description="Defaults to current time the request is made. Use with the `startDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.")] = None,
_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[ApiMultiMetricColumnData]:
"""Retrieve individual column data from multi-metric table widget
Returns the raw data for an individual column within a multi-metric table widget in the dashboard.
:param dashboard_id: A Identifier for a dashboard which can be obtained from the `/dashboards` endpoint. (required)
:type dashboard_id: str
:param widget_id: A Identifier for a widget. (required)
:type widget_id: str
:param column_id: An identifier for a column within the multi-metric table widget. (required)
:type column_id: str
:param aid: A unique identifier associated with your account group. You can retrieve your `AccountGroupId` from the `/account-groups` endpoint. Note that you must be assigned to the target account group. Specifying this parameter without being assigned to the target account group will result in an error response.
:type aid: str
:param window: A dynamic time interval up to the current time of the request. Specify the interval as a number followed by an optional type: `s` for seconds (default if no type is specified), `m` for minutes, `h` for hours, `d` for days, and `w` for weeks. For a precise date range, use `startDate` and `endDate`.
:type window: str
:param start_date: Use with the `endDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.
:type start_date: datetime
:param end_date: Defaults to current time the request is made. Use with the `startDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.
:type end_date: datetime
: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_individual_column_data_serialize(
dashboard_id=dashboard_id,
widget_id=widget_id,
column_id=column_id,
aid=aid,
window=window,
start_date=start_date,
end_date=end_date,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ApiMultiMetricColumnData",
'400': "ValidationError",
'401': "UnauthorizedError",
'403': "Error",
'404': "Error",
'429': "Error",
'500': "Error",
}
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,
models=thousandeyes_sdk.dashboards.models,
)
@validate_call
def get_individual_column_data_without_preload_content(
self,
dashboard_id: Annotated[StrictStr, Field(description="A Identifier for a dashboard which can be obtained from the `/dashboards` endpoint.")],
widget_id: Annotated[StrictStr, Field(description="A Identifier for a widget.")],
column_id: Annotated[StrictStr, Field(description="An identifier for a column within the multi-metric table widget.")],
aid: Annotated[Optional[StrictStr], Field(description="A unique identifier associated with your account group. You can retrieve your `AccountGroupId` from the `/account-groups` endpoint. Note that you must be assigned to the target account group. Specifying this parameter without being assigned to the target account group will result in an error response.")] = None,
window: Annotated[Optional[Annotated[str, Field(strict=True)]], Field(description="A dynamic time interval up to the current time of the request. Specify the interval as a number followed by an optional type: `s` for seconds (default if no type is specified), `m` for minutes, `h` for hours, `d` for days, and `w` for weeks. For a precise date range, use `startDate` and `endDate`.")] = None,
start_date: Annotated[Optional[datetime], Field(description="Use with the `endDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.")] = None,
end_date: Annotated[Optional[datetime], Field(description="Defaults to current time the request is made. Use with the `startDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.")] = None,
_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:
"""Retrieve individual column data from multi-metric table widget
Returns the raw data for an individual column within a multi-metric table widget in the dashboard.
:param dashboard_id: A Identifier for a dashboard which can be obtained from the `/dashboards` endpoint. (required)
:type dashboard_id: str
:param widget_id: A Identifier for a widget. (required)
:type widget_id: str
:param column_id: An identifier for a column within the multi-metric table widget. (required)
:type column_id: str
:param aid: A unique identifier associated with your account group. You can retrieve your `AccountGroupId` from the `/account-groups` endpoint. Note that you must be assigned to the target account group. Specifying this parameter without being assigned to the target account group will result in an error response.
:type aid: str
:param window: A dynamic time interval up to the current time of the request. Specify the interval as a number followed by an optional type: `s` for seconds (default if no type is specified), `m` for minutes, `h` for hours, `d` for days, and `w` for weeks. For a precise date range, use `startDate` and `endDate`.
:type window: str
:param start_date: Use with the `endDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.
:type start_date: datetime
:param end_date: Defaults to current time the request is made. Use with the `startDate` parameter. Include the complete time (hours, minutes, and seconds) in UTC time zone, following the ISO 8601 date-time format. See the example for reference. Please note that this parameter can't be used with `window`.
:type end_date: datetime
: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_individual_column_data_serialize(
dashboard_id=dashboard_id,
widget_id=widget_id,
column_id=column_id,
aid=aid,
window=window,
start_date=start_date,
end_date=end_date,
_request_auth=_request_auth,
_content_type=_content_type,
_headers=_headers,
_host_index=_host_index
)
_response_types_map: Dict[str, Optional[str]] = {
'200': "ApiMultiMetricColumnData",
'400': "ValidationError",
'401': "UnauthorizedError",
'403': "Error",
'404': "Error",
'429': "Error",
'500': "Error",
}
response_data = self.api_client.call_api(
*_param,
_request_timeout=_request_timeout
)
return response_data.response
def _get_individual_column_data_serialize(
self,
dashboard_id,
widget_id,
column_id,
aid,
window,
start_date,
end_date,
_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]] = {}
_body_params: Optional[bytes] = None
# process the path parameters
if dashboard_id is not None:
_path_params['dashboardId'] = dashboard_id
if widget_id is not None:
_path_params['widgetId'] = widget_id
if column_id is not None:
_path_params['columnId'] = column_id
# process the query parameters
if aid is not None:
_query_params.append(('aid', aid))
if window is not None:
_query_params.append(('window', window))
if start_date is not None:
if isinstance(start_date, datetime):
_query_params.append(
(
'startDate',
start_date.strftime(
self.api_client.configuration.datetime_format
)
)
)
else:
_query_params.append(('startDate', start_date))
if end_date is not None:
if isinstance(end_date, datetime):
_query_params.append(
(
'endDate',
end_date.strftime(
self.api_client.configuration.datetime_format
)
)
)
else:
_query_params.append(('endDate', end_date))
# process the header parameters
# process the form parameters
# process the body parameter
# set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept(
[
'application/hal+json',
'application/json',
'application/problem+json'
]
)
# authentication setting
_auth_settings: List[str] = [
'BearerAuth'
]
return self.api_client.param_serialize(
method='GET',
resource_path='/dashboards/{dashboardId}/widgets/{widgetId}/columns/{columnId}',
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 update_dashboard(
self,

View File

@ -44,6 +44,7 @@ from thousandeyes_sdk.dashboards.models.api_duration import ApiDuration
from thousandeyes_sdk.dashboards.models.api_geo_map_widget import ApiGeoMapWidget
from thousandeyes_sdk.dashboards.models.api_graphlet_point import ApiGraphletPoint
from thousandeyes_sdk.dashboards.models.api_grouped_barchart_widget import ApiGroupedBarchartWidget
from thousandeyes_sdk.dashboards.models.api_list_widget import ApiListWidget
from thousandeyes_sdk.dashboards.models.api_multi_metric_column import ApiMultiMetricColumn
from thousandeyes_sdk.dashboards.models.api_multi_metric_column_data import ApiMultiMetricColumnData
from thousandeyes_sdk.dashboards.models.api_multi_metric_table_widget import ApiMultiMetricTableWidget
@ -102,6 +103,7 @@ from thousandeyes_sdk.dashboards.models.legacy_duration_unit import LegacyDurati
from thousandeyes_sdk.dashboards.models.legacy_widget_sort_direction import LegacyWidgetSortDirection
from thousandeyes_sdk.dashboards.models.legacy_widget_sort_property import LegacyWidgetSortProperty
from thousandeyes_sdk.dashboards.models.link import Link
from thousandeyes_sdk.dashboards.models.list_datasource import ListDatasource
from thousandeyes_sdk.dashboards.models.metric_group import MetricGroup
from thousandeyes_sdk.dashboards.models.multi_metrics_table_datasource import MultiMetricsTableDatasource
from thousandeyes_sdk.dashboards.models.numbers_card_datasource import NumbersCardDatasource

View File

@ -37,6 +37,7 @@ class AlertListAlertType(str, Enum):
WEB_MINUS_PAGE_MINUS_LOAD = 'web-page-load'
WEB_MINUS_TRANSACTION_MINUS_CLASSIC = 'web-transaction-classic'
WEB_MINUS_TRANSACTION = 'web-transaction'
API = 'api'
WEB_MINUS_FTP_MINUS_SERVER = 'web-ftp-server'
VOICE_MINUS_SIP_MINUS_SERVER = 'voice-sip-server'
VOICE_MINUS_RTP_MINUS_STREAM = 'voice-rtp-stream'

View File

@ -34,7 +34,7 @@ from typing_extensions import Self
class ApiAlertListWidget(BaseModel):
"""
ApiAlertListWidget
A widget that displays a list of alerts based on specified criteria, such as alert type and time frame.
""" # noqa: E501
id: Optional[StrictStr] = Field(default=None, description="Identifier of the widget.")
title: Optional[StrictStr] = Field(default=None, description="Title of the widget")

View File

@ -62,8 +62,10 @@ class ApiColorGridWidget(BaseModel):
limit: Optional[StrictInt] = Field(default=None, description="Limit configured in the widget.")
sort_by: Optional[LegacyWidgetSortProperty] = Field(default=None, alias="sortBy")
sort_direction: Optional[LegacyWidgetSortDirection] = Field(default=None, alias="sortDirection")
sort_group_by: Optional[LegacyWidgetSortProperty] = Field(default=None, alias="sortGroupBy")
sort_group_direction: Optional[LegacyWidgetSortDirection] = Field(default=None, alias="sortGroupDirection")
data_source: Optional[ColorGridDatasource] = Field(default=None, alias="dataSource")
__properties: ClassVar[List[str]] = ["id", "title", "visualMode", "embedUrl", "isEmbedded", "metricGroup", "direction", "metric", "filters", "measure", "fixedTimespan", "apiLink", "shouldExcludeAlertSuppressionWindows", "_links", "minScale", "maxScale", "unit", "type", "cards", "groupCardsBy", "columns", "limit", "sortBy", "sortDirection", "dataSource"]
__properties: ClassVar[List[str]] = ["id", "title", "visualMode", "embedUrl", "isEmbedded", "metricGroup", "direction", "metric", "filters", "measure", "fixedTimespan", "apiLink", "shouldExcludeAlertSuppressionWindows", "_links", "minScale", "maxScale", "unit", "type", "cards", "groupCardsBy", "columns", "limit", "sortBy", "sortDirection", "sortGroupBy", "sortGroupDirection", "dataSource"]
@field_validator('type')
def type_validate_regular_expression(cls, value):
@ -163,6 +165,8 @@ class ApiColorGridWidget(BaseModel):
"limit": obj.get("limit"),
"sortBy": obj.get("sortBy"),
"sortDirection": obj.get("sortDirection"),
"sortGroupBy": obj.get("sortGroupBy"),
"sortGroupDirection": obj.get("sortGroupDirection"),
"dataSource": obj.get("dataSource")
})
return _obj

View File

@ -0,0 +1,157 @@
# coding: utf-8
"""
Dashboards API
Manage ThousandEyes Dashboards.
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, StrictBool, StrictStr, field_validator
from typing import Any, ClassVar, Dict, List, Optional
from typing_extensions import Annotated
from thousandeyes_sdk.dashboards.models.active_within import ActiveWithin
from thousandeyes_sdk.dashboards.models.api_duration import ApiDuration
from thousandeyes_sdk.dashboards.models.api_widget_measure import ApiWidgetMeasure
from thousandeyes_sdk.dashboards.models.dashboard_metric import DashboardMetric
from thousandeyes_sdk.dashboards.models.dashboard_metric_direction import DashboardMetricDirection
from thousandeyes_sdk.dashboards.models.legacy_widget_sort_direction import LegacyWidgetSortDirection
from thousandeyes_sdk.dashboards.models.list_datasource import ListDatasource
from thousandeyes_sdk.dashboards.models.metric_group import MetricGroup
from thousandeyes_sdk.dashboards.models.self_links import SelfLinks
from thousandeyes_sdk.dashboards.models.visual_mode import VisualMode
from typing import Optional, Set
from typing_extensions import Self
class ApiListWidget(BaseModel):
"""
A widget that displays a list of items, such as events. It can use a time range to limit the items shown.
""" # noqa: E501
id: Optional[StrictStr] = Field(default=None, description="Identifier of the widget.")
title: Optional[StrictStr] = Field(default=None, description="Title of the widget")
visual_mode: Optional[VisualMode] = Field(default=None, alias="visualMode")
embed_url: Optional[StrictStr] = Field(default=None, description="When `isEmbedded` is set to `true`, an `embedUrl` is provided.", alias="embedUrl")
is_embedded: Optional[StrictBool] = Field(default=None, description="Set to `true` if widget is marked as embedded; otherwise, set to `false`.", alias="isEmbedded")
metric_group: Optional[MetricGroup] = Field(default=None, alias="metricGroup")
direction: Optional[DashboardMetricDirection] = None
metric: Optional[DashboardMetric] = None
filters: Optional[Dict[str, List[Any]]] = Field(default=None, description="(Optional) Specifies the filters applied to the widget. When present, the `filters` property displays. Each filter object has two properties: `filterProperty` and `filterValue`. The `filterProperty` can be values like `AGENT`, `ENDPOINT_MACHINE_ID`, `TEST`, `MONITOR`, etc. The `filterValue` represents an identifier array of the selected property.")
measure: Optional[ApiWidgetMeasure] = None
fixed_timespan: Optional[ApiDuration] = Field(default=None, alias="fixedTimespan")
api_link: Optional[StrictStr] = Field(default=None, alias="apiLink")
should_exclude_alert_suppression_windows: Optional[StrictBool] = Field(default=None, description="Excludes alert suppression window data if set to `true`.", alias="shouldExcludeAlertSuppressionWindows")
links: Optional[SelfLinks] = Field(default=None, alias="_links")
type: Annotated[str, Field(strict=True)] = Field(description="List widget type. Currently supports only `List`.")
sort_direction: Optional[LegacyWidgetSortDirection] = Field(default=None, alias="sortDirection")
active_within: Optional[ActiveWithin] = Field(default=None, alias="activeWithin")
data_source: Optional[ListDatasource] = Field(default=None, alias="dataSource")
__properties: ClassVar[List[str]] = ["id", "title", "visualMode", "embedUrl", "isEmbedded", "metricGroup", "direction", "metric", "filters", "measure", "fixedTimespan", "apiLink", "shouldExcludeAlertSuppressionWindows", "_links", "type", "sortDirection", "activeWithin", "dataSource"]
@field_validator('type')
def type_validate_regular_expression(cls, value):
"""Validates the regular expression"""
if not re.match(r"^List$", value):
raise ValueError(r"must validate the regular expression /^List$/")
return value
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
extra="allow",
)
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 self.model_dump_json(by_alias=True, exclude_unset=True, exclude_none=True)
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of ApiListWidget 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.
* OpenAPI `readOnly` fields are excluded.
* OpenAPI `readOnly` fields are excluded.
* OpenAPI `readOnly` fields are excluded.
"""
excluded_fields: Set[str] = set([
"id",
"embed_url",
"api_link",
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of measure
if self.measure:
_dict['measure'] = self.measure.to_dict()
# override the default output from pydantic by calling `to_dict()` of fixed_timespan
if self.fixed_timespan:
_dict['fixedTimespan'] = self.fixed_timespan.to_dict()
# override the default output from pydantic by calling `to_dict()` of links
if self.links:
_dict['_links'] = self.links.to_dict()
# override the default output from pydantic by calling `to_dict()` of active_within
if self.active_within:
_dict['activeWithin'] = self.active_within.to_dict()
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of ApiListWidget from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"id": obj.get("id"),
"title": obj.get("title"),
"visualMode": obj.get("visualMode"),
"embedUrl": obj.get("embedUrl"),
"isEmbedded": obj.get("isEmbedded"),
"metricGroup": obj.get("metricGroup"),
"direction": obj.get("direction"),
"metric": obj.get("metric"),
"filters": obj.get("filters"),
"measure": ApiWidgetMeasure.from_dict(obj["measure"]) if obj.get("measure") is not None else None,
"fixedTimespan": ApiDuration.from_dict(obj["fixedTimespan"]) if obj.get("fixedTimespan") is not None else None,
"apiLink": obj.get("apiLink"),
"shouldExcludeAlertSuppressionWindows": obj.get("shouldExcludeAlertSuppressionWindows"),
"_links": SelfLinks.from_dict(obj["_links"]) if obj.get("_links") is not None else None,
"type": obj.get("type"),
"sortDirection": obj.get("sortDirection"),
"activeWithin": ActiveWithin.from_dict(obj["activeWithin"]) if obj.get("activeWithin") is not None else None,
"dataSource": obj.get("dataSource")
})
return _obj

View File

@ -23,6 +23,7 @@ from thousandeyes_sdk.dashboards.models.dashboard_metric import DashboardMetric
from thousandeyes_sdk.dashboards.models.dashboard_metric_direction import DashboardMetricDirection
from thousandeyes_sdk.dashboards.models.metric_group import MetricGroup
from thousandeyes_sdk.dashboards.models.multi_metrics_table_datasource import MultiMetricsTableDatasource
from thousandeyes_sdk.dashboards.models.self_links import SelfLinks
from typing import Optional, Set
from typing_extensions import Self
@ -37,7 +38,8 @@ class ApiMultiMetricColumn(BaseModel):
metric: Optional[DashboardMetric] = None
filters: Optional[Dict[str, List[Any]]] = Field(default=None, description="(Optional) Specifies the filters applied to the widget. When present, the `filters` property displays. Each filter object has two properties: `filterProperty` and `filterValue`. The `filterProperty` can be values like `AGENT`, `ENDPOINT_MACHINE_ID`, `TEST`, `MONITOR`, etc. The `filterValue` represents an identifier array of the selected property.")
measure: Optional[ApiWidgetMeasure] = None
__properties: ClassVar[List[str]] = ["id", "dataSource", "metricGroup", "direction", "metric", "filters", "measure"]
links: Optional[SelfLinks] = Field(default=None, alias="_links")
__properties: ClassVar[List[str]] = ["id", "dataSource", "metricGroup", "direction", "metric", "filters", "measure", "_links"]
model_config = ConfigDict(
populate_by_name=True,
@ -82,6 +84,9 @@ class ApiMultiMetricColumn(BaseModel):
# override the default output from pydantic by calling `to_dict()` of measure
if self.measure:
_dict['measure'] = self.measure.to_dict()
# override the default output from pydantic by calling `to_dict()` of links
if self.links:
_dict['_links'] = self.links.to_dict()
return _dict
@classmethod
@ -100,7 +105,8 @@ class ApiMultiMetricColumn(BaseModel):
"direction": obj.get("direction"),
"metric": obj.get("metric"),
"filters": obj.get("filters"),
"measure": ApiWidgetMeasure.from_dict(obj["measure"]) if obj.get("measure") is not None else None
"measure": ApiWidgetMeasure.from_dict(obj["measure"]) if obj.get("measure") is not None else None,
"_links": SelfLinks.from_dict(obj["_links"]) if obj.get("_links") is not None else None
})
return _obj

View File

@ -20,6 +20,7 @@ from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from thousandeyes_sdk.dashboards.models.api_dashboard_asw import ApiDashboardAsw
from thousandeyes_sdk.dashboards.models.api_widget_data_point import ApiWidgetDataPoint
from thousandeyes_sdk.dashboards.models.self_links import SelfLinks
from typing import Optional, Set
from typing_extensions import Self
@ -32,7 +33,8 @@ class ApiMultiMetricColumnData(BaseModel):
points: Optional[List[ApiWidgetDataPoint]] = None
status: Optional[StrictStr] = Field(default=None, description="Message for not fully configured card or no data.")
alert_suppression_windows: Optional[List[ApiDashboardAsw]] = Field(default=None, alias="alertSuppressionWindows")
__properties: ClassVar[List[str]] = ["columnId", "binSize", "points", "status", "alertSuppressionWindows"]
links: Optional[SelfLinks] = Field(default=None, alias="_links")
__properties: ClassVar[List[str]] = ["columnId", "binSize", "points", "status", "alertSuppressionWindows", "_links"]
model_config = ConfigDict(
populate_by_name=True,
@ -88,6 +90,9 @@ class ApiMultiMetricColumnData(BaseModel):
if _item:
_items.append(_item.to_dict())
_dict['alertSuppressionWindows'] = _items
# override the default output from pydantic by calling `to_dict()` of links
if self.links:
_dict['_links'] = self.links.to_dict()
return _dict
@classmethod
@ -104,7 +109,8 @@ class ApiMultiMetricColumnData(BaseModel):
"binSize": obj.get("binSize"),
"points": [ApiWidgetDataPoint.from_dict(_item) for _item in obj["points"]] if obj.get("points") is not None else None,
"status": obj.get("status"),
"alertSuppressionWindows": [ApiDashboardAsw.from_dict(_item) for _item in obj["alertSuppressionWindows"]] if obj.get("alertSuppressionWindows") is not None else None
"alertSuppressionWindows": [ApiDashboardAsw.from_dict(_item) for _item in obj["alertSuppressionWindows"]] if obj.get("alertSuppressionWindows") is not None else None,
"_links": SelfLinks.from_dict(obj["_links"]) if obj.get("_links") is not None else None
})
return _obj

View File

@ -25,6 +25,7 @@ from thousandeyes_sdk.dashboards.models.dashboard_metric import DashboardMetric
from thousandeyes_sdk.dashboards.models.dashboard_metric_direction import DashboardMetricDirection
from thousandeyes_sdk.dashboards.models.metric_group import MetricGroup
from thousandeyes_sdk.dashboards.models.numbers_card_datasource import NumbersCardDatasource
from thousandeyes_sdk.dashboards.models.self_links import SelfLinks
from typing import Optional, Set
from typing_extensions import Self
@ -46,7 +47,8 @@ class ApiNumbersCard(BaseModel):
direction: Optional[DashboardMetricDirection] = None
metric: Optional[DashboardMetric] = None
filters: Optional[Dict[str, List[Any]]] = Field(default=None, description="(Optional) Specifies the filters applied to the widget. When present, the `filters` property displays. Each filter object has two properties: `filterProperty` and `filterValue`. The `filterProperty` can be values like `AGENT`, `ENDPOINT_MACHINE_ID`, `TEST`, `MONITOR`, etc. The `filterValue` represents an identifier array of the selected property.")
__properties: ClassVar[List[str]] = ["minScale", "maxScale", "unit", "id", "description", "measure", "compareToPreviousValue", "fixedTimespan", "shouldExcludeAlertSuppressionWindows", "dataSource", "metricGroup", "direction", "metric", "filters"]
links: Optional[SelfLinks] = Field(default=None, alias="_links")
__properties: ClassVar[List[str]] = ["minScale", "maxScale", "unit", "id", "description", "measure", "compareToPreviousValue", "fixedTimespan", "shouldExcludeAlertSuppressionWindows", "dataSource", "metricGroup", "direction", "metric", "filters", "_links"]
model_config = ConfigDict(
populate_by_name=True,
@ -94,6 +96,9 @@ class ApiNumbersCard(BaseModel):
# override the default output from pydantic by calling `to_dict()` of fixed_timespan
if self.fixed_timespan:
_dict['fixedTimespan'] = self.fixed_timespan.to_dict()
# override the default output from pydantic by calling `to_dict()` of links
if self.links:
_dict['_links'] = self.links.to_dict()
return _dict
@classmethod
@ -119,7 +124,8 @@ class ApiNumbersCard(BaseModel):
"metricGroup": obj.get("metricGroup"),
"direction": obj.get("direction"),
"metric": obj.get("metric"),
"filters": obj.get("filters")
"filters": obj.get("filters"),
"_links": SelfLinks.from_dict(obj["_links"]) if obj.get("_links") is not None else None
})
return _obj

View File

@ -20,6 +20,7 @@ from datetime import datetime
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional, Union
from thousandeyes_sdk.dashboards.models.api_dashboard_asw import ApiDashboardAsw
from thousandeyes_sdk.dashboards.models.self_links import SelfLinks
from typing import Optional, Set
from typing_extensions import Self
@ -37,7 +38,8 @@ class ApiNumbersCardData(BaseModel):
value: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Aggregated value.")
status: Optional[StrictStr] = Field(default=None, description="Message for not fully configured card or no data.")
alert_suppression_windows: Optional[List[ApiDashboardAsw]] = Field(default=None, alias="alertSuppressionWindows")
__properties: ClassVar[List[str]] = ["cardId", "startDate", "endDate", "previousValue", "binSize", "timestamp", "numberOfDataPoints", "value", "status", "alertSuppressionWindows"]
links: Optional[SelfLinks] = Field(default=None, alias="_links")
__properties: ClassVar[List[str]] = ["cardId", "startDate", "endDate", "previousValue", "binSize", "timestamp", "numberOfDataPoints", "value", "status", "alertSuppressionWindows", "_links"]
model_config = ConfigDict(
populate_by_name=True,
@ -86,6 +88,9 @@ class ApiNumbersCardData(BaseModel):
if _item:
_items.append(_item.to_dict())
_dict['alertSuppressionWindows'] = _items
# override the default output from pydantic by calling `to_dict()` of links
if self.links:
_dict['_links'] = self.links.to_dict()
return _dict
@classmethod
@ -107,7 +112,8 @@ class ApiNumbersCardData(BaseModel):
"numberOfDataPoints": obj.get("numberOfDataPoints"),
"value": obj.get("value"),
"status": obj.get("status"),
"alertSuppressionWindows": [ApiDashboardAsw.from_dict(_item) for _item in obj["alertSuppressionWindows"]] if obj.get("alertSuppressionWindows") is not None else None
"alertSuppressionWindows": [ApiDashboardAsw.from_dict(_item) for _item in obj["alertSuppressionWindows"]] if obj.get("alertSuppressionWindows") is not None else None,
"_links": SelfLinks.from_dict(obj["_links"]) if obj.get("_links") is not None else None
})
return _obj

View File

@ -22,6 +22,7 @@ from thousandeyes_sdk.dashboards.models.api_box_and_whiskers_widget import ApiBo
from thousandeyes_sdk.dashboards.models.api_color_grid_widget import ApiColorGridWidget
from thousandeyes_sdk.dashboards.models.api_geo_map_widget import ApiGeoMapWidget
from thousandeyes_sdk.dashboards.models.api_grouped_barchart_widget import ApiGroupedBarchartWidget
from thousandeyes_sdk.dashboards.models.api_list_widget import ApiListWidget
from thousandeyes_sdk.dashboards.models.api_multi_metric_table_widget import ApiMultiMetricTableWidget
from thousandeyes_sdk.dashboards.models.api_numbers_card_widget import ApiNumbersCardWidget
from thousandeyes_sdk.dashboards.models.api_pie_chart_widget import ApiPieChartWidget
@ -34,7 +35,7 @@ from pydantic import StrictStr, Field, model_serializer
from typing import Union, List, Set, Optional, Dict
from typing_extensions import Literal, Self
APIWIDGET_ONE_OF_SCHEMAS = ["ApiAgentStatusWidget", "ApiAlertListWidget", "ApiBoxAndWhiskersWidget", "ApiColorGridWidget", "ApiGeoMapWidget", "ApiGroupedBarchartWidget", "ApiMultiMetricTableWidget", "ApiNumbersCardWidget", "ApiPieChartWidget", "ApiStackedAreaChartWidget", "ApiStackedBarchartWidget", "ApiTableWidget", "ApiTestTableWidget", "ApiTimeseriesWidget"]
APIWIDGET_ONE_OF_SCHEMAS = ["ApiAgentStatusWidget", "ApiAlertListWidget", "ApiBoxAndWhiskersWidget", "ApiColorGridWidget", "ApiGeoMapWidget", "ApiGroupedBarchartWidget", "ApiListWidget", "ApiMultiMetricTableWidget", "ApiNumbersCardWidget", "ApiPieChartWidget", "ApiStackedAreaChartWidget", "ApiStackedBarchartWidget", "ApiTableWidget", "ApiTestTableWidget", "ApiTimeseriesWidget"]
class ApiWidget(BaseModel):
"""
@ -52,24 +53,26 @@ class ApiWidget(BaseModel):
oneof_schema_5_validator: Optional[ApiGeoMapWidget] = None
# data type: ApiGroupedBarchartWidget
oneof_schema_6_validator: Optional[ApiGroupedBarchartWidget] = None
# data type: ApiListWidget
oneof_schema_7_validator: Optional[ApiListWidget] = None
# data type: ApiMultiMetricTableWidget
oneof_schema_7_validator: Optional[ApiMultiMetricTableWidget] = None
oneof_schema_8_validator: Optional[ApiMultiMetricTableWidget] = None
# data type: ApiNumbersCardWidget
oneof_schema_8_validator: Optional[ApiNumbersCardWidget] = None
oneof_schema_9_validator: Optional[ApiNumbersCardWidget] = None
# data type: ApiPieChartWidget
oneof_schema_9_validator: Optional[ApiPieChartWidget] = None
oneof_schema_10_validator: Optional[ApiPieChartWidget] = None
# data type: ApiStackedAreaChartWidget
oneof_schema_10_validator: Optional[ApiStackedAreaChartWidget] = None
oneof_schema_11_validator: Optional[ApiStackedAreaChartWidget] = None
# data type: ApiStackedBarchartWidget
oneof_schema_11_validator: Optional[ApiStackedBarchartWidget] = None
oneof_schema_12_validator: Optional[ApiStackedBarchartWidget] = None
# data type: ApiTableWidget
oneof_schema_12_validator: Optional[ApiTableWidget] = None
oneof_schema_13_validator: Optional[ApiTableWidget] = None
# data type: ApiTestTableWidget
oneof_schema_13_validator: Optional[ApiTestTableWidget] = None
oneof_schema_14_validator: Optional[ApiTestTableWidget] = None
# data type: ApiTimeseriesWidget
oneof_schema_14_validator: Optional[ApiTimeseriesWidget] = None
actual_instance: Optional[Union[ApiAgentStatusWidget, ApiAlertListWidget, ApiBoxAndWhiskersWidget, ApiColorGridWidget, ApiGeoMapWidget, ApiGroupedBarchartWidget, ApiMultiMetricTableWidget, ApiNumbersCardWidget, ApiPieChartWidget, ApiStackedAreaChartWidget, ApiStackedBarchartWidget, ApiTableWidget, ApiTestTableWidget, ApiTimeseriesWidget]] = None
one_of_schemas: Set[str] = { "ApiAgentStatusWidget", "ApiAlertListWidget", "ApiBoxAndWhiskersWidget", "ApiColorGridWidget", "ApiGeoMapWidget", "ApiGroupedBarchartWidget", "ApiMultiMetricTableWidget", "ApiNumbersCardWidget", "ApiPieChartWidget", "ApiStackedAreaChartWidget", "ApiStackedBarchartWidget", "ApiTableWidget", "ApiTestTableWidget", "ApiTimeseriesWidget" }
oneof_schema_15_validator: Optional[ApiTimeseriesWidget] = None
actual_instance: Optional[Union[ApiAgentStatusWidget, ApiAlertListWidget, ApiBoxAndWhiskersWidget, ApiColorGridWidget, ApiGeoMapWidget, ApiGroupedBarchartWidget, ApiListWidget, ApiMultiMetricTableWidget, ApiNumbersCardWidget, ApiPieChartWidget, ApiStackedAreaChartWidget, ApiStackedBarchartWidget, ApiTableWidget, ApiTestTableWidget, ApiTimeseriesWidget]] = None
one_of_schemas: Set[str] = { "ApiAgentStatusWidget", "ApiAlertListWidget", "ApiBoxAndWhiskersWidget", "ApiColorGridWidget", "ApiGeoMapWidget", "ApiGroupedBarchartWidget", "ApiListWidget", "ApiMultiMetricTableWidget", "ApiNumbersCardWidget", "ApiPieChartWidget", "ApiStackedAreaChartWidget", "ApiStackedBarchartWidget", "ApiTableWidget", "ApiTestTableWidget", "ApiTimeseriesWidget" }
model_config = ConfigDict(
validate_assignment=True,
@ -125,6 +128,11 @@ class ApiWidget(BaseModel):
error_messages.append(f"Error! Input type `{type(v)}` is not `ApiGroupedBarchartWidget`")
else:
match += 1
# validate data type: ApiListWidget
if not isinstance(v, ApiListWidget):
error_messages.append(f"Error! Input type `{type(v)}` is not `ApiListWidget`")
else:
match += 1
# validate data type: ApiMultiMetricTableWidget
if not isinstance(v, ApiMultiMetricTableWidget):
error_messages.append(f"Error! Input type `{type(v)}` is not `ApiMultiMetricTableWidget`")
@ -167,10 +175,10 @@ class ApiWidget(BaseModel):
match += 1
if match > 1:
# more than 1 match
raise ValueError("Multiple matches found when setting `actual_instance` in ApiWidget with oneOf schemas: ApiAgentStatusWidget, ApiAlertListWidget, ApiBoxAndWhiskersWidget, ApiColorGridWidget, ApiGeoMapWidget, ApiGroupedBarchartWidget, ApiMultiMetricTableWidget, ApiNumbersCardWidget, ApiPieChartWidget, ApiStackedAreaChartWidget, ApiStackedBarchartWidget, ApiTableWidget, ApiTestTableWidget, ApiTimeseriesWidget. Details: " + ", ".join(error_messages))
raise ValueError("Multiple matches found when setting `actual_instance` in ApiWidget with oneOf schemas: ApiAgentStatusWidget, ApiAlertListWidget, ApiBoxAndWhiskersWidget, ApiColorGridWidget, ApiGeoMapWidget, ApiGroupedBarchartWidget, ApiListWidget, ApiMultiMetricTableWidget, ApiNumbersCardWidget, ApiPieChartWidget, ApiStackedAreaChartWidget, ApiStackedBarchartWidget, ApiTableWidget, ApiTestTableWidget, ApiTimeseriesWidget. Details: " + ", ".join(error_messages))
elif match == 0:
# no match
raise ValueError("No match found when setting `actual_instance` in ApiWidget with oneOf schemas: ApiAgentStatusWidget, ApiAlertListWidget, ApiBoxAndWhiskersWidget, ApiColorGridWidget, ApiGeoMapWidget, ApiGroupedBarchartWidget, ApiMultiMetricTableWidget, ApiNumbersCardWidget, ApiPieChartWidget, ApiStackedAreaChartWidget, ApiStackedBarchartWidget, ApiTableWidget, ApiTestTableWidget, ApiTimeseriesWidget. Details: " + ", ".join(error_messages))
raise ValueError("No match found when setting `actual_instance` in ApiWidget with oneOf schemas: ApiAgentStatusWidget, ApiAlertListWidget, ApiBoxAndWhiskersWidget, ApiColorGridWidget, ApiGeoMapWidget, ApiGroupedBarchartWidget, ApiListWidget, ApiMultiMetricTableWidget, ApiNumbersCardWidget, ApiPieChartWidget, ApiStackedAreaChartWidget, ApiStackedBarchartWidget, ApiTableWidget, ApiTestTableWidget, ApiTimeseriesWidget. Details: " + ", ".join(error_messages))
else:
return v
@ -221,6 +229,12 @@ class ApiWidget(BaseModel):
match += 1
except (ValidationError, ValueError) as e:
error_messages.append(str(e))
# deserialize data into ApiListWidget
try:
instance.actual_instance = ApiListWidget.from_json(json_str)
match += 1
except (ValidationError, ValueError) as e:
error_messages.append(str(e))
# deserialize data into ApiMultiMetricTableWidget
try:
instance.actual_instance = ApiMultiMetricTableWidget.from_json(json_str)
@ -272,10 +286,10 @@ class ApiWidget(BaseModel):
if match > 1:
# more than 1 match
raise ValueError("Multiple matches found when deserializing the JSON string into ApiWidget with oneOf schemas: ApiAgentStatusWidget, ApiAlertListWidget, ApiBoxAndWhiskersWidget, ApiColorGridWidget, ApiGeoMapWidget, ApiGroupedBarchartWidget, ApiMultiMetricTableWidget, ApiNumbersCardWidget, ApiPieChartWidget, ApiStackedAreaChartWidget, ApiStackedBarchartWidget, ApiTableWidget, ApiTestTableWidget, ApiTimeseriesWidget. Details: " + ", ".join(error_messages))
raise ValueError("Multiple matches found when deserializing the JSON string into ApiWidget with oneOf schemas: ApiAgentStatusWidget, ApiAlertListWidget, ApiBoxAndWhiskersWidget, ApiColorGridWidget, ApiGeoMapWidget, ApiGroupedBarchartWidget, ApiListWidget, ApiMultiMetricTableWidget, ApiNumbersCardWidget, ApiPieChartWidget, ApiStackedAreaChartWidget, ApiStackedBarchartWidget, ApiTableWidget, ApiTestTableWidget, ApiTimeseriesWidget. Details: " + ", ".join(error_messages))
elif match == 0:
# no match
raise ValueError("No match found when deserializing the JSON string into ApiWidget with oneOf schemas: ApiAgentStatusWidget, ApiAlertListWidget, ApiBoxAndWhiskersWidget, ApiColorGridWidget, ApiGeoMapWidget, ApiGroupedBarchartWidget, ApiMultiMetricTableWidget, ApiNumbersCardWidget, ApiPieChartWidget, ApiStackedAreaChartWidget, ApiStackedBarchartWidget, ApiTableWidget, ApiTestTableWidget, ApiTimeseriesWidget. Details: " + ", ".join(error_messages))
raise ValueError("No match found when deserializing the JSON string into ApiWidget with oneOf schemas: ApiAgentStatusWidget, ApiAlertListWidget, ApiBoxAndWhiskersWidget, ApiColorGridWidget, ApiGeoMapWidget, ApiGroupedBarchartWidget, ApiListWidget, ApiMultiMetricTableWidget, ApiNumbersCardWidget, ApiPieChartWidget, ApiStackedAreaChartWidget, ApiStackedBarchartWidget, ApiTableWidget, ApiTestTableWidget, ApiTimeseriesWidget. Details: " + ", ".join(error_messages))
else:
return instance
@ -293,7 +307,7 @@ class ApiWidget(BaseModel):
else:
return json.dumps(self.actual_instance)
def to_dict(self) -> Optional[Union[Dict[str, Any], ApiAgentStatusWidget, ApiAlertListWidget, ApiBoxAndWhiskersWidget, ApiColorGridWidget, ApiGeoMapWidget, ApiGroupedBarchartWidget, ApiMultiMetricTableWidget, ApiNumbersCardWidget, ApiPieChartWidget, ApiStackedAreaChartWidget, ApiStackedBarchartWidget, ApiTableWidget, ApiTestTableWidget, ApiTimeseriesWidget]]:
def to_dict(self) -> Optional[Union[Dict[str, Any], ApiAgentStatusWidget, ApiAlertListWidget, ApiBoxAndWhiskersWidget, ApiColorGridWidget, ApiGeoMapWidget, ApiGroupedBarchartWidget, ApiListWidget, ApiMultiMetricTableWidget, ApiNumbersCardWidget, ApiPieChartWidget, ApiStackedAreaChartWidget, ApiStackedBarchartWidget, ApiTableWidget, ApiTestTableWidget, ApiTimeseriesWidget]]:
"""Returns the dict representation of the actual instance"""
if self.actual_instance is None:
return None

View File

@ -37,6 +37,7 @@ class LegacyAlertListAlertType(str, Enum):
WEB_MINUS__PAGE_LOAD = 'Web - Page Load'
WEB_MINUS__TRANSACTION_LEFT_PARENTHESIS_CLASSIC_RIGHT_PARENTHESIS = 'Web - Transaction (Classic)'
WEB_MINUS__TRANSACTION = 'Web - Transaction'
API = 'API'
WEB_MINUS__FTP_SERVER = 'Web - FTP Server'
VOICE_MINUS__SIP_SERVER = 'Voice - SIP Server'
VOICE_MINUS__RTP_STREAM = 'Voice - RTP Stream'

View File

@ -1,9 +1,9 @@
# coding: utf-8
"""
Endpoint Test Results API
Dashboards API
Retrieve results for scheduled and dynamic tests on endpoint agents.
Manage ThousandEyes Dashboards.
Generated by OpenAPI Generator (https://openapi-generator.tech)
@ -17,23 +17,20 @@ from enum import Enum
from typing_extensions import Self
class EndpointIpVersionTemplate(str, Enum):
class ListDatasource(str, Enum):
"""
IP version the test should use for network tests.
Data source for the list widget.
"""
"""
allowed enum values
"""
V4_ONLY = 'V4_ONLY'
V6_ONLY = 'V6_ONLY'
V6_PREFER = 'V6_PREFER'
OS_DEFAULT = 'OS_DEFAULT'
EVENT_DETECTION = 'EVENT_DETECTION'
UNKNOWN = 'unknown'
@classmethod
def from_json(cls, json_str: str) -> Self:
"""Create an instance of EndpointIpVersionTemplate from a JSON string"""
"""Create an instance of ListDatasource from a JSON string"""
return cls(json.loads(json_str))
@classmethod

View File

@ -36,6 +36,7 @@ class WidgetType(str, Enum):
AGENT_STATUS = 'Agent Status'
COLOR_GRID = 'Color Grid'
ALERT_LIST = 'Alert List'
LIST = 'List'
TEST_TABLE = 'Test Table'
MAP = 'Map'
BOX_AND_WHISKERS = 'Box and Whiskers'

View File

@ -386,6 +386,18 @@ class TestDashboardSnapshotsApi(unittest.TestCase):
"cards" : [ {
"numberOfDataPoints" : 24192,
"endDate" : "2023-05-16T10:14:28Z",
"_links" : {
"self" : {
"hreflang" : "hreflang",
"templated" : true,
"profile" : "profile",
"name" : "name",
"href" : "https://api.thousandeyes.com/v7/link/to/resource/id",
"type" : "type",
"deprecation" : "deprecation",
"title" : "title"
}
},
"cardId" : "lrxxr",
"alertSuppressionWindows" : [ {
"testIds" : [ "281474976710661" ],
@ -415,6 +427,18 @@ class TestDashboardSnapshotsApi(unittest.TestCase):
}, {
"numberOfDataPoints" : 24192,
"endDate" : "2023-05-16T10:14:28Z",
"_links" : {
"self" : {
"hreflang" : "hreflang",
"templated" : true,
"profile" : "profile",
"name" : "name",
"href" : "https://api.thousandeyes.com/v7/link/to/resource/id",
"type" : "type",
"deprecation" : "deprecation",
"title" : "title"
}
},
"cardId" : "lrxxr",
"alertSuppressionWindows" : [ {
"testIds" : [ "281474976710661" ],
@ -500,6 +524,18 @@ class TestDashboardSnapshotsApi(unittest.TestCase):
"target" : "www.google.com"
} ],
"columns" : [ {
"_links" : {
"self" : {
"hreflang" : "hreflang",
"templated" : true,
"profile" : "profile",
"name" : "name",
"href" : "https://api.thousandeyes.com/v7/link/to/resource/id",
"type" : "type",
"deprecation" : "deprecation",
"title" : "title"
}
},
"columnId" : "938to",
"alertSuppressionWindows" : [ {
"testIds" : [ "281474976710661" ],
@ -546,6 +582,18 @@ class TestDashboardSnapshotsApi(unittest.TestCase):
} ],
"status" : "No data"
}, {
"_links" : {
"self" : {
"hreflang" : "hreflang",
"templated" : true,
"profile" : "profile",
"name" : "name",
"href" : "https://api.thousandeyes.com/v7/link/to/resource/id",
"type" : "type",
"deprecation" : "deprecation",
"title" : "title"
}
},
"columnId" : "938to",
"alertSuppressionWindows" : [ {
"testIds" : [ "281474976710661" ],

View File

@ -484,6 +484,18 @@ class TestDashboardsApi(unittest.TestCase):
"cards" : [ {
"numberOfDataPoints" : 24192,
"endDate" : "2023-05-16T10:14:28Z",
"_links" : {
"self" : {
"hreflang" : "hreflang",
"templated" : true,
"profile" : "profile",
"name" : "name",
"href" : "https://api.thousandeyes.com/v7/link/to/resource/id",
"type" : "type",
"deprecation" : "deprecation",
"title" : "title"
}
},
"cardId" : "lrxxr",
"alertSuppressionWindows" : [ {
"testIds" : [ "281474976710661" ],
@ -513,6 +525,18 @@ class TestDashboardsApi(unittest.TestCase):
}, {
"numberOfDataPoints" : 24192,
"endDate" : "2023-05-16T10:14:28Z",
"_links" : {
"self" : {
"hreflang" : "hreflang",
"templated" : true,
"profile" : "profile",
"name" : "name",
"href" : "https://api.thousandeyes.com/v7/link/to/resource/id",
"type" : "type",
"deprecation" : "deprecation",
"title" : "title"
}
},
"cardId" : "lrxxr",
"alertSuppressionWindows" : [ {
"testIds" : [ "281474976710661" ],
@ -598,6 +622,18 @@ class TestDashboardsApi(unittest.TestCase):
"target" : "www.google.com"
} ],
"columns" : [ {
"_links" : {
"self" : {
"hreflang" : "hreflang",
"templated" : true,
"profile" : "profile",
"name" : "name",
"href" : "https://api.thousandeyes.com/v7/link/to/resource/id",
"type" : "type",
"deprecation" : "deprecation",
"title" : "title"
}
},
"columnId" : "938to",
"alertSuppressionWindows" : [ {
"testIds" : [ "281474976710661" ],
@ -644,6 +680,18 @@ class TestDashboardsApi(unittest.TestCase):
} ],
"status" : "No data"
}, {
"_links" : {
"self" : {
"hreflang" : "hreflang",
"templated" : true,
"profile" : "profile",
"name" : "name",
"href" : "https://api.thousandeyes.com/v7/link/to/resource/id",
"type" : "type",
"deprecation" : "deprecation",
"title" : "title"
}
},
"columnId" : "938to",
"alertSuppressionWindows" : [ {
"testIds" : [ "281474976710661" ],
@ -1083,6 +1131,125 @@ class TestDashboardsApi(unittest.TestCase):
self.assertIsNotNone(element)
assert_constructed_model_matches_example_json(element, response_loaded_json[index])
def test_get_individual_card_data_models_validation(self) -> None:
"""Test case for get_individual_card_data request and response models"""
response_body_json = """
{
"numberOfDataPoints" : 24192,
"endDate" : "2023-05-16T10:14:28Z",
"_links" : {
"self" : {
"hreflang" : "hreflang",
"templated" : true,
"profile" : "profile",
"name" : "name",
"href" : "https://api.thousandeyes.com/v7/link/to/resource/id",
"type" : "type",
"deprecation" : "deprecation",
"title" : "title"
}
},
"cardId" : "lrxxr",
"alertSuppressionWindows" : [ {
"testIds" : [ "281474976710661" ],
"repeatUnit" : "week",
"durationInSeconds" : 7200,
"repeat" : "custom",
"name" : "Test dashboards",
"repeatEvery" : 5,
"id" : "281474976710662",
"startTimes" : [ "2023-05-16T10:14:28Z" ]
}, {
"testIds" : [ "281474976710661" ],
"repeatUnit" : "week",
"durationInSeconds" : 7200,
"repeat" : "custom",
"name" : "Test dashboards",
"repeatEvery" : 5,
"id" : "281474976710662",
"startTimes" : [ "2023-05-16T10:14:28Z" ]
} ],
"binSize" : 3600,
"previousValue" : 500.0,
"value" : 100.0,
"startDate" : "2023-05-16T10:14:28Z",
"timestamp" : 1567620000,
"status" : "No data"
}"""
response_loaded_json = json.loads(response_body_json)
response_from_json = thousandeyes_sdk.dashboards.models.ApiNumbersCardData.from_json(response_body_json)
assert_constructed_model_matches_example_json(response_from_json, response_loaded_json)
def test_get_individual_column_data_models_validation(self) -> None:
"""Test case for get_individual_column_data request and response models"""
response_body_json = """
{
"_links" : {
"self" : {
"hreflang" : "hreflang",
"templated" : true,
"profile" : "profile",
"name" : "name",
"href" : "https://api.thousandeyes.com/v7/link/to/resource/id",
"type" : "type",
"deprecation" : "deprecation",
"title" : "title"
}
},
"columnId" : "938to",
"alertSuppressionWindows" : [ {
"testIds" : [ "281474976710661" ],
"repeatUnit" : "week",
"durationInSeconds" : 7200,
"repeat" : "custom",
"name" : "Test dashboards",
"repeatEvery" : 5,
"id" : "281474976710662",
"startTimes" : [ "2023-05-16T10:14:28Z" ]
}, {
"testIds" : [ "281474976710661" ],
"repeatUnit" : "week",
"durationInSeconds" : 7200,
"repeat" : "custom",
"name" : "Test dashboards",
"repeatEvery" : 5,
"id" : "281474976710662",
"startTimes" : [ "2023-05-16T10:14:28Z" ]
} ],
"binSize" : 3600,
"points" : [ {
"numberOfDataPoints" : 23304,
"groups" : [ {
"groupProperty" : "COUNTRY",
"groupValue" : "US"
}, {
"groupProperty" : "COUNTRY",
"groupValue" : "US"
} ],
"value" : 100.0,
"timestamp" : 1567620000
}, {
"numberOfDataPoints" : 23304,
"groups" : [ {
"groupProperty" : "COUNTRY",
"groupValue" : "US"
}, {
"groupProperty" : "COUNTRY",
"groupValue" : "US"
} ],
"value" : 100.0,
"timestamp" : 1567620000
} ],
"status" : "No data"
}"""
response_loaded_json = json.loads(response_body_json)
response_from_json = thousandeyes_sdk.dashboards.models.ApiMultiMetricColumnData.from_json(response_body_json)
assert_constructed_model_matches_example_json(response_from_json, response_loaded_json)
def test_update_dashboard_models_validation(self) -> None:
"""Test case for update_dashboard request and response models"""
request_body_json = """

View File

@ -9,7 +9,7 @@ To access Emulation API operations, the following permissions are required:
This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
- API version: 7.0.58
- API version: 7.0.68
- Generator version: 7.6.0
- Build package: com.thousandeyes.api.codegen.ThousandeyesPythonGenerator

View File

@ -5,7 +5,7 @@ For more information about Endpoint Agents, see [Endpoint Agents](https://docs.t
This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
- API version: 7.0.58
- API version: 7.0.68
- Generator version: 7.6.0
- Build package: com.thousandeyes.api.codegen.ThousandeyesPythonGenerator

View File

@ -16,6 +16,7 @@ Name | Type | Description | Notes
**location_subdivision1_code** | **List[str]** | Filter using the code for the first level administrative division within the country. In US/Canada this is the State, in UK it&#39;s the country e.g. &#x60;ENG&#x60; | [optional]
**location_city** | **List[str]** | This is a prefix match on the city name field. The endpoint expects this to contain the name of the city in English. e.g. &#39;Paris&#39; or &#39;&#39; | [optional]
**license_type** | [**List[AgentLicenseType]**](AgentLicenseType.md) | Filter on the agent&#39;s license type | [optional]
**any_connect_device_id** | **List[str]** | IDs of devices that has the Cisco Secure Client deployed with the Internet Security module. Returns only agents that have at least one matching &#x60;anyConnectDeviceId&#x60;. | [optional]
## Example

View File

@ -5,7 +5,7 @@
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**key** | **str** | Name or identifier of the external metadata property. | [optional]
**key** | **str** | ID of the device that has the Cisco Secure Client deployed with the Internet Security module. | [optional]
**value** | **str** | Value of the external metadata property. | [optional]
## Example

View File

@ -38,7 +38,8 @@ class AgentSearchFilters(BaseModel):
location_subdivision1_code: Optional[List[StrictStr]] = Field(default=None, description="Filter using the code for the first level administrative division within the country. In US/Canada this is the State, in UK it's the country e.g. `ENG` ", alias="locationSubdivision1Code")
location_city: Optional[List[StrictStr]] = Field(default=None, description="This is a prefix match on the city name field. The endpoint expects this to contain the name of the city in English. e.g. 'Paris' or '' ", alias="locationCity")
license_type: Optional[List[AgentLicenseType]] = Field(default=None, description="Filter on the agent's license type ", alias="licenseType")
__properties: ClassVar[List[str]] = ["id", "agentName", "computerName", "username", "userPrincipalName", "platform", "osVersion", "locationCountryISO", "locationSubdivision1Code", "locationCity", "licenseType"]
any_connect_device_id: Optional[List[StrictStr]] = Field(default=None, description="IDs of devices that has the Cisco Secure Client deployed with the Internet Security module. Returns only agents that have at least one matching `anyConnectDeviceId`. ", alias="anyConnectDeviceId")
__properties: ClassVar[List[str]] = ["id", "agentName", "computerName", "username", "userPrincipalName", "platform", "osVersion", "locationCountryISO", "locationSubdivision1Code", "locationCity", "licenseType", "anyConnectDeviceId"]
model_config = ConfigDict(
populate_by_name=True,
@ -102,7 +103,8 @@ class AgentSearchFilters(BaseModel):
"locationCountryISO": obj.get("locationCountryISO"),
"locationSubdivision1Code": obj.get("locationSubdivision1Code"),
"locationCity": obj.get("locationCity"),
"licenseType": obj.get("licenseType")
"licenseType": obj.get("licenseType"),
"anyConnectDeviceId": obj.get("anyConnectDeviceId")
})
return _obj

View File

@ -25,7 +25,7 @@ class ExternalMetadataItem(BaseModel):
"""
ExternalMetadataItem
""" # noqa: E501
key: Optional[StrictStr] = Field(default=None, description="Name or identifier of the external metadata property.")
key: Optional[StrictStr] = Field(default=None, description="ID of the device that has the Cisco Secure Client deployed with the Internet Security module.")
value: Optional[StrictStr] = Field(default=None, description="Value of the external metadata property.")
__properties: ClassVar[List[str]] = ["key", "value"]

View File

@ -383,6 +383,7 @@ class TestEndpointAgentsApi(unittest.TestCase):
"licenseType" : [ "essentials", "essentials" ],
"osVersion" : [ "Version 10.15.2", "Version 10.15.2" ],
"computerName" : [ "DESKTOP-45AE8", "DESKTOP-45AE8" ],
"anyConnectDeviceId" : [ "JDLKSLFEIJER004334F" ],
"locationCountryISO" : [ "FR", "FR" ],
"agentName" : [ "myagent-1234", "myagent-1234" ],
"locationSubdivision1Code" : [ "ENG", "ENG" ],

View File

@ -11,7 +11,7 @@ docs/EndpointHttpServerBaseTest.md
docs/EndpointHttpServerInstantTest.md
docs/EndpointHttpServerTest.md
docs/EndpointInstantTest.md
docs/EndpointIpVersionTemplate.md
docs/EndpointIpVersionIn.md
docs/EndpointRunScheduledInstantTestResult.md
docs/EndpointScheduledTestType.md
docs/EndpointSpecificAgentsSelectorConfig.md
@ -49,7 +49,7 @@ src/thousandeyes_sdk/endpoint_instant_tests/models/endpoint_http_server_base_tes
src/thousandeyes_sdk/endpoint_instant_tests/models/endpoint_http_server_instant_test.py
src/thousandeyes_sdk/endpoint_instant_tests/models/endpoint_http_server_test.py
src/thousandeyes_sdk/endpoint_instant_tests/models/endpoint_instant_test.py
src/thousandeyes_sdk/endpoint_instant_tests/models/endpoint_ip_version_template.py
src/thousandeyes_sdk/endpoint_instant_tests/models/endpoint_ip_version_in.py
src/thousandeyes_sdk/endpoint_instant_tests/models/endpoint_run_scheduled_instant_test_result.py
src/thousandeyes_sdk/endpoint_instant_tests/models/endpoint_scheduled_test_type.py
src/thousandeyes_sdk/endpoint_instant_tests/models/endpoint_specific_agents_selector_config.py

View File

@ -13,7 +13,7 @@ The URLs for these API test data endpoints are provided within the test definiti
This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
- API version: 7.0.58
- API version: 7.0.68
- Generator version: 7.6.0
- Build package: com.thousandeyes.api.codegen.ThousandeyesPythonGenerator
@ -121,7 +121,7 @@ Class | Method | HTTP request | Description
- [EndpointHttpServerInstantTest](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-endpoint-instant-tests/docs/EndpointHttpServerInstantTest.md)
- [EndpointHttpServerTest](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-endpoint-instant-tests/docs/EndpointHttpServerTest.md)
- [EndpointInstantTest](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-endpoint-instant-tests/docs/EndpointInstantTest.md)
- [EndpointIpVersionTemplate](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-endpoint-instant-tests/docs/EndpointIpVersionTemplate.md)
- [EndpointIpVersionIn](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-endpoint-instant-tests/docs/EndpointIpVersionIn.md)
- [EndpointRunScheduledInstantTestResult](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-endpoint-instant-tests/docs/EndpointRunScheduledInstantTestResult.md)
- [EndpointScheduledTestType](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-endpoint-instant-tests/docs/EndpointScheduledTestType.md)
- [EndpointSpecificAgentsSelectorConfig](https://github.com/thousandeyes/thousandeyes-sdk-python//tree/main/thousandeyes-sdk-endpoint-instant-tests/docs/EndpointSpecificAgentsSelectorConfig.md)

View File

@ -10,6 +10,7 @@ Name | Type | Description | Notes
**endpoint_agent_labels** | **List[str]** | List of endpoint agent label IDs (obtained from &#x60;/endpoint/labels&#x60; endpoint), required when &#x60;agentSelectorType&#x60; is set to &#x60;agent-labels&#x60;. | [optional]
**max_machines** | **int** | Maximum number of agents which can execute the test. | [optional] [default to 25]
**test_name** | **str** | Name of the test. |
**ip_version** | [**EndpointIpVersionIn**](EndpointIpVersionIn.md) | | [optional]
**server_name** | **str** | A server address without a protocol or IP address. **Deprecated, use &#x60;server&#x60; instead**. | [optional]
**server** | **str** | Target domain name or IP address. |
**port** | **int** | Port number. | [optional] [default to 443]

View File

@ -18,7 +18,7 @@ Name | Type | Description | Notes
**modified_date** | **datetime** | UTC last modification date (ISO date-time format). | [optional] [readonly]
**network_measurements** | **bool** | Enable or disable network measurements. Set to true to enable or false to disable network measurements. | [optional] [default to True]
**protocol** | [**EndpointTestProtocol**](EndpointTestProtocol.md) | | [optional]
**ip_version** | [**EndpointIpVersionTemplate**](EndpointIpVersionTemplate.md) | | [optional]
**ip_version** | **str** | For reading current network test configurations, the IP version of the test. Values include V4_ONLY, V6_ONLY, V6_PREFER, and OS_DEFAULT. | [optional]
**server** | **str** | Target domain name or IP address. | [optional]
**test_id** | **str** | Each test is assigned a unique ID to access test data from other endpoints. | [optional] [readonly]
**test_name** | **str** | Name of the test. | [optional]

Some files were not shown because too many files have changed in this diff Show More