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
DBProxyWrapper.py
Go to the documentation of this file.
1 # coding: utf-8
2 
3 """
4 HCE project, Python bindings, Distributed Tasks Manager application.
5 It's wrapper proxy functional with DB.
6 
7 @package: dc_crawler
8 @file DBProxyWrapper.py
9 @author Alexander Vybornyh <alexander.hce.cluster@gmail.com>
10 @link: http://hierarchical-cluster-engine.com/
11 @copyright: Copyright &copy; 2013-2017 IOIX Ukraine
12 @license: http://hierarchical-cluster-engine.com/license/
13 @since: 0.1
14 """
15 
16 import dbi.EventObjects
17 from dc.EventObjects import ProxyStatus
18 import app.Utils as Utils
19 import app.SQLCriterions
20 
21 logger = Utils.MPLogger().getLogger()
22 
23 class DBProxyWrapper(object):
24 
25  # #Constants used in class
26  DEFAULT_LIMIT_VALUE = 50
27  DEFAULT_SITE_ID_VALUE = '*'
28 
29  PROXY_STATE_DISABLED = 0
30  PROXY_STATE_ENABLED = 1
31 
32  # # Constants template sql criterion
33  TEMPLATE_WHERE_SELECT = "`State` = %s AND (`Site_Id` = '%s' OR `Site_Id` = '%s')"
34  TEMPLATE_ORDER_SELECT = "`Priority`"
35 
36  PROXY_UPDATE_FAULTS_QUERY = "UPDATE `sites_proxy` SET `Faults`=`Faults` + %s WHERE `Host` = '%s'"
37  PROXY_DISABLE_QUERY = "UPDATE `sites_proxy` SET `State`= '%s' WHERE `Host` = '%s' AND `FaultsMax` <> '0' \
38  AND `Faults` >= `FaultsMax`"
39 
40  PROXY_DB_NAME = "dc_sites"
41 
42  # # Initialization of class
43  #
44  # @param dbWrapper - database access wrapper
45  def __init__(self, dbWrapper):
46  self.dbWrapper = dbWrapper
47 
48 
49  # # get active proxies list
50  #
51  # @param siteId - site ID value for request
52  # @param limitValue - value of limit for request
53  # @return list of Proxy instances
54  def getEnaibledProxies(self, siteId=DEFAULT_SITE_ID_VALUE, limitValue=DEFAULT_LIMIT_VALUE):
55  # variable for result
56  ret = None
57 
58  criterions = {}
59  criterions[app.SQLCriterions.CRITERION_WHERE] = self.TEMPLATE_WHERE_SELECT % \
60  (self.PROXY_STATE_ENABLED, str(siteId), self.DEFAULT_SITE_ID_VALUE)
61  criterions[app.SQLCriterions.CRITERION_LIMIT] = str(limitValue)
62  criterions[app.SQLCriterions.CRITERION_ORDER] = self.TEMPLATE_ORDER_SELECT
63 
64  proxyStatus = ProxyStatus(siteId=siteId, host=None, criterions=criterions)
65  affectDB = self.dbWrapper.affect_db
66  self.dbWrapper.affect_db = True
67  ret = self.dbWrapper.proxyStatus(proxyStatus)
68  self.dbWrapper.affect_db = affectDB
69 
70  return ret
71 
72 
73  # # add faults to counter proxy state
74  #
75  # @param siteId - site ID value for request
76  # @param proxyName - proxy host name
77  # @param incrementSize - value for increment of faults counter
78  # @return - None
79  def addFaults(self, proxyName, incrementSize=1):
80  if proxyName is not None:
81  affectDB = self.dbWrapper.affect_db
82  self.dbWrapper.affect_db = True
83 
84  # increment faults counter
85  query = self.PROXY_UPDATE_FAULTS_QUERY % (incrementSize, proxyName)
86  self.dbWrapper.customRequest(query, self.PROXY_DB_NAME, dbi.EventObjects.CustomRequest.SQL_BY_NAME)
87 
88  # disable proxy if necessary (overlimits max allowed value)
89  query = self.PROXY_DISABLE_QUERY % (self.PROXY_STATE_DISABLED, proxyName)
90  self.dbWrapper.customRequest(query, self.PROXY_DB_NAME, dbi.EventObjects.CustomRequest.SQL_BY_NAME)
91 
92  self.dbWrapper.affect_db = affectDB
def addFaults(self, proxyName, incrementSize=1)
def getEnaibledProxies(self, siteId=DEFAULT_SITE_ID_VALUE, limitValue=DEFAULT_LIMIT_VALUE)