Skip to content

Commit 1ca3372

Browse files
authored
feat(cockpit): add new Data-exporter endpoints + types (#1386)
1 parent 82d7fb1 commit 1ca3372

File tree

8 files changed

+404
-0
lines changed

8 files changed

+404
-0
lines changed

scaleway-async/scaleway_async/cockpit/v1/__init__.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from .types import ListDataSourcesRequestOrderBy
99
from .types import ListGrafanaUsersRequestOrderBy
1010
from .types import ListPlansRequestOrderBy
11+
from .types import ListProductsRequestOrderBy
1112
from .types import ListTokensRequestOrderBy
1213
from .types import PlanName
1314
from .types import TokenScope
@@ -22,6 +23,7 @@
2223
from .types import GrafanaProductDashboard
2324
from .types import GrafanaUser
2425
from .types import Plan
26+
from .types import Product
2527
from .types import Token
2628
from .types import Usage
2729
from .types import AlertManager
@@ -47,6 +49,7 @@
4749
from .types import ListGrafanaProductDashboardsResponse
4850
from .types import ListGrafanaUsersResponse
4951
from .types import ListPlansResponse
52+
from .types import ListProductsResponse
5053
from .types import ListTokensResponse
5154
from .types import RegionalApiCreateContactPointRequest
5255
from .types import RegionalApiCreateDataSourceRequest
@@ -67,6 +70,7 @@
6770
from .types import RegionalApiListAlertsRequest
6871
from .types import RegionalApiListContactPointsRequest
6972
from .types import RegionalApiListDataSourcesRequest
73+
from .types import RegionalApiListProductsRequest
7074
from .types import RegionalApiListTokensRequest
7175
from .types import RegionalApiTriggerTestAlertRequest
7276
from .types import RegionalApiUpdateContactPointRequest
@@ -84,6 +88,7 @@
8488
"ListDataSourcesRequestOrderBy",
8589
"ListGrafanaUsersRequestOrderBy",
8690
"ListPlansRequestOrderBy",
91+
"ListProductsRequestOrderBy",
8792
"ListTokensRequestOrderBy",
8893
"PlanName",
8994
"TokenScope",
@@ -98,6 +103,7 @@
98103
"GrafanaProductDashboard",
99104
"GrafanaUser",
100105
"Plan",
106+
"Product",
101107
"Token",
102108
"Usage",
103109
"AlertManager",
@@ -123,6 +129,7 @@
123129
"ListGrafanaProductDashboardsResponse",
124130
"ListGrafanaUsersResponse",
125131
"ListPlansResponse",
132+
"ListProductsResponse",
126133
"ListTokensResponse",
127134
"RegionalApiCreateContactPointRequest",
128135
"RegionalApiCreateDataSourceRequest",
@@ -143,6 +150,7 @@
143150
"RegionalApiListAlertsRequest",
144151
"RegionalApiListContactPointsRequest",
145152
"RegionalApiListDataSourcesRequest",
153+
"RegionalApiListProductsRequest",
146154
"RegionalApiListTokensRequest",
147155
"RegionalApiTriggerTestAlertRequest",
148156
"RegionalApiUpdateContactPointRequest",

scaleway-async/scaleway_async/cockpit/v1/api.py

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
ListDataSourcesRequestOrderBy,
2121
ListGrafanaUsersRequestOrderBy,
2222
ListPlansRequestOrderBy,
23+
ListProductsRequestOrderBy,
2324
ListTokensRequestOrderBy,
2425
PlanName,
2526
TokenScope,
@@ -44,8 +45,10 @@
4445
ListGrafanaProductDashboardsResponse,
4546
ListGrafanaUsersResponse,
4647
ListPlansResponse,
48+
ListProductsResponse,
4749
ListTokensResponse,
4850
Plan,
51+
Product,
4952
RegionalApiCreateContactPointRequest,
5053
RegionalApiCreateDataSourceRequest,
5154
RegionalApiCreateTokenRequest,
@@ -79,6 +82,7 @@
7982
unmarshal_ListGrafanaProductDashboardsResponse,
8083
unmarshal_ListGrafanaUsersResponse,
8184
unmarshal_ListPlansResponse,
85+
unmarshal_ListProductsResponse,
8286
unmarshal_ListTokensResponse,
8387
unmarshal_UsageOverview,
8488
marshal_GlobalApiCreateGrafanaUserRequest,
@@ -1126,6 +1130,79 @@ async def delete_token(
11261130

11271131
self._throw_on_error(res)
11281132

1133+
async def list_products(
1134+
self,
1135+
*,
1136+
region: Optional[ScwRegion] = None,
1137+
page: Optional[int] = None,
1138+
page_size: Optional[int] = None,
1139+
order_by: Optional[ListProductsRequestOrderBy] = None,
1140+
) -> ListProductsResponse:
1141+
"""
1142+
List all Scaleway products that send metrics and/or logs to Cockpit.
1143+
:param region: Region to target. If none is passed will use default region from the config.
1144+
:param page: Page number to return from the paginated results.
1145+
:param page_size: Number of products to return per page.
1146+
:param order_by: Sort order for products in the response.
1147+
:return: :class:`ListProductsResponse <ListProductsResponse>`
1148+
1149+
Usage:
1150+
::
1151+
1152+
result = await api.list_products()
1153+
"""
1154+
1155+
param_region = validate_path_param(
1156+
"region", region or self.client.default_region
1157+
)
1158+
1159+
res = self._request(
1160+
"GET",
1161+
f"/cockpit/v1/regions/{param_region}/products",
1162+
params={
1163+
"order_by": order_by,
1164+
"page": page,
1165+
"page_size": page_size or self.client.default_page_size,
1166+
},
1167+
)
1168+
1169+
self._throw_on_error(res)
1170+
return unmarshal_ListProductsResponse(res.json())
1171+
1172+
async def list_products_all(
1173+
self,
1174+
*,
1175+
region: Optional[ScwRegion] = None,
1176+
page: Optional[int] = None,
1177+
page_size: Optional[int] = None,
1178+
order_by: Optional[ListProductsRequestOrderBy] = None,
1179+
) -> list[Product]:
1180+
"""
1181+
List all Scaleway products that send metrics and/or logs to Cockpit.
1182+
:param region: Region to target. If none is passed will use default region from the config.
1183+
:param page: Page number to return from the paginated results.
1184+
:param page_size: Number of products to return per page.
1185+
:param order_by: Sort order for products in the response.
1186+
:return: :class:`list[Product] <list[Product]>`
1187+
1188+
Usage:
1189+
::
1190+
1191+
result = await api.list_products_all()
1192+
"""
1193+
1194+
return await fetch_all_pages_async(
1195+
type=ListProductsResponse,
1196+
key="products_list",
1197+
fetcher=self.list_products,
1198+
args={
1199+
"region": region,
1200+
"page": page,
1201+
"page_size": page_size,
1202+
"order_by": order_by,
1203+
},
1204+
)
1205+
11291206
async def get_alert_manager(
11301207
self,
11311208
*,

scaleway-async/scaleway_async/cockpit/v1/marshalling.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
ListGrafanaProductDashboardsResponse,
4242
ListGrafanaUsersResponse,
4343
ListPlansResponse,
44+
Product,
45+
ListProductsResponse,
4446
ListTokensResponse,
4547
Usage,
4648
UsageOverview,
@@ -873,6 +875,66 @@ def unmarshal_ListPlansResponse(data: Any) -> ListPlansResponse:
873875
return ListPlansResponse(**args)
874876

875877

878+
def unmarshal_Product(data: Any) -> Product:
879+
if not isinstance(data, dict):
880+
raise TypeError(
881+
"Unmarshalling the type 'Product' failed as data isn't a dictionary."
882+
)
883+
884+
args: dict[str, Any] = {}
885+
886+
field = data.get("name", None)
887+
if field is not None:
888+
args["name"] = field
889+
else:
890+
args["name"] = None
891+
892+
field = data.get("display_name", None)
893+
if field is not None:
894+
args["display_name"] = field
895+
else:
896+
args["display_name"] = None
897+
898+
field = data.get("family_name", None)
899+
if field is not None:
900+
args["family_name"] = field
901+
else:
902+
args["family_name"] = None
903+
904+
field = data.get("resource_types", None)
905+
if field is not None:
906+
args["resource_types"] = field
907+
else:
908+
args["resource_types"] = None
909+
910+
return Product(**args)
911+
912+
913+
def unmarshal_ListProductsResponse(data: Any) -> ListProductsResponse:
914+
if not isinstance(data, dict):
915+
raise TypeError(
916+
"Unmarshalling the type 'ListProductsResponse' failed as data isn't a dictionary."
917+
)
918+
919+
args: dict[str, Any] = {}
920+
921+
field = data.get("products_list", None)
922+
if field is not None:
923+
args["products_list"] = (
924+
[unmarshal_Product(v) for v in field] if field is not None else None
925+
)
926+
else:
927+
args["products_list"] = None
928+
929+
field = data.get("total_count", None)
930+
if field is not None:
931+
args["total_count"] = field
932+
else:
933+
args["total_count"] = None
934+
935+
return ListProductsResponse(**args)
936+
937+
876938
def unmarshal_ListTokensResponse(data: Any) -> ListTokensResponse:
877939
if not isinstance(data, dict):
878940
raise TypeError(

scaleway-async/scaleway_async/cockpit/v1/types.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,18 @@ def __str__(self) -> str:
9393
return str(self.value)
9494

9595

96+
class ListProductsRequestOrderBy(str, Enum, metaclass=StrEnumMeta):
97+
CREATED_AT_ASC = "created_at_asc"
98+
CREATED_AT_DESC = "created_at_desc"
99+
DISPLAY_NAME_ASC = "display_name_asc"
100+
DISPLAY_NAME_DESC = "display_name_desc"
101+
FAMILY_NAME_ASC = "family_name_asc"
102+
FAMILY_NAME_DESC = "family_name_desc"
103+
104+
def __str__(self) -> str:
105+
return str(self.value)
106+
107+
96108
class ListTokensRequestOrderBy(str, Enum, metaclass=StrEnumMeta):
97109
CREATED_AT_ASC = "created_at_asc"
98110
CREATED_AT_DESC = "created_at_desc"
@@ -444,6 +456,14 @@ class Plan:
444456
"""
445457

446458

459+
@dataclass
460+
class Product:
461+
name: str
462+
display_name: str
463+
family_name: str
464+
resource_types: list[str]
465+
466+
447467
@dataclass
448468
class Token:
449469
"""
@@ -964,6 +984,12 @@ class ListPlansResponse:
964984
"""
965985

966986

987+
@dataclass
988+
class ListProductsResponse:
989+
products_list: list[Product]
990+
total_count: int
991+
992+
967993
@dataclass
968994
class ListTokensResponse:
969995
"""
@@ -1382,6 +1408,35 @@ class RegionalApiListDataSourcesRequest:
13821408
"""
13831409

13841410

1411+
@dataclass
1412+
class RegionalApiListProductsRequest:
1413+
"""
1414+
List all Scaleway products that send metrics and/or logs to Cockpit.
1415+
"""
1416+
1417+
region: Optional[ScwRegion] = None
1418+
"""
1419+
Region to target. If none is passed will use default region from the config.
1420+
"""
1421+
1422+
page: Optional[int] = 0
1423+
"""
1424+
Page number to return from the paginated results.
1425+
"""
1426+
1427+
page_size: Optional[int] = 0
1428+
"""
1429+
Number of products to return per page.
1430+
"""
1431+
1432+
order_by: Optional[ListProductsRequestOrderBy] = (
1433+
ListProductsRequestOrderBy.CREATED_AT_ASC
1434+
)
1435+
"""
1436+
Sort order for products in the response.
1437+
"""
1438+
1439+
13851440
@dataclass
13861441
class RegionalApiListTokensRequest:
13871442
"""

scaleway/scaleway/cockpit/v1/__init__.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from .types import ListDataSourcesRequestOrderBy
99
from .types import ListGrafanaUsersRequestOrderBy
1010
from .types import ListPlansRequestOrderBy
11+
from .types import ListProductsRequestOrderBy
1112
from .types import ListTokensRequestOrderBy
1213
from .types import PlanName
1314
from .types import TokenScope
@@ -22,6 +23,7 @@
2223
from .types import GrafanaProductDashboard
2324
from .types import GrafanaUser
2425
from .types import Plan
26+
from .types import Product
2527
from .types import Token
2628
from .types import Usage
2729
from .types import AlertManager
@@ -47,6 +49,7 @@
4749
from .types import ListGrafanaProductDashboardsResponse
4850
from .types import ListGrafanaUsersResponse
4951
from .types import ListPlansResponse
52+
from .types import ListProductsResponse
5053
from .types import ListTokensResponse
5154
from .types import RegionalApiCreateContactPointRequest
5255
from .types import RegionalApiCreateDataSourceRequest
@@ -67,6 +70,7 @@
6770
from .types import RegionalApiListAlertsRequest
6871
from .types import RegionalApiListContactPointsRequest
6972
from .types import RegionalApiListDataSourcesRequest
73+
from .types import RegionalApiListProductsRequest
7074
from .types import RegionalApiListTokensRequest
7175
from .types import RegionalApiTriggerTestAlertRequest
7276
from .types import RegionalApiUpdateContactPointRequest
@@ -84,6 +88,7 @@
8488
"ListDataSourcesRequestOrderBy",
8589
"ListGrafanaUsersRequestOrderBy",
8690
"ListPlansRequestOrderBy",
91+
"ListProductsRequestOrderBy",
8792
"ListTokensRequestOrderBy",
8893
"PlanName",
8994
"TokenScope",
@@ -98,6 +103,7 @@
98103
"GrafanaProductDashboard",
99104
"GrafanaUser",
100105
"Plan",
106+
"Product",
101107
"Token",
102108
"Usage",
103109
"AlertManager",
@@ -123,6 +129,7 @@
123129
"ListGrafanaProductDashboardsResponse",
124130
"ListGrafanaUsersResponse",
125131
"ListPlansResponse",
132+
"ListProductsResponse",
126133
"ListTokensResponse",
127134
"RegionalApiCreateContactPointRequest",
128135
"RegionalApiCreateDataSourceRequest",
@@ -143,6 +150,7 @@
143150
"RegionalApiListAlertsRequest",
144151
"RegionalApiListContactPointsRequest",
145152
"RegionalApiListDataSourcesRequest",
153+
"RegionalApiListProductsRequest",
146154
"RegionalApiListTokensRequest",
147155
"RegionalApiTriggerTestAlertRequest",
148156
"RegionalApiUpdateContactPointRequest",

0 commit comments

Comments
 (0)