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
app.BaseServerManager.BaseServerManager Class Reference

This is app base class for management server connection end-points and parallel transport messages processing Provides main MOM transport for application architecture of parallel data processing. More...

Inheritance diagram for app.BaseServerManager.BaseServerManager:
Collaboration diagram for app.BaseServerManager.BaseServerManager:

Public Member Functions

def __init__ (self, poller_manager=None, admin_connection=None, conectionLightBuilder=None, exceptionForward=False, dumpStatVars=True)
 constructor More...
 
def addConnection (self, name, connection)
 
def setEventHandler (self, eventType, handler)
 set event handler rewrite the current handler for eventType More...
 
def send (self, connect_name, event)
 send event More...
 
def reply (self, event, reply_event)
 wrapper for sending event in reply for event More...
 
def poll (self)
 poll function polling connections receive as multipart msg, the second argument is pickled pyobj More...
 
def process (self, event)
 process event call the event handler method that was set by user or on_unhandled_event method if not set More...
 
def run (self)
 
def is_connection_registered (self, name)
 check is a connection was registered in a instance of BaseServerManager i object More...
 
def on_poll_timeout (self)
 function will call every time when ConnectionTimeout exception arrive More...
 
def on_unhandled_event (self, event)
 function will call every time when arrive doesn't set handler for event type of event.evenType More...
 
def build_poller_list (self)
 
def clear_poller (self)
 
def onAdminState (self, event)
 onAdminState event handler process admin SHUTDOWN command More...
 
def onAdminFetchStatData (self, event)
 onAdminState event handler process admin command More...
 
def onAdminSuspend (self, event)
 onAdminState event handler process admin command More...
 
def getStatDataFields (self, fields)
 getStatDataFields returns stat data from storage More...
 
def getSystemStat (self)
 getSystemStat returns stat data for system indicators: RAMV, RAMR and CPU More...
 
def getConfigVarsFields (self, fields)
 getConfigVarsFields returns config vars from storage More...
 
def onAdminGetConfigVars (self, event)
 onAdminGetConfigVars event handler process getConfigVars admin command, fill and return config vars array from internal storage More...
 
def onAdminSetConfigVars (self, event)
 onAdminSetConfigVars event handler process setConfigVars admin command More...
 
def setConfigVars (self, setConfigVars)
 processSetConfigVars sets config vars in storage More...
 
def sendAdminReadyEvent (self)
 send ready event to notify adminInterfaceService More...
 
def createLogMsg (self, event)
 from string message from event object More...
 
def initStatFields (self, connect_name)
 add record in statFields More...
 
def updateStatField (self, field_name, value, operation=STAT_FIELDS_OPERATION_ADD)
 update values of stat field - default sum More...
 
def processSpecialConfigVars (self, name, value)
 send ready event to notify adminInterfaceService More...
 
def getLogLevel (self)
 Get log level from first of existing loggers. More...
 
def setLogLevel (self, level)
 Set log level for all loggers. More...
 
def saveStatVarsDump (self)
 Save stat vars in json file. More...
 
def loadStatVarsDump (self)
 Load stat vars in json file. More...
 
def getStatVarsDumpFileName (self)
 Get stat vars file name. More...
 
def createDBIDict (self, configParser)
 

Public Attributes

 dumpStatVars
 
 poller_manager
 
 eventBuilder
 
 exit_flag
 
 pollTimeout
 
 connections
 
 event_handlers
 
 statFields
 stat fields container More...
 
 configVars
 
 exceptionForward
 

Static Public Attributes

string ADMIN_CONNECT_ENDPOINT = "Admin"
 
string ADMIN_CONNECT_CLIENT = "Admin"
 
int POLL_TIMEOUT_DEFAULT = 3000
 
int STAT_FIELDS_OPERATION_ADD = 0
 
int STAT_FIELDS_OPERATION_SUB = 1
 
int STAT_FIELDS_OPERATION_SET = 2
 
int STAT_FIELDS_OPERATION_INIT = 3
 
string POLL_TIMEOUT_CONFIG_VAR_NAME = "POLL_TIMEOUT"
 
string LOG_LEVEL_CONFIG_VAR_NAME = "LOG_LEVEL"
 
string STAT_DUMPS_DEFAULT_DIR = "/tmp/"
 
string STAT_DUMPS_DEFAULT_NAME = "%APP_NAME%_%CLASS_NAME%_stat_vars.dump"
 
dictionary LOGGERS_NAMES = {APP_CONSTS.LOGGER_NAME, "dc", "dtm", "root", ""}
 

