2 Created on Mar 17, 2015 6 @link: http://hierarchical-cluster-engine.com/ 7 @copyright: Copyright © 2013-2014 IOIX Ukraine 8 @license: http://hierarchical-cluster-engine.com/license/ 30 FILTER_SPLIT_PATTERN =
'\r\n' 32 FILTER_NAME_PATTERN =
"Pattern" 33 FILTER_NAME_SUBJECT =
"Subject" 34 FILTER_NAME_OP_CODE =
"OperationCode" 35 FILTER_NAME_STAGE =
"Stage" 36 FILTER_NAME_ACTION =
"Action" 37 FILTER_NAME_GROUP =
"Group_Id" 38 FILTER_NAME_STATE =
"State" 40 STAGE_COLLECT_URLS = 0
41 STAGE_BEFORE_DOM_PRE = 1
42 STAGE_AFTER_DOM_PRE = 2
44 STAGE_AFTER_PROCESSOR = 4
46 STAGE_COLLECT_URLS_PROTOCOLS = 6
47 STAGE_BEFORE_PROCESSOR = 7
48 STAGE_REDIRECT_URL = 8
51 SELECT_SUBJECT_RAW_CONTENT =
'RAW_CONTENT' 52 SELECT_SUBJECT_HEADERS_ALL =
'HEADERS_ALL' 53 SELECT_SUBJECT_LAST_MODIFIED =
'LAST_MODIFIED' 72 MACRO_CASE_ORIGINAL = 0
86 def __init__(self, filters, dbTaskWrapper=None, siteId=None, readMode=0, fields=None, opCode=None, stage=None,
98 if filters
is not None:
105 if dbTaskWrapper
is not None and siteId
is not None:
106 self.
readFiltersFromDB(dbTaskWrapper, siteId, readMode, opCode, stage, selectSubject)
118 for localFilter
in filters:
119 if opCode
is not None and int(opCode) != int(localFilter.opCode):
121 if stage
is not None and int(stage) != int(localFilter.stage):
124 if localFilter.state == 0:
125 logger.debug(
"Filter: '" + str(localFilter.pattern) +
"' skipped as DISABLE")
135 selectSubject
is not None and len(localFilter.subject) > 0
and \
136 selectSubject != localFilter.subject:
137 logger.debug(
'!!!! Skipped !!!!! ')
164 def readFiltersFromDB(self, dbTaskWrapper, siteId, readMode, opCode=None, stage=None, selectSubject=None):
167 SQL_SELECT_TEMPLATE =
"SELECT * FROM `sites_filters` WHERE `Mode`='%s' AND `State`='1' AND `Site_Id`='%s'" 168 query = SQL_SELECT_TEMPLATE % (str(readMode), str(siteId))
170 if opCode
is not None:
171 query += (
" AND `OperationCode`='%s'" % str(opCode))
173 if stage
is not None:
174 query += (
" AND `Stage`='%s'" % str(stage))
177 query += (
" AND `Subject`='%s'" % str(selectSubject))
179 logger.debug(
">>> Filter start SQL Req: " + str(query))
180 affectDB = dbTaskWrapper.affect_db
181 dbTaskWrapper.affect_db =
True 182 customResponse = dbTaskWrapper.customRequest(query, self.
DB_NAME, dbi.EventObjects.CustomRequest.SQL_BY_NAME)
183 dbTaskWrapper.affect_db = affectDB
184 logger.debug(
">>> Filter end SQL Req: " + str(customResponse))
185 if customResponse
is not None:
186 for i
in xrange(len(customResponse)):
188 if customResponse[i]
is not None:
191 for pattern
in patterns:
192 elem = copy.copy(customResponse[i])
206 def macroReplace(self, pattern, values, marker, case=MACRO_CASE_ORIGINAL):
209 ret = copy.copy(pattern)
211 if values[key]
is not None:
218 ret = ret.replace(marker + rkey + marker,
"'" + str(values[key]) +
"'" if isinstance(values[key], basestring) \
219 else str(values[key]))
235 if OCType == self.
OC_RE:
246 if re.search(value2, value1, self.
reFlags)
is not None:
249 elif OCType == self.
OC_EQ:
250 ret = (int(value1) == int(value2))
252 ret = (int(value1) != int(value2))
254 ret = (int(value1) <= int(value2))
256 ret = (int(value1) >= int(value2))
258 ret = (int(value1) < int(value2))
260 ret = (int(value1) > int(value2))
263 except ValueError
as exp:
264 logger.debug(
">>> Value error = " + str(exp))
265 except Exception, err:
266 logger.debug(
">>> Common exception, OCType = " + str(OCType) +
", val1 = " + str(value1) +
", val2 = " \
267 + str(value2) +
", error: " + str(err))
275 for localFilter
in self.
filters:
289 for localFilter
in self.
filters:
306 for localFilter
in self.
filters:
323 def filterAll(self, stage, value, logic=LOGIC_AND, subject=None, excludeIncludeMode=None):
335 for localFilter
in self.
filters:
338 localFilter[self.
FILTER_NAME_STAGE] == stage)
and ((excludeIncludeMode
is None)
or\
339 (int(excludeIncludeMode) == int(localFilter[
"Action"]))):
356 localPattern = self.
getGmtTime(localPattern, logger)
386 resValues.append(localRes)
404 for localFilter
in self.
filters:
418 d = {
"SHORTYEAR":
"y",
"YEAR":
"Y",
"MONTH":
"m",
"DAY":
"d",
"HOUR":
"H",
"MINUTE":
"M",
"SECOND":
"S"}
419 regex = re.compile(
"%@(SHORTYEAR|YEAR|MONTH|DAY|HOUR|MINUTE|SECOND)\\(([\\+|\\-]\\d{1,2})\\)%")
420 matchArray = regex.findall(localPattern)
423 ii = time.strftime(
"%" + d[i[0]], time.gmtime(time.time() + datetime.timedelta(hours=(+int(i[1]))).seconds))
424 localPattern = localPattern.replace(
"%@" + i[0] +
"(" + i[1] +
")%", ii)
425 except Exception, err:
426 loggerIns.error(str(err))
445 logger.debug(
'pattern: ' + str(pattern))
446 logger.debug(
'pubdate: ' + str(pubdate))
448 if pubdate
is not None:
449 dt = DateTimeType.parse(pubdate,
True, logger,
False)
451 dateStr =
"'" + dt.strftime(
"%Y-%m-%d %H:%M:%S") +
"'" 453 logger.debug(
'localPattern: ' + str(localPattern))
455 sqlQuery =
"SELECT * FROM `sites_filters` WHERE `Mode`='%s' AND `State`='1' AND `Site_Id`='%s'" % \
459 sqlQuery +=
" AND " + localPattern
461 logger.debug(
"sqlQuery: " + str(sqlQuery))
464 logger.debug(
"customResponse: " + str(customResponse))
465 if customResponse
is not None:
466 for elem
in customResponse:
468 logger.debug(
"elem: " + str(elem))
470 ret = bool(len(customResponse) > 0)
473 sqlQuery =
'SELECT ' + pattern
474 logger.debug(
"sqlQuery: " + str(sqlQuery))
479 logger.debug(
"customResponse: " + str(customResponse))
480 if customResponse
is not None and len(customResponse) > 0
and len(customResponse[0]) > 0
and \
481 int(customResponse[0][0]) > 0:
string FILTER_NAME_PATTERN
string FILTER_NAME_ACTION
def readFiltersFromDict(self, filters, opCode=None, stage=None, selectSubject=None)
def isExistStage(self, stage)
def isExist(self, stage, opCode)
def getGmtTime(self, localPattern, loggerIns)
def __init__(self, filters, dbTaskWrapper=None, siteId=None, readMode=0, fields=None, opCode=None, stage=None, selectSubject=None)
string FILTER_NAME_SUBJECT
def readFiltersFromDB(self, dbTaskWrapper, siteId, readMode, opCode=None, stage=None, selectSubject=None)
def macroReplace(self, pattern, values, marker, case=MACRO_CASE_ORIGINAL)
def filterAll(self, stage, value, logic=LOGIC_AND, subject=None, excludeIncludeMode=None)
string SELECT_SUBJECT_LAST_MODIFIED
def comparing(self, value1, value2, OCType)
def searchFiltersWithStage(self, stage)
def isExistInActions(self, value)
def checkSqlExpression(self, pattern, pubdate=None, fields=None)
string FILTER_NAME_OP_CODE
string SELECT_SUBJECT_HEADERS_ALL
string SELECT_SUBJECT_RAW_CONTENT
string FILTER_SPLIT_PATTERN