'Starts the process of watchers -> auditors -> alerters'

def run(self, account, interval=None):

    app.logger.info('Starting    work    on    account    {}.'.format(account))
    time1 = time.time()
    mons = self.get_monitors_to_run(account, interval)
    watchers_with_changes = set()
    for monitor in mons:
        app.logger.info('Running    slurp    {}    for    {}    ({}    minutes    interval)'.format(monitor.watcher.i_am_singular, account, interval))
        if monitor.batch_support:
            from security_monkey.scheduler import batch_logic
            batch_logic(monitor, monitor.watcher, account, False)
        else:
            (items, exception_map) = monitor.watcher.slurp()
            monitor.watcher.find_changes(items, exception_map)
            if ((len(monitor.watcher.created_items) > 0) or (len(monitor.watcher.changed_items) > 0)):
                watchers_with_changes.add(monitor.watcher.index)
            monitor.watcher.save()
    db_account = get_account_by_name(account)
    for monitor in self.all_monitors:
        if monitor.batch_support:
            continue
        for auditor in monitor.auditors:
            if auditor.applies_to_account(db_account):
                items_to_audit = self.get_items_to_audit(monitor.watcher, auditor, watchers_with_changes)
                app.logger.info('Running    audit    {}    for    {}'.format(monitor.watcher.index, account))
                try:
                    auditor.items = items_to_audit
                    auditor.audit_objects()
                    auditor.save_issues()
                except Exception as e:
                    store_exception('reporter-run-auditor', (auditor.index, account), e)
                    continue
    time2 = time.time()
    app.logger.info(('Run    Account    %s    took    %0.1f    s' % (account, (time2 - time1))))
    self.account_alerter.report()
    db.session.close()