Detailed Description

This is app base class for management server connection end-points and parallel transport messages processing Provides main MOM transport for application architecture of parallel data processing.

Definition at line 38 of file BaseServerManager.py.

Constructor & Destructor Documentation

◆ __init__()

def app.BaseServerManager.BaseServerManager.__init__ (   self,
  poller_manager = None,
  admin_connection = None,
  conectionLightBuilder = None,
  exceptionForward = False,
  dumpStatVars = True 
)

constructor

Definition at line 59 of file BaseServerManager.py.

59  dumpStatVars=True):
60  threading.Thread.__init__(self)
61 
62  logger.info("Thread-based class instance constructor begin!")
63 
64  self.dumpStatVars = dumpStatVars
65 
66  if poller_manager is None:
67  self.poller_manager = PollerManager()
68  else:
69  self.poller_manager = poller_manager
70 
71  self.eventBuilder = EventBuilder()
72 
73  self.exit_flag = False
74  self.pollTimeout = self.POLL_TIMEOUT_DEFAULT
75 
76  #map {"name":connection}
77  self.connections = dict()
78  #map {event_type:handler}
79  self.event_handlers = dict()
80 
81 
83  self.statFields = dict()
84  self.loadStatVarsDump()
85 
86  #Config fields container
87  self.configVars = dict()
88 
89  #by default -add client admin connection
90  conectLightBuilder = conectionLightBuilder
91  admin_connect = admin_connection
92  if conectLightBuilder is None:
93  conectLightBuilder = ConnectionBuilderLight()
94  if admin_connect is None:
95  admin_connect = conectLightBuilder.build(trasnport_consts.CLIENT_CONNECT, self.ADMIN_CONNECT_ENDPOINT)
96 
97  self.addConnection(self.ADMIN_CONNECT_CLIENT, admin_connect)
98  #Set event handler for ADMIN_STATE event
99  self.setEventHandler(EVENT_TYPES.ADMIN_STATE, self.onAdminState)
100  self.setEventHandler(EVENT_TYPES.ADMIN_FETCH_STAT_DATA, self.onAdminFetchStatData)
101  self.setEventHandler(EVENT_TYPES.ADMIN_GET_CONFIG_VARS, self.onAdminGetConfigVars)
102  self.setEventHandler(EVENT_TYPES.ADMIN_SET_CONFIG_VARS, self.onAdminSetConfigVars)
103  self.setEventHandler(EVENT_TYPES.ADMIN_SUSPEND, self.onAdminSuspend)
104  self.sendAdminReadyEvent()
105  #Set exception forwarding behavior, True - means forward exceptions farther, False - handle locally
106  self.exceptionForward = exceptionForward
107  #Init log level in config vars storage
108  self.configVars[self.LOG_LEVEL_CONFIG_VAR_NAME] = self.getLogLevel()
109  #Init start date in stat vars
110  self.updateStatField(APP_CONSTS.START_DATE_NAME, datetime.now().__str__(), self.STAT_FIELDS_OPERATION_SET)
111  logger.info("Thread-based class instance constructor end!")
112 
113 

Member Function Documentation

◆ addConnection()

def app.BaseServerManager.BaseServerManager.addConnection (   self,
  name,
  connection 
)

Definition at line 116 of file BaseServerManager.py.

116  def addConnection(self, name, connection):
117  self.initStatFields(name)
118  self.connections[name] = connection
119 
120 
Here is the call graph for this function:
Here is the caller graph for this function:

◆ build_poller_list()

def app.BaseServerManager.BaseServerManager.build_poller_list (   self)

Definition at line 294 of file BaseServerManager.py.

294  def build_poller_list(self):
295  for item in self.connections:
296  self.poller_manager.add(self.connections[item], item)
297 
298 
Here is the caller graph for this function:

◆ clear_poller()

def app.BaseServerManager.BaseServerManager.clear_poller (   self)

Definition at line 299 of file BaseServerManager.py.

299  def clear_poller(self):
300  for item in self.connections:
301  self.poller_manager.remove(self.connections[item])
302 
303 
Here is the caller graph for this function:

◆ createDBIDict()

def app.BaseServerManager.BaseServerManager.createDBIDict (   self,
  configParser 
)

Definition at line 639 of file BaseServerManager.py.

639  def createDBIDict(self, configParser):
640  # get section
641  return dict(configParser.items(DTM_CONSTS.DB_CONFIG_SECTION))
642 

◆ createLogMsg()

