diff --git a/homeassistant/components/graphite.py b/homeassistant/components/graphite.py index a84d4bf8847..662e3872eee 100644 --- a/homeassistant/components/graphite.py +++ b/homeassistant/components/graphite.py @@ -98,6 +98,8 @@ class GraphiteFeeder(threading.Thread): _LOGGER.debug('Sending to graphite: %s', lines) try: self._send_to_graphite('\n'.join(lines)) + except socket.gaierror: + _LOGGER.error('Unable to connect to host %s', self._host) except socket.error: _LOGGER.exception('Failed to send data to graphite') @@ -108,7 +110,7 @@ class GraphiteFeeder(threading.Thread): self._queue.task_done() return elif (event.event_type == EVENT_STATE_CHANGED and - 'new_state' in event.data): + event.data.get('new_state')): self._report_attributes(event.data['entity_id'], event.data['new_state']) self._queue.task_done() diff --git a/tests/components/test_graphite.py b/tests/components/test_graphite.py index bdcda193863..3faaa4c1659 100644 --- a/tests/components/test_graphite.py +++ b/tests/components/test_graphite.py @@ -134,6 +134,16 @@ class TestGraphite(unittest.TestCase): actual = mock_send.call_args_list[0][0][0].split('\n') self.assertEqual(sorted(expected), sorted(actual)) + @mock.patch('time.time') + def test_send_to_graphite_errors(self, mock_time): + mock_time.return_value = 12345 + state = ha.State('domain.entity', STATE_ON, {'foo': 1.0}) + with mock.patch.object(self.gf, '_send_to_graphite') as mock_send: + mock_send.side_effect = socket.error + self.gf._report_attributes('entity', state) + mock_send.side_effect = socket.gaierror + self.gf._report_attributes('entity', state) + @mock.patch('socket.socket') def test_send_to_graphite(self, mock_socket): self.gf._send_to_graphite('foo') @@ -163,7 +173,8 @@ class TestGraphite(unittest.TestCase): return self.gf._quit_object elif runs: runs.append(1) - return mock.MagicMock(event_type='somethingelse') + return mock.MagicMock(event_type='somethingelse', + data={'new_event': None}) else: runs.append(1) return event