Пример #1
0
 def get_parser(self, prog_name):
     parser = super(ListAntiDDosStatus, self).get_parser(prog_name)
     parser.add_argument("--status",
                         choices=resource.AntiDDos.status_list,
                         help=_("list AntiDDos with status"))
     parser.add_argument("--ip",
                         help=_("list AntiDDos with the ip (eg: 110.110.)"))
     p.BaseParser.add_limit_option(parser)
     p.BaseParser.add_offset_option(parser)
     return parser
 def add_enable_l7_arg(parser):
     enable_group = parser.add_mutually_exclusive_group()
     enable_group.add_argument(
         '--enable-CC',
         action="store_true",
         dest='enable_l7',
         default=True,
         help=_("Enable CC Defence protection (default)"))
     enable_group.add_argument('--disable-CC',
                               action="store_false",
                               dest='enable_l7',
                               help=_("Disable CC Defence protection"))
Пример #3
0
class SetAntiDDos(command.Command):
    _description = _("Update AntiDDos settings of floating IP")

    def get_parser(self, prog_name):
        parser = super(SetAntiDDos, self).get_parser(prog_name)
        pb.AntiDDosParser.add_floating_ip_arg(parser)
        pb.AntiDDosParser.add_enable_l7_arg(parser)
        pb.AntiDDosParser.add_maximum_service_traffic_arg(parser)
        pb.AntiDDosParser.add_http_request_rate_arg(parser)
        # pb.AntiDDosParser.add_cleaning_access_pos_arg(parser)
        # pb.AntiDDosParser.add_app_type_arg(parser)
        return parser

    def take_action(self, args):
        client = self.app.client_manager.antiddos
        if not args.enable_l7 and args.http_request_rate:
            raise argparse.ArgumentTypeError(
                'argument --http-request-rate only effect '
                'when CC defence protection is enabled')

        floating_ip = client.antiddos.find(args.floating_ip)

        # issue 8, cleaning-pos fixed to 8, app-type fixed to 1
        traffic_pos = pb.AntiDDosParser.get_traffic_pos_id(
            args.maximum_service_traffic)
        http_request_pos = pb.AntiDDosParser.get_http_request_pos_id(
            args.http_request_rate)
        task = client.antiddos.update_antiddos(floating_ip.floating_ip_id,
                                               args.enable_l7, traffic_pos,
                                               http_request_pos, 8, 1)

        if isinstance(task, br.StrWithMeta):
            raise exceptions.ClientException(
                'this floating ip already has the same configuration')
        return 'Request Received, task id: ' + task['task_id']
Пример #4
0
    def find(self, keyword):
        """find antiddos by keyword (UUID or IP)"""
        if not IP_PATTERN.match(keyword):
            try:
                # try keyword as UUID
                return self.get_antiddos(keyword)
            except exceptions.ClientException as e:
                pass
        else:
            # try keyword as IP
            results = self.list(ip=keyword)
            matched_number = len(results)
            if matched_number > 1:
                exactly_matched = [
                    obj for obj in results
                    if obj.floating_ip_address == keyword
                ]
                if len(exactly_matched) == 1:
                    return exactly_matched[0]
                raise execs.NotUniqueMatch
            elif matched_number == 1:
                return results[0]

        message = _("AntiDDos with ID or IP '%s' not exists.") % keyword
        raise exceptions.NotFound(message)
Пример #5
0
 def get_parser(self, prog_name):
     parser = super(ListAntiDDosWeeklyReport, self).get_parser(prog_name)
     parser.add_argument('--start-date',
                         metavar='<start-date>',
                         required=False,
                         type=parsetypes.date_type,
                         help=_("start date (yyyy-MM-dd)"))
     return parser
 def add_http_request_rate_arg(parser):
     parser.add_argument(
         '--http-request-rate',
         required=False,
         choices=http_request_rate,
         type=int,
         help=_("HTTP request rate (per second), "
                "only effect when CC defence protection is enabled"))
Пример #7
0
class CloseAntiDDos(command.Command):
    _description = _("Close AntiDDos of floating IP")

    def get_parser(self, prog_name):
        parser = super(CloseAntiDDos, self).get_parser(prog_name)
        pb.AntiDDosParser.add_floating_ip_arg(parser)
        return parser

    def take_action(self, args):
        client = self.app.client_manager.antiddos
        floating_ip = client.antiddos.find(args.floating_ip)
        task = client.antiddos.close_antiddos(floating_ip.floating_ip_id)
        return 'Request Received, task id: ' + task['task_id']
