def flowValue(req): if req.method == 'POST': domain_name = req.POST.get('domain_name') start = req.POST.get('start') end = req.POST.get('end') obj = DiLianManager() status, reason, resp = obj.flowValue(domain_name, start, end) if status == 200: flows = [utils.FlowObj(l) for l in Etree.fromstring(resp).findall('date/Product/flow')] date = [] flow = [] for f in flows: date.append(f.date) flow.append(f.flow) str = ','.join(date) + ';' + ','.join(flow) result = str else: result = status return HttpResponse(result) else: if not req.session.has_key("project_id"): return HttpResponseRedirect('/login/') else: project_id = req.session['project_id'] username = req.COOKIES.get('username') if username == settings.SUPERADMIN: domains = Domain.objects.all() else: domains = Domain.objects.filter(project_id=project_id) all_domains = '' for d in domains: all_domains = all_domains + ',' +d.domain_name project_list = req.session['project_list'] return render_to_response("flow_value.html", locals())
def analyticsServer(req): if req.method == 'POST': domain_name = req.POST.get('domain_name') start = req.POST.get('start') end = req.POST.get('end') req_type = req.POST.get('req_type') obj = DiLianManager() status, reason, resp = obj.analyticsServer(domain_name, start, end, req_type) if status == 200: local = utils.getTempAndLocals(resp, req_type) info = [utils.InfoObj(l) for l in local["info"]] return render_to_response(local["template_name"], locals()) else: result = Etree.fromstring(resp).find("Message").text return HttpResponse(result) else: if not req.session.has_key("project_id"): return HttpResponseRedirect('/login/') else: project_id = req.session['project_id'] username = req.COOKIES.get('username') if username == settings.SUPERADMIN: domains = Domain.objects.all() else: domains = Domain.objects.filter(project_id=project_id) project_list = req.session['project_list'] return render_to_response("analytics_server.html", locals())
def logDownloadList(req): if req.method == 'POST': domain_name = req.POST.get('domain_name') start = req.POST.get('start') end = req.POST.get('end') obj = DiLianManager() status, reason, resp = obj.logDownloadList(domain_name, start, end) if status == 200: logs = [utils.LogObj(l.text) for l in Etree.fromstring(resp).findall('item')] return render_to_response("log_list.html", locals()) else: result = status return HttpResponse(result) else: if not req.session.has_key("project_id"): return HttpResponseRedirect('/login/') else: project_id = req.session['project_id'] username = req.COOKIES.get('username') if username == settings.SUPERADMIN: domains = Domain.objects.all() else: domains = Domain.objects.filter(project_id=project_id) project_list = req.session['project_list'] return render_to_response("log_downLoad_list.html", locals())
def bandwidth(req): if req.method == 'POST': domain_name = req.POST.get('domain_name') start = req.POST.get('start') end = req.POST.get('end') obj = DiLianManager() status, reason, resp = obj.bandwidthMap(domain_name, start, end) if status == 200: #random = uuid.uuid1() #path = settings.MONITOR_IMG % random #os.system('rm -f %s/*' % os.path.dirname(path)) #with open(path, 'wb') as f: # f.write(resp) data = [] for i in Etree.fromstring(resp).findall("date/Product/Traffice"): data.append(i.text) result = ','.join(data) else: result = Etree.fromstring(resp).find("Message").text return HttpResponse(result) else: if not req.session.has_key("project_id"): return HttpResponseRedirect('/login/') else: project_id = req.session['project_id'] username = req.COOKIES.get('username') if username == settings.SUPERADMIN: domains = Domain.objects.all() else: domains = Domain.objects.filter(project_id=project_id) project_list = req.session['project_list'] return render_to_response("bandwidth.html", locals())
def updateDomain(req, domain_id): if req.method == "POST": s_id = req.POST.get('edit_session_id') if not req.session.has_key("edit_session_id"): req.session['current_js'] = JS_DICT["fail_update"] % 'Null edit_session_id' return HttpResponseRedirect('/domain_manage/') if req.session["edit_session_id"] != s_id: req.session['current_js'] = JS_DICT["fail_update"] % '请勿重复提交' return HttpResponseRedirect('/domain_manage/') else: del req.session["edit_session_id"] cache_rules = req.POST.get('cache_rules', None) acl = req.POST.get('acl', None) domain_status = 'InProgress' ip_str = req.POST.get('ip_list').strip() ignore_param_req = req.POST.get('ignore_param_req', False) d = Domain.objects.get(id=domain_id) domain_name = d.domain_name test_url = d.test_url disId = d.distribution_id etag = d.etag if ignore_param_req: noUse = 'True' else: noUse = 'False' json_str = utils.getJson4Xml(cache_rules, acl) json_str = json.dumps(json_str) random = uuid.uuid1() xml_name = '%s%s' % (domain_name, random) LOG.info('Update Domain: /usr/bin/python %s %s %s \'%s\' %s %s -J \'%s\'' % ( settings.CREATE_XML_PATH, xml_name, domain_name, ip_str, test_url, noUse, json_str)) try: os.system('/usr/bin/python %s %s %s \'%s\' %s %s -J \'%s\'' % ( settings.CREATE_XML_PATH, xml_name, domain_name, ip_str, test_url, noUse, json_str)) except Exception,e: req.session['current_js'] = JS_DICT["fail_update"] % e return HttpResponseRedirect('/domain_manage/') update_obj = DiLianManager(domain_name, ip_str, test_url, xml_name) status, reason, resp, ETag = update_obj.config(disId, etag) if status == 200: req.session['current_js'] = JS_DICT["succ_update"] update_time = datetime.datetime.now() domain = Domain.objects.filter(id=domain_id) domain.update(domain_status=domain_status, ip_list=ip_str, ignore_param_req=ignore_param_req, etag=ETag, update_time=update_time) #delete acl and cache rules of this domain CacheRules.objects.filter(domain_id=domain_id).delete() AccessControl.objects.filter(domain_id=domain_id).delete() utils.saveCacheRulesAndAcl(domain_id, cache_rules, acl) os.remove(settings.XML_PATH % xml_name) else: req.session['current_js'] = JS_DICT["fail_update"] % Etree.fromstring(resp).find("Message").text session_id = '%s' % uuid.uuid1() req.session['edit_session_id'] = session_id return HttpResponseRedirect('/domain_manage/')
def domainManage(req): if req.method == "POST": if not req.session.has_key("session_id"): req.session['current_js'] = JS_DICT["fail_create"] % 'Null session_id' return HttpResponseRedirect('/domain_manage/') s_id = req.POST.get('session_id') if req.session["session_id"] != s_id: req.session['current_js'] = JS_DICT["fail_create"] % '请勿重复提交' return HttpResponseRedirect('/domain_manage/') else: del req.session["session_id"] cache_rules = req.POST.get('cache_rules', None) acl = req.POST.get('acl', None) domain_name = req.POST.get('domain_name').strip() domain_type = 'dilian' domain_status = 'InProgress' ip_str = req.POST.get('ip_list').strip() test_url = req.POST.get('test_url').strip() ignore_param_req = req.POST.get('ignore_param_req', False) json_str = utils.getJson4Xml(cache_rules, acl) json_str = json.dumps(json_str) random = uuid.uuid1() xml_name = '%s%s' % (domain_name, random) project_id = req.session['project_id'] username = req.COOKIES.get('username') if ignore_param_req: noUse = 'True' else: noUse = 'False' LOG.info('Create Domain: /usr/bin/python %s %s %s \'%s\' %s %s -J \'%s\'' % ( settings.CREATE_XML_PATH, xml_name, domain_name, ip_str, test_url, noUse, json_str)) try: os.system('/usr/bin/python %s %s %s \'%s\' %s %s -J \'%s\'' % ( settings.CREATE_XML_PATH, xml_name, domain_name, ip_str, test_url, noUse, json_str)) except Exception,e: LOG.error('Create Domain Failed because of os.system') req.session['current_js'] = JS_DICT["fail_create"] % e return HttpResponseRedirect('/domain_manage/') create_obj = DiLianManager(domain_name, ip_str, test_url, xml_name) status, reason, resp = create_obj.create() cname_obj = CName() if status == 201: req.session['current_js'] = JS_DICT["succ_create"] disId = Etree.fromstring(resp).find("Id").text ETag = create_obj.md5_file(settings.XML_PATH % xml_name) domain_cname = domain_name + settings.DINON_CNAME domain_id = utils.saveDomainAndReturnId(domain_name, domain_cname, domain_type, domain_status, disId, ETag, project_id, username, ip_str,test_url,ignore_param_req) utils.saveCacheRulesAndAcl(domain_id, cache_rules, acl) cname_obj.insert_cname(domain_name, disId) os.remove(settings.XML_PATH % xml_name) else: req.session['current_js'] = JS_DICT["fail_create"] % Etree.fromstring(resp).find("Message").text return HttpResponseRedirect('/domain_manage/')
def handlerCache(req): if req.method == 'POST': url = req.POST.get('url') url_type = req.POST.get('type') username = req.COOKIES.get('username') project_id = req.session['project_id'] ############ 判断是否是当前项目下的域名########### pattern = re.compile('http:\/\/(.*?)\/') re_result = pattern.findall(url) if username == settings.SUPERADMIN: domains = Domain.objects.all().values_list('domain_name') else: domains = Domain.objects.filter(project_id=project_id).values_list('domain_name') this_domains = [] for d in domains: this_domains.append(d[0]) for r in re_result: if r not in this_domains: result = '请不要操作该项目以外的域名' return HttpResponse(result) ################################################# obj = DiLianManager() status, reason, resp, req_id = obj.cdnPushAndPrefetch(url_type, url) if status == 200: try: task_status = Etree.fromstring(resp).find("result").text except: task_status = Etree.fromstring(resp).find("message").text t = TaskList(task_id=req_id, task_type=url_type, project_id=project_id, task_user=username, task_content=url, task_status=task_status) t.save() result = '成功!' else: result = Etree.fromstring(resp).find("Message").text return HttpResponse(result) else: if not req.session.has_key("project_id"): return HttpResponseRedirect('/login/') else: project_id = req.session['project_id'] username = req.COOKIES.get('username') if username == settings.SUPERADMIN: tasks = TaskList.objects.all() else: tasks = TaskList.objects.filter(project_id=project_id) project_list = req.session['project_list'] getTaskStatus.delay() return render_to_response("refresh_cache.html", locals())
def getDomainStatus(req, domain_id): if req.method == 'GET': id_obj = Domain.objects.get(id=domain_id) delete_obj = DiLianManager() status, reason, resp, Etag = delete_obj.getDomain(id_obj.distribution_id) if status == 200: domain_status = Etree.fromstring(resp).find("Status").text domain = Domain.objects.filter(id=domain_id) domain.update(domain_status=domain_status) result = domain_status else: result = Etree.fromstring(resp).find("Message").text return HttpResponse(result)
def bandwidth_csv(req): if req.method == 'GET': import csv domain_name = req.GET.get('domain_name') start = req.GET.get('start') end = req.GET.get('end') obj = DiLianManager() status, reason, resp = obj.bandwidthMap(domain_name, start, end) if status == 200: flows = [utils.bandwidthObj(l) for l in Etree.fromstring(resp).findall('date/Product/Traffice')] response = HttpResponse(mimetype="text/csv") response['Content-Disposition'] = 'attachment; filename=%s_%s_bandwidth.csv' % (start, end) writer = csv.writer(response) writer.writerow(["Time", "BandWidth"]) for f in flows: writer.writerow([f.time, f.bandwidth]) return response else: result = Etree.fromstring(resp).find("Message").text return HttpResponse(result)
def getTaskStatus(): all_tasks = TaskList.objects.all() obj = DiLianManager() for t in all_tasks: if t.task_status != "success" and t.task_status != "failure": if t.task_type == "2": status, reason, resp = obj.prefetchProgress(t.task_id) else: status, reason, resp = obj.pushProgress(t.task_id) try: new_task_status = Etree.fromstring(resp).find("Status").text except: for i in Etree.fromstring(resp).findall("Item/Status"): if i.text != "success": new_task_status = "failure" break else: new_task_status = "success" if new_task_status != t.task_status: task_obj = TaskList.objects.filter(task_id=t.task_id) task_obj.update(task_status=new_task_status)
def deleteDomain(req): if req.method == 'POST': ids = req.POST.get('domain_ids') id_list = ids.split(',') username = req.COOKIES.get('username') for i in id_list: if i: id_obj = Domain.objects.filter(id=i) domain_name = id_obj[0].domain_name delete_obj = DiLianManager() cname_obj = CName() status, reason, resp = delete_obj.delete(id_obj[0].distribution_id, id_obj[0].etag) if status == 200: update_time = datetime.datetime.now() id_obj.update(domain_status='Deleted', update_time=update_time) cname_obj.del_cname(domain_name) LOG.info('User %s delete domain %s' % (username, domain_name)) result = 1 else: result = Etree.fromstring(resp).find("Message").text return HttpResponse(result)