Пример #1
0
def add(request):
    if request.method == "GET":
        server_form = AddServer()
        log.info('Into Add Server Page.')
        return render(request, 'server/add.html', locals())
    else:
        log.info("start submit Add Server Data.")
        server_form = AddServer(request.POST)

        if server_form.is_valid():
            try:
                data = server_form.cleaned_data
                srv = Server(
                    name=data['name'],
                    inner_ip=data['inner_ip'],
                    outer_ip=data['outer_ip'],
                    area=data['area'],
                    user=data['user'],
                    password=data['password'],
                    port=data['port'],
                    bandwidth=data['bandwidth'],
                    monitor=data['monitor'],
                    remark=data['remark']
                )
                if srv.insert(enc=True):
                    # 更新数据字典,增加机房(如果不存在)
                    DataOption(
                        category='area',
                        keyword=data['area']
                    ).insert()
                    # 连接到主机,拷贝公钥
                    connect_server.delay(srv.id)

                log.info("Insert Server data success!")
                message = {'result': True, 'message': 'Server添加成功!', 'title': '添加Serve结果'}
                return render(request, 'server/add-result.html', locals())
            except Exception as e:
                log.error('Insert Server get the ERROR: ' + traceback.format_exc())
                message = {'result': False, 'message': '服务器发生异常:'+e.message + " 请稍候重试!"}
                return render(request, 'server/add.html', locals())
        else:
            log.error("表单验证失败! " + str(server_form.errors))
            message = {'result': False, 'message': '表单验证失败!请检查您的填写。' + str(server_form.errors)}
            return render(request, 'server/add.html', locals())
Пример #2
0
def upload(request):
    if request.method == "GET":
        uf = FileForm()
        log.info("Into Server CSV upload page.")
        return render(request, 'server/upload.html', locals())

    log.info("CSV file uploaded and analyze...")
    uf = FileForm(request.POST, request.FILES)
    table_header = [
        '主机名', '内网IP', '外网IP', '用户名', '密码', '端口', '机房', '机架', '带宽', '监控', '备注'
        ]

    message = {}
    if uf.is_valid():
        upload_file = uf.cleaned_data['upload_file']
        if upload_file.name.lower().endswith('.csv'):
            saved_path = os.path.join(settings.UPLOAD_URL, 'server_template')
            if not os.path.exists(saved_path):
                os.makedirs(saved_path)
            now = datetime.datetime.now()
            saved_file = os.path.join(saved_path, now.strftime('%Y%m%d%H%M%S_%f') + '.csv')
            with open(saved_file, 'wb') as f:
                f.write(upload_file.read())
            log.info("file saved in: " + saved_file)
            try:
                data = csv.reader(open(saved_file, 'rb'))

                i = 0
                # 添加数量和未添加server列表
                added_count = 0
                ignore_list = []
                for row in data:
                    row = [x.decode("GBK") for x in row]
                    i += 1
                    if i == 1:
                        csv_header = row
                        diff = set(table_header) - set(csv_header)
                        if diff:
                            missing_header = ','.join(diff)
                            log.error("CSV file's table header not Support. Missing: " + missing_header)
                            return JsonResponse({'result': False, 'message': '表头信息不符!缺少表头:' + missing_header})
                        continue

                    srv = Server(
                        name=row[csv_header.index('主机名')],
                        inner_ip=row[csv_header.index('内网IP')],
                        outer_ip=row[csv_header.index('外网IP')],
                        # domain=row[csv_header.index(u'域名')],
                        area=row[csv_header.index('机房')],
                        rack=row[csv_header.index('机架')],
                        user=row[csv_header.index('用户名')],
                        password=row[csv_header.index('密码')],
                        port=row[csv_header.index('端口')],
                        bandwidth=row[csv_header.index('带宽')],
                        monitor=row[csv_header.index('监控')],
                        remark=row[csv_header.index('备注')]
                    )
                    if srv.insert(enc=True):
                        # 更新数据字典,增加机房(如果不存在)
                        DataOption(
                            category='area',
                            keyword=row[csv_header.index('机房')]
                        ).insert()
                        added_count += 1
                        # 连接到主机,拷贝公钥
                        connect_server.delay(srv.id)
                    else:
                        ignore_list.append(srv.to_dict())

                message = {'result': True, 'message': '文件上传成功!',
                           'added_count': added_count, 'ignore_list': ignore_list}
                log.info("file upload success and save to database.")
            except Exception:
                traceback.print_exc()
        else:
            log.error("file upload success But File Format not Support!")
            message = {'result': False, 'message': '文件上传失败!仅支持CSV格式'}
    else:
        message = {'result': False, 'message': '请先选择文件上传'}
        log.error('no file found.')
    log.info("upload result: " + str(message))
    return JsonResponse(message)