def app.BaseServerManager.BaseServerManager.createLogMsg (   self,
  event 
)

from string message from event object

Parameters
eventinstance of Event object
Returns
log string

Definition at line 493 of file BaseServerManager.py.

493  def createLogMsg(self, event):
494  logMsg = "event:\n" + str(vars(event)) + "\neventObj:\n"
495  if event.eventObj and hasattr(event.eventObj, "__dict__"):
496  logMsg = logMsg + str(vars(event.eventObj))
497  else:
498  logMsg = logMsg + str(event.eventObj)
499  return logMsg
500 
501 
502 
Here is the caller graph for this function:

◆ getConfigVarsFields()

def app.BaseServerManager.BaseServerManager.getConfigVarsFields (   self,
  fields 
)

getConfigVarsFields returns config vars from storage

Parameters
fieldslist of requested fields names to get config vars, if empty or None - return all fields set

Definition at line 404 of file BaseServerManager.py.

404  def getConfigVarsFields(self, fields):
405  if len(fields) == 0 or "*" in fields:
406  fields = self.configVars
407  else:
408  for field_name in fields:
409  if field_name in self.configVars:
410  fields[field_name] = self.configVars[field_name]
411 
412  return fields
413 
414 
415 
Here is the caller graph for this function:

◆ getLogLevel()

def app.BaseServerManager.BaseServerManager.getLogLevel (   self)

Get log level from first of existing loggers.

Returns
log level

Definition at line 564 of file BaseServerManager.py.

564  def getLogLevel(self):
565  level = None
566  for name in logging.Logger.manager.loggerDict.keys():
567  if isinstance(logging.Logger.manager.loggerDict[name], logging.Logger) and name in self.LOGGERS_NAMES:
568  level = logging.Logger.manager.loggerDict[name].getEffectiveLevel()
569  break
570  else:
571  pass
572 
573  return level
574 
575 
576 

◆ getStatDataFields()

def app.BaseServerManager.BaseServerManager.getStatDataFields (   self,
  fields 
)

getStatDataFields returns stat data from storage

Parameters
fieldslist of requested fields names to get stat data, if empty or None - return all stat fields set

Definition at line 367 of file BaseServerManager.py.

367  def getStatDataFields(self, fields):
368  if len(fields) == 0:
369  fields = self.statFields
370  else:
371  for field_name in fields:
372  if field_name in self.statFields:
373  fields[field_name] = self.statFields[field_name]
374  if isinstance(fields, dict):
375  fields.update(self.getSystemStat())
376  return fields
377 
378 
Here is the call graph for this function:
Here is the caller graph for this function:

◆ getStatVarsDumpFileName()

def app.BaseServerManager.BaseServerManager.getStatVarsDumpFileName (   self)

Get stat vars file name.

Definition at line 631 of file BaseServerManager.py.

631  def getStatVarsDumpFileName(self):
632  appName = os.path.splitext(os.path.basename(sys.argv[0]))[0]
633  return self.STAT_DUMPS_DEFAULT_DIR + self.STAT_DUMPS_DEFAULT_NAME.replace("%APP_NAME%", appName).\
634  replace("%CLASS_NAME%", self.__class__.__name__)
635 
636 
Here is the caller graph for this function:

◆ getSystemStat()

def app.BaseServerManager.BaseServerManager.getSystemStat (   self)

getSystemStat returns stat data for system indicators: RAMV, RAMR and CPU

Returns
dict of stat fields

Definition at line 383 of file BaseServerManager.py.

383  def getSystemStat(self):
384  fields = {'RAMV':0, 'RAMR':0, 'CPUU':0, 'CPUS':0, 'THREADS':0}
385  try:
386  py = psutil.Process(os.getpid())
387  m = py.memory_info()
388  fields['RAMV'] = m.vms
389  fields['RAMR'] = m.rss
390  c = py.cpu_times()
391  fields['CPUU'] = c.user
392  fields['CPUS'] = c.system
393  fields['THREADS'] = py.num_threads()
394  except Exception as e:
395  del e
396 
397  return fields
398 
399 
Here is the caller graph for this function:

◆ initStatFields()

def app.BaseServerManager.BaseServerManager.initStatFields (   self,
  connect_name 
)

add record in statFields

Parameters
connect_namemane of connection

Definition at line 506 of file BaseServerManager.py.

