Exemplo n.º 1
0
def view(request):
    params = {}

    ####################################################################
    # GET 请求
    ####################################################################
    # 点击链接转跳到编辑页面
    if request.method == 'GET':
        # 获取MySQL实例ID
        mysql_instance_id = int(request.GET.get('mysql_instance_id', '0'))

        if mysql_instance_id:
            try:
                # 1.获取MySQL实例
                dbmp_mysql_instance = DbmpMysqlInstance.objects.get(
                    mysql_instance_id=mysql_instance_id)
                params['dbmp_mysql_instance'] = dbmp_mysql_instance

                # 2.获得MySQL实例额外信息
                try:
                    dbmp_mysql_instance_info = DbmpMysqlInstanceInfo.objects.get(
                        mysql_instance_id=dbmp_mysql_instance.mysql_instance_id
                    )
                    params[
                        'dbmp_mysql_instance_info'] = dbmp_mysql_instance_info
                except DbmpMysqlInstanceInfo.DoesNotExist:
                    edit_url = '{base_url}/edit/?mysql_instance_id={id}'.format(
                        base_url=ViewUrlPath.path_dbmp_mysql_instance(),
                        id=mysql_instance_id)
                    return HttpResponseRedirect(edit_url)

                # 3.获得操作系统
                try:
                    cmdb_os = CmdbOs.objects.get(
                        os_id=dbmp_mysql_instance.os_id)
                    params['cmdb_os'] = cmdb_os
                except CmdbOs.DoesNotExist:
                    logger.info(traceback.format_exc())
                    edit_url = '{base_url}/edit/?mysql_instance_id={id}'.format(
                        base_url=ViewUrlPath.path_dbmp_mysql_instance(),
                        id=mysql_instance_id)
                    return HttpResponseRedirect(edit_url)

                return render(request, 'dbmp_mysql_instance/view.html', params)
            except DbmpMysqlInstance.DoesNotExist:
                logger.info(traceback.format_exc())
                # 返回点击编辑页面
                request.session['danger_msg'].append('对不起! 找不到指定的MySQL实例')
                return HttpResponseRedirect(request.environ['HTTP_REFERER'])
        else:
            request.session['danger_msg'] = '对不起! 找不到指定的MySQL实例!'
            # 返回点击编辑页面
            return HttpResponseRedirect(request.environ['HTTP_REFERER'])
def view(request):
    params = {}

    ####################################################################
    # GET 请求
    ####################################################################
    # 点击链接转跳到编辑页面
    if request.method == 'GET':
        # 获取业务组
        inception_record_id = int(request.GET.get('inception_record_id', '0'))  

        if inception_record_id:
            try:
                # 1.业务组
                dbmp_inception_record = DbmpInceptionRecord.objects.get(
                                     inception_record_id = inception_record_id)
                params['dbmp_inception_record'] = dbmp_inception_record
            except DbmpInceptionRecord.DoesNotExist:
                logger.info(traceback.format_exc())
                # 返回点击编辑页面
                request.session['danger_msg'].append('对不起! 找不到指定的SQL审核数据')
                index_url = '{base_url}/index/'.format(
                                base_url = ViewUrlPath.path_dbmp_inception_record())
                return HttpResponseRedirect(index_url)

            try:
                # Inception实例
                dbmp_inception_instance = DbmpInceptionInstance.objects.values(
                                      'inception_instance_id',
                                      'host',
                                      'port',
                                      'alias').get(
                                     inception_instance_id = dbmp_inception_record.inception_instance_id)
                params['dbmp_inception_instance'] = dbmp_inception_instance
            except DbmpInceptionInstance.DoesNotExist:
                logger.info(traceback.format_exc())
                # 返回点击编辑页面
                request.session['danger_msg'].append('对不起! 找不到审核实例信息')
                index_url = '{base_url}/index/'.format(
                                base_url = ViewUrlPath.path_dbmp_inception_record())
                return HttpResponseRedirect(index_url)
            return render(request, 'dbmp_inception_record/view.html', params)
        else:
            request.session['danger_msg'] = '对不起! 找不到指定的业务组!'
            # 返回点击编辑页面
            request.session['danger_msg'].append('对不起! 找不到指定的SQL审核数据')
            index_url = '{base_url}/index/'.format(
                            base_url = ViewUrlPath.path_dbmp_inception_record())
            return HttpResponseRedirect(index_url)
Exemplo n.º 3
0
def view(request):
    params = {}

    ####################################################################
    # GET 请求
    ####################################################################
    # 点击链接转跳到编辑页面
    if request.method == 'GET':
        # 获取业务组
        inception_record_id = int(request.GET.get('inception_record_id', '0'))

        if inception_record_id:
            try:
                # 1.业务组
                dbmp_inception_record = DbmpInceptionRecord.objects.get(
                    inception_record_id=inception_record_id)
                params['dbmp_inception_record'] = dbmp_inception_record
            except DbmpInceptionRecord.DoesNotExist:
                logger.info(traceback.format_exc())
                # 返回点击编辑页面
                request.session['danger_msg'].append('对不起! 找不到指定的SQL审核数据')
                index_url = '{base_url}/index/'.format(
                    base_url=ViewUrlPath.path_dbmp_inception_record())
                return HttpResponseRedirect(index_url)

            try:
                # Inception实例
                dbmp_inception_instance = DbmpInceptionInstance.objects.values(
                    'inception_instance_id', 'host', 'port',
                    'alias').get(inception_instance_id=dbmp_inception_record.
                                 inception_instance_id)
                params['dbmp_inception_instance'] = dbmp_inception_instance
            except DbmpInceptionInstance.DoesNotExist:
                logger.info(traceback.format_exc())
                # 返回点击编辑页面
                request.session['danger_msg'].append('对不起! 找不到审核实例信息')
                index_url = '{base_url}/index/'.format(
                    base_url=ViewUrlPath.path_dbmp_inception_record())
                return HttpResponseRedirect(index_url)
            return render(request, 'dbmp_inception_record/view.html', params)
        else:
            request.session['danger_msg'] = '对不起! 找不到指定的业务组!'
            # 返回点击编辑页面
            request.session['danger_msg'].append('对不起! 找不到指定的SQL审核数据')
            index_url = '{base_url}/index/'.format(
                base_url=ViewUrlPath.path_dbmp_inception_record())
            return HttpResponseRedirect(index_url)
