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())
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)