506  def initStatFields(self, connect_name):
507  if connect_name + "_send_cnt" not in self.statFields:
508  self.statFields[connect_name + "_send_cnt"] = 0
509  if connect_name + "_recv_cnt" not in self.statFields:
510  self.statFields[connect_name + "_recv_cnt"] = 0
511  if connect_name + "_send_bytes" not in self.statFields:
512  self.statFields[connect_name + "_send_bytes"] = 0
513  if connect_name + "_recv_bytes" not in self.statFields:
514  self.statFields[connect_name + "_recv_bytes"] = 0
515 
516 
517 
Here is the caller graph for this function:

◆ is_connection_registered()

def app.BaseServerManager.BaseServerManager.is_connection_registered (   self,
  name 
)

check is a connection was registered in a instance of BaseServerManager i object

Parameters
nameconnection name
Returns
True is connection was registered, else - False

Definition at line 272 of file BaseServerManager.py.

272  def is_connection_registered(self, name):
273  if name in self.connections:
274  return True
275  return False
276 
277 
Here is the caller graph for this function:

◆ loadStatVarsDump()

def app.BaseServerManager.BaseServerManager.loadStatVarsDump (   self)

Load stat vars in json file.

Definition at line 608 of file BaseServerManager.py.

608  def loadStatVarsDump(self):
609  if self.dumpStatVars:
610  try:
611  name = self.getStatVarsDumpFileName()
612  if os.path.exists(name):
613  with open(name, 'r') as f: data = f.read()
614  self.statFields = json.loads(str(data))
615  #APP_CONSTS.START_DATE_NAME
616  self.updateStatField(APP_CONSTS.START_DATE_NAME, datetime.now().__str__(), self.STAT_FIELDS_OPERATION_SET)
617  except IOError as e:
618  del e
619  except Exception as err:
620  try:
621  ExceptionLog.handler(logger, err, "Error load stat vars from file `" + name + "`: ")
622  logger.error(str(data))
623  except IOError as e:
624  del e
625 
626 
627 
628 
Here is the call graph for this function:

◆ on_poll_timeout()

def app.BaseServerManager.BaseServerManager.on_poll_timeout (   self)

function will call every time when ConnectionTimeout exception arrive

Definition at line 280 of file BaseServerManager.py.

280  def on_poll_timeout(self):
281  pass
282 
283 
Here is the caller graph for this function:

◆ on_unhandled_event()

def app.BaseServerManager.BaseServerManager.on_unhandled_event (   self,
  event 
)

function will call every time when arrive doesn't set handler for event type of event.evenType

Parameters
eventevent which can't be processed

Definition at line 288 of file BaseServerManager.py.

288  def on_unhandled_event(self, event):
289  logStr = "Got UNHANDLED EVENT\n" + self.createLogMsg(event)
290  logger.debug(logStr)
291 
292 
Here is the call graph for this function:
Here is the caller graph for this function:

◆ onAdminFetchStatData()

def app.BaseServerManager.BaseServerManager.onAdminFetchStatData (   self,
  event 
)

onAdminState event handler process admin command

Parameters
eventinstance of Event object

Definition at line 331 of file BaseServerManager.py.

331  def onAdminFetchStatData(self, event):
332  adminStatData = event.eventObj
333  if adminStatData.className == self.__class__.__name__:
334  adminStatData.fields = self.getStatDataFields(adminStatData.fields)
335  else:
336  err_msg = "Got wrong admin class name [" + adminStatData.className + "]"
337  try:
338  logger.error(err_msg + str(adminStatData.className))
339  except IOError as e:
340  del e
341 
342  responseEvent = self.eventBuilder.build(EVENT_TYPES.ADMIN_FETCH_STAT_DATA_RESPONSE, adminStatData)
343  self.reply(event, responseEvent)
344 
345 
346 
Here is the call graph for this function:

◆ onAdminGetConfigVars()

def app.BaseServerManager.BaseServerManager.onAdminGetConfigVars (   self,
  event 
)

onAdminGetConfigVars event handler process getConfigVars admin command, fill and return config vars array from internal storage

Parameters
eventinstance of Event object

Definition at line 420 of file BaseServerManager.py.

420  def onAdminGetConfigVars(self, event):
421  getConfigVars = event.eventObj
422  if getConfigVars.className == self.__class__.__name__:
423  if len(getConfigVars.fields) > 0 and "*" not in getConfigVars.fields:
424  for fieldName in getConfigVars.fields:
425  if fieldName in self.configVars:
426  getConfigVars.fields[fieldName] = self.configVars[fieldName]
427  else:
428  getConfigVars.fields[fieldName] = None
429  else:
430  getConfigVars.fields = self.configVars
431  else:
432  try:
433  logger.error("Wrong admin class name [" + str(getConfigVars.className) + "]")
434  except IOError as e:
435  del e
436 
437  responseEvent = self.eventBuilder.build(EVENT_TYPES.ADMIN_FETCH_STAT_DATA_RESPONSE, getConfigVars)
438  self.reply(event, responseEvent)
439 
440 
441 
Here is the call graph for this function:

