Пример #1
0
def xmlToFlowPointList(ret, reportType):
    ''' 返回xml 转换成 带 FlowPoint对象列表的FlowProcessResult对象'''
    global X_CNC_REQUEST_ID, X_CNC_LOCATION
    requestId = ret.getheader(X_CNC_REQUEST_ID)

    isoFormat = getDateFormat(reportType)

    xmlString = ret.read().decode("utf-8")
    logging.debug("response:" + xmlString)
    doc = minidom.parseString(xmlString)
    flowPointListNode = util.getChildNode(doc, 'flow-report')
    flowSummary = util.getChildNodeText(flowPointListNode, 'flow-summary')
    flowPointList = []
    flowDataList = util.getChildNodeList(flowPointListNode, 'flow-data')
    for flowNode in flowDataList:
        pointStr = util.getChildNodeText(flowNode, 'timestamp')
        gaga = re.sub('24:00:00', '00:00:00', pointStr)
        point = datetime.datetime.strptime(gaga, isoFormat)
        flow = util.getChildNodeText(flowNode, 'flow')
        flowPoint = FlowPoint(point, flow)
        flowPointList.append(flowPoint)
    return FlowProcessResult(ret.status,
                             'OK',
                             xCncRequestId=requestId,
                             flowPoints=flowPointList,
                             flowSummary=flowSummary)
Пример #2
0
def purgeQueryXmlToPurgeList(ret):
    ''' 缓存查询 xml结果解析成 Purge对象的列表'''
    
    global X_CNC_REQUEST_ID
    requestId = ret.getheader(X_CNC_REQUEST_ID)
   
    xmlString = ret.read().decode("utf-8")
    logging.debug("response:" + xmlString)
    doc = minidom.parseString(xmlString)
    purgeListNode = util.getChildNode(doc, 'purge-list')
    purgeList = []
    purgeDataList = util.getChildNodeList(purgeListNode, 'purge-request')
    for purgeNode in purgeDataList:
        purgeId = util.getChildNodeText(purgeNode, 'purge-id')
        requestDateStr = util.getChildNodeText(purgeNode, 'request-date')
        requestDate = util.parseRFC1123Time(requestDateStr)
        itemNodeList = util.getChildNodeList(purgeNode, 'item')
        purgeItems = []
        for itemNode in itemNodeList:
            path = util.getChildNodeText(itemNode, "path")
            status = util.getChildNodeText(itemNode, "status")
            rate = util.getChildNodeText(itemNode, "rate")
            isDir = util.getChildNodeText(itemNode, "isdir")
            purgeItem = PurgeItem(path, status, rate, isDir)
            purgeItems.append(purgeItem)
        purge = Purge(purgeId, requestDate, purgeItems)
        purgeList.append(purge)
    return PurgeQueryResult(ret.status, 'OK', xCncRequestId = requestId, purgeList = purgeList);
Пример #3
0
 def makeHeaders(self):  
     ''' 组装头部 '''  
     global X_CNC_DATE
     headers = self.headers.copy()
     headers[X_CNC_DATE] = util.getRFCTime()
     key = util.hashPassword(headers[X_CNC_DATE], self.apiKey)
     headers['Authorization'] = "Basic " + base64.standard_b64encode(self.user + ':' + key)
     return headers
Пример #4
0
def appendParams(url, queryUrl, dateFrom, dateTo):
    url = url + "?datefrom=" + util.getRFC3339Time(dateFrom).replace(
        '+', "%2B") + "&dateto=" + util.getRFC3339Time(dateTo).replace(
            '+', "%2B")
    if queryUrl is not None:
        queryUrl = queryUrl.replace(':', '%3A').replace('/', '%2F')
        url = url + "&url=" + queryUrl
    return url
Пример #5
0
 def makeHeaders(self, uri):
     ''' 组装头部  '''  
     global X_CNC_DATE
     headers = self.headers.copy()
     headers[X_CNC_DATE] = util.getRFCTime()
     key = util.hashPassword(headers[X_CNC_DATE], self.apiKey)
     headers['Authorization'] = "Basic " + base64.standard_b64encode(self.user + ':' + key)
     return headers
Пример #6
0
def purgeQueryXmlToPurgeList(ret):
    ''' 缓存查询 xml结果解析成 Purge对象的列表'''

    global X_CNC_REQUEST_ID
    requestId = ret.getheader(X_CNC_REQUEST_ID)

    xmlString = ret.read().decode("utf-8")
    logging.debug("response:" + xmlString)
    doc = minidom.parseString(xmlString)
    purgeListNode = util.getChildNode(doc, 'purge-list')
    purgeList = []
    purgeDataList = util.getChildNodeList(purgeListNode, 'purge-request')
    for purgeNode in purgeDataList:
        purgeId = util.getChildNodeText(purgeNode, 'purge-id')
        requestDateStr = util.getChildNodeText(purgeNode, 'request-date')
        #        requestDate = util.parseRFC1123Time(requestDateStr)
        itemNodeList = util.getChildNodeList(purgeNode, 'item')
        purgeItems = []
        for itemNode in itemNodeList:
            path = util.getChildNodeText(itemNode, "path")
            status = util.getChildNodeText(itemNode, "status")
            rate = util.getChildNodeText(itemNode, "rate")
            isDir = util.getChildNodeText(itemNode, "isdir")
            purgeItem = PurgeItem(path, status, rate, isDir)
            purgeItems.append(purgeItem)
        purge = Purge(purgeId, requestDateStr, purgeItems)
        purgeList.append(purge)
    return PurgeQueryResult(ret.status,
                            'OK',
                            xCncRequestId=requestId,
                            purgeList=purgeList)
Пример #7
0
def parseQueryStringSettingListNode(nodeList):
    queryStringSettingList = []
    for queryStringSetting in nodeList:
        pathPattern = util.getChildNodeText(queryStringSetting, 'path-pattern')
        ignoreQueryStringStr = util.getChildNodeText(queryStringSetting, 'ignore-query-string')
        if ignoreQueryStringStr == "false":
            ignoreQueryString = False
        else:
            ignoreQueryString = True 
        queryStringSetting = QueryStringSetting(pathPattern, ignoreQueryString)
        queryStringSettingList.append(queryStringSetting)
    return queryStringSettingList
