HCE Project Python language Distributed Tasks Manager Application, Distributed Crawler Application and client API bindings.  2.0.0-chaika
Hierarchical Cluster Engine Python language binding
StatisticLogManager.py
Go to the documentation of this file.
1 '''
2 @package: dc
3 @author igor
4 @link: http://hierarchical-cluster-engine.com/
5 @copyright: Copyright © 2013-2014 IOIX Ukraine
6 @license: http://hierarchical-cluster-engine.com/license/
7 @since: 0.1
8 '''
9 
10 import dc_db.Constants as Constants
11 import app.Utils as Utils # pylint: disable=F0401
12 
13 logger = Utils.MPLogger().getLogger()
14 
15 # #StatisticLogManager central point of Statistics and Log databases update
16 #
17 class StatisticLogManager(object):
18 
19  SITE_PROP_NAME_FREQ = "STATS_FREQ_ENABLED"
20  SITE_PROP_NAME_LOG = "STATS_LOG_ENABLED"
21  GLOBAL_FREQ_ENABLED = False
22  GLOBAL_LOG_ENABLED = False
23 
24 
25  # #isStatisticEnabled return bool value - is freq or log static enabled (for site)
26  #
27  # @param queryCallback - sql callback function
28  # @param siteId - site's id
29  @staticmethod
30  def isStatisticEnabled(queryCallback, siteId, defValue, propName):
31  from dc_db.BaseTask import BaseTask
32  ret = defValue
33  tempValue = BaseTask.readValueFromSiteProp(siteId, propName, queryCallback)
34  if tempValue is not None:
35  ret = bool(int(tempValue))
36  return ret
37 
38 
39  # #statisticUpdate updates statistic database fileds
40  #
41  # @param queryCallback - sql callback function
42  # @param siteId - site's id
43  # @param URLMd5 - url's MD5
44  @staticmethod
45  def addNewRecord(queryCallback, siteId, URLMd5):
46  if queryCallback is not None:
47  SQL_INSERT_TEMPLAE = "INSERT IGNORE INTO `%s` SET `URLMd5`= '%s'"
48  if StatisticLogManager.isStatisticEnabled(queryCallback, siteId, StatisticLogManager.GLOBAL_FREQ_ENABLED,
49  StatisticLogManager.SITE_PROP_NAME_FREQ):
50  tbName = Constants.DC_FREQ_TABLE_NAME_TEMPLATE % siteId
51  query = SQL_INSERT_TEMPLAE % (tbName, URLMd5)
52  queryCallback(query, Constants.STAT_DB_ID)
53  else:
54  logger.debug(">>> Statistic Freq Disabled, SiteId=" + siteId)
55  else:
56  logger.error(">>> addNewRecord error, queryCallback is None")
57 
58 
59  # #statisticUpdate updates statistic database fileds
60  #
61  # @param queryCallback - sql callback function
62  # @param freqName - name of updates field (look dc_db.Constants.StatFreqConstants class)
63  # @param addValue - integer value for addition
64  # @param siteId - site's id
65  # @param URLMd5 - url's MD5
66  @staticmethod
67  def statisticUpdate(queryCallback, freqName, addValue, siteId, URLMd5):
68  if StatisticLogManager.isStatisticEnabled(queryCallback, siteId, StatisticLogManager.GLOBAL_FREQ_ENABLED,
69  StatisticLogManager.SITE_PROP_NAME_FREQ):
70  if queryCallback is not None:
71  if freqName in Constants.StatFreqConstants.__dict__.values():
72  FREQ_UPDATE_SQL_TEMPLATE = "UPDATE `%s` SET `%s`=`%s`+%s, `MDate`=NOW() WHERE `URLMd5`='%s'"
73  tbName = Constants.DC_FREQ_TABLE_NAME_TEMPLATE % siteId
74  query = FREQ_UPDATE_SQL_TEMPLATE % (tbName, freqName, freqName, str(addValue), URLMd5)
75  queryCallback(query, Constants.STAT_DB_ID)
76  else:
77  logger.error(">>> statisticUpdate error = " + str(freqName) + " Statistic Freq field not support !")
78  else:
79  logger.error(">>> statisticUpdate error, queryCallback is None")
80  else:
81  logger.debug(">>> Statistic Freq Disabled, SiteId=" + siteId)
82 
83 
84  # #logUpdate updates log database fileds
85  #
86  # @param queryCallback - sql callback function
87  # @param opName - type of operation (look dc_db.Constants.logOperationsDict dict)
88  # @param logObject - current logging object (may be None)
89  # @param siteId - site's id
90  # @param URLMd5 - url's MD5
91  # @param opDate - operation's data
92  @staticmethod
93  def logUpdate(queryCallback, opName, logObject, siteId, URLMd5, opDate="NOW()"):
94  if StatisticLogManager.isStatisticEnabled(queryCallback, siteId, StatisticLogManager.GLOBAL_LOG_ENABLED,
95  StatisticLogManager.SITE_PROP_NAME_LOG):
96  if queryCallback is not None:
97  if opName in Constants.logOperationsDict:
98  LOG_INSERT_SQL_TEMPLATE = "INSERT INTO `%s` SET `URLMd5`='%s', `OpCode`=%s, `Object`='%s', `ODate`=%s"
99  tbName = Constants.DC_LOG_TABLE_NAME_TEMPLATE % siteId
100  objectStr = ""
101  if logObject is not None:
102  try:
103  objectStr = logObject.toJSON()
104 # objectStr = MySQLdb.escape_string(objectStr)
105  objectStr = Utils.escape(objectStr)
106  except Exception as ex:
107  logger.debug(">>> logUpdate Object to JSON error = " + str(ex))
108  if opDate != "NOW()":
109  opDate = ("'" + opDate + "'")
110  query = LOG_INSERT_SQL_TEMPLATE % (tbName, URLMd5, str(Constants.logOperationsDict[opName]), objectStr,
111  opDate)
112  queryCallback(query, Constants.LOG_DB_ID)
113  else:
114  logger.error(">>> logUpdate error = " + str(opName) + " Log field not support !")
115  else:
116  logger.error(">>> logUpdate error, queryCallback is None")
117  else:
118  logger.debug(">>> Statistic Log Disabled, SiteId=" + siteId)
def isStatisticEnabled(queryCallback, siteId, defValue, propName)
def statisticUpdate(queryCallback, freqName, addValue, siteId, URLMd5)
def logUpdate(queryCallback, opName, logObject, siteId, URLMd5, opDate="NOW()")
def addNewRecord(queryCallback, siteId, URLMd5)