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)
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);
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
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
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
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)
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
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
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
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)
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))
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))
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)
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)
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)
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)
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)
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
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);
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);
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)
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
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');
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')
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)
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))
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))
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))
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
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))
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))
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))
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);
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))
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))
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))
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))
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))
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 []
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 []
def getHitReportXmlToDefaultFailure(ret): msg = util.getReturnXmlMsg(ret) return HitProcessResult(ret.status, ret.reason + ":" + msg)
def getLogXmlToFailure(ret): msg = util.getReturnXmlMsg(ret) return LogProcessResult(ret.status, ret.reason + ":" + msg)
def purgeQueryByPurgeIdXmlToFailure(ret): ''' 返回xml 解析 带错误信息的 根据purgeId缓存查询返回xml''' msg = util.getReturnXmlMsg(ret) return PurgeQueryResult(ret.status, ret.reason + ":" + msg)
def purgeXmlToFailure(ret): ''' 返回xml 转换成带错误信息的PurgeResult对象''' msg = util.getReturnXmlMsg(ret) return PurgeResult(ret.status, ret.reason + ":" + msg)
def XmlToFailure(ret): msg = util.getReturnXmlMsg(ret) return GetRequestProcessResult(ret.status, ret.reason + ":" + msg)