Пример #8
0
def parseQueryStringSettingListNode(nodeList):
    queryStringSettingList = []
    for queryStringSetting in nodeList:
        pathPattern = util.getChildNodeText(queryStringSetting, 'path-pattern')
        ignoreQueryStringStr = util.getChildNodeText(queryStringSetting, 'ignore-query-string')
        if ignoreQueryStringStr == "false":
            ignoreQueryString = False
        else:
            ignoreQueryString = True 
        queryStringSetting = QueryStringSetting(pathPattern, ignoreQueryString)
        queryStringSettingList.append(queryStringSetting)
    return queryStringSettingList
Пример #9
0
def parseCacheBehaviorList(nodeList):
    cacheBehaviorList = []
    for cacheBehavior in nodeList:
        pathPattern = util.getChildNodeText(cacheBehavior, 'path-pattern')
        priority = util.getChildNodeText(cacheBehavior, 'priority')
        ignoreCacheControlStr = util.getChildNodeText(cacheBehavior, 'ignore-cache-control')
        if ignoreCacheControlStr == "false":
            ignoreCacheControl = False
        else:
            ignoreCacheControl = True 
        cacheTTL = util.getChildNodeText(cacheBehavior, 'cache-ttl')
        cacheBehavior = CacheBehavior(pathPattern, ignoreCacheControl, cacheTTL)
        cacheBehaviorList.append(cacheBehavior)
    return cacheBehaviorList
Пример #10
0
def parseCacheBehaviorList(nodeList):
    cacheBehaviorList = []
    for cacheBehavior in nodeList:
        pathPattern = util.getChildNodeText(cacheBehavior, 'path-pattern')
        priority = util.getChildNodeText(cacheBehavior, 'priority')
        ignoreCacheControlStr = util.getChildNodeText(cacheBehavior, 'ignore-cache-control')
        if ignoreCacheControlStr == "false":
            ignoreCacheControl = False
        else:
            ignoreCacheControl = True 
        cacheTTL = util.getChildNodeText(cacheBehavior, 'cache-ttl')
        cacheBehavior = CacheBehavior(pathPattern, ignoreCacheControl, cacheTTL)
        cacheBehaviorList.append(cacheBehavior)
    return cacheBehaviorList
Пример #11
0
def parseAdvOriginConfigList(nodeList):
    advOriginConfigList = []
    for advOriginConfigNode in nodeList:
        ispsList = util.getChildNodeText(advOriginConfigNode, 'isp')
        masterIpsList = util.getChildNodeText(advOriginConfigNode, 'master-ips')
        backupIpsList = util.getChildNodeText(advOriginConfigNode, 'backup-ips')
        detectUrl = util.getChildNodeText(advOriginConfigNode, 'detect-url')
        detectPeriod = util.getChildNodeText(advOriginConfigNode, 'detect-period')
        isps = splitStr(ispsList)
        masterIps = splitStr(masterIpsList)
        backupIps = splitStr(backupIpsList)
        advOriginConfig = AdvOriginConfig(isps = isps, masterIps = masterIps, backupIps = backupIps, 
                                          detectUrl = detectUrl, detectPeriod = detectPeriod)
        advOriginConfigList.append(advOriginConfig)
    return advOriginConfigList
Пример #12
0
def parseAdvOriginConfigList(nodeList):
    advOriginConfigList = []
    for advOriginConfigNode in nodeList:
        ispsList = util.getChildNodeText(advOriginConfigNode, 'isp')
        masterIpsList = util.getChildNodeText(advOriginConfigNode, 'master-ips')
        backupIpsList = util.getChildNodeText(advOriginConfigNode, 'backup-ips')
        detectUrl = util.getChildNodeText(advOriginConfigNode, 'detect-url')
        detectPeriod = util.getChildNodeText(advOriginConfigNode, 'detect-period')
        isps = splitStr(ispsList)
        masterIps = splitStr(masterIpsList)
        backupIps = splitStr(backupIpsList)
        advOriginConfig = AdvOriginConfig(isps = isps, masterIps = masterIps, backupIps = backupIps, 
                                          detectUrl = detectUrl, detectPeriod = detectPeriod)
        advOriginConfigList.append(advOriginConfig)
    return advOriginConfigList
Пример #13
0
def xmlToSuccessResult(ret):
    ''' 返回xml 转换成 带 RequestLog对象列表的GetRequestProcessResult对象 '''
    global X_CNC_REQUEST_ID, X_CNC_LOCATION
    requestId = ret.getheader(X_CNC_REQUEST_ID)
   
    xmlString = ret.read().decode("utf-8")
    logging.debug("response:" + xmlString)
    doc = minidom.parseString(xmlString)
    requestLogNode = util.getChildNode(doc, 'request-log')
    cncRequestId = util.getChildNodeText(requestLogNode, 'cnc-request-id')
    timestamp = util.getChildNodeText(requestLogNode, 'timestamp')
    asyncResult = util.getChildNodeText(requestLogNode, 'async-result')
    asyncMessage = util.getChildNodeText(requestLogNode, 'async-message')
    rl = RequestLog(cncRequestId, timestamp, asyncResult, asyncMessage)
    return GetRequestProcessResult(ret.status, 'OK', xCncRequestId = requestId, requestLog = rl)
Пример #14
0
 def purge(self, purgeBatch, domainId=None):
     '''  批量清除缓存
     @param domainId: 如果指定了domainId,http body中的file-path和dir-path仅需要提供文件或者目录的uri,不能包括域名名称,路径均需以/开始,如/test/a.html 如果未指定domainId, 均需要提供包括域名在内的完整url地址,如http://www.baidu.com/test/a.html
     @type purgeBatch: PurgeBatch
     @param purgeBatch 为 PurgeBatch对象 包含files 和 dirs属性
     @rtype: PurgeResult
     @return: 返回PurgeResult结果, 可以通过PurgeResult.getLocation 获得该次缓存
     '''
     if domainId is not None:
         url = self.HOST + "/api/purge/" + str(domainId)
     else:
         url = self.HOST + '/api/purge'
     try:
         if domainId is not None:
             post = purgeBatchForOneDomainToXml(purgeBatch)
         else:
             post = purgeBatchToXml(purgeBatch)
         ret = util.httpReqeust(url, post, self.makeHeaders(), "POST")
         if ret.status == 202 or ret.status == 200:
             return purgeXmlToSuccess(ret)
         else:
             return purgeXmlToFailure(ret)
     except Exception, e:
         traceback.print_exc(file=sys.stdout)
         return PurgeResult(-1, str(e))
