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())
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
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*' }])
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
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.')
def get_upcoming(cls): return BConsole().get_upcoming_jobs()
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()