def add(request):
    params = {}

    ####################################################################
    # GET 请求
    ####################################################################
    if request.method == 'GET':
        form = AddForm()
        params['form'] = form

        return render(request, 'dbmp_mysql_business/add.html', params)

   ####################################################################
    # POST 请求
    ####################################################################
    if request.method == 'POST':
        form = AddForm(request.POST)
        params['form'] = form

        print form

        # 验证表单
        if form.is_valid():
            name = form.cleaned_data['name']
            remark = form.cleaned_data['remark']

            try:
                with transaction.atomic():
                    # 添加DbmpMysqlBusiness
                    dbmp_mysql_business = DbmpMysqlBusiness(
                                                     name = name,
                                                     remark = remark)
                    dbmp_mysql_business.save()

                # 保存成功转跳到View页面
                request.session['success_msg'].append('添加成功')
                view_url = '{base_url}/index/?mysql_business_id={id}'.format(
                                base_url = ViewUrlPath.path_dbmp_mysql_business(),
                                id = dbmp_mysql_business.mysql_business_id)

                return HttpResponseRedirect(view_url)
            except IntegrityError, e:
                logger.info(traceback.format_exc())
                request.session['danger_msg'].append('添加失败')
                if e.args[0] == 1062:
                    request.session['alert_message_now']['danger_msg'].append(
                                                             '需要添加的相关信息重复')
                request.session['alert_message_now']['danger_msg'].append(e.args)
                return render(request, 'dbmp_mysql_business/add.html', params)
            except Exception, e:
                logger.info(traceback.format_exc())
                # 保存失败转跳会原页面
                request.session['alert_message_now']['danger_msg'].append(
                                                        '添加失败, 保存数据库错误')
                return render(request, 'dbmp_mysql_business/add.html', params)
Exemplo n.º 5
0
def add(request):
    params = {}

    ####################################################################
    # GET 请求
    ####################################################################
    if request.method == 'GET':
        form = AddForm()
        params['form'] = form

        return render(request, 'dbmp_mysql_business/add.html', params)

####################################################################
# POST 请求
####################################################################
    if request.method == 'POST':
        form = AddForm(request.POST)
        params['form'] = form

        print form

        # 验证表单
        if form.is_valid():
            name = form.cleaned_data['name']
            remark = form.cleaned_data['remark']

            try:
                with transaction.atomic():
                    # 添加DbmpMysqlBusiness
                    dbmp_mysql_business = DbmpMysqlBusiness(name=name,
                                                            remark=remark)
                    dbmp_mysql_business.save()

                # 保存成功转跳到View页面
                request.session['success_msg'].append('添加成功')
                view_url = '{base_url}/index/?mysql_business_id={id}'.format(
                    base_url=ViewUrlPath.path_dbmp_mysql_business(),
                    id=dbmp_mysql_business.mysql_business_id)

                return HttpResponseRedirect(view_url)
            except IntegrityError, e:
                logger.info(traceback.format_exc())
                request.session['danger_msg'].append('添加失败')
                if e.args[0] == 1062:
                    request.session['alert_message_now']['danger_msg'].append(
                        '需要添加的相关信息重复')
                request.session['alert_message_now']['danger_msg'].append(
                    e.args)
                return render(request, 'dbmp_mysql_business/add.html', params)
            except Exception, e:
                logger.info(traceback.format_exc())
                # 保存失败转跳会原页面
                request.session['alert_message_now']['danger_msg'].append(
                    '添加失败, 保存数据库错误')
                return render(request, 'dbmp_mysql_business/add.html', params)
def index(request):
    """展示某个业务组的明细"""
    params = {}
    params['error_msg'] = []
    if request.method == 'GET':
        try:  
            # 获得传入的MySQL实例ID
            inception_business_id = int(request.GET.get('inception_business_id', '0'))  
        except ValueError:  
            logger.info(traceback.format_exc())
            inception_record_id = 0
            inception_database_id = 0

        if inception_business_id:
            try:
                # 审核业务组
                dbmp_inception_business = DbmpInceptionBusiness.objects.values(
                                        'inception_business_id',
                                        'inception_record_id',
                                        'mysql_business_id',).get(
                                     inception_business_id = inception_business_id)
                params['dbmp_inception_business'] = dbmp_inception_business
            except DbmpInceptionBusiness.DoesNotExist:
                logger.info(traceback.format_exc())
                # 返回点击编辑页面
                request.session['danger_msg'].append('对不起! 找不到指定的SQL审核数据')
                index_url = '{base_url}/index/'.format(
                                base_url = ViewUrlPath.path_dbmp_inception_record())
                return HttpResponseRedirect(index_url)

            try:
                # 业务组
                dbmp_mysql_business = DbmpMysqlBusiness.objects.values(
                                        'name',
                                        'remark').get(
                                     mysql_business_id = dbmp_inception_business.get('mysql_business_id', 0))
                params['dbmp_mysql_business'] = dbmp_mysql_business
            except DbmpMysqlBusiness.DoesNotExist:
                logger.info(traceback.format_exc())
                # 返回主页
                request.session['danger_msg'].append('对不起! 找不到指定的业务组')
                index_url = '{base_url}/index/'.format(
                                base_url = ViewUrlPath.path_dbmp_inception_record())
                return HttpResponseRedirect(index_url)

            try:
                # 序号审核的sql信息
                dbmp_inception_record = DbmpInceptionRecord.objects.get(
                                     inception_record_id = dbmp_inception_business.get('inception_record_id', 0))
                params['dbmp_inception_record'] = dbmp_inception_record
            except DbmpInceptionRecord.DoesNotExist:
                logger.info(traceback.format_exc())
                # 返回点击编辑页面
                request.session['danger_msg'].append('对不起! 找不到指定的SQL审核数据')
                index_url = '{base_url}/index/'.format(
                                base_url = ViewUrlPath.path_dbmp_inception_record())
                return HttpResponseRedirect(index_url)

            try:
                # Inception实例
                dbmp_inception_instance = DbmpInceptionInstance.objects.values(
                                      'inception_instance_id',
                                      'host',
                                      'port',
                                      'alias').get(
                                     inception_instance_id = dbmp_inception_record.inception_instance_id)
                params['dbmp_inception_instance'] = dbmp_inception_instance
            except DbmpInceptionInstance.DoesNotExist:
                logger.info(traceback.format_exc())
                # 返回点击编辑页面
                request.session['danger_msg'].append('对不起! 找不到审核实例信息')
                index_url = '{base_url}/index/'.format(
                                base_url = ViewUrlPath.path_dbmp_inception_record())
                return HttpResponseRedirect(index_url)

            try:
                # 查找需要审核的业务组明细
                s_dbmp_inception_business_detail = SQLDbmpInceptionBusinessDetail()
                # 获得 DbmpInceptionBusinessDetail, DbmpInceptionInstance
                #      DbmpMysqlDatabase, DbmpMysqlInstance 信息
                dbmp_inception_business_details = s_dbmp_inception_business_detail.find_business_detail_by_business_id(
                                                                         inception_business_id)
                params['dbmp_inception_business_details'] = dbmp_inception_business_details
            except Exception, e:
                logger.info(traceback.format_exc())
                params['error_msg'].append('查找需要执行的业务组明细出错')

        return render(request, 'dbmp_inception_business_detail/index.html', params)