Пример #15
0
 def purge(self, purgeBatch, domainId = None):
     '''  批量清除缓存
     @param domainId: 如果指定了domainId,http body中的file-path和dir-path仅需要提供文件或者目录的uri,不能包括域名名称,路径均需以/开始,如/test/a.html 如果未指定domainId, 均需要提供包括域名在内的完整url地址,如http://www.baidu.com/test/a.html
     @type purgeBatch: PurgeBatch
     @param purgeBatch 为 PurgeBatch对象 包含files 和 dirs属性
     @rtype: PurgeResult
     @return: 返回PurgeResult结果, 可以通过PurgeResult.getLocation 获得该次缓存
     '''
     if domainId is not None:
         url = self.HOST + "/api/purge/" + str(domainId)
     else:
         url = self.HOST + '/api/purge'
     try:
         if domainId is not None:
             post = purgeBatchForOneDomainToXml(purgeBatch)
         else:
             post = purgeBatchToXml(purgeBatch)
         ret = util.httpReqeust(url, post, self.makeHeaders(), "POST")
         if ret.status == 202 or ret.status == 200:
             return purgeXmlToSuccess(ret)
         else:
             return purgeXmlToFailure(ret)
     except Exception, e:
         traceback.print_exc(file = sys.stdout)
         return PurgeResult(-1, str(e))
Пример #16
0
def purgeXmlToSuccess(ret):
    ''' 返回xml 转换成 成功返回的PurgeResult对象'''
    global X_CNC_REQUEST_ID, X_CNC_LOCATION
    requestId = ret.getheader(X_CNC_REQUEST_ID)
    location = ret.getheader(X_CNC_LOCATION)
    msg = util.getReturnXmlMsg(ret)
    return PurgeResult(ret.status, msg, xCncRequestId = requestId, location = location)
Пример #17
0
def xmlToSuccess(ret):
    ''' 返回xml 转换成 成功返回的ProcessResult对象'''
    global X_CNC_REQUEST_ID, X_CNC_LOCATION, X_CNC_CNAME
    requestId = ret.getheader(X_CNC_REQUEST_ID)
    location = ret.getheader(X_CNC_LOCATION)
    cname = ret.getheader(X_CNC_CNAME)
    msg = util.getReturnXmlMsg(ret)
    return ProcessResult(ret.status, msg, xCncRequestId = requestId, location = location, cname = cname)
Пример #18
0
def xmlToSuccess(ret):
    ''' 返回xml 转换成 成功返回的ProcessResult对象'''
    global X_CNC_REQUEST_ID, X_CNC_LOCATION, X_CNC_CNAME
    requestId = ret.getheader(X_CNC_REQUEST_ID)
    location = ret.getheader(X_CNC_LOCATION)
    cname = ret.getheader(X_CNC_CNAME)
    msg = util.getReturnXmlMsg(ret)
    return ProcessResult(ret.status, msg, xCncRequestId = requestId, location = location, cname = cname)
Пример #19
0
def xmlToSuccessResult(ret):
    ''' 返回xml 转换成 带 RequestLog对象列表的GetRequestProcessResult对象 '''
    global X_CNC_REQUEST_ID, X_CNC_LOCATION
    requestId = ret.getheader(X_CNC_REQUEST_ID)

    xmlString = ret.read().decode("utf-8")
    logging.debug("response:" + xmlString)
    doc = minidom.parseString(xmlString)
    requestLogNode = util.getChildNode(doc, 'request-log')
    cncRequestId = util.getChildNodeText(requestLogNode, 'cnc-request-id')
    timestamp = util.getChildNodeText(requestLogNode, 'timestamp')
    asyncResult = util.getChildNodeText(requestLogNode, 'async-result')
    asyncMessage = util.getChildNodeText(requestLogNode, 'async-message')
    rl = RequestLog(cncRequestId, timestamp, asyncResult, asyncMessage)
    return GetRequestProcessResult(ret.status,
                                   'OK',
                                   xCncRequestId=requestId,
                                   requestLog=rl)
Пример #20
0
def purgeXmlToSuccess(ret):
    ''' 返回xml 转换成 成功返回的PurgeResult对象'''
    global X_CNC_REQUEST_ID, X_CNC_LOCATION
    requestId = ret.getheader(X_CNC_REQUEST_ID)
    location = ret.getheader(X_CNC_LOCATION)
    msg = util.getReturnXmlMsg(ret)
    return PurgeResult(ret.status,
                       msg,
                       xCncRequestId=requestId,
                       location=location)
Пример #21
0
def xmlToHitPointList(ret, reportType):
    ''' 返回xml 转换成 带 HitPoint对象列表的HitProcessResult对象 '''
    global X_CNC_REQUEST_ID, X_CNC_LOCATION
    requestId = ret.getheader(X_CNC_REQUEST_ID)
    
    isoFormat = getDateFormat(reportType)
   
    xmlString = ret.read().decode("utf-8")
    logging.debug("response:" + xmlString)
    doc = minidom.parseString(xmlString)
    hitPointListNode = util.getChildNode(doc, 'hit-report')
    hitPointList = []
    hitDataList = util.getChildNodeList(hitPointListNode, 'hit-data')
    for hitNode in hitDataList:
        pointStr = util.getChildNodeText(hitNode, 'timestamp')
        point = datetime.datetime.strptime(pointStr, isoFormat)
        hit = util.getChildNodeText(hitNode, 'hit')
        hitPoint = HitPoint(point, hit)
        hitPointList.append(hitPoint)
    return HitProcessResult(ret.status, 'OK', xCncRequestId = requestId, hitPoints = hitPointList)
