[Erik Dahl] | I want to use the WMI Performance API to collect performance | information from remote boxes.
The WMI stuff needs a certain amount of -- imho -- mildly bizarre plumbing work. To save you the trouble, I've put together a WMI module which I know a few people are using. http://timgolden.me.uk/python/wmi.html There isn't actually an example of the performance counters on the cookbook page (have to do something about that) but my usual advice is: find an example from around the net -- there's loads of them -- and then translate that example into Python. I'm happy to help if there are any difficulties there. Possible places to start looking: http://www.activexperts.com/activmonitor/windowsmanagement/wmi/samples/p erformancecounters/ http://groups.google.com/group/microsoft.public.win32.programmer.wmi?lnk =lr I've just found a not-too-complex example I implemented here in the past. Entire code posted below (sorry for the length): <code> import os, sys import operator import time import smtpmail import wmi THRESHOLD = 30.0 BEST_OF = 3 SERVER = "voctx1" try: server = sys.argv[1] except IndexError: server = SERVER print "Looking on", server, "for processes running over", THRESHOLD, "% for more than", BEST_OF, "secs" c = wmi.WMI (wmi=wmi.connect_server (server=server, user=r"username", password="password")) ## c = wmi.WMI () session = smtpmail.smtp_session () process_info = {} while 1: items_shown = False for p in c.Win32_PerfRawData_PerfProc_Process (): id = long (p.IDProcess) n1, d1 = long (p.PercentProcessorTime), long (p.Timestamp_Sys100NS) n0, d0, so_far = process_info.get (id, (0, 0, [])) try: percent_processor_time = (float (n1 - n0) / float (d1 - d0)) * 100 except ZeroDivisionError: percent_processor_time = 0 if len (so_far) > BEST_OF: so_far.pop () so_far.append (percent_processor_time) process_info[id] = (n1, d1, so_far) average_processor_time = reduce (operator.add, so_far) / len (so_far) if (len (so_far) >= BEST_OF) and (average_processor_time > THRESHOLD): for process in c.Win32_Process (Handle=id): domain, return_value, user = process_owner = process.GetOwner () ## print domain, return_value, user alert_text = "%s running at %d on %s (%s)" % (p.Name, average_processor_time, server, user) smtpmail.send ( recipients=["goldent"], subject=alert_text, message_text = alert_text, session=session ) print str (id).ljust (6), p.Name.ljust (20), average_processor_time items_shown = True if items_shown: print time.sleep (1) </code> TJG ________________________________________________________________________ This e-mail has been scanned for all viruses by Star. The service is powered by MessageLabs. For more information on a proactive anti-virus service working around the clock, around the globe, visit: http://www.star.net.uk ________________________________________________________________________ _______________________________________________ Python-win32 mailing list Python-win32@python.org http://mail.python.org/mailman/listinfo/python-win32