def edit(request):
    params = {}

    ####################################################################
    # GET 请求
    ####################################################################
    # 点击链接转跳到编辑页面
    if request.method == 'GET':
        # 获取MySQL实例ID
        mysql_business_id = int(request.GET.get('mysql_business_id', '0'))  

        if mysql_business_id:
            try:
                # 1.获取MySQL实例
                dbmp_mysql_business = DbmpMysqlBusiness.objects.get(
                                     mysql_business_id = mysql_business_id)
                params['dbmp_mysql_business'] = dbmp_mysql_business


                return render(request, 'dbmp_mysql_business/edit.html', params)
            except DbmpMysqlBusiness.DoesNotExist:
                logger.info(traceback.format_exc())
                # 返回点击编辑页面
                request.session['danger_msg'].append('对不起! 找不到指定的业务组')
                return HttpResponseRedirect(request.environ['HTTP_REFERER'])
        else:
            request.session['danger_msg'] = '对不起! 找不到指定的业务组!'
            # 返回点击编辑页面
            return HttpResponseRedirect(request.environ['HTTP_REFERER'])



    ####################################################################
    # POST 请求
    ####################################################################
    # 修改操作
    if request.method == 'POST':
        form = EditForm(request.POST)

        # 验证表单
        if form.is_valid():
            mysql_business_id = form.cleaned_data['mysql_business_id']
            name = form.cleaned_data['name']
            remark = form.cleaned_data['remark']
            try:
                with transaction.atomic():
                    # 更新DbmpMysqlBusiness
                    DbmpMysqlBusiness.objects.filter(
                        mysql_business_id = mysql_business_id).update(
                                                           name = name,
                                                           remark = remark)
                # 保存成功转跳到View页面
                request.session['success_msg'].append('修改成功')
                view_url = '{base_url}/index/?mysql_business_id={id}'.format(
                                base_url = ViewUrlPath.path_dbmp_mysql_business(),
                                id = mysql_business_id)
                return HttpResponseRedirect(view_url)
            except IntegrityError, e:
                logger.info(traceback.format_exc())
                request.session['danger_msg'].append('编辑失败')
                if e.args[0] == 1062:
                    request.session['danger_msg'].append('需要修改的相关信息重复')

                request.session['danger_msg'].append(e.args)
                return HttpResponseRedirect(request.environ['HTTP_REFERER'])
            except Exception, e:
                logger.info(traceback.format_exc())
                # 保存失败转跳会原页面
                request.session['danger_msg'].append('编辑失败, 保存数据库错误')
                return HttpResponseRedirect(request.environ['HTTP_REFERER'])