Пример #8
0
class QueryAntiDDosConfig(command.ShowOne):
    _description = _("Query AntiDDos configurations")

    def get_parser(self, prog_name):
        parser = super(QueryAntiDDosConfig, self).get_parser(prog_name)
        return parser

    def take_action(self, args):
        client = self.app.client_manager.antiddos
        data = client.antiddos.query_config_list()
        columns = resource.AntiDDosConfig.show_column_names
        formatter = resource.AntiDDosConfig.formatter
        return columns, data.get_display_data(columns, formatter=formatter)
Пример #9
0
class ShowAntiDDosAlertConfig(command.ShowOne):
    _description = _("Show AntiDDos alert config details")

    def get_parser(self, prog_name):
        parser = super(ShowAntiDDosAlertConfig, self).get_parser(prog_name)
        return parser

    def take_action(self, args):
        mgr = self.app.client_manager.antiddos.alerts
        alert_config = mgr.get()
        columns = resource.AlertConfig.show_column_names
        formatter = resource.AlertConfig.formatter
        output = alert_config.get_display_data(columns, formatter=formatter)
        return columns, output
Пример #10
0
class ListAntiDDosDailyReport(command.Lister):
    _description = _("List AntiDDos report(every 5min) of past 24h")

    def get_parser(self, prog_name):
        parser = super(ListAntiDDosDailyReport, self).get_parser(prog_name)
        pb.AntiDDosParser.add_floating_ip_arg(parser)
        return parser

    def take_action(self, args):
        manager = self.app.client_manager.antiddos.antiddos
        floating_ip = manager.find(args.floating_ip)
        reports = manager.get_antiddos_daily_report(floating_ip.floating_ip_id)
        columns = resource.AntiDDosDailyReport.list_column_names
        return columns, (r.get_display_data(columns) for r in reports)
Пример #11
0
class ShowAntiDDosStatus(command.ShowOne):
    _description = _("Display AntiDDos status of floating ip")

    def get_parser(self, prog_name):
        parser = super(ShowAntiDDosStatus, self).get_parser(prog_name)
        pb.AntiDDosParser.add_floating_ip_arg(parser)
        return parser

    def take_action(self, args):
        manager = self.app.client_manager.antiddos.antiddos
        floating_ip = manager.find(args.floating_ip)
        status = manager.get_antiddos_status(floating_ip.floating_ip_id)
        columns = resource.AntiDDosStatus.show_column_names
        return columns, status.get_display_data(columns)
Пример #12
0
class ShowAntiDDosTask(command.ShowOne):
    _description = _("Display antiddos related task details")

    def get_parser(self, prog_name):
        parser = super(ShowAntiDDosTask, self).get_parser(prog_name)
        parser.add_argument('task_id',
                            metavar='<task id>',
                            help=_("AntiDDos setting task id"))
        return parser

    def take_action(self, args):
        client = self.app.client_manager.antiddos
        task = client.antiddos.get_task_status(args.task_id)
        columns = resource.AntiDDosTask.show_column_names
        return columns, task.get_display_data(columns)
Пример #13
0
class ListAntiDDosWeeklyReport(command.ShowOne):
    _description = _("List AntiDDos weekly protection statistics")

    def get_parser(self, prog_name):
        parser = super(ListAntiDDosWeeklyReport, self).get_parser(prog_name)
        parser.add_argument('--start-date',
                            metavar='<start-date>',
                            required=False,
                            type=parsetypes.date_type,
                            help=_("start date (yyyy-MM-dd)"))
        return parser

    def take_action(self, args):
        manager = self.app.client_manager.antiddos.antiddos
        report = manager.get_antiddos_weekly_report(args.start_date)
        columns = resource.AntiDDosWeeklyReport.show_column_names
        formatter = resource.AntiDDosWeeklyReport.formatter
        output = report.get_display_data(columns, formatter=formatter)
        return columns, output
Пример #14
0
class ListAntiDDosStatus(command.Lister):
    _description = _("List AntiDDos status")

    def get_parser(self, prog_name):
        parser = super(ListAntiDDosStatus, self).get_parser(prog_name)
        parser.add_argument("--status",
                            choices=resource.AntiDDos.status_list,
                            help=_("list AntiDDos with status"))
        parser.add_argument("--ip",
                            help=_("list AntiDDos with the ip (eg: 110.110.)"))
        p.BaseParser.add_limit_option(parser)
        p.BaseParser.add_offset_option(parser)
        return parser

    def take_action(self, args):
        client = self.app.client_manager.antiddos
        data = client.antiddos.list(status=args.status,
                                    ip=args.ip,
                                    limit=args.limit,
                                    offset=args.offset)
        columns = resource.AntiDDos.list_column_names
        return columns, (r.get_display_data(columns) for r in data)
