def test_get_pause_intervals_in_range_multiple_pauseall(self):
        _, agent_id_1 = self._insert_agent('Agent/1')
        start = dt(2012, 7, 1, tzinfo=UTC)
        end = dt(2012, 7, 31, 23, 59, 59, 999999, tzinfo=UTC)

        queue_log_data = '''\
| time                          | callid | queuename | agent   | event      | data1 | data2 | data3 | data4 | data5 |
| 2012-07-21 09:54:09.999999+00 | NONE   | NONE      | Agent/1 | PAUSEALL   |       |       |       |       |       |
| 2012-07-21 09:59:09.999999+00 | NONE   | NONE      | Agent/1 | PAUSEALL   |       |       |       |       |       |
| 2012-07-21 10:54:09.999999+00 | NONE   | NONE      | Agent/1 | UNPAUSEALL |       |       |       |       |       |
| 2012-07-21 23:59:19.999999+00 | NONE   | NONE      | Agent/1 | PAUSEALL   |       |       |       |       |       |
| 2012-07-22 02:02:19.999999+00 | NONE   | NONE      | Agent/1 | UNPAUSEALL |       |       |       |       |       |
'''

        self._insert_queue_log_data(queue_log_data)

        result = stat_dao.get_pause_intervals_in_range(self.session, start,
                                                       end)
        for agent, logins in six.iteritems(result):
            result[agent] = sorted(logins, key=lambda login: login[0])

        expected = {
            agent_id_1: [(
                dt(2012, 7, 21, 9, 54, 9, 999999, tzinfo=UTC),
                dt(2012, 7, 21, 10, 54, 9, 999999, tzinfo=UTC),
            ),
                         (
                             dt(2012, 7, 21, 23, 59, 19, 999999, tzinfo=UTC),
                             dt(2012, 7, 22, 2, 2, 19, 999999, tzinfo=UTC),
                         )]
        }

        self.assertEqual(result, expected)
Пример #2
0
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()
Пример #3
0
    def test_get_pause_intervals_in_range_multiple_pauseall(self):
        _, agent_id_1 = self._insert_agent('Agent/1')
        start = dt(2012, 07, 01)
        end = dt(2012, 07, 31, 23, 59, 59, 999999)

        queue_log_data = '''\
| time                       | callid | queuename | agent   | event      | data1 | data2 | data3 | data4 | data5 |
| 2012-07-21 09:54:09.999999 | NONE   | NONE      | Agent/1 | PAUSEALL   |       |       |       |       |       |
| 2012-07-21 09:59:09.999999 | NONE   | NONE      | Agent/1 | PAUSEALL   |       |       |       |       |       |
| 2012-07-21 10:54:09.999999 | NONE   | NONE      | Agent/1 | UNPAUSEALL |       |       |       |       |       |
| 2012-07-21 23:59:19.999999 | NONE   | NONE      | Agent/1 | PAUSEALL   |       |       |       |       |       |
| 2012-07-22 02:02:19.999999 | NONE   | NONE      | Agent/1 | UNPAUSEALL |       |       |       |       |       |
'''

        self._insert_queue_log_data(queue_log_data)

        result = stat_dao.get_pause_intervals_in_range(self.session, start, end)
        for agent, logins in result.iteritems():
            result[agent] = sorted(logins, key=lambda login: login[0])

        expected = {
            agent_id_1: [
                (dt(2012, 7, 21, 9, 54, 9, 999999), dt(2012, 7, 21, 10, 54, 9, 999999)),
                (dt(2012, 7, 21, 23, 59, 19, 999999), dt(2012, 7, 22, 2, 2, 19, 999999))
            ]
        }

        self.assertEqual(result, expected)
Пример #4
0
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()