Fix : Logs - Add start_query functionality (#3985)
* Added start_query functionality * fix tests
This commit is contained in:
parent
d325593e46
commit
9836985473
@ -8,6 +8,15 @@ from .exceptions import (
|
|||||||
InvalidParameterException,
|
InvalidParameterException,
|
||||||
LimitExceededException,
|
LimitExceededException,
|
||||||
)
|
)
|
||||||
|
import uuid
|
||||||
|
|
||||||
|
|
||||||
|
class LogQuery(BaseModel):
|
||||||
|
def __init__(self, id, start_time, end_time, query):
|
||||||
|
self.id = id
|
||||||
|
self.start_time = start_time
|
||||||
|
self.end_time = end_time
|
||||||
|
self.query = query
|
||||||
|
|
||||||
|
|
||||||
class LogEvent(BaseModel):
|
class LogEvent(BaseModel):
|
||||||
@ -500,6 +509,7 @@ class LogsBackend(BaseBackend):
|
|||||||
def __init__(self, region_name):
|
def __init__(self, region_name):
|
||||||
self.region_name = region_name
|
self.region_name = region_name
|
||||||
self.groups = dict() # { logGroupName: LogGroup}
|
self.groups = dict() # { logGroupName: LogGroup}
|
||||||
|
self.queries = dict()
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
region_name = self.region_name
|
region_name = self.region_name
|
||||||
@ -725,6 +735,16 @@ class LogsBackend(BaseBackend):
|
|||||||
|
|
||||||
log_group.delete_subscription_filter(filter_name)
|
log_group.delete_subscription_filter(filter_name)
|
||||||
|
|
||||||
|
def start_query(self, log_group_names, start_time, end_time, query_string):
|
||||||
|
|
||||||
|
for log_group_name in log_group_names:
|
||||||
|
if log_group_name not in self.groups:
|
||||||
|
raise ResourceNotFoundException()
|
||||||
|
|
||||||
|
query_id = uuid.uuid1()
|
||||||
|
self.queries[query_id] = LogQuery(query_id, start_time, end_time, query_string)
|
||||||
|
return query_id
|
||||||
|
|
||||||
|
|
||||||
logs_backends = {}
|
logs_backends = {}
|
||||||
for region in Session().get_available_regions("logs"):
|
for region in Session().get_available_regions("logs"):
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from moto.core.responses import BaseResponse
|
from moto.core.responses import BaseResponse
|
||||||
from .models import logs_backends
|
from .models import logs_backends
|
||||||
import json
|
import json
|
||||||
|
from .exceptions import InvalidParameterException
|
||||||
|
|
||||||
|
|
||||||
# See http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/Welcome.html
|
# See http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/Welcome.html
|
||||||
@ -211,3 +212,22 @@ class LogsResponse(BaseResponse):
|
|||||||
self.logs_backend.delete_subscription_filter(log_group_name, filter_name)
|
self.logs_backend.delete_subscription_filter(log_group_name, filter_name)
|
||||||
|
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
def start_query(self):
|
||||||
|
log_group_name = self._get_param("logGroupName")
|
||||||
|
log_group_names = self._get_param("logGroupNames")
|
||||||
|
start_time = self._get_param("startTime")
|
||||||
|
end_time = self._get_param("endTime")
|
||||||
|
query_string = self._get_param("queryString")
|
||||||
|
|
||||||
|
if log_group_name and log_group_names:
|
||||||
|
raise InvalidParameterException()
|
||||||
|
|
||||||
|
if log_group_name:
|
||||||
|
log_group_names = [log_group_name]
|
||||||
|
|
||||||
|
query_id = self.logs_backend.start_query(
|
||||||
|
log_group_names, start_time, end_time, query_string
|
||||||
|
)
|
||||||
|
|
||||||
|
return json.dumps({"queryId": "{0}".format(query_id)})
|
||||||
|
@ -611,3 +611,35 @@ def test_describe_log_streams_paging():
|
|||||||
)
|
)
|
||||||
resp["logStreams"].should.have.length_of(0)
|
resp["logStreams"].should.have.length_of(0)
|
||||||
resp.should_not.have.key("nextToken")
|
resp.should_not.have.key("nextToken")
|
||||||
|
|
||||||
|
|
||||||
|
@mock_logs
|
||||||
|
def test_start_query():
|
||||||
|
client = boto3.client("logs", "us-east-1")
|
||||||
|
|
||||||
|
log_group_name = "/aws/codebuild/lowercase-dev"
|
||||||
|
client.create_log_group(logGroupName=log_group_name)
|
||||||
|
|
||||||
|
response = client.start_query(
|
||||||
|
logGroupName=log_group_name,
|
||||||
|
startTime=int(time.time()),
|
||||||
|
endTime=int(time.time()) + 300,
|
||||||
|
queryString="test",
|
||||||
|
)
|
||||||
|
|
||||||
|
assert "queryId" in response
|
||||||
|
|
||||||
|
with pytest.raises(ClientError) as e:
|
||||||
|
client.start_query(
|
||||||
|
logGroupName="/aws/codebuild/lowercase-dev-invalid",
|
||||||
|
startTime=int(time.time()),
|
||||||
|
endTime=int(time.time()) + 300,
|
||||||
|
queryString="test",
|
||||||
|
)
|
||||||
|
|
||||||
|
# then
|
||||||
|
ex = e.value
|
||||||
|
ex.response["Error"]["Code"].should.contain("ResourceNotFoundException")
|
||||||
|
ex.response["Error"]["Message"].should.equal(
|
||||||
|
"The specified log group does not exist"
|
||||||
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user