Пример #22
0
def appendParams(url, reportForm):
    dateFrom = reportForm.getDateFrom()
    dateTo = reportForm.getDateTo()
    reportType = reportForm.getReportType()
    originUrl = url + "?" 
    if dateFrom or dateTo or type:
        url = url + "?"
    if dateFrom:
        url = url + "datefrom=" + util.getRFC3339Time(dateFrom).replace('+', '%2B') 
    if dateTo:
        if url == originUrl:
            url = originUrl + "dateto=" + util.getRFC3339Time(dateTo).replace('+', '%2B')
        else:
            url =  url + "&dateto=" + util.getRFC3339Time(dateTo).replace('+', '%2B')
    if reportType:
        if url == originUrl:
            url = originUrl + "type=" + reportType
        else:
            url = url + "&type=" + reportType
    return url
Пример #23
0
def xmlToFlowPointList(ret, reportType):
    ''' 返回xml 转换成 带 FlowPoint对象列表的FlowProcessResult对象'''
    global X_CNC_REQUEST_ID, X_CNC_LOCATION
    requestId = ret.getheader(X_CNC_REQUEST_ID)
   
    isoFormat = getDateFormat(reportType)
   
    xmlString = ret.read().decode("utf-8")
    logging.debug("response:" + xmlString)
    doc = minidom.parseString(xmlString)
    flowPointListNode = util.getChildNode(doc, 'flow-report')
    flowSummary = util.getChildNodeText(flowPointListNode, 'flow-summary')
    flowPointList = []
    flowDataList = util.getChildNodeList(flowPointListNode, 'flow-data')
    for flowNode in flowDataList:
        pointStr = util.getChildNodeText(flowNode, 'timestamp')
        point = datetime.datetime.strptime(pointStr, isoFormat)
        flow = util.getChildNodeText(flowNode, 'flow')
        flowPoint = FlowPoint(point, flow)
        flowPointList.append(flowPoint)
    return FlowProcessResult(ret.status, 'OK', xCncRequestId = requestId, flowPoints = flowPointList, flowSummary = flowSummary);
Пример #24
0
def xmlToLogList(ret):
    ''' 返回xml 转换成 带Log对象列表的LogProcessResult对象 '''
    global X_CNC_REQUEST_ID
    requestId = ret.getheader(X_CNC_REQUEST_ID)
   
    isoFormat = "%Y-%m-%d-%H%M"
    
    xmlString = ret.read().decode("utf-8")
    logging.debug("response:" + xmlString)
    doc = minidom.parseString(xmlString)
    logListNode = util.getChildNode(doc, 'logs')
    logList = []
    logDataList = util.getChildNodeList(logListNode, 'log')
    for logNode in logDataList:
        dateFromStr = util.getChildNodeText(logNode, 'datefrom')
        dateToStr = util.getChildNodeText(logNode, 'dateto')
        url = util.getChildNodeText(logNode, 'log-url')
        fileSize = util.getChildNodeText(logNode, 'file-size')
        
        dateFrom = datetime.datetime.strptime(dateFromStr, isoFormat)
        dateTo = datetime.datetime.strptime(dateToStr, isoFormat)
        
        log = Log(dateFrom, dateTo, url, fileSize)
        logList.append(log)
    return LogProcessResult(ret.status, 'OK', xCncRequestId = requestId, logs = logList);
Пример #25
0
def xmlToLogList(ret):
    ''' 返回xml 转换成 带Log对象列表的LogProcessResult对象 '''
    global X_CNC_REQUEST_ID
    requestId = ret.getheader(X_CNC_REQUEST_ID)

    isoFormat = "%Y-%m-%d-%H%M"

    xmlString = ret.read().decode("utf-8")
    logging.debug("response:" + xmlString)
    doc = minidom.parseString(xmlString)
    logListNode = util.getChildNode(doc, 'logs')
    logList = []
    logDataList = util.getChildNodeList(logListNode, 'log')
    for logNode in logDataList:
        dateFromStr = util.getChildNodeText(logNode, 'datefrom')
        dateToStr = util.getChildNodeText(logNode, 'dateto')
        url = util.getChildNodeText(logNode, 'log-url')
        fileSize = util.getChildNodeText(logNode, 'file-size')

        dateFrom = datetime.datetime.strptime(dateFromStr, isoFormat)
        dateTo = datetime.datetime.strptime(dateToStr, isoFormat)

        log = Log(dateFrom, dateTo, url, fileSize)
        logList.append(log)
    return LogProcessResult(ret.status,
                            'OK',
                            xCncRequestId=requestId,
                            logs=logList)
Пример #26
0
def appendParams(url, reportForm):
    dateFrom = reportForm.getDateFrom()
    dateTo = reportForm.getDateTo()
    reportType = reportForm.getReportType()
    originUrl = url + "?"
    if dateFrom or dateTo or reportType:
        url = url + "?"
    if dateFrom:
        url = url + "datefrom=" + util.getRFC3339Time(str(dateFrom)).replace(
            '+', '%2B')
    if dateTo:
        if url == originUrl:
            url = originUrl + "dateto=" + util.getRFC3339Time(dateTo).replace(
                '+', '%2B')
        else:
            url = url + "&dateto=" + util.getRFC3339Time(dateTo).replace(
                '+', '%2B')
    if reportType:
        if url == originUrl:
            url = originUrl + "type=" + reportType
        else:
            url = url + "&type=" + reportType
    return url
Пример #27
0
def purgeBatchForOneDomainToXml(purgeBatch):
    doc = dom.getDOMImplementation().createDocument('', 'purge-paths', '')
    purgeRootNode = util.getChildNode(doc, 'purge-paths')
    util.addElement(doc, purgeRootNode, 'version', "1.0.0")
    urls = purgeBatch.urls
    if urls is not None and len(urls) > 0 :
        for url in urls:
            util.addElement(doc, purgeRootNode, 'file-path', url)
    dirs = purgeBatch.dirs
    if dirs is not None and len(dirs) > 0:
        for dirItem in dirs:
            util.addElement(doc, purgeRootNode, "dir-path", dirItem)
    return doc.toprettyxml(indent = "", newl="", encoding = 'utf-8');    
