Speicherproblem mit NTEventLog über pyWin32

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
limepix
User
Beiträge: 37
Registriert: Dienstag 11. November 2008, 16:54

Folgendes Problem:

Versucht mal auf einem Rechner (bevorzugt ein Server), auf dem das Ereignisprotokoll schon ein paar ( > 200.000 ) Einträge hat, folgenden Code auszuführen:

Code: Alles auswählen

def sysLogCheck(last):
    """
        
    The param last is an indicator when the scripts was previously
    executed. Format: 20090114092323 as int (That´s the format from 
    the winnt-syslog)    
    """
        
    c = wmi.WMI()
    first = False
    newest = last
    
    errorIDs = (2048, #Device failed
                2049, #Array disk removed
                2054, #Virtual disk deleted
                2056  #Virtual disk failed
                )
    
    warningIDs = (2108, #SMART warning
                  2110, #SMART warning degraded
                  2123, #Redundancy lost
                  1354, #Power supply detected a failure
                  1306  #Redundancy lost(Power supply)
                  )
    
    errorLogs = []
    warnLogs = []
    
    for log in c.Win32_NTLogEvent (Logfile="System"):        
        if int(log.TimeWritten[0:14]) < int(last):
            break
            
        if first == False:
            newest = log.TimeWritten[0:14]
            first = True
            
        if int(log.EventCode) in errorIDs:
            errorLogs.append((log.Message, log.TimeWritten[0:14]))
        
        if int(log.EventCode) in warningIDs:
            warnLogs.append((log.Message, log.TimeWritten[0:14]))
Dem Parameter gebt ihr einfach mal den Wert 0, so dass alle Eventlogs von Anfang an ausgelesen werden.
Wenn ihr es jetzt schafft, den Rechner speichertechnisch NICHT völlig an die die Wand zu fahren (Speicherverbrauch bleibt zb unter 1GB), toitoi!!
Dann könnt ihr mir auch gleich Bescheid geben, wie ihr das macht (bitte :roll: ... )

Ich arbeite auf einem Win2k3 Server
python2.6
pywin32 extensions
und das tolle wmi dingens von dieser seite hier:
http://timgolden.me.uk/python/wmi.html

Ich freue mich über alle Anregungen, Vorschläge, Ideen und sonstiges!!

Bis denn

limepix
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Lass die WMI weg, die Eventlogs kann man direkt mit pywin32 auslesen. Ist in der Dokumentation beschrieben.
Benutzeravatar
limepix
User
Beiträge: 37
Registriert: Dienstag 11. November 2008, 16:54

@ querdenker - jo! wäre eine möglichkeit - hab ich erst zu spät entdeckt. danke!!

Falls es noch jemanden interessiert:
Was auch noch möglich ist (Ich weiß im Moment noch nicht genau wieso), man gibt als "Auswahl"-parameter einfach den EventCode mit an:

Code: Alles auswählen

...
    for log in c.Win32_NTLogEvent (Logfile="System", EventCode=123):
...
Auf die Art und Weise wird die Liste, die anscheinend intern aufgebaut wird, ebenfalls "klein" gehalten.
Antworten