示例#1
0
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,
                   ))
示例#2
0
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,
                   ))
示例#3
0
    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()
示例#4
0
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)
示例#5
0
    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')
示例#6
0
    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.')
示例#7
0
 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'}
         )
     )