1 |
|
|
2 |
|
""" |
3 |
|
* ApMon - Application Monitoring Tool |
4 |
< |
* Version: 2.2.1 |
4 |
> |
* Version: 2.2.2 |
5 |
|
* |
6 |
|
* Copyright (C) 2006 California Institute of Technology |
7 |
|
* |
187 |
|
self.__udpSocket = None |
188 |
|
self.__configUpdateLock = threading.Lock() |
189 |
|
self.__configUpdateEvent = threading.Event() |
190 |
+ |
self.__configUpdateFinished = threading.Event() |
191 |
|
self.__bgMonitorLock = threading.Lock() |
192 |
|
self.__bgMonitorEvent = threading.Event() |
193 |
+ |
self.__bgMonitorFinished = threading.Event() |
194 |
|
# don't allow a user to send more than MAX_MSG messages per second, in average |
195 |
|
self.__crtTime = 0; |
196 |
|
self.__prvTime = 0; |
426 |
|
Stop background threands, close opened sockets. You have to use this function if you want to |
427 |
|
free all the resources that ApMon takes, and allow it to be garbage-collected. |
428 |
|
""" |
429 |
< |
if self.__configUpdateEvent != None: |
430 |
< |
self.__configUpdateEvent.set(); |
431 |
< |
if self.__bgMonitorEvent != None: |
432 |
< |
self.__bgMonitorEvent.set(); |
433 |
< |
time.sleep(0.01); |
429 |
> |
if len(self.configAddresses) > 0: |
430 |
> |
self.__configUpdateEvent.set() |
431 |
> |
self.__configUpdateFinished.wait() |
432 |
> |
self.__bgMonitorEvent.set() |
433 |
> |
self.__bgMonitorFinished.wait() |
434 |
> |
|
435 |
|
if self.__udpSocket != None: |
436 |
|
self.logger.log(Logger.DEBUG, "Closing UDP socket on ApMon object destroy."); |
437 |
|
self.__udpSocket.close(); |
450 |
|
while not self.__configUpdateEvent.isSet(): |
451 |
|
self.__configUpdateEvent.wait(self.configRecheckInterval); |
452 |
|
if self.__configUpdateEvent.isSet(): |
453 |
< |
return; |
453 |
> |
break |
454 |
|
if self.configRecheck: |
455 |
|
self.__reloadAddresses() |
456 |
|
self.logger.log(Logger.DEBUG, "Config reloaded. Seleeping for "+`self.configRecheckInterval`+" sec."); |
457 |
+ |
self.__configUpdateFinished.set(); |
458 |
|
|
459 |
|
def __reloadAddresses(self): |
460 |
|
""" |
600 |
|
|
601 |
|
def __bgMonitor (self): |
602 |
|
while not self.__bgMonitorEvent.isSet(): |
603 |
< |
self.__bgMonitorEvent.wait(10); |
603 |
> |
self.__bgMonitorEvent.wait(10) |
604 |
|
if self.__bgMonitorEvent.isSet(): |
605 |
< |
return; |
605 |
> |
break |
606 |
|
if self.performBgMonitoring: |
607 |
|
self.sendBgMonitoring() # send only if the interval has elapsed |
608 |
+ |
self.__bgMonitorFinished.set() |
609 |
|
|
610 |
|
############################################################################################### |
611 |
|
# Internal helper functions |
613 |
|
|
614 |
|
def __directSendParams (self, senderRef, destination, clusterName, nodeName, timeStamp, params): |
615 |
|
|
611 |
– |
if senderRef=={}: |
612 |
– |
self.logger.log(Logger.WARNING, "Not sending undefined parameters!"); |
613 |
– |
return; |
614 |
– |
|
616 |
|
if self.__shouldSend() == False: |
617 |
+ |
self.logger.log(Logger.DEBUG, "Dropping packet since rate is too fast!"); |
618 |
|
return; |
619 |
|
|
620 |
|
if destination == None: |
625 |
|
senderRef['SEQ_NR'] = (senderRef['SEQ_NR'] + 1) % 2000000000; # wrap around 2 mld |
626 |
|
|
627 |
|
xdrPacker = xdrlib.Packer (); |
628 |
< |
self.logger.log(Logger.DEBUG, "Building XDR packet for ["+str(clusterName)+"] <"+str(nodeName)+"> len:"+str(len(params))); |
628 |
> |
self.logger.log(Logger.DEBUG, "Building XDR packet for ["+str(clusterName)+"/"+str(nodeName)+"] <"+str(senderRef['SEQ_NR'])+"/"+str(senderRef['INSTANCE_ID'])+"> len:"+str(len(params))); |
629 |
|
|
630 |
|
xdrPacker.pack_string ("v:"+self.__version+"p:"+passwd) |
631 |
|
|
671 |
|
self.__packFunctions[typeValue] (xdrPacker, value) |
672 |
|
self.logger.log(Logger.DEBUG, "Adding parameter "+str(name)+" = "+str(value)); |
673 |
|
except Exception, ex: |
674 |
< |
print "ApMon: error packing %s = %s; got %s" % (name, str(value), ex) |
674 |
> |
self.logger.log(Logger.WARNING, "Error packing %s = %s; got %s" % (name, str(value), ex)) |
675 |
|
|
676 |
|
# Destructor |
677 |
|
def __del__(self): |
728 |
|
5: xdrlib.Packer.pack_double } |
729 |
|
|
730 |
|
__defaultPort = 8884 |
731 |
< |
__version = "2.2.1-py" # apMon version number |
731 |
> |
__version = "2.2.2-py" # apMon version number |
732 |
|
|