Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion linode_api4/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# isort: skip_file
from linode_api4.objects import *
from linode_api4.errors import ApiError, UnexpectedResponseError
from linode_api4.linode_client import LinodeClient
from linode_api4.linode_client import LinodeClient, MonitorClient
from linode_api4.login_client import LinodeLoginClient, OAuthScopes
from linode_api4.paginated_list import PaginatedList
from linode_api4.polling import EventPoller
2 changes: 2 additions & 0 deletions linode_api4/groups/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@
from .lke import *
from .lke_tier import *
from .longview import *
from .maintenance import *
from .monitor import *
from .monitor_api import *
from .networking import *
from .nodebalancer import *
from .object_storage import *
Expand Down
2 changes: 1 addition & 1 deletion linode_api4/groups/account.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ def maintenance(self):
"""
Returns a collection of Maintenance objects for any entity a user has permissions to view. Cancelled Maintenance objects are not returned.

API Documentation: https://techdocs.akamai.com/linode-api/reference/get-account-logins
API Documentation: https://techdocs.akamai.com/linode-api/reference/get-maintenance

:returns: A list of Maintenance objects on this account.
:rtype: List of Maintenance objects as MappedObjects
Expand Down
4 changes: 2 additions & 2 deletions linode_api4/groups/group.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
from typing import TYPE_CHECKING

if TYPE_CHECKING:
from linode_api4 import LinodeClient
from linode_api4.linode_client import BaseClient


class Group:
def __init__(self, client: LinodeClient):
def __init__(self, client: BaseClient):
self.client = client
7 changes: 7 additions & 0 deletions linode_api4/groups/linode.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ def instance_create(
int,
]
] = None,
maintenance_policy: Optional[str] = None,
**kwargs,
):
"""
Expand Down Expand Up @@ -296,6 +297,11 @@ def instance_create(
:type interfaces: list[ConfigInterface] or list[dict[str, Any]]
:param placement_group: A Placement Group to create this Linode under.
:type placement_group: Union[InstancePlacementGroupAssignment, PlacementGroup, Dict[str, Any], int]
:param maintenance_policy: The slug of the maintenance policy to apply during maintenance.
If not provided, the default policy (linode/migrate) will be applied.
NOTE: This field is in beta and may only
function if base_url is set to `https://api.linode.com/v4beta`.
:type maintenance_policy: str

:returns: A new Instance object, or a tuple containing the new Instance and
the generated password.
Expand Down Expand Up @@ -327,6 +333,7 @@ def instance_create(
"firewall_id": firewall,
"backup_id": backup,
"stackscript_id": stackscript,
"maintenance_policy": maintenance_policy,
# Special cases
"disk_encryption": (
str(disk_encryption) if disk_encryption else None
Expand Down
25 changes: 25 additions & 0 deletions linode_api4/groups/maintenance.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from linode_api4.groups import Group
from linode_api4.objects import MappedObject


class MaintenanceGroup(Group):
"""
Collections related to Maintenance.
"""

def maintenance_policies(self):
"""
.. note:: This endpoint is in beta. This will only function if base_url is set to `https://api.linode.com/v4beta`.

Returns a collection of MaintenancePolicy objects representing
available maintenance policies that can be applied to Linodes

API Documentation: https://techdocs.akamai.com/linode-api/reference/get-policies

:returns: A list of Maintenance Policies that can be applied to Linodes
:rtype: List of MaintenancePolicy objects as MappedObjects
"""

result = self.client.get("/maintenance/policies", model=self)

return [MappedObject(**r) for r in result["data"]]
4 changes: 1 addition & 3 deletions linode_api4/groups/monitor.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@
]
from typing import Any, Optional

from linode_api4 import (
PaginatedList,
)
from linode_api4 import PaginatedList
from linode_api4.errors import UnexpectedResponseError
from linode_api4.groups import Group
from linode_api4.objects import (
Expand Down
59 changes: 59 additions & 0 deletions linode_api4/groups/monitor_api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
__all__ = [
"MetricsGroup",
]

from typing import Any, Dict, List, Optional, Union

from linode_api4 import drop_null_keys
from linode_api4.groups import Group
from linode_api4.objects.base import _flatten_request_body_recursive
from linode_api4.objects.monitor_api import EntityMetricOptions, EntityMetrics


class MetricsGroup(Group):
"""
Encapsulates Monitor-related methods of the :any:`MonitorClient`.

This group contains all features related to metrics in the API monitor-api.
"""

def fetch_metrics(
self,
service_type: str,
entity_ids: list,
metrics: List[Union[EntityMetricOptions, Dict[str, Any]]],
**kwargs,
) -> Optional[EntityMetrics]:
"""
Returns metrics information for the individual entities within a specific service type.

API documentation: https://techdocs.akamai.com/linode-api/reference/post-read-metric

:param service_type: The service being monitored.
Currently, only the Managed Databases (dbaas) service type is supported.
:type service_type: str

:param entity_ids: The id for each individual entity from a service_type.
:type entity_ids: list

:param metrics: A list of metric objects, each specifying a metric name and its corresponding aggregation function.
:type metrics: list of EntityMetricOptions or Dict[str, Any]

:param kwargs: Any other arguments accepted by the api. Please refer to the API documentation for full info.

:returns: Service metrics requested.
:rtype: EntityMetrics or None
"""
params = {
"entity_ids": entity_ids,
"metrics": metrics,
}

params.update(kwargs)

result = self.client.post(
f"/monitor/services/{service_type}/metrics",
data=drop_null_keys(_flatten_request_body_recursive(params)),
)

return EntityMetrics.from_json(result)
Loading
Loading