def _post_oom_event(tm_env, app): """Post oom as killed container.""" appevents.post(tm_env.app_events_dir, events.KilledTraceEvent( instanceid=app.name, is_oom=True, ))
def _post_oom_event(tm_env, appname): """Post killed event due to oom.""" appevents.post(tm_env.app_events_dir, events.KilledTraceEvent( instanceid=appname, is_oom=True, ))
def test__finish(self): """Tests docker runtime finish.""" # Access to a protected member # pylint: disable=W0212 if os.name == 'nt': treadmill.ad.credential_spec.cleanup = mock.Mock() treadmill.runtime.save_app(self.manifest, self.data_dir) client = mock.MagicMock() docker.from_env.return_value = client container = mock.MagicMock() client.containers.get.return_value = container type(container).attrs = mock.PropertyMock(return_value={ 'State': { 'OOMKilled': False, 'ExitCode': 5 } }) docker_runtime = runtime.DockerRuntime( self.tm_env, self.container_dir, {'version': '1.24'} ) docker_runtime._finish() container.remove.assert_called_with(force=True) treadmill.appevents.post.assert_called_with( self.tm_env.app_events_dir, events.FinishedTraceEvent( instanceid='proid.app#001', rc=5, signal=0, payload=mock.ANY ) ) treadmill.appevents.post.reset_mock() type(container).attrs = mock.PropertyMock(return_value={ 'State': { 'OOMKilled': True } }) docker_runtime._finish() treadmill.appevents.post.assert_called_with( self.tm_env.app_events_dir, events.KilledTraceEvent( instanceid='proid.app#001', is_oom=True, ) ) treadmill.runtime.archive_logs.assert_called()
def _post_exit_event(tm_env, app, exitinfo): """Post exit event based on exit reason.""" if exitinfo.get('killed'): event = events.KilledTraceEvent( instanceid=app.name, is_oom=bool(exitinfo.get('oom')), ) else: event = events.FinishedTraceEvent(instanceid=app.name, rc=exitinfo.get('rc', 256), signal=exitinfo.get('sig', 256), payload=exitinfo) appevents.post(tm_env.app_events_dir, event)
def test_killed(self, stdout_mock): """Test printing Killed event. """ event = events.KilledTraceEvent(timestamp=1, source='tests', instanceid='proid.foo#123', is_oom=True, payload={'foo': 'bar'}) self.trace_printer.process(event) self.assertEqual( stdout_mock.getvalue(), 'Thu, 01 Jan 1970 00:00:01+0000 - ' 'proid.foo#123 killed, out of memory\n')
def _finish(self): app = runtime.load_app(self._service.data_dir, runtime.STATE_JSON) if app: client = self._get_client() container = state = None name = appcfg.app_unique_name(app) try: container = client.containers.get(name) state = container.attrs.get('State') except docker.errors.NotFound: pass if container is not None: try: container.remove(force=True) except docker.errors.APIError: _LOGGER.error('Failed to remove %s', container.id) aborted = _check_aborted(self._service.data_dir) if aborted is not None: app_abort.report_aborted(self._tm_env, app.name, why=aborted.get('why'), payload=aborted.get('payload')) elif state is not None: if state.get('OOMKilled', False): event = events.KilledTraceEvent( instanceid=app.name, is_oom=True, ) else: event = events.FinishedTraceEvent(instanceid=app.name, rc=state.get( 'ExitCode', 256), signal=0, payload=state) appevents.post(self._tm_env.app_events_dir, event) if os.name == 'nt': credential_spec.cleanup(name, client) try: runtime.archive_logs(self._tm_env, name, self._service.data_dir) except Exception: # pylint: disable=W0703 _LOGGER.exception('Unexpected exception storing local logs.')
def test_killed(self): """Killed event operations. """ event = events.KilledTraceEvent( timestamp=1, source='tests', instanceid='proid.foo#123', is_oom=True, payload={'foo': 'bar'} ) self.assertEqual( event.to_dict(), { 'event_type': 'killed', 'timestamp': 1, 'source': 'tests', 'instanceid': 'proid.foo#123', 'is_oom': True, 'payload': {'foo': 'bar'}, } ) self.assertEqual( event.to_data(), ( 1, 'tests', 'proid.foo#123', 'killed', 'oom', {'foo': 'bar'}, ) ) self.assertEqual( event, events.KilledTraceEvent.from_data( timestamp=1, source='tests', instanceid='proid.foo#123', event_type='killed', event_data='oom', payload={'foo': 'bar'} ) )