Пример #1
0
 def test_fetches_history_since_timestamp(self):
     with session.begin():
         owner = data_setup.create_user()
         system = data_setup.create_system(owner=owner)
         # a recent one, which will be fetched
         system.activity.append(
             SystemActivity(user=owner,
                            service=u'WEBUI',
                            action=u'Changed',
                            field_name=u'fqdn',
                            old_value=u'oldname.example.com',
                            new_value=system.fqdn))
         # an old one, which will not be fetched
         system.activity.append(
             SystemActivity(user=owner,
                            service=u'WEBUI',
                            action=u'Changed',
                            field_name=u'fqdn',
                            old_value=u'evenoldername.example.com',
                            new_value=u'oldname.example.com'))
         system.activity[-1].created = datetime.datetime(
             2005, 8, 16, 12, 23, 34)
     result = self.server.systems.history(
         system.fqdn, xmlrpclib.DateTime('20060101T00:00:00'))
     self.assertEquals(len(result), 1)
     self.assertEquals(result[0]['old_value'], u'oldname.example.com')
Пример #2
0
def unreserve_manual(system, finish=None):
    if finish is None:
        finish = datetime.datetime.utcnow()
    user = system.open_reservation.user
    activity = SystemActivity(user=user,
            service=u'WEBUI', action=u'Returned', field_name=u'User',
            old_value=user.user_name, new_value=u'')
    activity.created = finish
    system.activity.append(activity)
    system.open_reservation.finish_time = finish
Пример #3
0
def unreserve_manual(system, finish=None):
    if finish is None:
        finish = datetime.datetime.utcnow()
    user = system.open_reservation.user
    activity = SystemActivity(user=user,
            service=u'WEBUI', action=u'Returned', field_name=u'User',
            old_value=user.user_name, new_value=u'')
    activity.created = finish
    system.activity.append(activity)
    system.open_reservation.finish_time = finish
Пример #4
0
def create_system_activity(user=None, **kw):
    if not user:
        user = create_user()
    activity = SystemActivity(user, u'WEBUI', u'Changed', u'Loaned To',
                              unique_name(u'random_%s'), user.user_name)
    session.add(activity)
    return activity
Пример #5
0
def create_manual_reservation(system, start, finish=None, user=None):
    if user is None:
        user = create_user()
    system.reservations.append(Reservation(start_time=start,
            finish_time=finish, type=u'manual', user=user))
    activity = SystemActivity(user=user,
            service=u'WEBUI', action=u'Reserved', field_name=u'User',
            old_value=u'', new_value=user.user_name)
    activity.created = start
    system.activity.append(activity)
    if finish:
        activity = SystemActivity(user=user,
                service=u'WEBUI', action=u'Returned', field_name=u'User',
                old_value=user.user_name, new_value=u'')
        activity.created = finish
        system.activity.append(activity)
Пример #6
0
 def system(self, **kw):
     activities = SystemActivity.all()
     activity_search = search_utility.SystemActivity.search
     search_bar = SearchBar(activity_search.create_complete_search_table(),
                            name='activitysearch',)
     return self._activities_grid(activities, search_bar, 'system',
         search_utility.SystemActivity, title='System Activity', **kw)
Пример #7
0
def create_manual_reservation(system, start, finish=None, user=None):
    if user is None:
        user = create_user()
    system.reservations.append(
        Reservation(start_time=start,
                    finish_time=finish,
                    type=u'manual',
                    user=user))
    activity = SystemActivity(user=user,
                              service=u'WEBUI',
                              action=u'Reserved',
                              field_name=u'User',
                              old_value=u'',
                              new_value=user.user_name)
    activity.created = start
    system.activity.append(activity)
    if finish:
        activity = SystemActivity(user=user,
                                  service=u'WEBUI',
                                  action=u'Returned',
                                  field_name=u'User',
                                  old_value=user.user_name,
                                  new_value=u'')
        activity.created = finish
        system.activity.append(activity)
