Пример #1
0
def emit_script_result_status_transition_event(script_result, old_values,
                                               **kwargs):
    """Send a status transition event."""
    [old_status] = old_values

    if script_result.physical_blockdevice and script_result.interface:
        script_name = "%s on %s and %s" % (
            script_result.name,
            script_result.physical_blockdevice.name,
            script_result.interface.name,
        )
    elif script_result.physical_blockdevice:
        script_name = "%s on %s" % (
            script_result.name,
            script_result.physical_blockdevice.name,
        )
    elif script_result.interface:
        script_name = "%s on %s" % (
            script_result.name,
            script_result.interface.name,
        )
    else:
        script_name = script_result.name

    if (script_result.script_set.result_type == RESULT_TYPE.TESTING
            and old_status == SCRIPT_STATUS.PENDING
            and (script_result.status in SCRIPT_STATUS_RUNNING)):
        Event.objects.create_node_event(
            script_result.script_set.node,
            EVENT_TYPES.RUNNING_TEST,
            event_description=script_name,
        )
    elif script_result.status in SCRIPT_STATUS_FAILED.union(
        {SCRIPT_STATUS.ABORTED}):
        Event.objects.create_node_event(
            script_result.script_set.node,
            EVENT_TYPES.SCRIPT_DID_NOT_COMPLETE,
            event_description="%s %s" % (
                script_name,
                SCRIPT_STATUS_CHOICES[script_result.status][1].lower(),
            ),
        )
    else:
        old_status_name = None
        new_status_name = None
        for status, status_name in SCRIPT_STATUS_CHOICES:
            if old_status == status:
                old_status_name = status_name
            elif script_result.status == status:
                new_status_name = status_name
        Event.objects.create_node_event(
            script_result.script_set.node,
            EVENT_TYPES.SCRIPT_RESULT_CHANGED_STATUS,
            event_description="%s changed status from '%s' to '%s'" %
            (script_name, old_status_name, new_status_name),
        )
        if (CURTIN_INSTALL_LOG == script_result.name
                and not script_result.script_set.node.netboot):
            Event.objects.create_node_event(script_result.script_set.node,
                                            EVENT_TYPES.REBOOTING)
Пример #2
0
    def test_script_did_not_complete_emits_event(self):

        script_result = factory.make_ScriptResult(
            status=SCRIPT_STATUS.RUNNING,
            script_set=factory.make_ScriptSet(result_type=RESULT_TYPE.TESTING),
            script=factory.make_Script(),
        )
        script_result.status = random.choice(
            list(SCRIPT_STATUS_FAILED.union({SCRIPT_STATUS.ABORTED})))
        script_result.save()

        latest_event = Event.objects.last()
        self.assertEqual(
            (
                EVENT_TYPES.SCRIPT_DID_NOT_COMPLETE,
                EVENT_DETAILS[EVENT_TYPES.SCRIPT_DID_NOT_COMPLETE].description,
                "%s %s" % (
                    script_result.name,
                    SCRIPT_STATUS_CHOICES[script_result.status][1].lower(),
                ),
            ),
            (
                latest_event.type.name,
                latest_event.type.description,
                latest_event.description,
            ),
        )
Пример #3
0
    def dehydrate_hardware_status_tooltip(self, script_results):
        script_statuses = {}
        for script_result in script_results:
            if script_result.status in script_statuses:
                script_statuses[script_result.status].add(script_result.name)
            else:
                script_statuses[script_result.status] = {script_result.name}

        tooltip = ''
        for status, scripts in script_statuses.items():
            len_scripts = len(scripts)
            if status in SCRIPT_STATUS_RUNNING_OR_PENDING:
                verb = 'is' if len_scripts == 1 else 'are'
            elif status in SCRIPT_STATUS_FAILED.union({SCRIPT_STATUS.PASSED}):
                verb = 'has' if len_scripts == 1 else 'have'
            else:
                # Covers SCRIPT_STATUS.ABORTED, an else is used incase new
                # statuses are ever added.
                verb = 'was' if len_scripts == 1 else 'were'

            if tooltip != '':
                tooltip += ' '
            if len_scripts == 1:
                tooltip += '1 test '
            else:
                tooltip += '%s tests ' % len_scripts
            tooltip += '%s %s.' % (verb,
                                   SCRIPT_STATUS_CHOICES[status][1].lower())

        if tooltip == '':
            tooltip = 'No tests have been run.'

        return tooltip
Пример #4
0
def emit_script_result_status_transition_event(instance, old_values, **kwargs):
    """Send a status transition event."""
    script_result = instance
    [old_status] = old_values

    if (script_result.script_set.result_type == RESULT_TYPE.TESTING
            and old_status == SCRIPT_STATUS.PENDING
            and (script_result.status in SCRIPT_STATUS_RUNNING)):
        storage_name = script_result.parameters.get('storage',
                                                    {}).get('value',
                                                            {}).get('name')
        Event.objects.create_node_event(
            script_result.script_set.node,
            EVENT_TYPES.RUNNING_TEST,
            event_description="%s on %s" % (script_result.name, storage_name)
            if storage_name else script_result.name)

    elif script_result.status in SCRIPT_STATUS_FAILED.union(
        {SCRIPT_STATUS.ABORTED}):
        Event.objects.create_node_event(
            script_result.script_set.node,
            EVENT_TYPES.SCRIPT_DID_NOT_COMPLETE,
            event_description="%s %s" %
            (script_result.name,
             SCRIPT_STATUS_CHOICES[script_result.status][1].lower()))
    else:
        old_status_name = None
        new_status_name = None
        for status, status_name in SCRIPT_STATUS_CHOICES:
            if old_status == status:
                old_status_name = status_name
            elif script_result.status == status:
                new_status_name = status_name
        Event.objects.create_node_event(
            script_result.script_set.node,
            EVENT_TYPES.SCRIPT_RESULT_CHANGED_STATUS,
            event_description="%s changed status from '%s' to '%s'" %
            (script_result.name, old_status_name, new_status_name))
        if (CURTIN_INSTALL_LOG == script_result.name
                and not script_result.script_set.node.netboot):
            Event.objects.create_node_event(script_result.script_set.node,
                                            EVENT_TYPES.REBOOTING)