Пример #28
0
def purgeBatchForOneDomainToXml(purgeBatch):
    doc = dom.getDOMImplementation().createDocument('', 'purge-paths', '')
    purgeRootNode = util.getChildNode(doc, 'purge-paths')
    util.addElement(doc, purgeRootNode, 'version', "1.0.0")
    urls = purgeBatch.urls
    if urls is not None and len(urls) > 0:
        for url in urls:
            util.addElement(doc, purgeRootNode, 'file-path', url)
    dirs = purgeBatch.dirs
    if dirs is not None and len(dirs) > 0:
        for dirItem in dirs:
            util.addElement(doc, purgeRootNode, "dir-path", dirItem)
    return doc.toprettyxml(indent="", newl="", encoding='utf-8')
Пример #29
0
def xmlToHitPointList(ret, reportType):
    ''' 返回xml 转换成 带 HitPoint对象列表的HitProcessResult对象 '''
    global X_CNC_REQUEST_ID, X_CNC_LOCATION
    requestId = ret.getheader(X_CNC_REQUEST_ID)

    isoFormat = getDateFormat(reportType)

    xmlString = ret.read().decode("utf-8")
    logging.debug("response:" + xmlString)
    doc = minidom.parseString(xmlString)
    hitPointListNode = util.getChildNode(doc, 'hit-report')
    hitPointList = []
    hitDataList = util.getChildNodeList(hitPointListNode, 'hit-data')
    for hitNode in hitDataList:
        pointStr = util.getChildNodeText(hitNode, 'timestamp')
        gaga = re.sub('24:00:00', '00:00:00', pointStr)
        point = datetime.datetime.strptime(gaga, isoFormat)
        hit = util.getChildNodeText(hitNode, 'hit')
        hitPoint = HitPoint(point, hit)
        hitPointList.append(hitPoint)
    return HitProcessResult(ret.status,
                            'OK',
                            xCncRequestId=requestId,
                            hitPoints=hitPointList)
Пример #30
0
 def purgeQueryByPurgeId(self, purgeId):
     ''' 根据purgeId 查询 缓存记录
     @param purgeId: 缓存id
     @rtype: PurgeQueryResult 
     @return: 返回PurgeQueryResult结果,可以 通过PurgeQueryResult.getPurgeList()获取purge记录条目的列表
     '''
     url = self.HOST + "/api/purge/" + str(purgeId)
     try:
         ret = util.httpReqeust(url, "", self.makeHeaders(), "GET")
         if ret.status == 200:
             return purgeQueryByPurgeIdXmlToPurgeList(ret, purgeId)
         else:
             return purgeQueryByPurgeIdXmlToFailure(ret)
     except Exception, e:
         traceback.print_exc(file=sys.stdout)
         return PurgeQueryResult(-1, str(e))
Пример #31
0
 def getRequest(self, requestId):
     ''' 对于客户每一次请求记录/任务,都会生成一个 cnc-request-id。客户可以通过该 id查询请求记录,如果是异步的任务(HTTP 响应状态码为 HTTP 202 Accepted 的任务),也可以通过该接口查询任务最终执行结果。 
     @param requestId:  请求的标识Id
     @rtype: GetRequestResult
     @return: 通过GetRequestResult.getRequestLog() 获得查询后的请求记录
     '''
     url = self.HOST + "/api/request/" + str(requestId)
     try:
         ret = util.httpReqeust(url, "", self.makeHeaders(), "GET")
         if ret.status == 200:
             return xmlToSuccessResult(ret)
         else:
             return XmlToFailure(ret)
     except Exception, e:
         traceback.print_exc(file=sys.stdout)
         return GetRequestProcessResult(-1, str(e))
Пример #32
0
 def purgeQueryByPurgeId(self, purgeId):
     ''' 根据purgeId 查询 缓存记录
     @param purgeId: 缓存id
     @rtype: PurgeQueryResult 
     @return: 返回PurgeQueryResult结果,可以 通过PurgeQueryResult.getPurgeList()获取purge记录条目的列表
     '''
     url = self.HOST + "/api/purge/" + str(purgeId)
     try:
         ret = util.httpReqeust(url, "", self.makeHeaders(), "GET")
         if ret.status == 200:
             return purgeQueryByPurgeIdXmlToPurgeList(ret, purgeId)
         else:
             return purgeQueryByPurgeIdXmlToFailure(ret)
     except Exception, e:
         traceback.print_exc(file=sys.stdout)
         return PurgeQueryResult(-1, str(e))
Пример #33
0
 def getRequest(self, requestId):
     ''' 对于客户每一次请求记录/任务,都会生成一个 cnc-request-id。客户可以通过该 id查询请求记录,如果是异步的任务(HTTP 响应状态码为 HTTP 202 Accepted 的任务),也可以通过该接口查询任务最终执行结果。 
     @param requestId:  请求的标识Id
     @rtype: GetRequestResult
     @return: 通过GetRequestResult.getRequestLog() 获得查询后的请求记录
     '''
     url = self.HOST + "/api/request/" + str(requestId) 
     try:
         ret = util.httpReqeust(url, "", self.makeHeaders(), "GET")
         if ret.status == 200:
             return xmlToSuccessResult(ret)
         else:
             return XmlToFailure(ret)
     except Exception, e:
         traceback.print_exc(file=sys.stdout)
         return GetRequestProcessResult(-1, str(e))
Пример #34
0
 def listAll(self):
     ''' 获取加速所有域名列表
     @rtype: ProcessResult对象 
     @return: 通过ProcessResult.getDomainSummarys()获取DomainSummary对象的实例列表
     '''
     
     url = self.HOST + "/api/domain"
     try:
         post = ''
         ret = util.httpReqeust(url, post, self.makeHeaders(url), "GET")
         if ret.status == 200:
             return xmlToDomainList(ret)
         else:
             return xmlToFailure(ret)
     except Exception, e:
         traceback.print_exc(file=sys.stdout)
         return ProcessResult(-1, str(e))
Пример #35
0
 def listAll(self):
     ''' 获取加速所有域名列表
     @rtype: ProcessResult对象 
     @return: 通过ProcessResult.getDomainSummarys()获取DomainSummary对象的实例列表
     '''
     
     url = self.HOST + "/api/domain"
     try:
         post = ''
         ret = util.httpReqeust(url, post, self.makeHeaders(url), "GET")
         if ret.status == 200:
             return xmlToDomainList(ret)
         else:
             return xmlToFailure(ret)
     except Exception, e:
         traceback.print_exc(file=sys.stdout)
         return ProcessResult(-1, str(e))