Пример #8
0
    def setUp(self):
        self.distro = data_setup.create_distro()
        self.distro_tree1 = data_setup.create_distro_tree(distro=self.distro,
                                                          arch='x86_64')
        self.distro_tree2 = data_setup.create_distro_tree(distro=self.distro,
                                                          arch='i386')

        self.distro_tree1.activity.append(
            DistroTreeActivity(user=User.by_user_name(data_setup.ADMIN_USER),
                               service=u'testdata',
                               field_name=u'Nonesente',
                               old_value=u'sdfas',
                               new_value=u'sdfa',
                               action='Added'))
        self.distro_tree2.activity.append(
            DistroTreeActivity(user=User.by_user_name(data_setup.ADMIN_USER),
                               service=u'testdata',
                               field_name=u'Noneseonce',
                               old_value=u'bsdf',
                               new_value=u'sdfas',
                               action='Added'))

        self.distro.activity.append(
            DistroActivity(user=User.by_user_name(data_setup.ADMIN_USER),
                           service=u'testdata',
                           action=u'Nothing',
                           field_name=u'Nonsense',
                           old_value=u'asdf',
                           new_value=u'omgwtfbbq'))
        self.system = data_setup.create_system()
        self.system.activity.append(
            SystemActivity(user=User.by_user_name(data_setup.ADMIN_USER),
                           service=u'testdata',
                           action=u'Nothing',
                           field_name=u'Nonsense',
                           old_value=u'asdf',
                           new_value=u'omgwtfbbq'))
        self.group2 = data_setup.create_group()
        self.group = data_setup.create_group()
        self.group.activity.append(
            GroupActivity(user=User.by_user_name(data_setup.ADMIN_USER),
                          service=u'testdata',
                          action=u'Nothing',
                          field_name=u'Nonsense',
                          old_value=u'asdf',
                          new_value=u'omgwtfbbq'))
        self.browser = self.get_browser()
Пример #9
0
 def test_can_fetch_history(self):
     with session.begin():
         owner = data_setup.create_user()
         system = data_setup.create_system(owner=owner)
         system.activity.append(SystemActivity(user=owner, service=u'WEBUI',
                 action=u'Changed', field_name=u'fqdn',
                 old_value=u'oldname.example.com', new_value=system.fqdn))
     result = self.server.systems.history(system.fqdn)
     self.assertEquals(len(result), 1)
     assert_datetime_within(result[0]['created'],
             datetime.timedelta(seconds=5),
             reference=datetime.datetime.utcnow())
     self.assertEquals(result[0]['user'], owner.user_name)
     self.assertEquals(result[0]['service'], u'WEBUI')
     self.assertEquals(result[0]['action'], u'Changed')
     self.assertEquals(result[0]['field_name'], u'fqdn')
     self.assertEquals(result[0]['old_value'], u'oldname.example.com')
     self.assertEquals(result[0]['new_value'], system.fqdn)
Пример #10
0
    def remove(self, **kw):
        try:
            group = Group.by_id(kw['group_id'])
        except DatabaseLookupError:
            flash(unicode('Invalid group or already removed'))
            redirect('../groups/mine')

        if not group.can_edit(identity.current.user):
            flash(_(u'You are not an owner of group %s' % group))
            redirect('../groups/mine')

        if group.is_protected_group():
            flash(
                _(u'This group %s is predefined and cannot be deleted' %
                  group))
            redirect('../groups/mine')

        if group.jobs:
            flash(_(u'Cannot delete a group which has associated jobs'))
            redirect('../groups/mine')

        # Record the access policy rules that will be removed
        # before deleting the group
        for rule in group.system_access_policy_rules:
            rule.record_deletion()

        session.delete(group)
        activity = Activity(identity.current.user, u'WEBUI', u'Removed',
                            u'Group', group.display_name, u"")
        session.add(activity)
        for system in group.systems:
            session.add(
                SystemActivity(identity.current.user,
                               u'WEBUI',
                               u'Removed',
                               u'Group',
                               group.display_name,
                               u"",
                               object=system))
        flash(_(u"%s deleted") % group.display_name)
        raise redirect(".")