def add(request):
    params = {}

    ####################################################################
    # GET 请求
    ####################################################################
    if request.method == 'GET':
        mysql_instance_id = int(request.GET.get('mysql_instance_id', '0'))
        try:
            # 1.获取MySQL实例
            dbmp_mysql_instance = DbmpMysqlInstance.objects.values(
                'mysql_instance_id',
                'username',
                'port',
                'host',
            ).get(mysql_instance_id=mysql_instance_id)
            params['dbmp_mysql_instance'] = dbmp_mysql_instance
        except DbmpMysqlInstance.DoesNotExist:  # 没有获取到实例信息则转跳列表页面
            logger.info(traceback.format_exc())
            # 返回点击编辑页面
            request.session['danger_msg'].append('对不起! 找不到指定的MySQL实例')
            mysql_instnace_index_url = '{base_url}/index'.format(
                base_url=ViewUrlPath.path_dbmp_mysql_instance())
            return HttpResponseRedirect(mysql_instnace_index_url)

        form = AddForm(initial={'mysql_instance_id': mysql_instance_id})
        params['form'] = form

        return render(request, 'dbmp_mysql_backup_instance/add.html', params)

    ####################################################################
    # POST 请求
    ####################################################################
    if request.method == 'POST':
        mysql_instance_id = int(request.POST.get('mysql_instance_id', 0))
        try:
            # 1.获取MySQL实例
            dbmp_mysql_instance = DbmpMysqlInstance.objects.values(
                'mysql_instance_id',
                'username',
                'port',
                'host',
            ).get(mysql_instance_id=mysql_instance_id)
            params['dbmp_mysql_instance'] = dbmp_mysql_instance
        except DbmpMysqlInstance.DoesNotExist:  # 没有获取到实例信息则转跳列表页面
            logger.info(traceback.format_exc())
            # 返回点击编辑页面
            request.session['danger_msg'].append('对不起! 找不到指定的MySQL实例')
            mysql_instnace_index_url = '{base_url}/index'.format(
                base_url=ViewUrlPath.path_dbmp_mysql_instance())
            return HttpResponseRedirect(mysql_instnace_index_url)

        # 通过判断是否使用将备份传输至远程来创建不同的 form 对象
        is_to_remote = int(request.POST.get('is_to_remote', 0))
        if is_to_remote:
            os_id = request.POST.get('os_id', 0)

            form = AddHasRemoteForm(request.POST)

            try:  # 如果有设置远程备份则获取相关OS
                cmdb_os = CmdbOs.objects.values('hostname', 'ip',
                                                'alias').get(os_id=os_id)
                params['cmdb_os'] = cmdb_os
            except CmdbOs.DoesNotExist:  # 如果获取相关操作系统失败放回添加页面
                params['form'] = form
                logger.info(traceback.format_exc())
                # 如果MySQL实例没有指定OS则告警
                request.session['alert_message_now']['danger_msg'].append(
                    '开启了远程备份,却没有选择相关OS')
                return render(request, 'dbmp_mysql_backup_instance/add.html',
                              params)
        else:
            form = AddForm(request.POST)

        params['form'] = form

        # 验证表单
        if form.is_valid():
            mysql_instance_id = form.cleaned_data['mysql_instance_id']
            backup_tool = form.cleaned_data['backup_tool']
            backup_type = form.cleaned_data['backup_type']
            is_all_instance = form.cleaned_data['is_all_instance']
            is_binlog = form.cleaned_data['is_binlog']
            is_compress = form.cleaned_data['is_compress']
            is_to_remote = form.cleaned_data['is_to_remote']
            backup_dir = form.cleaned_data['backup_dir']
            backup_name = form.cleaned_data['backup_name']
            backup_tool_file = form.cleaned_data['backup_tool_file']
            backup_tool_param = form.cleaned_data['backup_tool_param']

            try:
                with transaction.atomic():
                    # 插入dbmp_mysql_backup_instance数据
                    dbmp_mysql_backup_instance = DbmpMysqlBackupInstance(
                        mysql_instance_id=mysql_instance_id,
                        backup_tool=backup_tool,
                        backup_type=backup_type,
                        is_all_instance=is_all_instance,
                        is_binlog=is_binlog,
                        is_compress=is_compress,
                        is_to_remote=is_to_remote,
                        backup_dir=backup_dir,
                        backup_tool_file=backup_tool_file,
                        backup_tool_param=backup_tool_param,
                        backup_name=backup_name)
                    dbmp_mysql_backup_instance.save()

                    # 如果指定了远程传输备份, 插入数据 dbmp_mysql_backup_remote
                    if is_to_remote:
                        # 备份发送远程相关参数
                        os_id = form.cleaned_data['os_id']
                        remote_dir = form.cleaned_data['remote_dir']
                        DbmpMysqlBackupRemote.objects.create(
                            mysql_backup_instance_id=dbmp_mysql_backup_instance
                            .mysql_backup_instance_id,
                            mysql_instance_id=mysql_instance_id,
                            os_id=os_id,
                            remote_dir=remote_dir)

                # 保存成功转跳到View页面
                request.session['success_msg'].append('备份设置成功')
                view_url = '{base_url}/view/?mysql_instance_id={id}'.format(
                    base_url=ViewUrlPath.path_dbmp_mysql_backup_instance(),
                    id=mysql_instance_id)

                return HttpResponseRedirect(view_url)
            except IntegrityError, e:
                logger.info(traceback.format_exc())
                request.session['danger_msg'].append('添加失败')
                if e.args[0] == 1062:
                    request.session['alert_message_now']['danger_msg'].append(
                        '需要添加的相关信息重复')
                request.session['alert_message_now']['danger_msg'].append(
                    e.args)
                return render(request, 'dbmp_mysql_backup_instance/add.html',
                              params)
            except Exception, e:
                logger.info(traceback.format_exc())
                # 保存失败转跳会原页面
                request.session['alert_message_now']['danger_msg'].append(
                    '添加失败, 保存数据库错误')
                return render(request, 'dbmp_mysql_backup_instance/add.html',
                              params)
def view(request):
    params = {}

    ####################################################################
    # GET 请求
    ####################################################################
    # 点击链接转跳到编辑页面
    if request.method == 'GET':
        # 获取MySQL实例ID
        mysql_instance_id = int(request.GET.get('mysql_instance_id', '0'))

        if mysql_instance_id:

            try:
                # 1.获取MySQL实例
                dbmp_mysql_instance = DbmpMysqlInstance.objects.values(
                    'mysql_instance_id',
                    'run_status',
                    'username',
                    'password',
                    'port',
                    'host',
                ).get(mysql_instance_id=mysql_instance_id)
                params['dbmp_mysql_instance'] = dbmp_mysql_instance
            except DbmpMysqlInstance.DoesNotExist:
                logger.info(traceback.format_exc())
                # 返回编辑页面
                request.session['danger_msg'].append('对不起! 找不到指定的MySQL实例')
                # 定义错误返回编辑页面链接
                index_url = '{base_url}/index'.format(
                    base_url=ViewUrlPath.path_dbmp_mysql_instance())
                return HttpResponseRedirect(index_url)

            # 2.获取MySQL备份设置信息
            try:
                dbmp_mysql_backup_instance = DbmpMysqlBackupInstance.objects.get(
                    mysql_instance_id=mysql_instance_id)
                params[
                    'dbmp_mysql_backup_instance'] = dbmp_mysql_backup_instance
            except DbmpMysqlBackupInstance.DoesNotExist:
                logger.info(traceback.format_exc())
                request.session['danger_msg'].append('对不起! 您还没有设置实例备份信息')
                add_url = '{base_url}/add/?mysql_instance_id={id}'.format(
                    base_url=ViewUrlPath.path_dbmp_mysql_backup_instance(),
                    id=mysql_instance_id)
                return HttpResponseRedirect(add_url)

            # 3.获得远程备份信息
            if dbmp_mysql_backup_instance.is_to_remote:
                # 获得 备份远程信息
                try:
                    dbmp_mysql_backup_remote = DbmpMysqlBackupRemote.objects.get(
                        mysql_instance_id=mysql_instance_id)
                    params[
                        'dbmp_mysql_backup_remote'] = dbmp_mysql_backup_remote
                except CmdbOs.DoesNotExist:
                    logger.info(traceback.format_exc())
                    request.session['danger_msg'].append(
                        '对不起! 设置了远程备份却没有找到远程的相关设置')
                    return HttpResponseRedirect(edit_url)

                # 获得 OS 信息
                try:
                    cmdb_os = CmdbOs.objects.get(
                        os_id=dbmp_mysql_backup_remote.os_id)
                    params['cmdb_os'] = cmdb_os
                except CmdbOs.DoesNotExist:
                    logger.info(traceback.format_exc())
                    request.session['danger_msg'].append('对不起! 找不到你指定的远程备份主机')
                    edit_url = '{base_url}/edit/?mysql_instance_id={id}'.format(
                        base_url=ViewUrlPath.path_dbmp_mysql_backup_instance(),
                        id=mysql_instance_id)
                    return HttpResponseRedirect(edit_url)

            return render(request, 'dbmp_mysql_backup_instance/view.html',
                          params)
        else:
            # MySQL实例列表页
            request.session['danger_msg'].append('对不起! 没有指定正确的MySQL实例ID!')
            index_url = '{base_url}/index'.format(
                base_url=ViewUrlPath.path_dbmp_mysql_instance())
            return HttpResponseRedirect(index_url)
def edit(request):
    params = {}
    ####################################################################
    # GET 请求
    ####################################################################
    # 点击链接转跳到编辑页面
    if request.method == 'GET':
        # 初始化 form
        form_data = {}

        # 获取MySQL实例ID
        mysql_instance_id = int(request.GET.get('mysql_instance_id', '0'))

        if mysql_instance_id:
            try:
                # 1.获取MySQL实例
                dbmp_mysql_instance = DbmpMysqlInstance.objects.get(
                    mysql_instance_id=mysql_instance_id)
                params['dbmp_mysql_instance'] = dbmp_mysql_instance
            except DbmpMysqlInstance.DoesNotExist:
                logger.info(traceback.format_exc())
                # 返回点击编辑页面
                request.session['danger_msg'].append('对不起! 找不到指定的MySQL实例')
                return HttpResponseRedirect(request.environ['HTTP_REFERER'])

            # 2.获取MySQL备份信息
            try:
                dbmp_mysql_backup_instance = DbmpMysqlBackupInstance.objects.get(
                    mysql_instance_id=dbmp_mysql_instance.mysql_instance_id)
                # params['dbmp_mysql_backup_instance'] = dbmp_mysql_backup_instance
            except DbmpMysqlBackupInstance.DoesNotExist:  # 如果没有查到备份设置信息则转跳到添加备份设置信息页面
                request.session['alert_message_now']['warning_msg'].append(
                    '您还未为该MySQL实例设置备份策略, 请进行编辑')
                add_url = '{base_url}/add/?mysql_instance_id={id}'.format(
                    base_url=ViewUrlPath.path_dbmp_mysql_backup_instance(),
                    id=dbmp_mysql_instance.mysql_instance_id)
                return HttpResponseRedirect(add_url)

            # 3.远程信息
            if dbmp_mysql_backup_instance.is_to_remote == 1:
                try:  # 远程备份信息
                    dbmp_mysql_backup_remote = DbmpMysqlBackupRemote.objects.get(
                        mysql_instance_id=dbmp_mysql_instance.mysql_instance_id
                    )
                    # params['dbmp_mysql_backup_remote'] = dbmp_mysql_backup_remote
                except CmdbOs.DoesNotExist:
                    logger.info(traceback.format_exc())
                    # 如果MySQL实例没有指定OS则告警
                    request.session['alert_message_now']['wraning_msg'].append(
                        '设置了远程备份却没有设置远程信息,请修改')
                try:  # 如果有设置远程备份则获取相关OS
                    cmdb_os = CmdbOs.objects.values(
                        'hostname', 'ip',
                        'alias').get(os_id=dbmp_mysql_backup_remote.os_id)
                    params['cmdb_os'] = cmdb_os
                except CmdbOs.DoesNotExist:  # 如果获取相关操作系统失败放回添加页面
                    logger.info(traceback.format_exc())
                    # 如果MySQL实例没有指定OS则告警
                    request.session['alert_message_now']['warning_msg'].append(
                        '设置了远程备份却找不到远程OS,请修改')

            # 将信息都添加到 form 中
            form_data['mysql_instance_id'] = str(
                dbmp_mysql_instance.mysql_instance_id)
            form_data['mysql_backup_instance_id'] = str(
                dbmp_mysql_backup_instance.mysql_backup_instance_id)
            form_data['backup_tool'] = str(
                dbmp_mysql_backup_instance.backup_tool)
            form_data['backup_type'] = str(
                dbmp_mysql_backup_instance.backup_type)
            form_data['is_all_instance'] = str(
                dbmp_mysql_backup_instance.is_all_instance)
            form_data['is_binlog'] = str(dbmp_mysql_backup_instance.is_binlog)
            form_data['is_compress'] = str(
                dbmp_mysql_backup_instance.is_compress)
            form_data['backup_dir'] = str(
                dbmp_mysql_backup_instance.backup_dir)
            form_data['backup_name'] = str(
                dbmp_mysql_backup_instance.backup_name)
            form_data['backup_tool_file'] = str(
                dbmp_mysql_backup_instance.backup_tool_file)
            form_data['backup_tool_param'] = str(
                dbmp_mysql_backup_instance.backup_tool_param)
            form_data['is_to_remote'] = str(
                dbmp_mysql_backup_instance.is_to_remote)

            # 更具是否有开启远程来生成form
            if dbmp_mysql_backup_instance.is_to_remote == 1:  # 开启远程
                form_data['mysql_backup_remote_id'] = str(
                    dbmp_mysql_backup_remote.mysql_backup_remote_id)
                form_data['os_id'] = str(dbmp_mysql_backup_remote.os_id)
                form_data['remote_dir'] = str(
                    dbmp_mysql_backup_remote.remote_dir)

                form = EditHasRemoteForm(initial=form_data)
                params['form'] = form
            else:  # 没开启远程
                form = EditForm(initial=form_data)
                params['form'] = form

            return render(request, 'dbmp_mysql_backup_instance/edit.html',
                          params)
        else:
            request.session['danger_msg'] = '对不起! 找不到指定的MySQL实例!'
            # 返回点击编辑页面
            return HttpResponseRedirect(request.environ['HTTP_REFERER'])

    ####################################################################
    # POST 请求
    ####################################################################
    # 修改操作
    if request.method == 'POST':
        mysql_instance_id = int(request.POST.get('mysql_instance_id', 0))
        try:
            # 1.获取MySQL实例
            dbmp_mysql_instance = DbmpMysqlInstance.objects.values(
                'mysql_instance_id',
                'username',
                'port',
                'host',
            ).get(mysql_instance_id=mysql_instance_id)
            params['dbmp_mysql_instance'] = dbmp_mysql_instance
        except DbmpMysqlInstance.DoesNotExist:  # 没有获取到实例信息则转跳列表页面
            logger.info(traceback.format_exc())
            # 返回点击编辑页面
            request.session['danger_msg'].append('对不起! 找不到指定的MySQL实例')
            mysql_instnace_index_url = '{base_url}/index'.format(
                base_url=ViewUrlPath.path_dbmp_mysql_instance())
            return HttpResponseRedirect(mysql_instnace_index_url)

        # 通过判断是否使用将备份传输至远程来创建不同的 form 对象
        is_to_remote = int(request.POST.get('is_to_remote', 0))
        if is_to_remote:
            os_id = request.POST.get('os_id', 0)

            form = EditHasRemoteForm(request.POST)

            try:  # 如果有设置远程备份则获取相关OS
                cmdb_os = CmdbOs.objects.values('hostname', 'ip',
                                                'alias').get(os_id=os_id)
                params['cmdb_os'] = cmdb_os
            except CmdbOs.DoesNotExist:  # 如果获取相关操作系统失败放回添加页面
                params['form'] = form
                logger.info(traceback.format_exc())
                # 如果MySQL实例没有指定OS则告警
                request.session['alert_message_now']['danger_msg'].append(
                    '开启了远程备份,却没有选择相关OS')
                return render(request, 'dbmp_mysql_backup_instance/edit.html',
                              params)
        else:
            form = EditForm(request.POST)

        params['form'] = form

        # 验证表单
        if form.is_valid():
            mysql_instance_id = form.cleaned_data['mysql_instance_id']
            mysql_backup_instance_id = form.cleaned_data[
                'mysql_backup_instance_id']
            mysql_backup_remote_id = form.cleaned_data[
                'mysql_backup_remote_id']
            backup_tool = form.cleaned_data['backup_tool']
            backup_type = form.cleaned_data['backup_type']
            is_all_instance = form.cleaned_data['is_all_instance']
            is_binlog = form.cleaned_data['is_binlog']
            is_compress = form.cleaned_data['is_compress']
            is_to_remote = form.cleaned_data['is_to_remote']
            backup_dir = form.cleaned_data['backup_dir']
            backup_name = form.cleaned_data['backup_name']
            backup_tool_file = form.cleaned_data['backup_tool_file']
            backup_tool_param = form.cleaned_data['backup_tool_param']

            try:
                with transaction.atomic():
                    # 插入dbmp_mysql_backup_instance数据
                    DbmpMysqlBackupInstance.objects.filter(
                        mysql_backup_instance_id=mysql_backup_instance_id
                    ).update(mysql_instance_id=mysql_instance_id,
                             backup_tool=backup_tool,
                             backup_type=backup_type,
                             is_all_instance=is_all_instance,
                             is_binlog=is_binlog,
                             is_compress=is_compress,
                             is_to_remote=is_to_remote,
                             backup_dir=backup_dir,
                             backup_tool_file=backup_tool_file,
                             backup_tool_param=backup_tool_param,
                             backup_name=backup_name)

                    # 远程备份信息相关判断和操作
                    if is_to_remote and mysql_backup_remote_id:  # 设置远程并且之前添加过远程信息(修改远程信息)
                        # 备份发送远程相关参数
                        os_id = form.cleaned_data['os_id']
                        remote_dir = form.cleaned_data['remote_dir']
                        DbmpMysqlBackupRemote.objects.filter(
                            mysql_backup_remote_id=mysql_backup_remote_id
                        ).update(
                            mysql_backup_instance_id=mysql_backup_instance_id,
                            mysql_instance_id=mysql_instance_id,
                            os_id=os_id,
                            remote_dir=remote_dir)
                    elif is_to_remote and not mysql_backup_remote_id:  # 如果设置远程并且之前没添加过(创建远程信息)
                        # 备份发送远程相关参数
                        os_id = form.cleaned_data['os_id']
                        remote_dir = form.cleaned_data['remote_dir']
                        DbmpMysqlBackupRemote.objects.create(
                            mysql_backup_instance_id=mysql_backup_instance_id,
                            mysql_instance_id=mysql_instance_id,
                            os_id=os_id,
                            remote_dir=remote_dir)
                        request.session['success_msg'].append('新增备份远程信息')
                    elif not is_to_remote and mysql_backup_remote_id:  # 如果没设置远程并且之前添加过(删除远程信息)
                        DbmpMysqlBackupRemote.objects.filter(
                            mysql_backup_remote_id=mysql_backup_remote_id
                        ).delete()
                        request.session['warning_msg'].append('备份远程信息已经删除')
                        logger.info('delete DbmpMysqlBackupInfo: {id}'.format(
                            id=mysql_backup_remote_id))
                    elif not is_to_remote and not mysql_backup_remote_id:  # 如果没设置远程并且之前没添加过(不处理)
                        pass

                # 保存成功转跳到View页面
                request.session['success_msg'].append('备份设置修改成功')
                view_url = '{base_url}/view/?mysql_instance_id={id}'.format(
                    base_url=ViewUrlPath.path_dbmp_mysql_backup_instance(),
                    id=mysql_instance_id)

                return HttpResponseRedirect(view_url)
            except IntegrityError, e:
                logger.info(traceback.format_exc())
                request.session['danger_msg'].append('修改失败')
                if e.args[0] == 1062:
                    request.session['alert_message_now']['danger_msg'].append(
                        '需要修改的相关信息重复')
                request.session['alert_message_now']['danger_msg'].append(
                    e.args)
                return render(request, 'dbmp_mysql_backup_instance/edit.html',
                              params)
            except Exception, e:
                logger.info(traceback.format_exc())
                # 保存失败转跳会原页面
                request.session['alert_message_now']['danger_msg'].append(
                    '修改失败, 保存数据库错误')
                return render(request, 'dbmp_mysql_backup_instance/edit.html',
                              params)
def index(request):
    """展示某个业务组的明细"""
    params = {}
    params['error_msg'] = []
    if request.method == 'GET':
        try:
            # 获得传入的MySQL实例ID
            inception_business_id = int(
                request.GET.get('inception_business_id', '0'))
        except ValueError:
            logger.info(traceback.format_exc())
            inception_record_id = 0
            inception_database_id = 0

        if inception_business_id:
            try:
                # 审核业务组
                dbmp_inception_business = DbmpInceptionBusiness.objects.values(
                    'inception_business_id',
                    'inception_record_id',
                    'mysql_business_id',
                ).get(inception_business_id=inception_business_id)
                params['dbmp_inception_business'] = dbmp_inception_business
            except DbmpInceptionBusiness.DoesNotExist:
                logger.info(traceback.format_exc())
                # 返回点击编辑页面
                request.session['danger_msg'].append('对不起! 找不到指定的SQL审核数据')
                index_url = '{base_url}/index/'.format(
                    base_url=ViewUrlPath.path_dbmp_inception_record())
                return HttpResponseRedirect(index_url)

            try:
                # 业务组
                dbmp_mysql_business = DbmpMysqlBusiness.objects.values(
                    'name', 'remark').get(
                        mysql_business_id=dbmp_inception_business.get(
                            'mysql_business_id', 0))
                params['dbmp_mysql_business'] = dbmp_mysql_business
            except DbmpMysqlBusiness.DoesNotExist:
                logger.info(traceback.format_exc())
                # 返回主页
                request.session['danger_msg'].append('对不起! 找不到指定的业务组')
                index_url = '{base_url}/index/'.format(
                    base_url=ViewUrlPath.path_dbmp_inception_record())
                return HttpResponseRedirect(index_url)

            try:
                # 序号审核的sql信息
                dbmp_inception_record = DbmpInceptionRecord.objects.get(
                    inception_record_id=dbmp_inception_business.get(
                        'inception_record_id', 0))
                params['dbmp_inception_record'] = dbmp_inception_record
            except DbmpInceptionRecord.DoesNotExist:
                logger.info(traceback.format_exc())
                # 返回点击编辑页面
                request.session['danger_msg'].append('对不起! 找不到指定的SQL审核数据')
                index_url = '{base_url}/index/'.format(
                    base_url=ViewUrlPath.path_dbmp_inception_record())
                return HttpResponseRedirect(index_url)

            try:
                # Inception实例
                dbmp_inception_instance = DbmpInceptionInstance.objects.values(
                    'inception_instance_id', 'host', 'port',
                    'alias').get(inception_instance_id=dbmp_inception_record.
                                 inception_instance_id)
                params['dbmp_inception_instance'] = dbmp_inception_instance
            except DbmpInceptionInstance.DoesNotExist:
                logger.info(traceback.format_exc())
                # 返回点击编辑页面
                request.session['danger_msg'].append('对不起! 找不到审核实例信息')
                index_url = '{base_url}/index/'.format(
                    base_url=ViewUrlPath.path_dbmp_inception_record())
                return HttpResponseRedirect(index_url)

            try:
                # 查找需要审核的业务组明细
                s_dbmp_inception_business_detail = SQLDbmpInceptionBusinessDetail(
                )
                # 获得 DbmpInceptionBusinessDetail, DbmpInceptionInstance
                #      DbmpMysqlDatabase, DbmpMysqlInstance 信息
                dbmp_inception_business_details = s_dbmp_inception_business_detail.find_business_detail_by_business_id(
                    inception_business_id)
                params[
                    'dbmp_inception_business_details'] = dbmp_inception_business_details
            except Exception, e:
                logger.info(traceback.format_exc())
                params['error_msg'].append('查找需要执行的业务组明细出错')

        return render(request, 'dbmp_inception_business_detail/index.html',
                      params)