◆ onAdminSetConfigVars()

def app.BaseServerManager.BaseServerManager.onAdminSetConfigVars (   self,
  event 
)

onAdminSetConfigVars event handler process setConfigVars admin command

Parameters
eventinstance of Event object

Definition at line 446 of file BaseServerManager.py.

446  def onAdminSetConfigVars(self, event):
447  setConfigVars = event.eventObj
448  responseEvent = self.eventBuilder.build(EVENT_TYPES.ADMIN_FETCH_STAT_DATA_RESPONSE,
449  self.setConfigVars(setConfigVars))
450  self.reply(event, responseEvent)
451 
452 
453 
Here is the call graph for this function:

◆ onAdminState()

def app.BaseServerManager.BaseServerManager.onAdminState (   self,
  event 
)

onAdminState event handler process admin SHUTDOWN command

Parameters
eventinstance of Event object

Definition at line 308 of file BaseServerManager.py.

308  def onAdminState(self, event):
309  adminState = event.eventObj
310  className = self.__class__.__name__
311  response = AdminState(className, AdminState.STATE_SHUTDOWN)
312  try:
313  if adminState.command == AdminState.STATE_SHUTDOWN and adminState.className == className:
314  logger.info("Has successfully shutdown!")
315  self.exit_flag = True
316  else:
317  logger.error("Got unsupported admin command [" + str(adminState.command) + "] for " + str(adminState.className))
318  response = AdminState(className, AdminState.STATE_ERROR)
319  except IOError as e:
320  del e
321 
322  responseEvent = self.eventBuilder.build(EVENT_TYPES.ADMIN_STATE_RESPONSE, response)
323  self.reply(event, responseEvent)
324 
325 
326 
Here is the call graph for this function:

◆ onAdminSuspend()

def app.BaseServerManager.BaseServerManager.onAdminSuspend (   self,
  event 
)

onAdminState event handler process admin command

Parameters
eventinstance of Event object

Definition at line 351 of file BaseServerManager.py.

351  def onAdminSuspend(self, event):
352  responseObj = GeneralResponse(GeneralResponse.ERROR_OK, (">>> Suspend Processed " + str(self.__class__.__name__)))
353 
354  try:
355  logger.debug(">>> SUSPEND BASE processed class=" + str(self.__class__.__name__))
356  except IOError as e:
357  del e
358 
359  responseEvent = self.eventBuilder.build(EVENT_TYPES.ADMIN_SUSPEND_RESPONSE, responseObj)
360  self.reply(event, responseEvent)
361 
362 
Here is the call graph for this function:

◆ poll()

def app.BaseServerManager.BaseServerManager.poll (   self)

poll function polling connections receive as multipart msg, the second argument is pickled pyobj

Definition at line 167 of file BaseServerManager.py.

167  def poll(self):
168  connect_names = dict()
169  timedout = False
170 
171  try:
172  if self.POLL_TIMEOUT_CONFIG_VAR_NAME in self.configVars and \
173  int(self.configVars[self.POLL_TIMEOUT_CONFIG_VAR_NAME]) > 0:
174  timeout = int(self.configVars[self.POLL_TIMEOUT_CONFIG_VAR_NAME])
175  else:
176  timeout = self.pollTimeout
177  #Try to poll all registered connections
178  connect_names = self.poller_manager.poll(timeout) # pylint: disable=R0204
179  except ConnectionTimeout:
180  timedout = True
181  except TransportInternalErr as err:
182  logger.error("ZMQ transport error: " + str(err.message))
183  except IOError as e:
184  del e
185  except Exception as err:
186  ExceptionLog.handler(logger, err, "Polling error:")
187 
188  if timedout is True:
189  try:
190  self.on_poll_timeout()
191  except IOError as e:
192  del e
193  except EnvironmentError as e:
194  del e
195  except Exception as err:
196  try:
197  ExceptionLog.handler(logger, err, "Call of on_poll_timeout() error:")
198  except IOError as e:
199  del e
200  else:
201  #Read data from sockets of connections list returned
202  for name in connect_names:
203  try:
204  if self.is_connection_registered(name):
205  event = self.connections[name].recv()
206  if isinstance(event, Response):
207  #process data from Connection
208  event = self.eventBuilder.build(EVENT_TYPES.SERVER_TCP_RAW, event)
209  event.connect_name = name
210  #Process received event
211  self.process(event)
212  else:
213  logger.error("Unregistered connection [" + str(name) + "] network transport event!")
214  except IOError as e:
215  del e
216  except EnvironmentError as e:
217  del e
218  except Exception as err:
219  ExceptionLog.handler(logger, err, "Event processing error:")
220 
221 
Here is the call graph for this function:
Here is the caller graph for this function:

