def test_collect_noUrl(self, time, socket): alert_meta = { 'name': 'alert1', 'label': 'label1', 'serviceName': 'service1', 'componentName': 'component1', 'uuid': '123', 'enabled': 'true' } alert_source_meta = {'default_port': 80} cluster = 'c1' host = 'host1' expected_state = 'CRITICAL' expected_text = 'Connection failed: Socket Timeout to host1:80' time.side_effect = [123, 5240, 567] alert = PortAlert(alert_meta, alert_source_meta, self.config) alert.set_cluster(cluster, host) def collector_side_effect(clus, data): self.assertEquals(data['name'], alert_meta['name']) self.assertEquals(data['label'], alert_meta['label']) self.assertEquals(data['service'], alert_meta['serviceName']) self.assertEquals(data['component'], alert_meta['componentName']) self.assertEquals(data['uuid'], alert_meta['uuid']) self.assertEquals(data['enabled'], alert_meta['enabled']) self.assertEquals(data['state'], expected_state) self.assertEquals(data['text'], expected_text) self.assertEquals(data['cluster'], cluster) self.assertEquals(clus, cluster) alert.collector = MagicMock() alert.collector.put = Mock(side_effect=collector_side_effect) alert.collect()
def __json_to_callable(self, clusterName, hostName, json_definition): """ converts the json that represents all aspects of a definition and makes an object that extends BaseAlert that is used for individual """ alert = None try: source = json_definition['source'] source_type = source.get('type', '') if logger.isEnabledFor(logging.DEBUG): logger.debug("[AlertScheduler] Creating job type {0} with {1}".format(source_type, str(json_definition))) if source_type == AlertSchedulerHandler.TYPE_METRIC: alert = MetricAlert(json_definition, source, self.config) elif source_type == AlertSchedulerHandler.TYPE_PORT: alert = PortAlert(json_definition, source) elif source_type == AlertSchedulerHandler.TYPE_SCRIPT: source['stacks_directory'] = self.stacks_dir source['common_services_directory'] = self.common_services_dir source['host_scripts_directory'] = self.host_scripts_dir alert = ScriptAlert(json_definition, source, self.config) elif source_type == AlertSchedulerHandler.TYPE_WEB: alert = WebAlert(json_definition, source, self.config) elif source_type == AlertSchedulerHandler.TYPE_RECOVERY: alert = RecoveryAlert(json_definition, source, self.recovery_manger) if alert is not None: alert.set_cluster(clusterName, hostName) except Exception,exception: logger.exception("[AlertScheduler] Unable to load an invalid alert definition. It will be skipped.")
def test_collect_defaultPort(self, time, socket): alert_meta = { 'name': 'alert1', 'label': 'label1', 'serviceName': 'service1', 'componentName': 'component1', 'uuid': '123', 'enabled': 'true' } alert_source_meta = {'uri': 'http://192.168.0.1', 'default_port': 80} cluster = 'c1' host = 'host1' expected_state = 'OK' expected_text = 'TCP OK - 0.2010 response on port 80' time.side_effect = [123, 324, 567] alert = PortAlert(alert_meta, alert_source_meta, self.config) alert.set_cluster(cluster, host) def collector_side_effect(clus, data): self.assertEquals(data['name'], alert_meta['name']) self.assertEquals(data['label'], alert_meta['label']) self.assertEquals(data['service'], alert_meta['serviceName']) self.assertEquals(data['component'], alert_meta['componentName']) self.assertEquals(data['uuid'], alert_meta['uuid']) self.assertEquals(data['enabled'], alert_meta['enabled']) self.assertEquals(data['state'], expected_state) self.assertEquals(data['text'], expected_text) self.assertEquals(data['cluster'], cluster) self.assertEquals(clus, cluster) alert.collector = MagicMock() alert.collector.put = Mock(side_effect=collector_side_effect) alert.collect()
def test_collect_warning(self, time, socket): alert_meta = { 'name': 'alert1', 'label': 'label1', 'serviceName': 'service1', 'componentName': 'component1', 'uuid': '123', 'enabled': 'true' } alert_source_meta = { 'uri': 'http://192.168.0.1:8080', 'default_port': 80 } cluster = 'c1' host = 'host1' cluster_id = '0' expected_state = 'WARNING' expected_text = 'TCP OK - 3.1170 response on port 8080' time.side_effect = [123, 3240, 567] alert = PortAlert(alert_meta, alert_source_meta, self.config) alert.set_cluster(cluster, cluster_id, host) alert.configuration_builder = MagicMock() def collector_side_effect(clus, data): self.assertEquals(data['name'], alert_meta['name']) self.assertEquals(data['state'], expected_state) self.assertEquals(data['text'], expected_text) self.assertEquals(data['clusterId'], cluster_id) self.assertEquals(clus, cluster) alert.collector = MagicMock() alert.collector.put = Mock(side_effect=collector_side_effect) alert.collect()
def test_collect_exception(self, time, socket): alert_meta = { 'name': 'alert1', 'label': 'label1', 'serviceName': 'service1', 'componentName': 'component1', 'uuid': '123', 'enabled': 'true' } alert_source_meta = { 'uri': 'http://192.168.0.1:8080', 'default_port': 80 } cluster = 'c1' host = 'host1' cluster_id = '0' expected_state = 'CRITICAL' expected_text = 'Connection failed: exception message to 192.168.0.1:8080' time.side_effect = [123, 345, 567] socket.side_effect = Exception('exception message') alert = PortAlert(alert_meta, alert_source_meta, self.config) alert.set_cluster(cluster, cluster_id, host) alert.configuration_builder = MagicMock() def collector_side_effect(clus, data): self.assertEquals(data['name'], alert_meta['name']) self.assertEquals(data['state'], expected_state) self.assertEquals(data['text'], expected_text) self.assertEquals(data['clusterId'], cluster_id) self.assertEquals(clus, cluster) alert.collector = MagicMock() alert.collector.put = Mock(side_effect=collector_side_effect) alert.collect()
def __json_to_callable(self, clusterName, hostName, json_definition): ''' converts the json that represents all aspects of a definition and makes an object that extends BaseAlert that is used for individual ''' source = json_definition['source'] source_type = source.get('type', '') if logger.isEnabledFor(logging.DEBUG): logger.debug("Creating job type {0} with {1}".format( source_type, str(json_definition))) alert = None if source_type == AlertSchedulerHandler.TYPE_METRIC: alert = MetricAlert(json_definition, source) elif source_type == AlertSchedulerHandler.TYPE_PORT: alert = PortAlert(json_definition, source) elif source_type == AlertSchedulerHandler.TYPE_SCRIPT: source['stacks_dir'] = self.stacks_dir alert = ScriptAlert(json_definition, source) if alert is not None: alert.set_cluster(clusterName, hostName) return alert
def test_collect_zookeeper_connectionTimeout(self, time, socket): alert_meta = { 'name': 'zookeeper_server_process', 'label': 'label1', 'serviceName': 'service1', 'componentName': 'component1', 'uuid': '123', 'enabled': 'true' } alert_source_meta = { 'uri': 'http://192.168.0.1:2181', 'default_port': 80, 'parameters': [{ 'name': 'socket.command', 'display_name': 'Socket Command', 'value': 'ruok', 'description': 'test', 'type': 'STRING', 'visibility': 'HIDDEN' }, { 'name': 'socket.command.response', 'display_name': 'Expected Response', 'value': 'imok', 'description': 'test', 'type': 'STRING', 'visibility': 'HIDDEN' }] } cluster = 'c1' host = 'host1' expected_state = 'CRITICAL' expected_text = 'Connection failed: Socket Timeout to 192.168.0.1:2181' time.side_effect = [123, 5240, 567] alert = PortAlert(alert_meta, alert_source_meta, self.config) alert.set_cluster(cluster, host) s = socket() s.recv.return_value = "imok" def collector_side_effect(clus, data): self.assertEquals(data['name'], alert_meta['name']) self.assertEquals(data['label'], alert_meta['label']) self.assertEquals(data['service'], alert_meta['serviceName']) self.assertEquals(data['component'], alert_meta['componentName']) self.assertEquals(data['uuid'], alert_meta['uuid']) self.assertEquals(data['enabled'], alert_meta['enabled']) self.assertEquals(data['state'], expected_state) self.assertEquals(data['text'], expected_text) self.assertEquals(data['cluster'], cluster) self.assertEquals(clus, cluster) alert.collector = MagicMock() alert.collector.put = Mock(side_effect=collector_side_effect) alert.collect()
def test_collect_zookeeper_warning(self, time, socket): alert_meta = { 'name': 'zookeeper_server_process', 'label': 'label1', 'serviceName': 'service1', 'componentName': 'component1', 'uuid': '123', 'enabled': 'true', } alert_source_meta = { 'uri': 'http://192.168.0.1:2181', 'default_port': 2181, 'parameters': [ { 'name': 'socket.command', 'display_name': 'Socket Command', 'value': 'ruok', 'description': 'test', 'type': 'STRING', 'visibility': 'HIDDEN' }, { 'name': 'socket.command.response', 'display_name': 'Expected Response', 'value': 'imok', 'description': 'test', 'type': 'STRING', 'visibility': 'HIDDEN' } ] } cluster = 'c1' host = 'host1' cluster_id = '0' expected_state = 'WARNING' expected_text = 'TCP OK - 3.1170 response on port 2181' time.side_effect = [123, 3240, 567] alert = PortAlert(alert_meta, alert_source_meta, self.config) alert.set_cluster(cluster, cluster_id, host) alert.configuration_builder = MagicMock() s = socket() s.recv.return_value = "imok" def collector_side_effect(clus, data): self.assertEquals(data['name'], alert_meta['name']) self.assertEquals(data['state'], expected_state) self.assertEquals(data['text'], expected_text) self.assertEquals(data['clusterId'], cluster_id) self.assertEquals(clus, cluster) alert.collector = MagicMock() alert.collector.put = Mock(side_effect=collector_side_effect) alert.collect()
def test_collect_criticalTimeoutTooBig(self, time, socket): alert_meta = { 'name': 'alert1', 'label': 'label1', 'serviceName': 'service1', 'componentName': 'component1', 'uuid': '123', 'enabled': 'true' } alert_source_meta = { 'uri': 'http://192.168.0.1:8080', 'default_port': 80, 'reporting': { 'critical': { 'value': 33 } } } cluster = 'c1' host = 'host1' expected_state = 'CRITICAL' expected_text = 'Connection failed: Socket Timeout to 192.168.0.1:8080' time.side_effect = [120, 123, 5240, 567] alert = PortAlert(alert_meta, alert_source_meta) alert.set_cluster(cluster, host) def collector_side_effect(clus, data): self.assertEquals(data['name'], alert_meta['name']) self.assertEquals(data['label'], alert_meta['label']) self.assertEquals(data['service'], alert_meta['serviceName']) self.assertEquals(data['component'], alert_meta['componentName']) self.assertEquals(data['uuid'], alert_meta['uuid']) self.assertEquals(data['enabled'], alert_meta['enabled']) self.assertEquals(data['state'], expected_state) self.assertEquals(data['text'], expected_text) self.assertEquals(data['cluster'], cluster) self.assertEquals(clus, cluster) alert.collector = MagicMock() alert.collector.put = Mock(side_effect=collector_side_effect) alert.collect()