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
NodeManager.py
Go to the documentation of this file.
1 '''
2 Created on Feb 17, 2014
3 
4 @author: scorp
5 @link: http://hierarchical-cluster-engine.com/
6 @copyright: Copyright © 2013-2014 IOIX Ukraine
7 @license: http://hierarchical-cluster-engine.com/license/
8 @since: 0.1
9 '''
10 
11 from NodeManagerRequest import NodeManagerRequest
12 from NodeManagerResponse import NodeManagerResponse
13 from transport.UIDGenerator import UIDGenerator
14 import AdminExceptions
15 import Constants as CONSTANTS
16 
17 
18 class NodeManager(object):
19  def __init__(self, errorCode=CONSTANTS.ERROR_NO):
21  self.errorCode = errorCode
22  self.responses = []
23  self.responsesDicts = []
25 
26 
27  def getErrorCode(self):
28  return self.errorCode
29 
30 
31  def getResponses(self):
32  return self.responses
33 
34 
35  def getResponsesDicts(self):
36  return self.responsesDicts
37 
38 
39 
40  def responsesParsing(self):
41  for responseElement in self.responses:
42  responsesDict = None
43  responseBody = responseElement[CONSTANTS.STRING_RESPONSE_MARKER].getBody()
44  if type(responseBody) == type(""):
45  fieldsList = responseBody.split(CONSTANTS.ITEM_DELIM)
46  if len(fieldsList) > 1:
47  if fieldsList[0] != CONSTANTS.ERROR_CODE_OK and fieldsList[0] != CONSTANTS.ERROR_CODE_ERROR:
48  self.responsesDicts.append(responsesDict)
49  continue
50  responsesDict = {CONSTANTS.RESPONSE_CODE_NAME: "", CONSTANTS.RESPONSE_FIELDS_NAME: {}}
51  responsesDict[CONSTANTS.RESPONSE_CODE_NAME] = fieldsList[0]
52  for i in xrange(1, len(fieldsList)):
53  field = fieldsList[i].split(CONSTANTS.FIELD_DELIM)
54  fieldValue = ""
55  if len(field) > 1:
56  fieldValue = field[1]
57  if len(field) > 0:
58  responsesDict[CONSTANTS.RESPONSE_FIELDS_NAME][field[0]] = fieldValue
59  self.responsesDicts.append(responsesDict)
60 
61 
62 
63  def execute(self, commands, nodes):
64  self.responses = []
65  self.responsesDicts = []
66  message = {CONSTANTS.STRING_MSGID_NAME : "", CONSTANTS.STRING_BODY_NAME : ""}
67  for node in nodes:
68  for command in commands:
69  responseElement = {CONSTANTS.STRING_NODE_MARKER : node, CONSTANTS.STRING_RESPONSE_MARKER : None}
70  requestBody = command.generateBody()
71  if requestBody != None:
72  message[CONSTANTS.STRING_MSGID_NAME] = self.msgUidGenerator.get_uid()
73  message[CONSTANTS.STRING_BODY_NAME] = requestBody
74  try:
75  response = self.request.makeRequest(node, message, command.getRequestTimeout())
77  errorStr = "ERR_AdminWrongConnectionKey"
78  response = NodeManagerResponse(errorStr)
80  errorStr = "ERR_AdminTimeoutException"
81  response = NodeManagerResponse(errorStr)
82  responseElement[CONSTANTS.STRING_RESPONSE_MARKER] = response
83  self.responses.append(responseElement)
84 
85  self.responsesParsing()
NodeManagerResponse class that represents admin modules response.
def __init__(self, errorCode=CONSTANTS.ERROR_NO)
Definition: NodeManager.py:19
def makeRequest(self, node, message, commandTimeout=None)
makeRequest main class method, it gets node and message params, interact with transport layer...
NodeManagerRequest class contents all data needed for admin level's request sending.
def execute(self, commands, nodes)
execute method execute incoming commands on nodes, keepts reult in responses and responsesDicts field...
Definition: NodeManager.py:63
AdminExceptions module keepts admin module native exceptions.
UIDGenerator is used to generate unique message id.
Definition: UIDGenerator.py:14
NodeManager represents API for interraction with user-side (execute method)
Definition: NodeManager.py:18
def responsesParsing(self)
responsesParsing method parses data from self.responses into specific stucture (self.responsesDicts)
Definition: NodeManager.py:40