def post(self, request, *args, **kwargs): app_code = self.kwargs["app_code"] logger.info("[app:%s] 开始进行[删除]...", app_code) username = request.user.username app = App.objects.get(code=app_code) can_be_deleted, message = app.can_be_deleted(username) if not can_be_deleted: logger.info("[app:%s] %s", app_code, message) return FailJsonResponse(message) try: SecureInfo.objects.filter(app_code=app_code).delete() App.objects.filter(code=app_code).delete() # 将APP的发布记录保存为上一次,避免下次创建时显示冲突 Record.objects.filter(app_code=app_code).update(version='last') except Exception: message = "删除失败!" logger.exception("[app:%s] %s", app_code, message) return FailJsonResponse(message) # 操作流水日志 extra_data = {"username": username} _r(app_code, username, UserOperateTypeEnum.APP_DELETE.value, extra_data) message = "删除成功!" logger.info("[app:%s] %s", app_code, message) return OKJsonResponse(message)
def check_expected_key(response, expected_key, is_list=True): try: if is_list: [n[expected_key] for n in response.json()] else: response.json()[expected_key] except ValueError: error_msg = "Got non-json from API server: {} status_code={}".format( response.reason, response.status_code) logger.error(error_msg) raise LNUtilError(error_msg) except KeyError: error_msg = "Got invalid schema from API server: {} status_code={} response_text={}".format( response.reason, response.status_code, response.text) logger.error(error_msg) raise LNUtilError(error_msg) except TypeError as e: error_msg = (( "Is is_list correct for check_expected_key? " "Got TypeError for a valid response from API " "server: {} status_code={} response_text={} exception={}").format( response.reason, response.status_code, response.text, e)) logger.exception(e) logger.error(error_msg) raise LNUtilError(error_msg)
def write_excel(head_list, records): wbk = xlwt.Workbook(encoding='gbk') # 设置 excel 文件格式 sheet = wbk.add_sheet('Sheet1') for i in range(0, 22): sheet.col(i).width = 0x0d00 + 2000 fnt = xlwt.Font() fnt.name = 'Arial' fnt.colour_index = 4 fnt.bold = True style = xlwt.XFStyle() style.font = fnt # 标题栏 for i, data in enumerate(head_list): sheet.write(0, i, data) # 查询库存数据 try: for index, record in enumerate(records): for cell_index, cell_value in enumerate(record): sheet.write(index + 1, cell_index, cell_value) except Exception as e: logger.exception('export excel fail, error: {}'.format(e)) return False, _("导出数据出现错误"), wbk return True, 'SUCCESS', wbk
def _http_request(method, url, headers=None, data=None): try: if method == "GET": resp = requests.get(url=url, headers=headers, params=data, verify=False) elif method == "HEAD": resp = requests.head(url=url, headers=headers, verify=False) elif method == "POST": resp = requests.post(url=url, headers=headers, json=data, verify=False) elif method == "DELETE": resp = requests.delete(url=url, headers=headers, json=data, verify=False) elif method == "PUT": resp = requests.put(url=url, headers=headers, json=data, verify=False) else: return False, None except requests.exceptions.RequestException: logger.exception("login http request error! type: %s, url: %s, data: %s" % (method, url, str(data))) return False, None else: if resp.status_code != 200: content = resp.content[:100] if resp.content else '' logger.error( "login http request error! type: %s, url: %s, data: %s, response_status_code: %s, response_content: %s" # noqa % (method, url, str(data), resp.status_code, content)) return False, None return True, resp.json()
def get_config_item(request): req_data = json.loads(request.body) try: class_id = req_data['class_id'] http = httplib2.Http() url = BK_PAAS_HOST + "/api/c/compapi/v2/cc/search_objects/" param = { "bk_app_code": APP_ID, "bk_app_secret": APP_TOKEN, "bk_username": "******", "bk_classification_id": class_id } headers = {'Content-type': 'application/json'} response, content = http.request(url, 'POST', headers=headers, body=json.dumps(param)) if response['status'] == "200": res_data = json.loads(content) item_list = [{ 'name': i['bk_obj_name'], 'value': i['bk_obj_id'] } for i in res_data['data']] if class_id == 'bk_host_manage': item_list = item_list[0:1] item_list[0]['name'] = "主机" return render_json({"result": True, "data": item_list}) else: return render_json({"result": False, "msg": 'error'}) except Exception as e: logger.exception("error:{0}".format(e.message)) return render_json({"result": False, "msg": 'error'})
def bp_access(request, cc_biz_id): """ 基础性能接入 """ args = request.POST hostid_list = args.get("hostid_list", "") ip_list = None if hostid_list: hostid_list = hostid_list.split(",") # 置顶ip列表接入 ip_list = [] for hostid in hostid_list: ip, plat_id = parse_host_id(hostid) ip_list.append({ "ip": ip, "plat_id": plat_id, }) try: result = access_performance(cc_biz_id, ip_list) if result.get("result"): return render_json(ok()) else: return render_json(failed(u"基础性能接入失败:%s" % result.get("message"))) except Exception as e: logger.exception(u"基础性能接入失败:%s" % e) return render_json(failed(u"基础性能接入失败,请联系管理员"))
def delete(self, request, app_code, var_id): try: AppEnvVar.objects.filter(id=var_id).delete() except Exception: logger.exception("删除app环境变量失败") return FailJsonResponse("删除app环境变量失败") return OKJsonResponse("删除成功")
def call_endpoint(path, args={}, as_post=False, timeout=settings.API_TIMEOUT): if settings.READER_TO_WRITER_AUTH_TOKEN is not None: headers = { 'Authorization': 'Token {}'.format(settings.READER_TO_WRITER_AUTH_TOKEN) } else: headers = {} full_path = 'http://{}:8000/{}.json'.format(settings.WRITER_HOST, path) try: if as_post: return requests.post(full_path, headers=headers, data=args, timeout=timeout) else: return requests.get(full_path, headers=headers, params=args, timeout=timeout) except requests.exceptions.ConnectionError as e: logger.exception(e) raise LNUtilError( "ConnectionError when connecting to {}".format(full_path))
def send_mail(self, kwargs): mail_sender = kwargs['sender'] all_receiver = kwargs['receiver'] + kwargs['cc'] if kwargs.get('mime_subtype'): msg = MIMEMultipart(kwargs['mime_subtype']) else: msg = MIMEMultipart() msg['Subject'] = Header(smart_str(kwargs['title']), 'utf-8') msg['From'] = mail_sender msg['To'] = COMMASPACE.join(kwargs['receiver']) msg['Cc'] = COMMASPACE.join(kwargs['cc']) # 添加邮件内容 self.add_content_to_msg(msg, kwargs['content'], kwargs.get('body_format')) # 加载附件 self.add_attachment_to_msg(msg, kwargs.get('attachments')) try: smtp = self.get_smtp_client() smtp.sendmail(mail_sender, all_receiver, msg.as_string()) smtp.quit() except Exception: logger.exception('%s send mail exception, server: %s:%s', bk_error_codes.REQUEST_SMTP_ERROR.code, self.smtp_host, self.smtp_port) return {'result': False, 'message': 'Failed to send mail'} else: return {'result': True, 'message': 'Succeeded to send mail'}
def down_cvs(request): try: instances = DbInstance.objects.filter( dbcluster__sysname__db_type='MySQL') data_list = [] for i in instances: mysql_instance = MysqlInstance.objects.get(dbinstance=i) data_list.append([ i.dbcluster.sysname.sys_name, i.dbcluster.sysname.sys_code, i.dbcluster.sysname.department, i.dbcluster.cluster_name, i.instance_name, i.ip, i.port, i.role, mysql_instance.mysql_version, i.base_dir, mysql_instance.param_dir, mysql_instance.backup_path, mysql_instance.is_read_only ]) f = codecs.open('MySQL-Info.csv', 'wb', "gbk") writer = csv.writer(f) writer.writerow([ u"系统名", u"系统简称", u"所属产品线", u"集群名", u"实例名", u"IP地址", u"端口", u"主从角色", u"数据库版本", u"安装目录", u"参数路径", u"备份路径", u"是否只读" ]) writer.writerows(data_list) f.close() file_path = "{0}/MySQL-Info.csv".format(PROJECT_ROOT).replace( "\\", "/") file_name = "MySQL-Info.csv" return download_file(file_path, file_name) except Exception as e: logger.exception('download cvs file error:{0}'.format(e.message)) return False
def _request(self, method, request, system_name, component_name): components_manager = get_components_manager() comp_cls = components_manager.get_comp_by_compname( system_name, component_name) if not comp_cls: raise error_codes.COMPONENT_NOT_FOUND.format_prompt( 'system_name: %s, component_name: %s' % (system_name.upper(), component_name)) # noqa comp = comp_cls() self.patch_request_common(request) comp.set_request(CompRequest(wsgi_request=request)) try: response = comp.invoke() except APIError as e: response = e.code.as_dict() except: logger.exception('Request exception, request_id=%s, path=%s' % (request.g.request_id, request.path)) response = CommonAPIError( 'Component error, please contact the component developer' ).code.as_dict() response['request_id'] = request.g.request_id response = format_resp_dict(response) return JsonResponse(response)
def ip_port(self): try: server_info = json.loads(self.server_info) return server_info.get('ip_port', '') except Exception: logger.exception("获取服务器端口信息异常: server_info=%s", self.server_info) return ''
def ip_address(self): try: server_info = json.loads(self.server_info) return server_info.get('ip_address', '') except Exception: logger.exception("获取服务器IP信息异常: server_info=%s", self.server_info) return ''
def my_listener(event): """事件监听""" if event.exception: logger.exception('========== The job crashed :( ==========') logger.exception(str(event.exception)) else: logger.info('============ The job worked :) ===========')
def get_module_item_list(request): try: module_id = request.GET['module_id'] os_type = CheckModule.objects.get(id=int(module_id)).os_type sys_module_id = CheckModule.objects.get(created_by='system', base_module_id=0, os_type=os_type).id value_list = CheckItemValue.objects.filter(check_module_id=module_id).exclude(check_item__item_type='info') return_data = [] id_list = [] for i in value_list: tmp = {'menu_one': i.check_item.first_menu_name, 'menu_two': i.check_item.menu_name, 'name': i.check_item.name, 'cn_name': i.check_item.cn_name, 'value': i.value, 'compare_way': i.check_item.compare_way, 'can_modified': i.check_item.enabled_change, 'is_checked': True, 'check_item_id': i.check_item.id} id_list.append(i.check_item_id) return_data.append(tmp) custom_item_list = get_custom_item_list(module_id) no_check_item_list = CheckItemValue.objects.filter(check_module_id=sys_module_id).exclude(check_item_id__in=id_list).exclude(check_item__item_type='info') return_data += [ {'menu_one': i.check_item.first_menu_name, 'menu_two': i.check_item.menu_name, 'name': i.check_item.name, 'cn_name': i.check_item.cn_name, 'value': i.value, 'compare_way': i.check_item.compare_way, 'can_modified': i.check_item.enabled_change, 'is_checked': False, 'check_item_id': i.check_item.id} for i in no_check_item_list ] return_data.sort(lambda x, y: cmp(x['check_item_id'], y['check_item_id'])) menus = ItemMenu.objects.all().values('name').order_by('order').distinct() menu_list = [] for i in menus: menu_two = ItemMenu.objects.filter(name=i['name']).order_by('child_order') menu_two_list = [ {'name': u.child_name, 'isShow': True, 'is_checked': True} for u in menu_two ] menu_list.append({'menu_one': i['name'], 'isShow': True, 'is_checked': True, 'menu_two': menu_two_list}) return render_json({'result': True, 'data': return_data, 'menu_list': menu_list, 'custom_item_list': custom_item_list}) except Exception as e: logger.exception(e) return render_json({'result': False, 'data': [u'\u7cfb\u7edf\u5f02\u5e38\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\uff01']})
def url_split(url): obj = {} if url: r = urlparse.urlparse(url.lower()) obj = { 'scheme': r.scheme, 'hostname': r.hostname, 'path': r.path, 'params': {} } if r.query: for q in re.split('&', r.query): if q: #处理url中的中文 try: q = targetDecode( q) #urlparse.unquote(q).decode('utf-8') except Exception as e: logger.debug(q) logger.exception(e.message) pa = re.split('=', q) if pa[0]: obj['params'][pa[0].strip()] = pa[1].strip( ) if len(pa) > 1 else '' return obj
def post(self, request): """添加/编辑第三方服务信息 """ form = ExternalServerForm(request.POST) if not form.is_valid(): message = first_error_message(form) raise BadRequestException(message) server_id = form.cleaned_data["server_id"] server_ip = form.cleaned_data["server_ip"] server_port = form.cleaned_data["server_port"] server_cate = form.cleaned_data["server_cate"] username = form.cleaned_data["username"] password = form.cleaned_data["password"] if ThirdServer.objects.is_server_exists(server_id, server_ip, server_port): message = "IP为[{ip}], 端口为 [{port}] 的服务器已经存在".format( ip=server_ip, port=server_port) return FailJsonResponse(message) try: data = ThirdServer.objects.update_or_create_server( server_id, server_ip, server_port, username, password, server_cate) return OKJsonResponse("保存成功", data=data) except Exception as e: logger.exception("保存服务信息异常:%s", e) return FailJsonResponse("保存出错", data={})
def get_config_class(request): try: http = httplib2.Http() url = BK_PAAS_HOST + "/api/c/compapi/v2/cc/search_classifications/" param = { "bk_app_code": APP_ID, "bk_app_secret": APP_TOKEN, "bk_username": '******' } headers = {'Content-type': 'application/json'} response, content = http.request(url, 'POST', headers=headers, body=json.dumps(param)) if response['status'] == "200": res_data = json.loads(content) class_list = [{ 'name': i['bk_classification_name'], 'value': i['bk_classification_id'] } for i in res_data['data']] # name_list = [i['bk_classification_name'] for i in res_data['data']] class_list = class_list[3:] class_list.insert(0, {"name": "主机管理", "value": "bk_host_manage"}) return render_json({"result": True, "data": class_list}) else: return render_json({"result": False, "msg": 'error'}) except Exception as e: logger.exception("error:{0}".format(e.message)) return render_json({"result": False, "msg": 'error'})
def post(self, request): server_id = request.POST.get('server_id', '') try: server = ThirdServer.objects.get(id=server_id) except Exception: logger.exception("服务信息[id:%s]不存在", server_id) return FailJsonResponse("服务信息不存在,请重新添加") if server.is_active: return FailJsonResponse("服务已激活") # V1 版本 判断只能激活一台服务器 active_server = ThirdServer.objects.category_has_active_server( server.category, server_id) if active_server: message = "已经有一台 {} 服务被激活<br><br>不能再激活其他 {} 服务".format( active_server.get_category_display(), active_server.get_category_display()) return FailJsonResponse(message) ok, message = activate_service(server.category, server_id) if not ok: return FailJsonResponse("服务激活失败: {}".format(message)) return OKJsonResponse("服务已激活")
def _http_request(method, url, headers=None, data=None): try: if method == "GET": resp = requests.get(url=url, headers=headers, params=data, verify=False) elif method == "HEAD": resp = requests.head(url=url, headers=headers) elif method == "POST": resp = requests.post(url=url, headers=headers, json=data, verify=False) elif method == "DELETE": resp = requests.delete(url=url, headers=headers, json=data, verify=False) elif method == "PUT": resp = requests.put(url=url, headers=headers, json=data, verify=False) else: return False, None except requests.exceptions.RequestException, e: logger.exception( "login http request error! type: %s, url: %s, data: %s" % (method, url, str(data))) return False, None
def post(self, request): """添加/编辑AppServer信息 """ form = ServerForm(request.POST) if not form.is_valid(): message = first_error_message(form) raise BadRequestException(message) server_id = form.cleaned_data["server_id"] server_ip = form.cleaned_data["server_ip"] server_port = form.cleaned_data["server_port"] app_port = form.cleaned_data["app_port"] server_cate = form.cleaned_data["server_cate"] # 验证 ip & port 是否重复 if BkServer.objects.is_server_exists(server_id, server_ip, server_port): message = "IP为[{ip}], 端口为 [{port}] 的服务器已经存在".format( ip=server_ip, port=server_port) return FailJsonResponse(message) # 编辑信息 try: data = BkServer.objects.update_or_create_server( server_id, server_ip, server_port, app_port, server_cate) return OKJsonResponse("保存成功", data=data) except Exception as e: logger.exception("保存应用服务器信息异常:%s", e) return FailJsonResponse("保存出错", data={})
def get_host_property_list(request, cc_biz_id): """ 获取业务主机属性 """ property_list = [{'id': '0', 'text': u'全部'}] property_tag = ( ("standard", u"标准属性"), ("customer", u"自定义属性"), ) try: result = CCBiz.host_property_list(cc_biz_id) for tag, tag_name in property_tag: property_info = result.get(tag) if property_info: children = list() for _id, desc in property_info.iteritems(): if desc == "Cpu": desc = desc.upper() children.append({'id': _id, 'text': desc}) if tag == "standard": children = filter( lambda c: c['id'] in DISPLAY_STANDARD_PROPERTY_LIST, children) children.sort(key=lambda x: DISPLAY_STANDARD_PROPERTY_LIST. index(x['id'])) property_list.append({"text": tag_name, "children": children}) except Exception as e: logger.exception(u"获取主机属性列表失败,错误详情:%s" % e) finally: return render_json({'result': True, 'data': property_list})
def post(self, request): server_id = request.POST.get('server_id', '') try: server = BkServer.objects.get(id=server_id) except Exception: logger.exception("服务器信息[id:%s]不存在", server_id) return FailJsonResponse("服务器信息不存在,请重新添加") if server.is_active: return OKJsonResponse("服务器已激活") # V1 版本 判断 测试环境/正式环境 分别只能激活一台服务器 active_server = BkServer.objects.category_has_active_server( server.category, server_id) if active_server: message = "已经有一台{} [IP:{}, 端口:{}] 被激活<br><br>不能再激活其他{}".format( active_server.get_category_display(), active_server.ip_address, active_server.ip_port, active_server.get_category_display()) return FailJsonResponse(message) ok, message = activate_agent(server_id) if not ok: return FailJsonResponse("服务器激活失败: {}".format(message)) return OKJsonResponse("服务器已激活")
def get_settings(self): try: settings = json.loads(self.settings) except Exception: settings = {} logger.exception("应用配置信息解析异常") return settings
def get_hc_info(self, dc_moId): try: si = self._connect_vc() content = si.RetrieveContent() dc = self._get_obj_bymoId(content, [vim.Datacenter], dc_moId) container = content.viewManager.CreateContainerView( dc.hostFolder, [vim.ComputeResource], True) hc_data = [] for i in container.view: if isinstance(i, vim.ClusterComputeResource): hc_data.append({ "hc_moId": i._moId, "hc_name": i.name, "type": "ClusterComputer" }) else: hc_data.append({ "hc_moId": i._moId, "hc_name": i.name, "type": "Computer" }) return {"result": True, "data": hc_data} except Exception, e: logger.exception("get_hc_info") return {"result": False, "message": str(e)}
def post_request(self, host, path, data=None, headers_json=True, **kwargs): headers = {} if not headers_json: headers = {'Content-type': 'application/x-www-form-urlencoded'} data = urllib.urlencode(data) response = self.request('POST', host, path, data=data, headers=headers, **kwargs) try: code = str(response['code']) except Exception: logger.exception('response: %s', response) raise CommonAPIError( 'An error occurred while requesting CC interface, ' 'the response content does not contain code field.') if code != '0': return { 'result': False, 'message': response.get('extmsg') or response.get('msg') or 'An unknown error occurred', 'error': { 'error_data': { 'api_spec': response } } } else: return {'result': True, 'data': response.get('data')}
def _http_request(method, url, headers=None, data=None): try: if method == "GET": resp = requests.get(url=url, headers=headers, params=data) elif method == "HEAD": resp = requests.head(url=url, headers=headers) elif method == "POST": resp = requests.post(url=url, headers=headers, json=data) elif method == "DELETE": resp = requests.delete(url=url, headers=headers, json=data) elif method == "PUT": resp = requests.put(url=url, headers=headers, json=data) else: return False, None except requests.exceptions.RequestException: logger.exception("login http request error! type: %s, url: %s, data: %s" % (method, url, str(data))) return False, None else: if resp.status_code != 200: content = resp.content[:100] if resp.content else '' logger.error("login http request error! type: %s, url: %s, data: %s, response_status_code: %s, response_content: %s" # noqa % (method, url, str(data), resp.status_code, content)) return False, None return True, resp.json()
def get_item_list(request): try: filter_obj = eval(request.body) if not filter_obj['os_type']: custom_items = CustomItem.objects.filter( cn_name__icontains=filter_obj['name']).order_by( '-id').values() else: custom_items = CustomItem.objects.filter( cn_name__icontains=filter_obj['name'], os_type=str(filter_obj['os_type'])).order_by('-id').values() return_data = list(custom_items) for item_obj in return_data: item_obj['os_name'] = 'SUSE' if str( item_obj['os_type']) == '2' else 'CentOS\xe3\x80\x81Redhat' return render_json({'result': True, 'data': return_data}) except Exception as e: logger.exception(e) return render_json({ 'result': False, 'data': [ u'\u7cfb\u7edf\u5f02\u5e38\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\uff01' ] })
def get(self, request, *args, **kwargs): initial = dict() if "memo" in kwargs: memo = json_util.deserialize_memo(kwargs["memo"]) if "parent_post_id" in memo: expected_memo_keys = ["parent_post_id", "post_type", "content"] self.form_class = ShortForm else: expected_memo_keys = [ "title", "post_type", "tag_val", "content" ] for key in expected_memo_keys: initial[key] = memo[key] else: # Attempt to prefill from GET parameters for key in "title post_type tag_val content".split(): value = request.GET.get(key) if value: initial[key] = value try: context = self.get_context_data(**kwargs) except Exception as e: logger.exception(e) raise context['form'] = self.form_class(initial=initial) context['errors_detected'] = False return render(request, self.template_name, context)
def format_response(self, response): try: response = json.loads(response) except Exception: return { 'result': False, 'code': 1306000, 'message': 'Request interface error, response: %s' % response, } try: bk_error_code = response['bk_error_code'] except Exception: logger.exception('response: %s', response) raise CommonAPIError( 'An exception occurred while requesting CC interface, ' 'please contact the component developer to handle it.') if bk_error_code == 0: return { 'result': True, 'code': 0, 'data': response.get('data'), 'message': response.get('bk_error_msg') or '', } else: return { 'result': False, 'code': bk_error_code, 'data': response.get('data'), 'message': response.get('bk_error_msg') or '', }
def post(self, request, *args, **kwargs): try: context = self.get_context_data(**kwargs) except Exception as e: logger.exception(e) raise invoice_pre_validation = request.POST.get("invoice") sign_pre_validation = request.POST.get("signature") if not invoice_pre_validation: # Invoice not provided, back to first form to get invoice form1 = self.form_class1(request.POST) context['invoice_form'] = form1 context['errors_detected'] = True elif not sign_pre_validation: # Time to sign form2 = self.form_class2(initial={ "invoice": invoice_pre_validation, "signature": "" }) context['sign_form'] = form2 context['invoice'] = invoice_pre_validation elif invoice_pre_validation and sign_pre_validation: # Got everything form2 = self.form_class2(request.POST) context['sign_form'] = form2 context['invoice'] = invoice_pre_validation error_summary_list = [] if not form2.is_valid(): context['errors_detected'] = True else: # make API call and report back the results, potentially populating error_summary_list award_id = int(context["award_id"]) node_id = int(context["node_id"]) result = ln.payaward(node_id=node_id, award_id=award_id, invoice=invoice_pre_validation, sig=sign_pre_validation) if result["payment_successful"] == True: return render(request, "payment_successful.html", context) else: error_summary_list.append("Payment failed: {}".format( result["failure_message"])) context['errors_detected'] = True context["show_error_summary"] = True context["error_summary_list"] = error_summary_list else: raise ln.LNUtilError("Invalid state") return render(request, self.template_name, context)