Пример #15
0
class ListAntiDDosLogs(command.Lister):
    _description = _("List AntiDDos logs(every 5min) of past 24h")

    def get_parser(self, prog_name):
        parser = super(ListAntiDDosLogs, self).get_parser(prog_name)
        pb.AntiDDosParser.add_floating_ip_arg(parser)
        p.BaseParser.add_limit_option(parser)
        p.BaseParser.add_offset_option(parser)
        p.BaseParser.add_sortdir_option(parser)
        return parser

    def take_action(self, args):
        # TODO(Woo) no data in test env, need to test later
        manager = self.app.client_manager.antiddos.antiddos
        floating_ip = manager.find(args.floating_ip)
        logs = manager.get_antiddos_daily_logs(floating_ip.floating_ip_id,
                                               args.sort_dir, args.limit,
                                               args.offset)
        columns = resource.AntiDDosLog.list_column_names
        data = (r.get_display_data(columns, formatter=r.formatter)
                for r in logs)
        return columns, data
Пример #16
0
class OpenAntiDDos(command.Command):
    _description = _("Open AntiDDos for floating IP")

    def get_parser(self, prog_name):
        parser = super(OpenAntiDDos, self).get_parser(prog_name)
        pb.AntiDDosParser.add_floating_ip_arg(parser)
        pb.AntiDDosParser.add_enable_l7_arg(parser)
        pb.AntiDDosParser.add_maximum_service_traffic_arg(parser)
        pb.AntiDDosParser.add_http_request_rate_arg(parser)
        # pb.AntiDDosParser.add_cleaning_access_pos_arg(parser)
        # pb.AntiDDosParser.add_app_type_arg(parser)
        return parser

    def take_action(self, args):
        client = self.app.client_manager.antiddos

        if args.enable_l7 and not args.http_request_rate:
            raise argparse.ArgumentTypeError(
                'argument --http-request-rate is required '
                'when CC defence protection is enabled')

        if not args.enable_l7 and args.http_request_rate:
            raise argparse.ArgumentTypeError(
                'argument --http-request-rate only effect '
                'when CC defence protection is enabled')

        floating_ip = client.antiddos.find(args.floating_ip)
        # issue 8, cleaning-pos fixed to 8, app-type fixed to 1
        traffic_pos = pb.AntiDDosParser.get_traffic_pos_id(
            args.maximum_service_traffic)
        http_request_pos = pb.AntiDDosParser.get_http_request_pos_id(
            args.http_request_rate)
        task = client.antiddos.open_antiddos(floating_ip.floating_ip_id,
                                             args.enable_l7, traffic_pos,
                                             http_request_pos, 8, 1)

        return 'Request Received, task id: ' + task['task_id']
Пример #17
0
class ShowAntiDDos(command.ShowOne):
    _description = _("Display AntiDDos settings of floating IP")

    def get_parser(self, prog_name):
        parser = super(ShowAntiDDos, self).get_parser(prog_name)
        pb.AntiDDosParser.add_floating_ip_arg(parser)
        return parser

    def take_action(self, args):
        client = self.app.client_manager.antiddos
        _antiddos = client.antiddos.find(args.floating_ip)
        # if user pass ip, we should reload antiddos object
        if _antiddos.floating_ip_id != args.floating_ip:
            _antiddos = client.antiddos.get_antiddos(_antiddos.floating_ip_id)

        if 'status' in _antiddos.original and _antiddos.status == 'notConfig':
            raise exceptions.ClientException(
                'You have not config antiddos for this floating ip yet.')
        else:
            if not _antiddos.enable_L7:
                columns = resource.AntiDDos.show_column_names[:-1]
            else:
                columns = resource.AntiDDos.show_column_names
            return columns, _antiddos.get_display_data(columns)
 def add_maximum_service_traffic_arg(parser):
     parser.add_argument('--maximum-service-traffic',
                         required=True,
                         choices=maximum_service_traffic,
                         type=int,
                         help=_("Maximum service traffic (Mbit/s)"))
 def add_floating_ip_arg(parser):
     parser.add_argument('floating_ip',
                         metavar='<floating ip>',
                         help=_("For floating ip (UUID or IP)"))
Пример #20
0
 def get_parser(self, prog_name):
     parser = super(ShowAntiDDosTask, self).get_parser(prog_name)
     parser.add_argument('task_id',
                         metavar='<task id>',
                         help=_("AntiDDos setting task id"))
     return parser