◆ process()

def app.BaseServerManager.BaseServerManager.process (   self,
  event 
)

process event call the event handler method that was set by user or on_unhandled_event method if not set

Parameters
event

Definition at line 226 of file BaseServerManager.py.

226  def process(self, event):
227  try:
228  try:
229  logger.debug("Got " + self.createLogMsg(event))
230  except IOError as e:
231  del e
232 
233  self.updateStatField(event.connect_name + "_recv_cnt", 1)
234  self.updateStatField(event.connect_name + "_recv_bytes", sys.getsizeof(event))
235  if event.eventType in self.event_handlers:
236  self.event_handlers[event.eventType](event)
237  else:
238  self.on_unhandled_event(event)
239  except IOError as e:
240  del e
241  except EnvironmentError as e:
242  del e
243 
244 
Here is the call graph for this function:
Here is the caller graph for this function:

◆ processSpecialConfigVars()

def app.BaseServerManager.BaseServerManager.processSpecialConfigVars (   self,
  name,
  value 
)

send ready event to notify adminInterfaceService

Parameters
name
value

Definition at line 545 of file BaseServerManager.py.

545  def processSpecialConfigVars(self, name, value):
546  try:
547  if name == self.LOG_LEVEL_CONFIG_VAR_NAME:
548  #logger.setLevel(value)
549  self.setLogLevel(value)
550  except IOError as e:
551  del e
552  except Exception as err:
553  try:
554  ExceptionLog.handler(logger, err, "Exception:")
555  except IOError as e:
556  del e
557 
558 
559 
Here is the call graph for this function:
Here is the caller graph for this function:

◆ reply()

def app.BaseServerManager.BaseServerManager.reply (   self,
  event,
  reply_event 
)

wrapper for sending event in reply for event

Parameters
eventreason event
reply_evenrevent sent in reply

Definition at line 157 of file BaseServerManager.py.

157  def reply(self, event, reply_event):
158  reply_event.uid = event.uid
159  reply_event.connect_identity = event.connect_identity
160  reply_event.cookie = event.cookie
161  self.send(event.connect_name, reply_event)
162 
163 
Here is the call graph for this function:
Here is the caller graph for this function:

◆ run()

def app.BaseServerManager.BaseServerManager.run (   self)

Definition at line 245 of file BaseServerManager.py.

245  def run(self):
246  while not self.exit_flag:
247  try:
248  self.build_poller_list()
249  self.poll()
250  self.clear_poller()
251  except IOError as e:
252  del e
253  except Exception, e:
254  try:
255  logger.error("Unhandled exception in thread-based class : " + str(e.message) + "\n" + \
256  Utils.getTracebackInfo())
257  if self.exceptionForward:
258  logger.error("Exception forwarded.")
259  raise e
260  except IOError as e:
261  del e
262 
263  self.saveStatVarsDump()
264 
265 
266 
Here is the call graph for this function:

◆ saveStatVarsDump()

def app.BaseServerManager.BaseServerManager.saveStatVarsDump (   self)

Save stat vars in json file.

Definition at line 592 of file BaseServerManager.py.

592  def saveStatVarsDump(self):
593  if self.dumpStatVars:
594  try:
595  name = self.getStatVarsDumpFileName()
596  with open(name, "w") as f:
597  f.write(json.dumps(self.statFields, indent=4))
598  except Exception as err:
599  try:
600  ExceptionLog.handler(logger, err, "Error save stat vars to file `" + name + "`: ")
601  except IOError as e:
602  del e
603 
604 
605 
Here is the call graph for this function:
Here is the caller graph for this function:

◆ send()

def app.BaseServerManager.BaseServerManager.send (   self,
  connect_name,
  event 
)

send event

Parameters
connect_nameof of a connection to which event will be send
eventsending event

Definition at line 134 of file BaseServerManager.py.

