def test_get_login_intervals_when_login_after_range(self): talktime = datetime.timedelta(minutes=1) logintime = self.start logouttime = logintime + talktime logins = [ {'time': logintime, 'callid': 'login_1', 'agent': self.aname1, 'chan_name': 'SIP/1234-00001', 'talktime': talktime}, {'time': self.end + datetime.timedelta(minutes=1), 'callid': 'login_1', 'agent': self.aname1, 'chan_name': 'SIP/1234-00001', 'talktime': talktime} ] logoffs = [ {'time': logouttime, 'agent': self.aname1, 'chan_name': 'SIP/1234-00001', 'talktime': talktime} ] self._insert_agent_callback_logins_logoffs(logins, logoffs) self._insert_agent_logins_logoffs(logins, logoffs) result = stat_dao.get_login_intervals_in_range(self.session, self.start, self.end) expected = { self.aid1: sorted([(logintime, logouttime)]) } self.assertEqual(expected, result)
def test_get_login_intervals_in_range_no_login_logout_calls(self): connect1 = QueueLog( time=self.start - datetime.timedelta(minutes=5), callid='answered_1', queuename='queue', agent=self.aname1, event='CONNECT', data1='6', data2='linked_callid', data3='2' ) self.session.add(connect1) connect2 = QueueLog( time=self.start + datetime.timedelta(minutes=5), callid='answered_2', queuename='queue', agent=self.aname2, event='CONNECT', data1='6', data2='linked_callid_2', data3='4' ) self.session.begin() self.session.add(connect2) self.session.commit() result = stat_dao.get_login_intervals_in_range(self.session, self.start, self.end) expected = {} self.assertEqual(expected, result)
def insert_periodic_stat(dao_sess, start, end): time_computer = AgentTimeComputer(start, end, INTERVAL) login_intervals = stat_dao.get_login_intervals_in_range( dao_sess, start, end) pause_intervals = stat_dao.get_pause_intervals_in_range( dao_sess, start, end) periodic_stats_login = time_computer.compute_login_time_in_period( login_intervals) periodic_stats_pause = time_computer.compute_pause_time_in_period( pause_intervals) periodic_stats_wrapup = queue_log_dao.get_wrapup_times( dao_sess, start, end, INTERVAL) dao_sess.flush() periodic_stats = _merge_update_agent_statistics( periodic_stats_login, periodic_stats_pause, periodic_stats_wrapup, ) for period, stats in periodic_stats.items(): stat_agent_periodic_dao.insert_stats(dao_sess, stats, period) dao_sess.flush()
def test_get_login_intervals_in_range_logins_before_no_logout(self): cb_logins = [ {'time': self.start - datetime.timedelta(seconds=30), 'callid': 'login_1', 'agent': self.aname1, 'chan_name': 'SIP/1234-00001'}, {'time': self.start - datetime.timedelta(seconds=44), 'callid': 'login_5', 'agent': self.aname1, 'chan_name': 'SIP/1234-00003'}, ] self._insert_agent_callback_logins_logoffs(cb_logins, []) logins = [ {'time': self.start - datetime.timedelta(seconds=50), 'callid': 'login_3', 'agent': self.aname2, 'chan_name': 'SIP/5555-00001'}, {'time': self.start - datetime.timedelta(seconds=59), 'callid': 'login_4', 'agent': self.aname1, 'chan_name': 'SIP/1234-00002'}, ] self._insert_agent_logins_logoffs(logins, []) result = stat_dao.get_login_intervals_in_range(self.session, self.start, self.end) expected = { self.aid1: [(self.start, self.end)], self.aid2: [(self.start, self.end)], } self.assertEqual(expected, result)
def test_get_login_intervals_when_logoff_same_as_start_no_login(self): talktime = datetime.timedelta(minutes=1) logoffs = [ {'time': self.start, 'callid': 'login_1', 'agent': self.aname1, 'chan_name': 'SIP/1234-00001', 'talktime': talktime} ] self._insert_agent_callback_logins_logoffs([], logoffs) self._insert_agent_logins_logoffs([], logoffs) result = stat_dao.get_login_intervals_in_range(self.session, self.start, self.end) self.assertEqual(len(result), 0)
def test_get_login_intervals_when_login_same_as_start_no_logoff(self): logins = [ {'time': self.start, 'callid': 'login_1', 'agent': self.aname1, 'chan_name': 'SIP/1234-00001'} ] self._insert_agent_callback_logins_logoffs(logins, []) self._insert_agent_logins_logoffs(logins, []) result = stat_dao.get_login_intervals_in_range(self.session, self.start, self.end) expected = { self.aid1: sorted([(logins[0]['time'], self.end)]) } self.assertEqual(expected, result)
def insert_periodic_stat(dao_sess, start, end): logger.info('Inserting agent periodic stat') time_computer = AgentTimeComputer(start, end, INTERVAL) dao_sess.begin() login_intervals = stat_dao.get_login_intervals_in_range(dao_sess, start, end) pause_intervals = stat_dao.get_pause_intervals_in_range(dao_sess, start, end) periodic_stats_login = time_computer.compute_login_time_in_period(login_intervals) periodic_stats_pause = time_computer.compute_pause_time_in_period(pause_intervals) periodic_stats_wrapup = queue_log_dao.get_wrapup_times(dao_sess, start, end, INTERVAL) dao_sess.commit() periodic_stats = _merge_update_agent_statistics( periodic_stats_login, periodic_stats_pause, periodic_stats_wrapup, ) dao_sess.begin() for period, stats in periodic_stats.iteritems(): stat_agent_periodic_dao.insert_stats(dao_sess, stats, period) dao_sess.commit()
def test_get_login_intervals_in_range_calls_empty(self): result = stat_dao.get_login_intervals_in_range(self.session, self.start, self.end) self.assertEqual(len(result), 0)
def test_get_login_intervals_in_range_calls_logins_in_range(self): logintimes = [ datetime.timedelta(minutes=10, seconds=13), datetime.timedelta(minutes=20), datetime.timedelta(minutes=7, seconds=21), datetime.timedelta(hours=2, minutes=3) ] cb_logins = [ {'time': self.start + datetime.timedelta(seconds=30), 'callid': 'login_1', 'agent': self.aname1, 'chan_name': 'SIP/1234-00001' }, {'time': self.start + datetime.timedelta(minutes=20), 'callid': 'login_2', 'agent': self.aname1, 'chan_name': 'SIP/1234-00002' }, ] cb_logoffs = [ {'time': cb_logins[0]['time'] + logintimes[0], 'callid': 'NONE', 'agent': self.aname1, 'chan_name': cb_logins[0]['chan_name'], 'talktime': logintimes[0], }, {'time': cb_logins[1]['time'] + logintimes[1], 'callid': 'NONE', 'agent': self.aname1, 'chan_name': cb_logins[1]['chan_name'], 'talktime': logintimes[1], }, ] self._insert_agent_callback_logins_logoffs(cb_logins, cb_logoffs) logins = [ {'time': self.start + datetime.timedelta(seconds=50), 'callid': 'login_3', 'agent': self.aname2, 'chan_name': 'SIP/5555-00001', }, {'time': self.start + datetime.timedelta(seconds=40), 'callid': 'login_4', 'agent': self.aname2, 'chan_name': 'SIP/5555-00002', }, ] logoffs = [ {'time': logins[0]['time'] + logintimes[2], 'callid': logins[0]['callid'], 'agent': self.aname2, 'chan_name': logins[0]['chan_name'], 'talktime': logintimes[2], }, {'time': logins[1]['time'] + logintimes[3], 'callid': logins[1]['callid'], 'agent': self.aname2, 'chan_name': logins[1]['chan_name'], 'talktime': logintimes[3], } ] self._insert_agent_logins_logoffs(logins, logoffs) result = stat_dao.get_login_intervals_in_range(self.session, self.start, self.end) expected = { self.aid1: sorted([(cb_logins[0]['time'], cb_logoffs[0]['time']), (cb_logins[1]['time'], cb_logoffs[1]['time'])]), self.aid2: sorted([(logins[1]['time'], logoffs[1]['time'])]), } self.assertEqual(expected, result)