Пример #36
0
def parseVisitControlRulesList(nodeList):
    vistControlRulesList = []
    for node in nodeList:
        pathPattern = util.getChildNodeText(node, 'path-pattern')
        allowNullReffer = util.getChildNodeText(node, 'allownullreferer')
        validReferRootNode = util.getChildNode(node, "valid-referers")
        validRNode = util.getChildNodeList(validReferRootNode, 'referer')
        validRefers = []
        for ref in validRNode:
            validRefers.append(util.getChildNodeText(ref, "referer"))
        
        invalidReferRootNode = util.getChildNode(node, "invalid-referers")
        invalidRNode = util.getChildNodeList(invalidReferRootNode, 'referer')
        invalidRefers = []
        for ref in invalidRNode:
            invalidRefers.append(util.getChildNodeText(ref, "referer"))
        
        forbiddenIps = splitStr(util.getChildNodeText(node, 'forbidden-ips'))
        
        visitControlRule = VisitControlRule(pathPattern, allowNullReffer, validRefers, invalidRefers, forbiddenIps)
        vistControlRulesList.append(visitControlRule)
        
    return vistControlRulesList
Пример #37
0
def parseVisitControlRulesList(nodeList):
    vistControlRulesList = []
    for node in nodeList:
        pathPattern = util.getChildNodeText(node, 'path-pattern')
        allowNullReffer = util.getChildNodeText(node, 'allownullreferer')
        validReferRootNode = util.getChildNode(node, "valid-referers")
        validRNode = util.getChildNodeList(validReferRootNode, 'referer')
        validRefers = []
        for ref in validRNode:
            validRefers.append(util.getChildNodeText(ref, "referer"))
        
        invalidReferRootNode = util.getChildNode(node, "invalid-referers")
        invalidRNode = util.getChildNodeList(invalidReferRootNode, 'referer')
        invalidRefers = []
        for ref in invalidRNode:
            invalidRefers.append(util.getChildNodeText(ref, "referer"))
        
        forbiddenIps = splitStr(util.getChildNodeText(node, 'forbidden-ips'))
        
        visitControlRule = VisitControlRule(pathPattern, allowNullReffer, validRefers, invalidRefers, forbiddenIps)
        vistControlRulesList.append(visitControlRule)
        
    return vistControlRulesList
Пример #38
0
 def add(self, domain):
     ''' 创建加速域名 
     @param domain:  新增加速域名构建的Domain对象实例
     @rtype: ProcessResult对象
     @return: 通过ProcessResult.getLocation()新域名的url
     '''
     url = self.HOST + "/api/domain"
     try:
         post = domainToXml(domain)
         #print post
         ret = util.httpReqeust(url, post, self.makeHeaders(url), "POST")
         if ret.status == 202:
             return xmlToSuccess(ret)
         else:
             return xmlToFailure(ret)
     except Exception, e:
         traceback.print_exc(file=sys.stdout)
         return ProcessResult(-1, str(e))
Пример #39
0
 def getLog(self, reportForm, domainId):
     ''' 获取某域名的日志下载链接 
     @type reportForm: ReportForm
     @param reportForm:  请求的起止时间
     @rtype: LogProcessResult
     @return: 通过LogProcessResult.getLogs() 获得查询后的Log对象实例列表
     '''
     url = self.HOST + "/api/report/" + str(domainId) + "/log"
     try:
         url = appendParams(url, reportForm)
         ret = util.httpReqeust(url, "", self.makeHeaders(), "GET")
         if ret.status == 200:
             return xmlToLogList(ret)
         else:
             return getLogXmlToFailure(ret)
     except Exception, e:
         traceback.print_exc(file=sys.stdout)
         return LogProcessResult(-1, str(e))
Пример #40
0
 def getLog(self, reportForm, domainId):
     ''' 获取某域名的日志下载链接 
     @type reportForm: ReportForm
     @param reportForm:  请求的起止时间
     @rtype: LogProcessResult
     @return: 通过LogProcessResult.getLogs() 获得查询后的Log对象实例列表
     '''
     url = self.HOST + "/api/report/" + str(domainId) + "/log" 
     try:
         url = appendParams(url, reportForm)
         ret = util.httpReqeust(url, "", self.makeHeaders(), "GET")
         if ret.status == 200:
             return xmlToLogList(ret)
         else:
             return getLogXmlToFailure(ret)
     except Exception, e:
         traceback.print_exc(file=sys.stdout)
         return LogProcessResult(-1, str(e))
Пример #41
0
 def add(self, domain):
     ''' 创建加速域名 
     @param domain:  新增加速域名构建的Domain对象实例
     @rtype: ProcessResult对象
     @return: 通过ProcessResult.getLocation()新域名的url
     '''
     url = self.HOST + "/api/domain"
     try:
         post = domainToXml(domain)
         #print post
         ret = util.httpReqeust(url, post, self.makeHeaders(url), "POST")
         if ret.status == 202:
             return xmlToSuccess(ret)
         else:
             return xmlToFailure(ret)
     except Exception, e:
         traceback.print_exc(file=sys.stdout)
         return ProcessResult(-1, str(e))
Пример #42
0
 def enable(self, domainId):
     ''' 启用加速域名 
     @param domainId : 指定启用的域名ID
     @rtype: ProcessResult对象
     @return: 返回ProcessResult对象
     '''
     
     url = self.HOST + "/api/domain/" + str(domainId)
     try:
         post = ''
         ret = util.httpReqeust(url, post, self.makeHeaders(url), "ENABLE")
         if ret.status == 202:
             return xmlToSuccess(ret)
         else:
             return xmlToFailure(ret) 
     except Exception, e:
         traceback.print_exc(file=sys.stdout)
         return ProcessResult(-1, str(e))
Пример #43
0
 def enable(self, domainId):
     ''' 启用加速域名 
     @param domainId : 指定启用的域名ID
     @rtype: ProcessResult对象
     @return: 返回ProcessResult对象
     '''
     
     url = self.HOST + "/api/domain/" + str(domainId)
     try:
         post = ''
         ret = util.httpReqeust(url, post, self.makeHeaders(url), "ENABLE")
         if ret.status == 202:
             return xmlToSuccess(ret)
         else:
             return xmlToFailure(ret) 
     except Exception, e:
         traceback.print_exc(file=sys.stdout)
         return ProcessResult(-1, str(e))