Exemplo n.º 12
0
def edit(request):
    params = {}

    ####################################################################
    # GET 请求
    ####################################################################
    # 点击链接转跳到编辑页面
    if request.method == 'GET':
        # 获取MySQL实例ID
        mysql_business_id = int(request.GET.get('mysql_business_id', '0'))

        if mysql_business_id:
            try:
                # 1.获取MySQL实例
                dbmp_mysql_business = DbmpMysqlBusiness.objects.get(
                    mysql_business_id=mysql_business_id)
                params['dbmp_mysql_business'] = dbmp_mysql_business

                return render(request, 'dbmp_mysql_business/edit.html', params)
            except DbmpMysqlBusiness.DoesNotExist:
                logger.info(traceback.format_exc())
                # 返回点击编辑页面
                request.session['danger_msg'].append('对不起! 找不到指定的业务组')
                return HttpResponseRedirect(request.environ['HTTP_REFERER'])
        else:
            request.session['danger_msg'] = '对不起! 找不到指定的业务组!'
            # 返回点击编辑页面
            return HttpResponseRedirect(request.environ['HTTP_REFERER'])

    ####################################################################
    # POST 请求
    ####################################################################
    # 修改操作
    if request.method == 'POST':
        form = EditForm(request.POST)

        # 验证表单
        if form.is_valid():
            mysql_business_id = form.cleaned_data['mysql_business_id']
            name = form.cleaned_data['name']
            remark = form.cleaned_data['remark']
            try:
                with transaction.atomic():
                    # 更新DbmpMysqlBusiness
                    DbmpMysqlBusiness.objects.filter(
                        mysql_business_id=mysql_business_id).update(
                            name=name, remark=remark)
                # 保存成功转跳到View页面
                request.session['success_msg'].append('修改成功')
                view_url = '{base_url}/index/?mysql_business_id={id}'.format(
                    base_url=ViewUrlPath.path_dbmp_mysql_business(),
                    id=mysql_business_id)
                return HttpResponseRedirect(view_url)
            except IntegrityError, e:
                logger.info(traceback.format_exc())
                request.session['danger_msg'].append('编辑失败')
                if e.args[0] == 1062:
                    request.session['danger_msg'].append('需要修改的相关信息重复')

                request.session['danger_msg'].append(e.args)
                return HttpResponseRedirect(request.environ['HTTP_REFERER'])
            except Exception, e:
                logger.info(traceback.format_exc())
                # 保存失败转跳会原页面
                request.session['danger_msg'].append('编辑失败, 保存数据库错误')
                return HttpResponseRedirect(request.environ['HTTP_REFERER'])
