parallele Suchanfragen auf LDAP-Server

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Gast

parallele Suchanfragen auf LDAP-Server

Beitragvon Gast » Montag 17. Oktober 2005, 14:51

Hallo,

ich möchte mir ein kleines Tool programmieren, mit dem ich Aussagen über die Performance eines OpenLDAP-Servers machen kann. Das Tool soll ein bestimmte Anzahl Clients (>1) simulieren, die parallel eine große Anzahl Suchanfragen losschicken.

bisheriger Quellcode:

Code: Alles auswählen

import ldap
import random
import time

try:
   #number of clients which are connected to the server
   number_of_clients = 2
   # Pass in a valid username and password to get
   # privileged directory access.
   # If you leave them as empty strings or pass an invalid value
   username = "cn=admin,o=vodafone"
   password = "DaVD_2AT"
   l= []
   for i in range(number_of_clients):
      l.append(ldap.open("10.1.56.200"))
   for item in l:
      # you should  set this to ldap.VERSION2 if you're using a v2 directory
      item.protocol_version = ldap.VERSION2
      # you will still bind to the server but with limited privileges.
      item.simple_bind_s(username, password)

   # Any errors will throw an ldap.LDAPError exception
   # or related exception so you can ignore the result

except ldap.LDAPError, e:
   print e
   # handle error however you like

   ## The next lines will also need to be changed to support your search requirements and directory
try:
   for item in l:
      #number of parallel searches
      number_of_searches = 3
      average = 0
      result_list = []
      for counter in range(number_of_searches):
         # search for randomly chosen subscribers
         vfsid_list = ["vfsid=491731000001", "vfsid=491731000002", "vfsid=491731000003", "vfsid=491731000005", "vfsid=491731000009"]
         x = random.choice(vfsid_list)
         result_list.append(item.search("o=vodafone", ldap.SCOPE_SUBTREE, x, None))
      for y in result_list:
         startzeit = time.time()
         result_set = []
         while 1:
            result_type, result_data = item.result(y, 0)
            if (result_data == []):
               break
            else:
               ## here you don't have to append to a list
               ## you could do whatever you want with the individual entry
               ## The appending to list is just for illustration.
               if result_type == ldap.RES_SEARCH_ENTRY:
                  result_set.append(result_data)
         print result_set

         if result_list.index(y) == 0:
            endzeit = time.time() - startzeit - 1
         else:
            endzeit = time.time() - startzeit

         print "\tLaufzeit =", endzeit, "\n"
         average = endzeit + average

except ldap.LDAPError, e:
   print e

try:
   for item in l:
      item.unbind_s()

   sum = average / (number_of_clients*number_of_searches)
   print "\n\nAverage = ", sum

except ldap.LDAPError, e:
   print e


Was muss ich machen, damit die Suchanfragen parallel gestartet werden?

Edit (Leonidas): Code in Python-Tags gesetzt.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Montag 17. Oktober 2005, 15:10

Es gibt diesen "multithreaded portscanner": http://aspn.activestate.com/ASPN/Cookbo ... ipe/286240

Der im Prinzip eine ähnliche "Aufgabe" erfüllt...

(Du solltest den Code in [python]...[/python] Tags einfügen!!!)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Gast

Beitragvon Gast » Montag 17. Oktober 2005, 15:14

Danke für den Link. Werde ich mir gleich mal anschauen.

Leider hatte ich mich vergessen einzuloggen und konnte im Nachhinein den Eintrag nicht mehr editieren.
Aber das mit den [.python]...[./python] Tags ist gemerkt

Gruß
Toni

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder