| Trees | Indices | Help |
|
|---|
|
|
1 ###########################################################################
2 #
3 # This program is part of Zenoss Core, an open source monitoring platform.
4 # Copyright (C) 2007, 2008 Zenoss Inc.
5 #
6 # This program is free software; you can redistribute it and/or modify it
7 # under the terms of the GNU General Public License version 2 as published by
8 # the Free Software Foundation.
9 #
10 # For complete information please visit: http://www.zenoss.com/oss/
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
35 global MyName
36 if not MyName:
37 MyName = BaseName.split('.')[0]
38 try:
39 os.mkdir(zenPath('var', _myname()))
40 except os.error:
41 pass
42 return MyName
43
46
48
50
52 BaseClient.__init__(self, device, datacollector)
53 self.device = device
54 self.host = device.id
55 self._wmi = None
56 if socket.getfqdn().lower() == device.id.lower():
57 self.host = "."
58 device.zWinUser = device.zWinPassword = ""
59 elif device.manageIp is not None:
60 self.host = device.manageIp
61 self.name = device.id
62 self.user = device.zWinUser
63 self.passwd = device.zWinPassword
64 self.datacollector = datacollector
65 self.plugins = plugins
66 self.results = []
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
84
85
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
114 def inner(driver):
115 try:
116 yield self.connect()
117 driver.next()
118 for plugin in self.plugins:
119 pluginName = plugin.name()
120 log.debug("Sending queries for plugin: %s", pluginName)
121 log.debug("Queries: %s" % str(plugin.queries().values()))
122 try:
123 yield self.query(plugin.queries())
124 self.results.append((plugin, driver.next()))
125 except Exception, ex:
126 self.results.append((plugin, ex))
127 self.close()
128 except Exception, ex:
129 self.close()
130 raise
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
143
| Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0beta1 on Thu May 7 11:46:45 2009 | http://epydoc.sourceforge.net |