Exemplo n.º 13
0
def add(request):
    params = {}

    ####################################################################
    # GET 请求
    ####################################################################
    if request.method == 'GET':
        form = AddForm()
        params['form'] = form

        return render(request, 'dbmp_mysql_instance/add.html', params)

    ####################################################################
    # POST 请求
    ####################################################################
    if request.method == 'POST':
        form = AddForm(request.POST)
        params['form'] = form

        # 验证表单
        if form.is_valid():
            os_id = form.cleaned_data['os_id']
            host = form.cleaned_data['host']
            port = form.cleaned_data['port']
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            remark = form.cleaned_data['remark']
            my_cnf_path = form.cleaned_data['my_cnf_path']
            base_dir = form.cleaned_data['base_dir']
            start_cmd = form.cleaned_data['start_cmd']

            host = IpTool.ip2num(host)
            run_status = 3  # 未知

            try:
                with transaction.atomic():
                    # 更新DbmpMysqlInstance
                    dbmp_mysql_instance = DbmpMysqlInstance(
                        os_id=os_id,
                        host=host,
                        port=port,
                        username=username,
                        password=password,
                        run_status=run_status,
                        remark=remark)
                    dbmp_mysql_instance.save()
                    # 插入数据 dbmp_mysql_instance_info
                    DbmpMysqlInstanceInfo.objects.create(
                        mysql_instance_id=dbmp_mysql_instance.
                        mysql_instance_id,
                        my_cnf_path=my_cnf_path,
                        base_dir=base_dir,
                        start_cmd=start_cmd)
                # 保存成功转跳到View页面
                request.session['success_msg'].append('添加成功')
                view_url = '{base_url}/view/?mysql_instance_id={id}'.format(
                    base_url=ViewUrlPath.path_dbmp_mysql_instance(),
                    id=dbmp_mysql_instance.mysql_instance_id)

                return HttpResponseRedirect(view_url)
            except IntegrityError, e:
                logger.info(traceback.format_exc())
                request.session['danger_msg'].append('添加失败')
                if e.args[0] == 1062:
                    request.session['alert_message_now']['danger_msg'].append(
                        '需要添加的相关信息重复')
                request.session['alert_message_now']['danger_msg'].append(
                    e.args)
                return render(request, 'dbmp_mysql_instance/add.html', params)
            except Exception, e:
                logger.info(traceback.format_exc())
                # 保存失败转跳会原页面
                request.session['alert_message_now']['danger_msg'].append(
                    '添加失败, 保存数据库错误')
                return render(request, 'dbmp_mysql_instance/add.html', params)
Exemplo n.º 14
0
def edit(request):
    params = {}

    ####################################################################
    # GET 请求
    ####################################################################
    # 点击链接转跳到编辑页面
    if request.method == 'GET':
        # 获取MySQL实例ID
        mysql_instance_id = int(request.GET.get('mysql_instance_id', '0'))

        if mysql_instance_id:
            try:
                # 1.获取MySQL实例
                dbmp_mysql_instance = DbmpMysqlInstance.objects.get(
                    mysql_instance_id=mysql_instance_id)
                params['dbmp_mysql_instance'] = dbmp_mysql_instance

                # 2.获得MySQL实例额外信息
                try:
                    dbmp_mysql_instance_info = DbmpMysqlInstanceInfo.objects.get(
                        mysql_instance_id=dbmp_mysql_instance.mysql_instance_id
                    )
                    params[
                        'dbmp_mysql_instance_info'] = dbmp_mysql_instance_info
                except DbmpMysqlInstanceInfo.DoesNotExist:
                    request.session['alert_message_now']['warning_msg'].append(
                        '该MySQL实例信息设置不完整, 请进行编辑')

                # 3.获得操作系统
                try:
                    cmdb_os = CmdbOs.objects.get(
                        os_id=dbmp_mysql_instance.os_id)
                    params['cmdb_os'] = cmdb_os
                except CmdbOs.DoesNotExist:
                    logger.info(traceback.format_exc())
                    # 如果MySQL实例没有指定OS则告警
                    request.session['alert_message_now']['wraning_msg'].append(
                        '该MySQL实例没有指定一个OS')

                return render(request, 'dbmp_mysql_instance/edit.html', params)
            except DbmpMysqlInstance.DoesNotExist:
                logger.info(traceback.format_exc())
                # 返回点击编辑页面
                request.session['danger_msg'].append('对不起! 找不到指定的MySQL实例')
                return HttpResponseRedirect(request.environ['HTTP_REFERER'])
        else:
            request.session['danger_msg'] = '对不起! 找不到指定的MySQL实例!'
            # 返回点击编辑页面
            return HttpResponseRedirect(request.environ['HTTP_REFERER'])

    ####################################################################
    # POST 请求
    ####################################################################
    # 修改操作
    if request.method == 'POST':
        form = EditForm(request.POST)

        # 验证表单
        if form.is_valid():
            mysql_instance_id = form.cleaned_data['mysql_instance_id']
            mysql_instance_info_id = form.cleaned_data[
                'mysql_instance_info_id']
            os_id = form.cleaned_data['os_id']
            host = form.cleaned_data['host']
            port = form.cleaned_data['port']
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            remark = form.cleaned_data['remark']
            my_cnf_path = form.cleaned_data['my_cnf_path']
            base_dir = form.cleaned_data['base_dir']
            start_cmd = form.cleaned_data['start_cmd']

            host = IpTool.ip2num(host)

            try:
                with transaction.atomic():
                    # 更新DbmpMysqlInstance
                    DbmpMysqlInstance.objects.filter(
                        mysql_instance_id=mysql_instance_id).update(
                            os_id=os_id,
                            host=host,
                            port=port,
                            username=username,
                            password=password,
                            remark=remark)
                    if mysql_instance_info_id:
                        # 更新 dbmp_mysql_instance_info
                        DbmpMysqlInstanceInfo.objects.filter(
                            mysql_instance_info_id=mysql_instance_info_id
                        ).update(my_cnf_path=my_cnf_path,
                                 base_dir=base_dir,
                                 start_cmd=start_cmd)
                    else:
                        # 插入数据 dbmp_mysql_instance_info
                        DbmpMysqlInstanceInfo.objects.create(
                            mysql_instance_id=mysql_instance_id,
                            my_cnf_path=my_cnf_path,
                            base_dir=base_dir,
                            start_cmd=start_cmd)
                # 保存成功转跳到View页面
                request.session['success_msg'].append('修改成功')
                view_url = '{base_url}/view/?mysql_instance_id={id}'.format(
                    base_url=ViewUrlPath.path_dbmp_mysql_instance(),
                    id=mysql_instance_id)
                return HttpResponseRedirect(view_url)
            except IntegrityError, e:
                logger.info(traceback.format_exc())
                request.session['danger_msg'].append('编辑失败')
                if e.args[0] == 1062:
                    request.session['danger_msg'].append('需要修改的相关信息重复')

                request.session['danger_msg'].append(e.args)
                return HttpResponseRedirect(request.environ['HTTP_REFERER'])
            except Exception, e:
                logger.info(traceback.format_exc())
                # 保存失败转跳会原页面
                request.session['danger_msg'].append('编辑失败, 保存数据库错误')
                return HttpResponseRedirect(request.environ['HTTP_REFERER'])