def test_get_wrapup_time(self): _, agent_id_1 = self._insert_agent('Agent/1') _, agent_id_2 = self._insert_agent('Agent/2') start = datetime(2012, 10, 1, 6) end = datetime(2012, 10, 1, 7, 59, 59, 999999) queue_log_data = '''\ | time | callid | queuename | agent | event | data1 | data2 | data3 | data4 | data5 | | 2012-10-01 05:59:50.000000 | NONE | NONE | Agent/1 | WRAPUPSTART | 30 | | | | | | 2012-10-01 06:00:10.000000 | NONE | NONE | Agent/1 | WRAPUPSTART | 15 | | | | | | 2012-10-01 06:00:15.000000 | NONE | NONE | Agent/2 | WRAPUPSTART | 30 | | | | | | 2012-10-01 06:59:50.000000 | NONE | NONE | Agent/1 | WRAPUPSTART | 15 | | | | | | 2012-10-01 07:00:10.000000 | NONE | NONE | Agent/1 | WRAPUPSTART | 30 | | | | | | 2012-10-01 08:00:10.000000 | NONE | NONE | Agent/1 | WRAPUPSTART | 30 | | | | | | 2012-10-01 07:59:40.000000 | NONE | NONE | Agent/2 | WRAPUPSTART | 30 | | | | | ''' self._insert_queue_log_data(queue_log_data) result = queue_log_dao.get_wrapup_times(self.session, start, end, ONE_HOUR) expected = { datetime(2012, 10, 1, 6): { agent_id_1: {'wrapup_time': timedelta(seconds=45)}, agent_id_2: {'wrapup_time': timedelta(seconds=30)}, }, datetime(2012, 10, 1, 7): { agent_id_1: {'wrapup_time': timedelta(seconds=35)}, agent_id_2: {'wrapup_time': timedelta(seconds=20)}, }, } self.assertEqual(result, expected)
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_wrapup_time(self): _, agent_id_1 = self._insert_agent('Agent/1') _, agent_id_2 = self._insert_agent('Agent/2') start = datetime(2012, 10, 1, 6) end = datetime(2012, 10, 1, 7, 59, 59, 999999) queue_log_data = '''\ | time | callid | queuename | agent | event | data1 | data2 | data3 | data4 | data5 | | 2012-10-01 05:59:50.000000 | NONE | NONE | Agent/1 | WRAPUPSTART | 30 | | | | | | 2012-10-01 06:00:10.000000 | NONE | NONE | Agent/1 | WRAPUPSTART | 15 | | | | | | 2012-10-01 06:00:15.000000 | NONE | NONE | Agent/2 | WRAPUPSTART | 30 | | | | | | 2012-10-01 06:59:50.000000 | NONE | NONE | Agent/1 | WRAPUPSTART | 15 | | | | | | 2012-10-01 07:00:10.000000 | NONE | NONE | Agent/1 | WRAPUPSTART | 30 | | | | | | 2012-10-01 08:00:10.000000 | NONE | NONE | Agent/1 | WRAPUPSTART | 30 | | | | | | 2012-10-01 07:59:40.000000 | NONE | NONE | Agent/2 | WRAPUPSTART | 30 | | | | | ''' self._insert_queue_log_data(queue_log_data) result = queue_log_dao.get_wrapup_times(self.session, start, end, ONE_HOUR) expected = { datetime(2012, 10, 1, 6): { agent_id_1: { 'wrapup_time': timedelta(seconds=45) }, agent_id_2: { 'wrapup_time': timedelta(seconds=30) }, }, datetime(2012, 10, 1, 7): { agent_id_1: { 'wrapup_time': timedelta(seconds=35) }, agent_id_2: { 'wrapup_time': timedelta(seconds=20) }, }, } self.assertEqual(result, expected)
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()