def populate_status_durations(system):
    assert not system.status_durations
    # We don't know what the original status was, so let's set it to None for
    # now and see if we can figure it out next
    start_time = system.date_added
    status = None
    for activity in SystemActivity.query().filter(and_(
            SystemActivity.object == system,
            SystemActivity.field_name.in_([u'Status', u'status_id']),
            SystemActivity.action == u'Changed'))\
            .order_by(SystemActivity.created):
        # Some old records have activity before date_added, probably because
        # the former is not in UTC
        changed_at = max(system.date_added, activity.created)
        # If this is the first status change, old_value might tell us what it
        # was before
        if status is None:
            if activity.old_value:
                status = get_status(activity.old_value)
            else:
                # As a fallback, assume systems always started out broken
                status = get_status(u'Broken')
        new_status = get_status(activity.new_value)
        # If the duration was non-zero, let's record it
        if changed_at > start_time and status != new_status:
            system.status_durations.append(
                SystemStatusDuration(status=status,
                                     start_time=start_time,
                                     finish_time=changed_at))
            status = new_status
            start_time = changed_at
    if status is None:
        status = get_status(u'Broken')
    system.status_durations.append(
        SystemStatusDuration(status=status,
                             start_time=start_time,
                             finish_time=None))
    assert_durations_not_overlapping(system.status_durations)
    assert_durations_contiguous(system.status_durations)
    assert system.date_added == system.status_durations[0].start_time
Пример #12
0
 def test_system_breakages(self):
     system = data_setup.create_system()
     data_setup.create_system_status_history(system, [
         (SystemStatus.automated, datetime.datetime(2012, 10, 1, 0, 0)),
         (SystemStatus.broken, datetime.datetime(2012, 10, 5, 0, 0)),
         (SystemStatus.automated, datetime.datetime(2012, 10, 5, 8, 0)),
         (SystemStatus.broken, datetime.datetime(2012, 10, 10, 0, 0)),
     ])
     for _ in range(3):
         system.activity.append(
             SystemActivity(user=data_setup.create_user(),
                            created=datetime.datetime(2012, 10, 15, 0, 0),
                            service=u'testdata',
                            action=u'Reported problem',
                            field_name=u'Status',
                            old_value=None,
                            new_value=u'Why does it always b0rk?'))
     session.flush()
     row, = [
         row for row in self.execute_reporting_query('system-breakages')
         if row.fqdn == system.fqdn
     ]
     self.assertEquals(row.breakage_count, 2)
     self.assertEquals(row.problem_report_count, 3)
def populate_status_durations(system):
    assert not system.status_durations
    # We don't know what the original status was, so let's set it to None for 
    # now and see if we can figure it out next
    start_time = system.date_added
    status = None
    for activity in SystemActivity.query().filter(and_(
            SystemActivity.object == system,
            SystemActivity.field_name.in_([u'Status', u'status_id']),
            SystemActivity.action == u'Changed'))\
            .order_by(SystemActivity.created):
        # Some old records have activity before date_added, probably because 
        # the former is not in UTC
        changed_at = max(system.date_added, activity.created)
        # If this is the first status change, old_value might tell us what it 
        # was before
        if status is None:
            if activity.old_value:
                status = get_status(activity.old_value)
            else:
                # As a fallback, assume systems always started out broken
                status = get_status(u'Broken')
        new_status = get_status(activity.new_value)
        # If the duration was non-zero, let's record it
        if changed_at > start_time and status != new_status:
            system.status_durations.append(SystemStatusDuration(
                    status=status, start_time=start_time, finish_time=changed_at))
            status = new_status
            start_time = changed_at
    if status is None:
        status = get_status(u'Broken')
    system.status_durations.append(SystemStatusDuration(
            status=status, start_time=start_time, finish_time=None))
    assert_durations_not_overlapping(system.status_durations)
    assert_durations_contiguous(system.status_durations)
    assert system.date_added == system.status_durations[0].start_time