134  def send(self, connect_name, event):
135  try:
136  logger.debug("Send to " + str(connect_name) + "\n" + self.createLogMsg(event))
137  if self.is_connection_registered(connect_name):
138  self.connections[connect_name].send(event)
139  self.updateStatField(connect_name + "_send_cnt", 1)
140  self.updateStatField(connect_name + "_send_bytes", sys.getsizeof(event))
141  else:
142  logger.error("Unregistered connection [" + str(connect_name) + "] network transport event!")
143  except IOError as e:
144  del e
145  except EnvironmentError as e:
146  del e
147  except Exception, err:
148  logger.error("Error `%s`", str(err))
149  except: # pylint: disable=W0702
150  pass
151 
152 
Here is the call graph for this function:
Here is the caller graph for this function:

◆ sendAdminReadyEvent()

def app.BaseServerManager.BaseServerManager.sendAdminReadyEvent (   self)

send ready event to notify adminInterfaceService

Definition at line 481 of file BaseServerManager.py.

481  def sendAdminReadyEvent(self):
482  className = self.__class__.__name__
483  ready = AdminState(className, AdminState.STATE_READY)
484  readyEvent = self.eventBuilder.build(EVENT_TYPES.ADMIN_STATE_RESPONSE, ready)
485  self.send(self.ADMIN_CONNECT_CLIENT, readyEvent)
486 
487 
488 
Here is the call graph for this function:

◆ setConfigVars()

def app.BaseServerManager.BaseServerManager.setConfigVars (   self,
  setConfigVars 
)

processSetConfigVars sets config vars in storage

Parameters
setConfigVarsinstance of SetConfigVars object

Definition at line 458 of file BaseServerManager.py.

458  def setConfigVars(self, setConfigVars):
459  if setConfigVars.className == self.__class__.__name__:
460  for fieldName in setConfigVars.fields:
461  if fieldName in self.configVars:
462  if type(self.configVars[fieldName]) == type(setConfigVars.fields[fieldName]): # pylint: disable=C0123
463  self.configVars[fieldName] = setConfigVars.fields[fieldName]
464  self.processSpecialConfigVars(fieldName, setConfigVars.fields[fieldName])
465  else:
466  setConfigVars.fields[fieldName] = None
467  else:
468  self.configVars[fieldName] = setConfigVars.fields[fieldName]
469  else:
470  try:
471  logger.error("Wrong admin class name [" + str(setConfigVars.className) + "]")
472  except IOError as e:
473  del e
474 
475  return setConfigVars
476 
477 
478 
Here is the call graph for this function:
Here is the caller graph for this function:

◆ setEventHandler()

def app.BaseServerManager.BaseServerManager.setEventHandler (   self,
  eventType,
  handler 
)

set event handler rewrite the current handler for eventType

Parameters
eventTypetype of processed events
handlerhandler to process events of eventType type

Definition at line 126 of file BaseServerManager.py.

126  def setEventHandler(self, eventType, handler):
127  self.event_handlers[eventType] = handler
128 
129 

◆ setLogLevel()

def app.BaseServerManager.BaseServerManager.setLogLevel (   self,
  level 
)

Set log level for all loggers.

Parameters
levelof logging
Returns
log level

Definition at line 581 of file BaseServerManager.py.

581  def setLogLevel(self, level):
582  for name in logging.Logger.manager.loggerDict.keys():
583  if isinstance(logging.Logger.manager.loggerDict[name], logging.Logger) and name in self.LOGGERS_NAMES:
584  logging.Logger.manager.loggerDict[name].setLevel(level)
585  ll = logging.getLogger("")
586  ll.setLevel(level)
587 
588 
589 
Here is the caller graph for this function:

◆ updateStatField()

def app.BaseServerManager.BaseServerManager.updateStatField (   self,
  field_name,
  value,
  operation = STAT_FIELDS_OPERATION_ADD 
)

update values of stat field - default sum

Parameters
field_namename of updated field
valuevalue to summarize

Definition at line 522 of file BaseServerManager.py.

522  def updateStatField(self, field_name, value, operation=STAT_FIELDS_OPERATION_ADD):
523  if field_name in self.statFields:
524  if operation == self.STAT_FIELDS_OPERATION_ADD:
525  self.statFields[field_name] += int(value)
526  elif operation == self.STAT_FIELDS_OPERATION_SUB:
527  self.statFields[field_name] -= int(value)
528  elif operation == self.STAT_FIELDS_OPERATION_SET:
529  self.statFields[field_name] = value
530  else:
531  if operation == self.STAT_FIELDS_OPERATION_SET or operation == self.STAT_FIELDS_OPERATION_INIT:
532  self.statFields[field_name] = value
533  else:
534  try:
535  logger.error("Stat update: key is not valid " + field_name)
536  except IOError as e:
537  del e
538 
539 
540 
Here is the caller graph for this function:

