コード例 #1
0
    def test_is_running(self):
        b = BConsole()
        with patch.object(b, 'start_process') as mock_method:
            start_process = mock_method.return_value
            start_process.communicate.return_value = ('Version', '')
            self.assertTrue(b.is_running())

        with patch.object(b, 'start_process') as mock_method:
            start_process = mock_method.return_value
            start_process.communicate.return_value = ('error', 'error')
            self.assertFalse(b.is_running())
コード例 #2
0
ファイル: models.py プロジェクト: weaselshit/almir
    def get_list(cls, **kw):
        appstruct = kw.get('appstruct', {})
        if appstruct and appstruct['state'] == 'scheduled':
            return BConsole().get_upcoming_jobs()

        query = cls.query.options(joinedload(cls.status), joinedload(cls.client))
        if appstruct:
            if appstruct['status']:
                query = query.filter(cls.jobstatus == appstruct['status'])
            if appstruct['type']:
                query = query.filter(cls.type == appstruct['type'])
        return query
コード例 #3
0
    def test_get_upcoming_jobs(self):
        b = BConsole()
        with patch.object(b, 'start_process') as mock_method:
            start_process = mock_method.return_value
            start_process.communicate.return_value = ("""
Scheduled Jobs:
Level          Type     Pri  Scheduled          Name               Volume
===================================================================================
Incremental    Backup    10  07-aoû2013 00:12  srv-prdadm-21_BOS  DISK_sem-0004
               Admin      8  18-Apr-12 20:30    UpdateSlots
Differential   Backup    10  18-Mar-12 23:05    BackupClient1      *unknown*
Full           Backup    11  18-Mar-12 23:10    BackupCatalog      *unknown*
====
""", '')

            jobs = b.get_upcoming_jobs()
            self.assertEqual(jobs, [{
                'date': '07-aoû2013',
                'level': 'Incremental',
                'name': 'srv-prdadm-21_BOS',
                'time': '00:12',
                'priority': '10',
                'type': 'Backup',
                'volume': 'DISK_sem-0004'
            }, {
                'date': '18-Apr-12',
                'level': '',
                'name': 'UpdateSlots',
                'time': '20:30',
                'priority': '8',
                'type': 'Admin',
                'volume': ''
            }, {
                'date': '18-Mar-12',
                'level': 'Differential',
                'name': 'BackupClient1',
                'priority': '10',
                'time': '23:05',
                'type': 'Backup',
                'volume': '*unknown*'
            }, {
                'date': '18-Mar-12',
                'level': 'Full',
                'name': 'BackupCatalog',
                'priority': '11',
                'time': '23:10',
                'type': 'Backup',
                'volume': '*unknown*'
            }])
コード例 #4
0
ファイル: views.py プロジェクト: weaselshit/almir
def ajax_console_input(request):
    global bconsole_session
    # TODO: if status for client is requested, it might timeout after few seconds, but not 0.5
    # TODO: thread locking
    # TODO: implement session based on cookie
    # TODO: stderr?

    if not request.POST['bconsole_command'] and bconsole_session is not None:
        return {"commands": list(command_cache)}

    b = BConsole()
    bconsole_session, response = b.send_command_by_polling(request.POST['bconsole_command'], bconsole_session)

    if 'error' in response:
        command_cache.clear()

    if 'commands' in response:
        command_cache.extend(response['commands'])
    return response
コード例 #5
0
ファイル: test_bconsole.py プロジェクト: weaselshit/almir
    def test_send_command_by_polling(self):
        b = BConsole()
        with patch.object(b, 'start_process') as mock_method:
            mock_method.return_value = Popen(['cat'], stdout=PIPE, stdin=PIPE, stderr=PIPE)

            process, outputs = b.send_command_by_polling('version')
            self.assertEqual(outputs['commands'][0], 'version<br />')

            process.kill()
            time.sleep(1)
            process, outputs = b.send_command_by_polling('version', process)
            self.assertTrue('error' in outputs)

        with patch.object(b, 'start_process') as mock_method:
            start_process = mock_method.return_value
            start_process.communicate.return_value = ('error', 'error')

            process, outputs = b.send_command_by_polling('quit')
            self.assertEqual(outputs['commands'][0], 'Try harder.')
コード例 #6
0
ファイル: models.py プロジェクト: weaselshit/almir
 def get_upcoming(cls):
     return BConsole().get_upcoming_jobs()
コード例 #7
0
ファイル: views.py プロジェクト: weaselshit/almir
def dashboard(request):
    dbsession = DBSession()

    jobs = Job.get_last()
    running_jobs = Job.get_running()
    upcoming_jobs = Job.get_upcoming()
    try:
        director_version = '<span title="Connected to" class="label label-success">%s</span>' % BConsole().get_version()
    except DirectorNotRunning:
        director_version = '<span class="label label-important">Director not running!</span>'

    # statistics
    num_clients = dbsession.query(count(Client.clientid)).scalar()
    num_jobs = dbsession.query(count(Job.jobid)).scalar()
    num_volumes = dbsession.query(count(Media.mediaid)).scalar()
    sum_volumes = Media.format_byte_size(dbsession.query(sum(Media.volbytes)).scalar() or 0)
    database_size = get_database_size(DBSession.bind)

    return locals()