| 1 |  |  | #!/usr/bin/env python | 
            
                                                                                                            
                            
            
                                    
            
            
                | 2 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 3 |  |  | from lib.client import Client | 
            
                                                                                                            
                            
            
                                    
            
            
                | 4 |  |  | from st2reactor.sensor.base import Sensor | 
            
                                                                                                            
                            
            
                                    
            
            
                | 5 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 6 |  |  | class Icinga2StateChangeSensor(Sensor): | 
            
                                                                                                            
                            
            
                                    
            
            
                | 7 |  |  |   def setup(self): | 
            
                                                                                                            
                            
            
                                    
            
            
                | 8 |  |  |     self.logger = self._sensor_service.get_logger(__name__) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 9 |  |  |     self.api_url = self._config['api_url'] + '/events?queue=state_change&types=StateChange' | 
            
                                                                                                            
                            
            
                                    
            
            
                | 10 |  |  |     self.api_user = self._config['api_state_change_user'] | 
            
                                                                                                            
                            
            
                                    
            
            
                | 11 |  |  |     self.api_password = self._config['api_state_change_password'] | 
            
                                                                                                            
                            
            
                                    
            
            
                | 12 |  |  |     self.trigger_name = 'event.state_change' | 
            
                                                                                                            
                            
            
                                    
            
            
                | 13 |  |  |     self.trigger_pack = 'icinga2' | 
            
                                                                                                            
                            
            
                                    
            
            
                | 14 |  |  |     self.trigger_ref = '.'.join([self.trigger_pack, self.trigger_name]) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 15 |  |  |     self.client = Client(self, self.api_url, self.api_user, self.api_password) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 16 |  |  |     self.logger.info('Icinga2StateChangeSensor initialized with URL: %s User: %s Password: *****', self.api_url, self.api_user) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 17 |  |  |      | 
            
                                                                                                            
                            
            
                                    
            
            
                | 18 |  |  |   def process_event(self, event): | 
            
                                                                                                            
                            
            
                                    
            
            
                | 19 |  |  |     self.logger.info('Processing event: %s', event) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 20 |  |  |     payload = {} | 
            
                                                                                                            
                            
            
                                    
            
            
                | 21 |  |  |     payload['service'] = event['service'] | 
            
                                                                                                            
                            
            
                                    
            
            
                | 22 |  |  |     payload['host'] = event['host'] | 
            
                                                                                                            
                            
            
                                    
            
            
                | 23 |  |  |     payload['state'] = event['state'] | 
            
                                                                                                            
                            
            
                                    
            
            
                | 24 |  |  |     payload['state_type'] = event['state_type'] | 
            
                                                                                                            
                            
            
                                    
            
            
                | 25 |  |  |     payload['type'] = event['type'] | 
            
                                                                                                            
                            
            
                                    
            
            
                | 26 |  |  |     payload['check_result'] = event['check_result'] | 
            
                                                                                                            
                            
            
                                    
            
            
                | 27 |  |  |     self.dispatch_trigger(payload) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 28 |  |  |      | 
            
                                                                                                            
                            
            
                                    
            
            
                | 29 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 30 |  |  |   def run(self): | 
            
                                                                                                            
                            
            
                                    
            
            
                | 31 |  |  |     self.logger.info('Setting up API connection params.') | 
            
                                                                                                            
                            
            
                                    
            
            
                | 32 |  |  |     self.client.setup_connection() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 33 |  |  |     self.logger.info('Starting connection to API endpoint.') | 
            
                                                                                                            
                            
            
                                    
            
            
                | 34 |  |  |     self.client.start() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 35 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 36 |  |  |   def cleanup(self): | 
            
                                                                                                            
                            
            
                                    
            
            
                | 37 |  |  |     self.client.abort_session() | 
            
                                                                                                            
                                                                
            
                                    
            
            
                | 38 |  |  |  | 
            
                                                                        
                            
            
                                    
            
            
                | 39 |  |  |   def add_trigger(self, trigger): | 
            
                                                                        
                            
            
                                    
            
            
                | 40 |  |  |     pass | 
            
                                                                                                            
                            
            
                                    
            
            
                | 41 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 42 |  |  |   def update_trigger(self, trigger): | 
            
                                                                                                            
                            
            
                                    
            
            
                | 43 |  |  |     pass | 
            
                                                                                                            
                            
            
                                    
            
            
                | 44 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 45 |  |  |   def remove_trigger(self, trigger): | 
            
                                                                                                            
                            
            
                                    
            
            
                | 46 |  |  |     self.client.abort_session() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 47 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 48 |  |  |   def dispatch_trigger(self, payload): | 
            
                                                                                                            
                            
            
                                    
            
            
                | 49 |  |  |     self.logger.info('Dispatching trigger: %s', self.trigger_ref) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 50 |  |  |     self._sensor_service.dispatch(self.trigger_ref, payload) | 
            
                                                                                                            
                                                                
            
                                    
            
            
                | 51 |  |  |  | 
            
                                                        
            
                                    
            
            
                | 52 |  |  |  |