コード例 #1
0
ファイル: views.py プロジェクト: JerryDog/cdn
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())
コード例 #2
0
ファイル: views.py プロジェクト: JerryDog/cdn
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())
コード例 #3
0
ファイル: views.py プロジェクト: JerryDog/cdn
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())
コード例 #4
0
ファイル: views.py プロジェクト: JerryDog/cdn
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())
コード例 #5
0
ファイル: views.py プロジェクト: JerryDog/cdn
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/')
コード例 #6
0
ファイル: views.py プロジェクト: JerryDog/cdn
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/')
コード例 #7
0
ファイル: views.py プロジェクト: JerryDog/cdn
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())
コード例 #8
0
ファイル: views.py プロジェクト: JerryDog/cdn
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)
コード例 #9
0
ファイル: views.py プロジェクト: JerryDog/cdn
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)
コード例 #10
0
ファイル: tasks.py プロジェクト: JerryDog/cdn
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)
コード例 #11
0
ファイル: views.py プロジェクト: JerryDog/cdn
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)