def collect(self, config): log.debug('{0}:Start Collection of IIS Sites'.format(config.id)) ds0 = config.datasources[0] conn_info = createConnectionInfo(ds0) wql_iis6 = 'select name, ServerAutoStart from IIsWebServerSetting'.format( ds0.params['statusname']) wql_iis7 = 'select name, ServerAutoStart from Site'.format( ds0.params['statusname']) winrm = EnumerateClient(conn_info) queries = { create_enum_info(wql=wql_iis6, resource_uri=RESOURCE_URI_IIS6): 'iis6', create_enum_info(wql=wql_iis7, resource_uri=RESOURCE_URI_IIS7): 'iis7' } query_results = yield winrm.do_collect(queries.iterkeys()) winrm_results = {} for info, data in query_results.iteritems(): winrm_results[queries[info]] = data log.debug(queries) winrs = IISCommander(conn_info) winrs_results = yield winrs.get_app_pool_status() defer.returnValue((winrm_results, winrs_results))
def collect(self, config): log.debug('{0}:Start Collection of Services'.format(config.id)) WinRMQueries = [ create_enum_info( 'select name, state, status, displayname from Win32_Service') ] conn_info = createConnectionInfo(config.datasources[0]) winrm = EnumerateClient(conn_info) results = yield winrm.do_collect(WinRMQueries) defer.returnValue(results)
def collect(self, config): ds0 = config.datasources[0] log.debug('{0}:Start WinRM connection test.'.format(config.id)) conn_info = createConnectionInfo(ds0) WinRMQueries = [ create_enum_info('select * from Win32_OperatingSystem') ] winrm = EnumerateClient(conn_info) results = yield winrm.do_collect(WinRMQueries) defer.returnValue(results)
def collect(self, config): ds0 = config.datasources[0] log.debug('{0}:Start WinRM connection test.'.format(config.id)) conn_info = createConnectionInfo(ds0) WinRMQueries = [ create_enum_info( 'select * from Win32_OperatingSystem' ) ] winrm = EnumerateClient(conn_info) results = yield winrm.do_collect(WinRMQueries) defer.returnValue(results)
def collect(self, config): log.debug('{0}:Start Collection of Services'.format(config.id)) WinRMQueries = [ create_enum_info( 'select name, state, status, displayname from Win32_Service' ) ] conn_info = createConnectionInfo(config.datasources[0]) winrm = EnumerateClient(conn_info) try: results = yield winrm.do_collect(WinRMQueries) except Exception as e: if 'referenced context has expired' in e.message: results = yield winrm.do_collect(WinRMQueries) else: raise defer.returnValue(results)
def collect(self, config): conn_info = createConnectionInfo(config.datasources[0]) client = EnumerateClient(conn_info) # Always query Win32_Process. This is where we get process # status and count. queries = [ 'SELECT Name, ExecutablePath, CommandLine, ProcessId ' 'FROM Win32_Process', ] # Query only for the superset of attributes needed to satisfy # the configured datapoints across all processes. perf_attrs = {p.id for s in config.datasources for p in s.points} if COUNT_DATAPOINT in perf_attrs: perf_attrs.remove(COUNT_DATAPOINT) # Remove invalid attributes from what we ask for. Warn the user. invalid_datapoints = perf_attrs.difference(VALID_DATAPOINTS) if invalid_datapoints: LOG.warn( "Removing invalid datapoints for %s: %s", config.id, ', '.join(invalid_datapoints)) perf_attrs.difference_update(invalid_datapoints) # Only query Win32_PerfFormattedData_PerfProc_Process if its # necessary to satisfy the configured datapoints. if perf_attrs: queries.append( 'SELECT IDProcess, {} ' 'FROM Win32_PerfFormattedData_PerfProc_Process'.format( ', '.join(perf_attrs))) results = yield client.do_collect( map(txwinrm.collect.create_enum_info, queries)) returnValue(results)
def collect(self, config): conn_info = createConnectionInfo(config.datasources[0]) client = EnumerateClient(conn_info) # Always query Win32_Process. This is where we get process # status and count. queries = [ 'SELECT Name, ExecutablePath, CommandLine, ProcessId ' 'FROM Win32_Process', ] # Query only for the superset of attributes needed to satisfy # the configured datapoints across all processes. perf_attrs = {p.id for s in config.datasources for p in s.points} if COUNT_DATAPOINT in perf_attrs: perf_attrs.remove(COUNT_DATAPOINT) # Remove invalid attributes from what we ask for. Warn the user. invalid_datapoints = perf_attrs.difference(VALID_DATAPOINTS) if invalid_datapoints: LOG.warn("Removing invalid datapoints for %s: %s", config.id, ', '.join(invalid_datapoints)) perf_attrs.difference_update(invalid_datapoints) # Only query Win32_PerfFormattedData_PerfProc_Process if its # necessary to satisfy the configured datapoints. if perf_attrs: queries.append( 'SELECT IDProcess, {} ' 'FROM Win32_PerfFormattedData_PerfProc_Process'.format( ', '.join(perf_attrs))) results = yield client.do_collect( map(txwinrm.collect.create_enum_info, queries)) returnValue(results)
def run_query(self, conn_info, wql, log): self.winrm = EnumerateClient(conn_info) wql = create_enum_info(wql=wql, resource_uri=self.uri) result = yield self.winrm.do_collect([wql]) defer.returnValue(result)
class IIS(WinRMPlugin): compname = 'os' relname = 'winrmiis' modname = 'ZenPacks.zenoss.Microsoft.Windows.WinIIS' winrm = None uri = 'http://schemas.microsoft.com/wbem/wsman/1/wmi/root/webadministration/*' queries = { 'IIsWebServerSetting': { 'query': "SELECT * FROM IIsWebServerSetting", 'namespace': 'microsoftiisv2', }, 'IIsWebVirtualDirSetting': { 'query': "SELECT * FROM IIsWebVirtualDirSetting", 'namespace': 'microsoftiisv2', }, 'IIs7Site': { 'query': "SELECT Name, Id, ServerAutoStart FROM Site", 'namespace': 'WebAdministration', }, } iis_version = None powershell_commands = { "version": "$iisversion = get-itemproperty HKLM:\SOFTWARE\Microsoft\InetStp\ | select versionstring;" "Write-Host $iisversion.versionstring;" } @defer.inlineCallbacks def run_query(self, conn_info, wql, log): self.winrm = EnumerateClient(conn_info) wql = create_enum_info(wql=wql, resource_uri=self.uri) result = yield self.winrm.do_collect([wql]) defer.returnValue(result) @defer.inlineCallbacks def collect(self, device, log): orig = WinRMPlugin() orig.queries = self.queries orig.powershell_commands = self.powershell_commands conn_info = self.conn_info(device) def send_event(msg, severity, summary=None): self._send_event(msg, device.id, severity, eventClass='/Status/Winrm', key='IISSites', summary=summary) output = yield orig.collect(device, log) if hasattr(orig, 'error_occurred'): send_event(orig.error_occurred, ZenEventClasses.Error) defer.returnValue(None) else: msg = 'Collection completed for {}'.format(device.id) send_event(msg, ZenEventClasses.Clear) version_results = output.get('version') if version_results and version_results.stdout: # version should be in 'Version x.x' format # 7 and above use the same namespace/query try: self.iis_version = re.match('Version (\d\.*\d*).*', version_results.stdout[0]).group(1) except (IndexError, AttributeError): if version_results.stdout: log.debug("Malformed version information on {}: {}".format( device.id, version_results.stdout[0])) if version_results.stderr: log.debug("Error retrieving IIS version on {}: {}".format( device.id, version_results.stderr)) IIs7Sites = output.get('IIs7Site', ()) if not self.iis_version: if IIs7Sites: self.iis_version = '7' else: self.iis_version = '6' for iisSite in IIs7Sites: name = iisSite.Name query = 'ASSOCIATORS OF {Site.Name="%s"} WHERE ResultClass=Application' % name result = yield self.run_query(conn_info, query, log) try: apps = result.values()[0][0] pool = apps.ApplicationPool except IndexError: pool = 'Unknown' iisSite.ApplicationPool = pool if not output.get('IIs7Site') and not output.get( 'IIsWebServerSetting'): msg = 'No IIS sites found on {}. Ensure that IIS Management Scripts'\ ' and Tools have been installed.'.format(device.id) log.warn(msg) send_event(msg, ZenEventClasses.Warning, summary=msg) else: msg = "Found IIS sites on {}.".format(device.id) send_event(msg, ZenEventClasses.Clear) defer.returnValue(output) @save def process(self, device, results, log): log.info("Modeler %s processing data for device %s", self.name(), device.id) device_om = ObjectMap() device_om.is_iis = False maps = [device_om] rm = self.relMap() if results.get('IIsWebServerSetting'): device_om.is_iis = True for iisSite in results.get('IIsWebServerSetting', ()): om = self.objectMap() om.id = self.prepId(iisSite.Name) if float(self.iis_version) == 6: om.statusname = iisSite.Name else: om.statusname = iisSite.ServerComment om.title = iisSite.ServerComment om.iis_version = self.iis_version om.sitename = iisSite.ServerComment # Default Web Site if hasattr( iisSite, 'AppPoolId'): # ZPS-5407 Can't get DefaultAppPool name om.apppool = iisSite.AppPoolId elif hasattr(iisSite, 'ApplicationPool' ): # ZPS-5407 Can't get DefaultAppPool name om.apppool = iisSite.ApplicationPool for iisVirt in results.get('IIsWebVirtualDirSetting', ()): if (iisVirt.Name == iisSite.Name + "/ROOT") or (iisVirt.Name == iisSite.Name + "/root"): if iisVirt.AppPoolId is not None and iisVirt.AppPoolId != 'None': # ZPS-5407 Can't get DefaultAppPool name om.apppool = iisVirt.AppPoolId rm.append(om) elif results.get('IIs7Site', False): device_om.is_iis = True for iisSite in results.get('IIs7Site', ()): try: om = self.objectMap() om.id = self.prepId(iisSite.Id) om.title = om.statusname = om.sitename = iisSite.Name om.iis_version = self.iis_version om.apppool = iisSite.ApplicationPool rm.append(om) except AttributeError: pass maps.append(rm) return maps
class IIS(WinRMPlugin): compname = 'os' relname = 'winrmiis' modname = 'ZenPacks.zenoss.Microsoft.Windows.WinIIS' winrm = None uri = 'http://schemas.microsoft.com/wbem/wsman/1/wmi/root/webadministration/*' queries = { 'IIsWebServerSetting': { 'query': "SELECT * FROM IIsWebServerSetting", 'namespace': 'microsoftiisv2', }, 'IIsWebVirtualDirSetting': { 'query': "SELECT * FROM IIsWebVirtualDirSetting", 'namespace': 'microsoftiisv2', }, 'IIs7Site': { 'query': "SELECT Name, Id, ServerAutoStart FROM Site", 'namespace': 'WebAdministration', }, } iis_version = None powershell_commands = {"version": "$iisversion = get-itemproperty HKLM:\SOFTWARE\Microsoft\InetStp\ | select versionstring;" "Write-Host $iisversion.versionstring;"} @defer.inlineCallbacks def run_query(self, conn_info, wql, log): self.winrm = EnumerateClient(conn_info) wql = create_enum_info(wql=wql, resource_uri=self.uri) result = yield self.winrm.do_collect([wql]) defer.returnValue(result) @defer.inlineCallbacks def collect(self, device, log): orig = WinRMPlugin() orig.queries = self.queries orig.powershell_commands = self.powershell_commands conn_info = self.conn_info(device) def send_event(msg, severity, summary=None): self._send_event(msg, device.id, severity, eventClass='/Status/Winrm', key='IISSites', summary=summary) output = yield orig.collect(device, log) if hasattr(orig, 'error_occurred'): send_event(orig.error_occurred, ZenEventClasses.Error) defer.returnValue(None) else: msg = 'Collection completed for {}'.format(device.id) send_event(msg, ZenEventClasses.Clear) version_results = output.get('version') if version_results and version_results.stdout: # version should be in 'Version x.x' format # 7 and above use the same namespace/query try: self.iis_version = re.match('Version (\d\.*\d*).*', version_results.stdout[0]).group(1) except (IndexError, AttributeError): if version_results.stdout: log.debug("Malformed version information on {}: {}".format(device.id, version_results.stdout[0])) if version_results.stderr: log.debug("Error retrieving IIS version on {}: {}".format(device.id, version_results.stderr)) IIs7Sites = output.get('IIs7Site', ()) if not self.iis_version: if IIs7Sites: self.iis_version = '7' else: self.iis_version = '6' for iisSite in IIs7Sites: name = iisSite.Name query = 'ASSOCIATORS OF {Site.Name="%s"} WHERE ResultClass=Application' % name result = yield self.run_query(conn_info, query, log) try: apps = result.values()[0][0] pool = apps.ApplicationPool except IndexError: pool = 'Unknown' iisSite.ApplicationPool = pool if not output.get('IIs7Site') and not output.get('IIsWebServerSetting'): msg = 'No IIS sites found on {}. Ensure that IIS Management Scripts'\ ' and Tools have been installed.'.format(device.id) log.warn(msg) send_event(msg, ZenEventClasses.Warning, summary=msg) else: msg = "Found IIS sites on {}.".format(device.id) send_event(msg, ZenEventClasses.Clear) defer.returnValue(output) @save def process(self, device, results, log): log.info( "Modeler %s processing data for device %s", self.name(), device.id) device_om = ObjectMap() device_om.is_iis = False maps = [device_om] rm = self.relMap() if results.get('IIsWebServerSetting'): device_om.is_iis = True for iisSite in results.get('IIsWebServerSetting', ()): om = self.objectMap() om.id = self.prepId(iisSite.Name) if float(self.iis_version) == 6: om.statusname = iisSite.Name else: om.statusname = iisSite.ServerComment om.title = iisSite.ServerComment om.iis_version = self.iis_version om.sitename = iisSite.ServerComment # Default Web Site if hasattr(iisSite, 'AppPoolId'): # ZPS-5407 Can't get DefaultAppPool name om.apppool = iisSite.AppPoolId elif hasattr(iisSite, 'ApplicationPool'): # ZPS-5407 Can't get DefaultAppPool name om.apppool = iisSite.ApplicationPool for iisVirt in results.get('IIsWebVirtualDirSetting', ()): if (iisVirt.Name == iisSite.Name + "/ROOT") or (iisVirt.Name == iisSite.Name + "/root"): if iisVirt.AppPoolId is not None and iisVirt.AppPoolId != 'None': # ZPS-5407 Can't get DefaultAppPool name om.apppool = iisVirt.AppPoolId rm.append(om) elif results.get('IIs7Site', False): device_om.is_iis = True for iisSite in results.get('IIs7Site', ()): try: om = self.objectMap() om.id = self.prepId(iisSite.Id) om.title = om.statusname = om.sitename = iisSite.Name om.iis_version = self.iis_version om.apppool = iisSite.ApplicationPool rm.append(om) except AttributeError: pass maps.append(rm) return maps
def client(self, conn_info=None): """Return an EnumerateClient if conn_info exists """ if not conn_info: return txwinrm.collect.WinrmCollectClient() return EnumerateClient(conn_info)