Member Data Documentation

◆ ADMIN_CONNECT_CLIENT

string app.BaseServerManager.BaseServerManager.ADMIN_CONNECT_CLIENT = "Admin"
static

Definition at line 40 of file BaseServerManager.py.

◆ ADMIN_CONNECT_ENDPOINT

string app.BaseServerManager.BaseServerManager.ADMIN_CONNECT_ENDPOINT = "Admin"
static

Definition at line 39 of file BaseServerManager.py.

◆ configVars

app.BaseServerManager.BaseServerManager.configVars

Definition at line 87 of file BaseServerManager.py.

◆ connections

app.BaseServerManager.BaseServerManager.connections

Definition at line 77 of file BaseServerManager.py.

◆ dumpStatVars

app.BaseServerManager.BaseServerManager.dumpStatVars

Definition at line 64 of file BaseServerManager.py.

◆ event_handlers

app.BaseServerManager.BaseServerManager.event_handlers

Definition at line 79 of file BaseServerManager.py.

◆ eventBuilder

app.BaseServerManager.BaseServerManager.eventBuilder

Definition at line 71 of file BaseServerManager.py.

◆ exceptionForward

app.BaseServerManager.BaseServerManager.exceptionForward

Definition at line 106 of file BaseServerManager.py.

◆ exit_flag

app.BaseServerManager.BaseServerManager.exit_flag

Definition at line 73 of file BaseServerManager.py.

◆ LOG_LEVEL_CONFIG_VAR_NAME

string app.BaseServerManager.BaseServerManager.LOG_LEVEL_CONFIG_VAR_NAME = "LOG_LEVEL"
static

Definition at line 49 of file BaseServerManager.py.

◆ LOGGERS_NAMES

dictionary app.BaseServerManager.BaseServerManager.LOGGERS_NAMES = {APP_CONSTS.LOGGER_NAME, "dc", "dtm", "root", ""}
static

Definition at line 54 of file BaseServerManager.py.

◆ POLL_TIMEOUT_CONFIG_VAR_NAME

string app.BaseServerManager.BaseServerManager.POLL_TIMEOUT_CONFIG_VAR_NAME = "POLL_TIMEOUT"
static

Definition at line 48 of file BaseServerManager.py.

◆ POLL_TIMEOUT_DEFAULT

int app.BaseServerManager.BaseServerManager.POLL_TIMEOUT_DEFAULT = 3000
static

Definition at line 41 of file BaseServerManager.py.

◆ poller_manager

app.BaseServerManager.BaseServerManager.poller_manager

Definition at line 67 of file BaseServerManager.py.

◆ pollTimeout

app.BaseServerManager.BaseServerManager.pollTimeout

Definition at line 74 of file BaseServerManager.py.

◆ STAT_DUMPS_DEFAULT_DIR

string app.BaseServerManager.BaseServerManager.STAT_DUMPS_DEFAULT_DIR = "/tmp/"
static

Definition at line 51 of file BaseServerManager.py.

◆ STAT_DUMPS_DEFAULT_NAME

string app.BaseServerManager.BaseServerManager.STAT_DUMPS_DEFAULT_NAME = "%APP_NAME%_%CLASS_NAME%_stat_vars.dump"
static

Definition at line 52 of file BaseServerManager.py.

◆ STAT_FIELDS_OPERATION_ADD

int app.BaseServerManager.BaseServerManager.STAT_FIELDS_OPERATION_ADD = 0
static

Definition at line 43 of file BaseServerManager.py.

◆ STAT_FIELDS_OPERATION_INIT

int app.BaseServerManager.BaseServerManager.STAT_FIELDS_OPERATION_INIT = 3
static

Definition at line 46 of file BaseServerManager.py.

◆ STAT_FIELDS_OPERATION_SET

int app.BaseServerManager.BaseServerManager.STAT_FIELDS_OPERATION_SET = 2
static

Definition at line 45 of file BaseServerManager.py.

◆ STAT_FIELDS_OPERATION_SUB

int app.BaseServerManager.BaseServerManager.STAT_FIELDS_OPERATION_SUB = 1
static

Definition at line 44 of file BaseServerManager.py.

◆ statFields

app.BaseServerManager.BaseServerManager.statFields

stat fields container

Definition at line 83 of file BaseServerManager.py.


The documentation for this class was generated from the following file: