Changeset 3561 for monitoring


Ignore:
Timestamp:
09/12/13 18:29:31 (11 years ago)
Author:
sanmai
Message:
  • Use multiprocessing module to improve handling of privilege gain and loss in check_ldap().
File:
1 edited

Legend:

Unmodified
Added
Removed
  • monitoring/plugins/mpi/generic_tla_monitoring.py

    r3560 r3561  
    194194    Nagios_uid = pwd.getpwnam('nagios')[2]
    195195
    196     current_process_ID = os.fork()
    197 
    198     if current_process_ID == 0 :
    199         ## Child process code
    200        
     196    import multiprocessing
     197
     198    # def info(title):
     199    #     print title
     200    #     print 'module name:', __name__
     201    #     if hasattr(os, 'getppid'):  # only available on Unix
     202    #         print 'parent process:', os.getppid()
     203    #     print 'process id:', os.getpid()
     204
     205    def LDAP_query(OpenDJ_uid, command, LDAP_result_queue):
    201206        try :
    202207            os.setuid(OpenDJ_uid)
    203208        except OSError, e :
    204209            raise e
    205 
    206         process = subprocess.Popen(command,
    207                                    stdout = subprocess.PIPE,
    208                                    stderr = subprocess.PIPE)
    209 
    210         stdout, stderr = process.communicate()
    211 
    212         if process.returncode == 0 :
    213             result = { "code"      : "OK",
    214                        "message"   : 'Host %s is up and responds as expected to a query "%s" with base DN "%s".' % (host, query, base_DN)
    215                      }
    216210        else :
    217             result = { "code"      : "CRITICAL",
    218                        "message"   : 'Host %s is not up or does not respond as expected to a query "%s" with base DN "%s".' % (host, query, base_DN)
    219                      }
    220 
    221         os._exit(0)
     211          process = subprocess.Popen(command,
     212                                     stdout = subprocess.PIPE,
     213                                     stderr = subprocess.PIPE)
     214
     215          stdout, stderr = process.communicate()
     216         
     217          if process.returncode == 0 :
     218              LDAP_result_queue.put(True)
     219          else :
     220              LDAP_result_queue.put(False)
     221
     222
     223    LDAP_result_queue = multiprocessing.Queue()
     224    LDAP_query_process = multiprocessing.Process(target = LDAP_query, args = (OpenDJ_uid, command, LDAP_result_queue))
     225    LDAP_query_process.start()
     226    result = LDAP_result_queue.get()
     227    LDAP_query_process.join()
     228
     229
     230    if result == True:
     231        return { "code"      : "OK",
     232               "message"   : 'Host %s is up and responds as expected to a query "%s" with base DN "%s".' % (host, query, base_DN)
     233             }
     234    else :
     235        return { "code"      : "CRITICAL",
     236                   "message"   : 'Host %s is not up or does not respond as expected to a query "%s" with base DN "%s".' % (host, query, base_DN)
     237                 }
     238
     239    # current_process_ID = os.fork()
     240
     241    # if current_process_ID == 0 :
     242    #     ## Child process code
     243       
    222244     
    223     ## Parent process code. Wait for ldapsearch child process.
    224     os.waitpid(current_process_ID, 0)
     245
     246    #     os._exit(0)
     247     
     248    # ## Parent process code. Wait for ldapsearch child process.
     249    # os.waitpid(current_process_ID, 0)
    225250   
    226251    try :
Note: See TracChangeset for help on using the changeset viewer.