class ExportClusterLogsFiltersParser(ClusterLogsFiltersParser): """Class to manage export cluster logs filters.""" def __init__( self, head_node: ClusterInstance, log_group_name: str, start_time: datetime.datetime = None, end_time: datetime.datetime = None, filters: str = None, ): super().__init__(head_node, filters) self.time_parser = LogGroupTimeFiltersParser(log_group_name, start_time, end_time) @property def start_time(self): """Get start time parameter.""" return self.time_parser.start_time @property def end_time(self): """Get end time parameter.""" return self.time_parser.end_time def validate(self): """Check filter consistency.""" super().validate() self.time_parser.validate(log_stream_prefix=self.log_stream_prefix)
def _init_export_logs_filters(self, start_time, end_time): try: export_logs_filters = LogGroupTimeFiltersParser( log_group_name=self._log_group_name, start_time=start_time, end_time=end_time ) export_logs_filters.validate() except FiltersParserError as e: raise BadRequestImageBuilderActionError(str(e)) return export_logs_filters
def __init__( self, head_node: ClusterInstance, log_group_name: str, start_time: datetime.datetime = None, end_time: datetime.datetime = None, filters: str = None, ): super().__init__(head_node, filters) self.time_parser = LogGroupTimeFiltersParser(log_group_name, start_time, end_time)
def test_initialization(self, args, error_message, run_cli, capsys): kwargs = {"log_group_name": "log_group"} kwargs.update(args) if error_message: with pytest.raises(FiltersParserError, match=error_message): LogGroupTimeFiltersParser(**kwargs) else: time_parser = LogGroupTimeFiltersParser(**kwargs) assert_that(time_parser.start_time).is_equal_to( args.get("start_time")) assert_that(time_parser.end_time).is_equal_to(args.get("end_time"))
def test_initialization_error(self, mocker, params, expected_error): log_group_name = "log_group_name" creation_time_mock = 1623061001000 mock_aws_api(mocker) mocker.patch("pcluster.aws.logs.LogsClient.describe_log_group", return_value={"creationTime": creation_time_mock}) with pytest.raises(FiltersParserError, match=expected_error): LogGroupTimeFiltersParser(log_group_name, params.get("start_time", None), params.get("end_time", None))
def test_initialization_success(self, params, expected_attrs): os.environ["TZ"] = "Europe/London" time.tzset() log_group_name = "log_group_name" export_logs_filters = LogGroupTimeFiltersParser( log_group_name, params.get("start_time", None), params.get("end_time", None)) for attr in expected_attrs: assert_that(getattr(export_logs_filters, attr)).is_equal_to(expected_attrs.get(attr))
def test_validate(self, mocker, attrs, event_in_window, log_stream_prefix, expected_error): log_group_name = "log_group_name" creation_time_mock = 1623061001000 mock_aws_api(mocker) describe_log_group_mock = mocker.patch( "pcluster.aws.logs.LogsClient.describe_log_group", return_value={"creationTime": creation_time_mock}) filter_log_events_mock = mocker.patch( "pcluster.aws.logs.LogsClient.filter_log_events", return_value=event_in_window) export_logs_filters = LogGroupTimeFiltersParser( log_group_name, attrs.get("start_time", None), attrs.get("end_time", None)) if expected_error: with pytest.raises(FiltersParserError, match=expected_error): export_logs_filters.validate(log_stream_prefix) else: export_logs_filters.validate(log_stream_prefix) filter_log_events_mock.assert_called_with( log_group_name, log_stream_prefix, export_logs_filters.start_time, export_logs_filters.end_time, ) if "start_time" not in attrs: describe_log_group_mock.assert_called_with(log_group_name) assert_that(export_logs_filters.start_time).is_equal_to( creation_time_mock)
def log_group_time_parser(self): return LogGroupTimeFiltersParser("log_group_name")