Пример #44
0
def xmlToDomainList(ret):
    ''' 返回xml 转换成 带 Domain对象列表的ProcessResult对象, 在查询用户下所有频道时候使用'''
    global X_CNC_REQUEST_ID, X_CNC_LOCATION
    requestId = ret.getheader(X_CNC_REQUEST_ID)
    
    xmlString = ret.read().decode("utf-8")
    logging.debug("response:" + xmlString)
    doc = minidom.parseString(xmlString)
    domainListNode = util.getChildNode(doc, 'domain-list')
    domainList = []
    domainSummaryList = util.getChildNodeList(domainListNode, 'domain-summary')
    for domainNode in domainSummaryList:
        domainId = util.getChildNodeText(domainNode, 'domain-id')
        cname = util.getChildNodeText(domainNode, 'cname')
        domainName = util.getChildNodeText(domainNode, 'domain-name')
        status = util.getChildNodeText(domainNode, 'status')
        serviceType = util.getChildNodeText(domainNode, "service-type")
        enabled = util.getChildNodeText(domainNode, 'enabled') == 'true'
        cdnServiceStatus = util.getChildNodeText(domainNode, 'cdn-service-status') == 'true'
        domainSummary = DomainSummary(domainId, domainName, cname,
                  status, enabled,
                  serviceType, cdnServiceStatus)
        domainList.append(domainSummary)
    return ProcessResult(0, 'OK', xCncRequestId = requestId, domainSummarys = domainList);
Пример #45
0
def xmlToDomainList(ret):
    ''' 返回xml 转换成 带 Domain对象列表的ProcessResult对象, 在查询用户下所有频道时候使用'''
    global X_CNC_REQUEST_ID, X_CNC_LOCATION
    requestId = ret.getheader(X_CNC_REQUEST_ID)
    
    xmlString = ret.read().decode("utf-8")
    logging.debug("response:" + xmlString)
    doc = minidom.parseString(xmlString)
    domainListNode = util.getChildNode(doc, 'domain-list')
    domainList = []
    domainSummaryList = util.getChildNodeList(domainListNode, 'domain-summary')
    for domainNode in domainSummaryList:
        domainId = util.getChildNodeText(domainNode, 'domain-id')
        cname = util.getChildNodeText(domainNode, 'cname')
        domainName = util.getChildNodeText(domainNode, 'domain-name')
        status = util.getChildNodeText(domainNode, 'status')
        serviceType = util.getChildNodeText(domainNode, "service-type")
        enabled = util.getChildNodeText(domainNode, 'enabled') == 'true'
        cdnServiceStatus = util.getChildNodeText(domainNode, 'cdn-service-status') == 'true'
        domainSummary = DomainSummary(domainId, domainName, cname,
                  status, enabled,
                  serviceType, cdnServiceStatus)
        domainList.append(domainSummary)
    return ProcessResult(0, 'OK', xCncRequestId = requestId, domainSummarys = domainList);
Пример #46
0
 def find(self, domainId):
     ''' 获取加速域名配置  
     @type domainId: str
     @param domainId : 指定查找的域名ID
     @rtype: ProcessResult对象
     @return: 通过ProcessResult.getDomain()返回指定的域名信息的Domain实例
     '''
     
     url = self.HOST + "/api/domain/" + str(domainId)
     try:
         post = ''
         ret = util.httpReqeust(url, post, self.makeHeaders(url), "GET")
         if ret.status == 200:
             return xmlToDomain(ret)
         else:
             return xmlToFailure(ret)
     except Exception, e:
         traceback.print_exc(file=sys.stdout)
         return ProcessResult(-1, str(e))
Пример #47
0
 def find(self, domainId):
     ''' 获取加速域名配置  
     @type domainId: str
     @param domainId : 指定查找的域名ID
     @rtype: ProcessResult对象
     @return: 通过ProcessResult.getDomain()返回指定的域名信息的Domain实例
     '''
     
     url = self.HOST + "/api/domain/" + str(domainId)
     try:
         post = ''
         ret = util.httpReqeust(url, post, self.makeHeaders(url), "GET")
         if ret.status == 200:
             return xmlToDomain(ret)
         else:
             return xmlToFailure(ret)
     except Exception, e:
         traceback.print_exc(file=sys.stdout)
         return ProcessResult(-1, str(e))
Пример #48
0
 def purgeQuery(self, dateFrom, dateTo, queryUrl = None):
     '''  查询缓存记录
     @param queryUrl 查询的url 可为空,若为空,返回该用户所有url的缓存记录
     @param dateFrom 查询时间起始  eg:'2013-10-01 01:00:00'
     @param dateTo    查询时间起始 eg:'2013-10-07 01:00:00'
     @rtype: PurgeQueryResult
     @return: 返回PurgeQueryResult结果,可以 通过PurgeQueryResult.getPurgeList()获取purge记录条目的列表
     '''
     url = self.HOST + "/api/purge"
     try:
         url = appendParams(url, queryUrl, dateFrom, dateTo)
         ret = util.httpReqeust(url, "", self.makeHeaders(), "GET")
         if ret.status == 200:
             return purgeQueryXmlToPurgeList(ret)
         else:
             return purgeQueryXmlToFailure(ret)
     except Exception, e:
         traceback.print_exc(file=sys.stdout)
         return PurgeQueryResult(-1, str(e))
Пример #49
0
 def purgeQuery(self, dateFrom, dateTo, queryUrl=None):
     '''  查询缓存记录
     @param queryUrl 查询的url 可为空,若为空,返回该用户所有url的缓存记录
     @param dateFrom 查询时间起始  eg:'2013-10-01 01:00:00'
     @param dateTo    查询时间起始 eg:'2013-10-07 01:00:00'
     @rtype: PurgeQueryResult
     @return: 返回PurgeQueryResult结果,可以 通过PurgeQueryResult.getPurgeList()获取purge记录条目的列表
     '''
     url = self.HOST + "/api/purge"
     try:
         url = appendParams(url, queryUrl, dateFrom, dateTo)
         ret = util.httpReqeust(url, "", self.makeHeaders(), "GET")
         if ret.status == 200:
             return purgeQueryXmlToPurgeList(ret)
         else:
             return purgeQueryXmlToFailure(ret)
     except Exception, e:
         traceback.print_exc(file=sys.stdout)
         return PurgeQueryResult(-1, str(e))
