4 @link: http://hierarchical-cluster-engine.com/ 5 @copyright: Copyright © 2013-2014 IOIX Ukraine 6 @license: http://hierarchical-cluster-engine.com/license/ 28 TASK_NOT_EXIST_ERR = 2020
29 TASK_NOT_EXISTS_ERR_MSG =
"Site Id Not Found" 38 def __init__(self, dcSiteTemplate, keyValueDefaultFile, keyValueStorageDir, rawDataDir, dBDataTask, dcStatTemplate,
39 dcLogTemplate, dcAttrTemplate):
40 super(SiteUpdateTask, self).
__init__(dcSiteTemplate, keyValueDefaultFile, keyValueStorageDir, dBDataTask,
41 dcStatTemplate, dcLogTemplate, dcAttrTemplate)
51 def process(self, siteUpdate, queryCallback):
54 if siteUpdate.id
is None:
57 siteIds.append(siteUpdate.id)
59 for siteId
in siteIds:
60 siteUpdate.id = siteId
61 if super(SiteUpdateTask, self).
isSiteExist(siteUpdate.id, queryCallback):
65 sitePropValue = BaseTask.readValueFromSiteProp(siteUpdate.id,
"UPDATE_NOT_INSERT_ROOT_URLS", queryCallback)
66 if siteUpdate.updateType != dc.EventObjects.SiteUpdate.UPDATE_TYPE_UPDATE
and\
67 (sitePropValue
is None or not bool(int(sitePropValue)))
and siteUpdate.urls
is not None:
69 elif siteUpdate.updateType == dc.EventObjects.SiteUpdate.UPDATE_TYPE_UPDATE
and siteUpdate.urls
is not None:
73 if siteUpdate.updateType != dc.EventObjects.SiteUpdate.UPDATE_TYPE_UPDATE
and\
74 (sitePropValue
is None or not bool(int(sitePropValue)))
and siteUpdate.urls
is not None:
75 logger.debug(
"Copy root URLs from dc_sites.site_urls table to dc_urls.urls_*")
78 response.statuses.append(GeneralResponse.ERROR_OK)
80 response.statuses.append(TASK_NOT_EXIST_ERR)
90 SQL_UPDATE_SITE_SQL_TEMPLATE =
"UPDATE sites SET %s WHERE `Id` = '%s'" 91 fields, values = Constants.getFieldsValuesTuple(siteUpdate, Constants.siteDict)
92 fieldValueString = Constants.createFieldsValuesString(fields, values, Constants.siteExcludeList)
93 query = SQL_UPDATE_SITE_SQL_TEMPLATE % (fieldValueString, siteUpdate.id)
94 logger.debug(
'>>> updateSite query: ' + str(query))
95 queryCallback(query, Constants.PRIMARY_DB_ID)
103 if siteUpdate.filters
is not None:
104 if siteUpdate.updateType == dc.EventObjects.SiteUpdate.UPDATE_TYPE_APPEND:
105 super(SiteUpdateTask, self).
addSitesFilter(siteUpdate, queryCallback)
106 if siteUpdate.updateType == dc.EventObjects.SiteUpdate.UPDATE_TYPE_OVERWRITE:
107 query = Constants.DEL_BY_ID_QUERY_TEMPLATE % (
"sites_filters", siteUpdate.id)
108 queryCallback(query, Constants.PRIMARY_DB_ID)
109 super(SiteUpdateTask, self).
addSitesFilter(siteUpdate, queryCallback)
110 if siteUpdate.updateType == dc.EventObjects.SiteUpdate.UPDATE_TYPE_UPDATE:
119 if siteUpdate.properties
is not None:
120 if siteUpdate.updateType == dc.EventObjects.SiteUpdate.UPDATE_TYPE_APPEND:
122 if siteUpdate.updateType == dc.EventObjects.SiteUpdate.UPDATE_TYPE_OVERWRITE:
123 query = Constants.DEL_BY_ID_QUERY_TEMPLATE % (
"sites_properties", siteUpdate.id)
124 queryCallback(query, Constants.PRIMARY_DB_ID)
126 if siteUpdate.updateType == dc.EventObjects.SiteUpdate.UPDATE_TYPE_UPDATE:
135 if siteUpdate.urls
is not None:
137 site.urls = siteUpdate.urls
138 site.id = siteUpdate.id
139 if siteUpdate.updateType == dc.EventObjects.SiteUpdate.UPDATE_TYPE_APPEND:
141 if siteUpdate.updateType == dc.EventObjects.SiteUpdate.UPDATE_TYPE_OVERWRITE:
142 URL_TABLE_DEL_TEMPLATE =
"DELETE FROM `sites_urls` WHERE `Site_Id` = '%s'" 143 query = URL_TABLE_DEL_TEMPLATE % siteUpdate.id
144 queryCallback(query, Constants.PRIMARY_DB_ID)
146 if siteUpdate.updateType == dc.EventObjects.SiteUpdate.UPDATE_TYPE_UPDATE:
157 for urlObject
in urls:
159 if urlObject
is not None:
160 if urlObject.url
is not None:
161 urlMd5 = hashlib.md5(urlObject.url).hexdigest()
165 if urlObject.urlMd5
is not None and urlObject.url
is not None:
166 query = str(Constants.URL_URL_SQL_SELECT_COUNT +
"`URL`='%s' AND `URLMd5`<>'%s'") % \
167 (siteId, Utils.escape(urlObject.url), urlObject.urlMd5)
168 r = queryCallback(query, Constants.SECONDARY_DB_ID)
169 if r
is None or (len(r) > 0)
and len(r[0]) > 0
and r[0][0] > 0:
170 logger.error(
"Root URL '%s' already exists in dc_urls.urls_%s !", str(urlObject.url), siteId)
172 if urlObject.url
is not None and urlObject.urlMd5
is None:
173 urlMd5Defined =
False 174 urlObject.urlMd5 = urlMd5
175 elif urlObject.urlMd5
is not None:
178 urlMd5Defined =
False 179 fields, values = Constants.getFieldsValuesTuple(urlObject, Constants.URLTableDict)
180 fieldValueString = Constants.createFieldsValuesString(fields, values)
181 if urlMd5Defined
is False and urlObject.url
is not None:
182 query = str(Constants.URL_URL_SQL_UPDATE +
" `URL`='%s'") % (siteId, fieldValueString, urlObject.url)
183 elif urlMd5Defined
is True:
184 query = str(Constants.URL_URL_SQL_UPDATE +
" `URLMd5`='%s'") % (siteId, fieldValueString, urlObject.urlMd5)
187 if query
is not None:
188 queryCallback(query, Constants.SECONDARY_DB_ID)
190 logger.error(
'No url or urlMd5 value in urlObject, update query not created!\n%s' + str(urlObject))
192 if urlMd5Defined
and urlMd5 != urlObject.urlMd5:
193 query = (Constants.URL_URL_SQL_UPDATE +
" `URL`='%s'") % (siteId,
'URLMd5="' + str(urlMd5) +
'"',
194 Utils.escape(urlObject.url))
195 logger.debug(
'Update old URLMd5 with new: %s for url: %s, query: %s', urlMd5, urlObject.url, str(query))
196 queryCallback(query, Constants.SECONDARY_DB_ID)
197 except Exception, err:
198 logger.error(
"Error: %s, query:%s, urlMd5Defined: %s, urlObject.url: %s", str(err), str(query),
199 str(urlMd5Defined), str(urlObject.url))
200 logger.error(Utils.getTracebackInfo())
208 if siteUpdate.state == siteUpdate.STATE_RESTART:
209 UPDATE_SITE_SQL_QUERY = (
"UPDATE `sites` SET `State`=%s, `UDate`=NOW(), " +
210 "`Iterations`=`Iterations`+1, `ErrorMask`=0, `Errors`=0 WHERE Id='%s'")
211 query = UPDATE_SITE_SQL_QUERY % (str(dc.EventObjects.Site.STATE_ACTIVE), siteUpdate.id)
212 queryCallback(query, Constants.PRIMARY_DB_ID)
229 logger.debug(
"Delete all root URLs from dc_urls.urls_* table")
231 reason=dc.EventObjects.URLDelete.REASON_SITE_UPDATE_ROOT_URLS)
234 whereCriterionStr =
"`ParentMd5`=''" 235 urlDeleteObj.criterions = {app.SQLCriterions.CRITERION_WHERE : whereCriterionStr}
244 if len(Constants.URLTableDict) > 0:
245 tbName = Constants.DC_URLS_TABLE_NAME_TEMPLATE % siteId
246 query =
"INSERT IGNORE INTO `%s` (" 247 query = query % tbName
249 for elem
in Constants.URLTableDict.values():
255 query += (
") SELECT ")
257 query += (
" FROM dc_sites.sites_urls WHERE `Site_Id`='%s' GROUP BY `URLMd5`" % siteId)
259 queryCallback(query, Constants.SECONDARY_DB_ID)
def isSiteExist(self, siteId, queryCallback, userId=None)
def updateSiteURLSites(self, site, queryCallback)
def addSiteURLSites(self, site, queryCallback)
GeneralResponse event object, represents general state response for multipurpose usage.
def restartSite(self, siteUpdate, queryCallback)
def process(self, siteUpdate, queryCallback)
def updateSiteURL(self, siteUpdate, queryCallback)
def copyURLsFromSiteURlsToURLsURLs(self, siteId, queryCallback)
def addSitesFilter(self, site, queryCallback)
def deleteRootUrlsFromURLsUrls(self, siteId, queryCallback)
def updateSitesFilter(self, siteUpdate, queryCallback)
def updateURlsURL(self, urls, siteId, queryCallback)
def updateSitesFilter(self, site, queryCallback)
def updateSiteProperties(self, site, queryCallback)
def __init__(self, dcSiteTemplate, keyValueDefaultFile, keyValueStorageDir, rawDataDir, dBDataTask, dcStatTemplate, dcLogTemplate, dcAttrTemplate)
def addSiteProperties(self, site, queryCallback)
def updateSiteProperties(self, siteUpdate, queryCallback)
def updateSite(self, siteUpdate, queryCallback)
def fetchByCriterions(self, criterions, queryCallback)