1
2
3
4
5
6
7
8
9
10
11
12
13
14 from pysamba.twisted.reactor import eventContext
15 from pysamba.wbem.Query import Query
16 from pysamba.library import WError
17
18 from Products.ZenUtils.Utils import zenPath
19 from Products.ZenUtils.Driver import drive
20 from Products.DataCollector.BaseClient import BaseClient
21
22 from twisted.internet import defer
23
24 import os
25 import socket
26 import sys
27 import logging
28 log = logging.getLogger("zen.WMIClient")
29
30
31 BaseName = os.path.basename(sys.argv[0])
32 MyName = None
33
43
46
48
50
51 - def __init__(self, device, datacollector=None, plugins=[]):
67
68
70 log.debug("connect to %s, user %r", self.host, self.user)
71 if not self.user:
72 log.warning("Windows login name is unset: "
73 "please specify zWinUser and "
74 "zWinPassword zProperties before adding devices.")
75 raise BadCredentials("Username is empty")
76 self._wmi = Query()
77 creds = '%s%%%s' % (self.user, self.passwd)
78 return self._wmi.connect(eventContext, self.host, creds)
79
80
82 if self._wmi:
83 self._wmi.close()
84
85
86 - def query(self, queries):
87 def inner(driver):
88 try:
89 queryResult = {}
90 for tableName, query in queries.items():
91 query = query.replace ("\\", "\\\\")
92 yield self._wmi.query(query)
93 result = driver.next()
94 queryResult[tableName] = []
95 while 1:
96 yield result.fetchSome()
97 try:
98 more = driver.next()
99 except WError, ex:
100 msg = 'Received %s from query: %s'
101 log.error(msg % (ex.why(), query))
102 raise
103 if not more:
104 break
105 queryResult[tableName].extend(more)
106 yield defer.succeed(queryResult)
107 driver.next()
108 except Exception, ex:
109 log.debug("Exception collecting query: %s", str(ex))
110 raise
111 return drive(inner)
112
131 d = drive(inner)
132 def finish(result):
133 if self.datacollector:
134 self.datacollector.clientFinished(self)
135 d.addBoth(finish)
136 return d
137
138
140 """Return data for this client
141 """
142 return self.results
143