Пример #50
0
 def getHitReport(self, reportForm, domainId = None):
     ''' 获取某域名请求数报表 如果domainId 为None,表示 查汇总信息
     @type reportForm: ReportForm
     @param reportForm:  请求的时间和报表粒度
     @rtype: HitProcessResult
     @return: 通过HitProcessResult.getHitPoints() 获得返回的结果
     '''
     if domainId == None:
         url = self.HOST + "/api/report/hit"
     else:
         url = self.HOST + "/api/report/" + str(domainId) + "/hit" 
     try:
         url = appendParams(url, reportForm)
         ret = util.httpReqeust(url, "", self.makeHeaders(), "GET")
         if ret.status == 200:
             return xmlToHitPointList(ret, reportForm.getReportType())
         else:
             return getHitReportXmlToDefaultFailure(ret)
     except Exception, e:
         traceback.print_exc(file=sys.stdout)
         return HitProcessResult(-1, str(e))
Пример #51
0
 def modify(self, domain):
     ''' 修改加速域名配置 
     @type domain: Domain
     @param domain : 构建需要修改的域名的Domain实例, domain中必须设置domanId字段
     @rtype: ProcessResult对象
     @return: 返回ProcessResult对象
     '''
     
     if domain.domainId is None:
         raise '请设置domainId字段'
     
     url = self.HOST + "/api/domain/" + str(domain.domainId)
     try:
         post = domainToXml(domain)
         #print post
         ret = util.httpReqeust(url, post, self.makeHeaders(url), "PUT")
         if ret.status == 202:
             return xmlToSuccess(ret)
         else:
             return xmlToFailure(ret)   
     except Exception, e:
         traceback.print_exc(file=sys.stdout)
         return ProcessResult(-1, str(e))
Пример #52
0
 def modify(self, domain):
     ''' 修改加速域名配置 
     @type domain: Domain
     @param domain : 构建需要修改的域名的Domain实例, domain中必须设置domanId字段
     @rtype: ProcessResult对象
     @return: 返回ProcessResult对象
     '''
     
     if domain.domainId is None:
         raise '请设置domainId字段'
     
     url = self.HOST + "/api/domain/" + str(domain.domainId)
     try:
         post = domainToXml(domain)
         #print post
         ret = util.httpReqeust(url, post, self.makeHeaders(url), "PUT")
         if ret.status == 202:
             return xmlToSuccess(ret)
         else:
             return xmlToFailure(ret)   
     except Exception, e:
         traceback.print_exc(file=sys.stdout)
         return ProcessResult(-1, str(e))
Пример #53
0
 def getHitReport(self, reportForm, domainId=None):
     ''' 获取某域名请求数报表 如果domainId 为None,表示 查汇总信息
     @type reportForm: ReportForm
     @param reportForm:  请求的时间和报表粒度
     @rtype: HitProcessResult
     @return: 通过HitProcessResult.getHitPoints() 获得返回的结果
     '''
     hitreport = []
     if domainId == None:
         url = self.HOST + "/api/report/hit"
     else:
         url = self.HOST + "/api/report/" + str(domainId) + "/hit"
     try:
         query_date_period = PeriodCheck(reportForm).date_clean()
         for i in query_date_period:
             qurl = appendParams(url, i)
             ret = util.httpReqeust(qurl, "", self.makeHeaders(), "GET")
             if ret.status == 200:
                 data = xmlToHitPointList(ret, reportForm.getReportType())
                 hitreport.append(data)
         return hitreport
     except Exception:
         traceback.print_exc(file=sys.stdout)
         return []
Пример #54
0
 def getHitReport(self, reportForm, domainId = None):
     ''' 获取某域名请求数报表 如果domainId 为None,表示 查汇总信息
     @type reportForm: ReportForm
     @param reportForm:  请求的时间和报表粒度
     @rtype: HitProcessResult
     @return: 通过HitProcessResult.getHitPoints() 获得返回的结果
     '''
     hitreport = []
     if domainId == None:
         url = self.HOST + "/api/report/hit"
     else:
         url = self.HOST + "/api/report/" + str(domainId) + "/hit" 
     try:
         query_date_period = PeriodCheck(reportForm).date_clean()
         for i in query_date_period:
             qurl = appendParams(url, i)
             ret = util.httpReqeust(qurl, "", self.makeHeaders(), "GET")
             if ret.status == 200:
                 data = xmlToHitPointList(ret, reportForm.getReportType())
                 hitreport.append(data)
         return hitreport
     except Exception:
         traceback.print_exc(file=sys.stdout)
         return []
Пример #55
0
def getHitReportXmlToDefaultFailure(ret):
    msg = util.getReturnXmlMsg(ret)
    return HitProcessResult(ret.status, ret.reason + ":" + msg)
Пример #56
0
def getLogXmlToFailure(ret):
    msg = util.getReturnXmlMsg(ret)
    return LogProcessResult(ret.status, ret.reason + ":" + msg)
Пример #57
0
def purgeQueryByPurgeIdXmlToFailure(ret):
    ''' 返回xml 解析 带错误信息的 根据purgeId缓存查询返回xml'''
    msg = util.getReturnXmlMsg(ret)
    return PurgeQueryResult(ret.status, ret.reason + ":" + msg)
Пример #58
0
def purgeXmlToFailure(ret):
    ''' 返回xml 转换成带错误信息的PurgeResult对象'''
    msg = util.getReturnXmlMsg(ret)
    return PurgeResult(ret.status, ret.reason + ":" + msg)
Пример #59
0
def XmlToFailure(ret):
    msg = util.getReturnXmlMsg(ret)
    return GetRequestProcessResult(ret.status, ret.reason + ":" + msg)      
Пример #60
0
def XmlToFailure(ret):
    msg = util.getReturnXmlMsg(ret)
    return GetRequestProcessResult(ret.status, ret.reason + ":" + msg)