moto/moto/amp/responses.py

174 lines
6.6 KiB
Python

"""Handles incoming amp requests, invokes methods, returns responses."""
import json
from typing import Any
from urllib.parse import unquote
from moto.core.responses import BaseResponse
from .models import PrometheusServiceBackend, amp_backends
class PrometheusServiceResponse(BaseResponse):
"""Handler for PrometheusService requests and responses."""
def tags(self, request: Any, full_url: str, headers: Any) -> str: # type: ignore[return]
self.setup_class(request, full_url, headers)
if request.method == "GET":
return self.list_tags_for_resource()
if request.method == "POST":
return self.tag_resource()
if request.method == "DELETE":
return self.untag_resource()
def __init__(self) -> None:
super().__init__(service_name="amp")
@property
def amp_backend(self) -> PrometheusServiceBackend:
"""Return backend instance specific for this region."""
return amp_backends[self.current_account][self.region]
def create_workspace(self) -> str:
params = json.loads(self.body)
alias = params.get("alias")
tags = params.get("tags")
workspace = self.amp_backend.create_workspace(alias=alias, tags=tags)
return json.dumps(dict(workspace.to_dict()))
def describe_workspace(self) -> str:
workspace_id = self.path.split("/")[-1]
workspace = self.amp_backend.describe_workspace(workspace_id=workspace_id)
return json.dumps(dict(workspace=workspace.to_dict()))
def list_tags_for_resource(self) -> str:
resource_arn = unquote(self.path).split("tags/")[-1]
tags = self.amp_backend.list_tags_for_resource(resource_arn=resource_arn)
return json.dumps(dict(tags=tags))
def update_workspace_alias(self) -> str:
params = json.loads(self.body)
alias = params.get("alias")
workspace_id = self.path.split("/")[-2]
self.amp_backend.update_workspace_alias(alias=alias, workspace_id=workspace_id)
return json.dumps(dict())
def delete_workspace(self) -> str:
workspace_id = self.path.split("/")[-1]
self.amp_backend.delete_workspace(workspace_id=workspace_id)
return json.dumps(dict())
def list_workspaces(self) -> str:
alias = self._get_param("alias")
max_results = self._get_int_param("maxResults")
next_token = self._get_param("nextToken")
workspaces, next_token = self.amp_backend.list_workspaces(
alias, max_results=max_results, next_token=next_token
)
return json.dumps(
{"nextToken": next_token, "workspaces": [w.to_dict() for w in workspaces]}
)
def tag_resource(self) -> str:
params = json.loads(self.body)
resource_arn = unquote(self.path).split("tags/")[-1]
tags = params.get("tags")
self.amp_backend.tag_resource(resource_arn=resource_arn, tags=tags)
return json.dumps(dict())
def untag_resource(self) -> str:
resource_arn = unquote(self.path).split("tags/")[-1]
tag_keys = self.querystring.get("tagKeys", [])
self.amp_backend.untag_resource(resource_arn=resource_arn, tag_keys=tag_keys)
return json.dumps(dict())
def create_rule_groups_namespace(self) -> str:
params = json.loads(self.body)
data = params.get("data")
name = params.get("name")
tags = params.get("tags")
workspace_id = unquote(self.path).split("/")[-2]
rule_group_namespace = self.amp_backend.create_rule_groups_namespace(
data=data,
name=name,
tags=tags,
workspace_id=workspace_id,
)
return json.dumps(rule_group_namespace.to_dict())
def delete_rule_groups_namespace(self) -> str:
name = unquote(self.path).split("/")[-1]
workspace_id = unquote(self.path).split("/")[-3]
self.amp_backend.delete_rule_groups_namespace(
name=name,
workspace_id=workspace_id,
)
return json.dumps(dict())
def describe_rule_groups_namespace(self) -> str:
name = unquote(self.path).split("/")[-1]
workspace_id = unquote(self.path).split("/")[-3]
ns = self.amp_backend.describe_rule_groups_namespace(
name=name, workspace_id=workspace_id
)
return json.dumps(dict(ruleGroupsNamespace=ns.to_dict()))
def put_rule_groups_namespace(self) -> str:
params = json.loads(self.body)
data = params.get("data")
name = unquote(self.path).split("/")[-1]
workspace_id = unquote(self.path).split("/")[-3]
ns = self.amp_backend.put_rule_groups_namespace(
data=data,
name=name,
workspace_id=workspace_id,
)
return json.dumps(ns.to_dict())
def list_rule_groups_namespaces(self) -> str:
max_results = self._get_int_param("maxResults")
next_token = self._get_param("nextToken")
name = self._get_param("name")
workspace_id = unquote(self.path).split("/")[-2]
namespaces, next_token = self.amp_backend.list_rule_groups_namespaces(
max_results=max_results,
name=name,
next_token=next_token,
workspace_id=workspace_id,
)
return json.dumps(
dict(
nextToken=next_token,
ruleGroupsNamespaces=[ns.to_dict() for ns in namespaces],
)
)
def create_logging_configuration(self) -> str:
workspace_id = unquote(self.path).split("/")[-2]
log_group_arn = self._get_param("logGroupArn")
status = self.amp_backend.create_logging_configuration(
workspace_id=workspace_id,
log_group_arn=log_group_arn,
)
return json.dumps({"status": status})
def describe_logging_configuration(self) -> str:
workspace_id = unquote(self.path).split("/")[-2]
config = self.amp_backend.describe_logging_configuration(
workspace_id=workspace_id
)
return json.dumps({"loggingConfiguration": config})
def update_logging_configuration(self) -> str:
workspace_id = unquote(self.path).split("/")[-2]
log_group_arn = self._get_param("logGroupArn")
status = self.amp_backend.update_logging_configuration(
workspace_id=workspace_id, log_group_arn=log_group_arn
)
return json.dumps({"status": status})
def delete_logging_configuration(self) -> str:
workspace_id = unquote(self.path).split("/")[-2]
self.amp_backend.delete_logging_configuration(workspace_id=workspace_id)
return "{}"