Beispiel #1
0
 def test_is_identified(self):
     with LogDir() as log_dir:
         KM.log_dir = log_dir
         with StdIO() as stdio:
             self.assertFalse(KM.is_identified())
             KM.identify('id')
             self.assertTrue(KM.is_identified())
Beispiel #2
0
 def test_generate_query(self):
     host = 'example.com'
     _t = 1
     _k = 'key'
     _p = 'id'
     with LogDir() as log_dir:
         KM.init(_k, host=host, to_stderr=False, log_dir=log_dir,
                 use_cron=False)
         KM.identify(_p)
         # Ensure time.time() always returns the same value
         time = self.mocker.replace('time.time')
         time()
         self.mocker.result(_t)
         self.mocker.count(1, None)
         urlopen = self.mocker.replace('urllib2.urlopen')
         # First
         urlopen('http://%s/e?_t=%d&_k=%s' % (host, _t, _k))
         self.mocker.result(None)
         # Second
         urlopen('http://%s/e?_t=%d&_k=%s&_p=%s' % (host, _t, _k, _p))
         self.mocker.result(None)
         # Third
         urlopen('http://%s/f?_t=%d&_k=%s&_p=%s' % (host, _t, _k, _p))
         self.mocker.throw(urllib2.HTTPError('', 500, 'Error', None, None))
         with self.mocker:
             # First
             KM.generate_query('e', {}, update=False)
             # Second
             KM.generate_query('e', {}, update=True)
             # Third
             KM.generate_query('f', {}, update=True)
             with self.get_log('error') as log:
                 self.assertEndsWith(log.read(),
                                     '> HTTP Error 500: Error\n')
Beispiel #3
0
 def test_is_identified(self):
     with LogDir() as log_dir:
         KM.log_dir = log_dir
         with StdIO() as stdio:
             self.assertFalse(KM.is_identified())
             KM.identify('id')
             self.assertTrue(KM.is_identified())
Beispiel #4
0
 def test_is_initialized(self):
     with LogDir() as log_dir:
         KM.log_dir = log_dir
         with StdIO() as stdio:
             self.assertFalse(KM.is_initialized())
             KM.init('key')
             self.assertTrue(KM.is_initialized())
Beispiel #5
0
 def test_record(self):
     action = 'action'
     with self.assertQuery('e', {'_n': action}):
         KM.record(action)
     data = {'a': 'a'}
     with self.assertQuery('s', data):
         KM.record(data)
Beispiel #6
0
 def test_record(self):
     action = 'action'
     with self.assertQuery('e', {'_n': action}):
         KM.record(action)
     data = {'a': 'a'}
     with self.assertQuery('s', data):
         KM.record(data)
Beispiel #7
0
 def test_is_initialized(self):
     with LogDir() as log_dir:
         KM.log_dir = log_dir
         with StdIO() as stdio:
             self.assertFalse(KM.is_initialized())
             KM.init('key')
             self.assertTrue(KM.is_initialized())
Beispiel #8
0
 def assertQuery(self, type, data, update=True):
     host = 'example.com'
     _t = 1
     _k = 'key'
     _p = 'id'
     with LogDir() as log_dir:
         KM.init(_k,
                 host=host,
                 to_stderr=False,
                 log_dir=log_dir,
                 use_cron=True)
         KM.identify(_p)
         # Ensure time.time() always returns the same value
         time = self.mocker.replace('time.time')
         time()
         self.mocker.result(_t)
         self.mocker.count(0, None)
         with self.mocker:
             yield
             with self.get_log('query') as log:
                 data = dict(data, _t=str(_t), _k=_k)
                 if update:
                     data['_p'] = _p
                 line = log.readline().strip()
                 bits = urlparse.urlsplit(line)
                 self.assertEqual(bits[2], '/%s' % urllib.quote(type))
                 self.assertEqual(dict(parse_qsl(bits[3])), data)
                 self.assertEqual(log.readline(), '')
             os.unlink(KM.log_name('query'))
Beispiel #9
0
 def assertQuery(self, type, data, update=True):
     host = 'example.com'
     _t = 1
     _k = 'key'
     _p = 'id'
     with LogDir() as log_dir:
         KM.init(_k, host=host, to_stderr=False, log_dir=log_dir,
                 use_cron=True)
         KM.identify(_p)
         # Ensure time.time() always returns the same value
         time = self.mocker.replace('time.time')
         time()
         self.mocker.result(_t)
         self.mocker.count(0, None)
         with self.mocker:
             yield
             with self.get_log('query') as log:
                 data = dict(data, _t=str(_t), _k=_k)
                 if update:
                     data['_p'] = _p
                 line = log.readline().strip()
                 bits = urlparse.urlsplit(line)
                 self.assertEqual(bits[2], '/%s' % urllib.quote(type))
                 self.assertEqual(dict(parse_qsl(bits[3])), data)
                 self.assertEqual(log.readline(), '')
             os.unlink(KM.log_name('query'))
Beispiel #10
0
 def test_log_dir_writable(self):
     log_dir = '/invalid/'
     with StdIO() as stdio:
         KM.init('key', to_stderr=True, log_dir=log_dir)
         self.assertEqual(stdio.stderr.getvalue(),
                          ("Couldn't open %(log_dir)skissmetrics_query.log "
                           "for writing. Does %(log_dir)s exist? "
                           "Permissions?\n" % {'log_dir': log_dir}))
Beispiel #11
0
 def test_log_error(self):
     with LogDir() as log_dir:
         KM.init('key', to_stderr=True, log_dir=log_dir)
         with StdIO() as stdio:
             KM.log_error('Error')
             self.assertEndsWith(stdio.stderr.getvalue(), '> Error\n')
         with self.get_log('error') as log:
             self.assertEndsWith(log.read(), '> Error\n')
Beispiel #12
0
 def test_log_error(self):
     with LogDir() as log_dir:
         KM.init('key', to_stderr=True, log_dir=log_dir)
         with StdIO() as stdio:
             KM.log_error('Error')
             self.assertEndsWith(stdio.stderr.getvalue(),
                                 '> Error\n')
         with self.get_log('error') as log:
             self.assertEndsWith(log.read(), '> Error\n')
Beispiel #13
0
 def test_log_dir_writable(self):
     log_dir = '/invalid/'
     with StdIO() as stdio:
         KM.init('key', to_stderr=True, log_dir=log_dir)
         self.assertEqual(stdio.stderr.getvalue(),
                          ("Couldn't open %(log_dir)skissmetrics_query.log "
                           "for writing. Does %(log_dir)s exist? "
                           "Permissions?\n" % {
                               'log_dir': log_dir
                           }))
Beispiel #14
0
 def test_is_initialize_and_identified(self):
     with LogDir() as log_dir:
         KM.log_dir = log_dir
         with StdIO() as stdio:
             self.assertFalse(KM.is_initialized_and_identified())
             KM.init('key')
             self.assertFalse(KM.is_initialized_and_identified())
             KM.identify('id')
             self.assertTrue(KM.is_initialized_and_identified())
             KM.init(None)
             self.assertFalse(KM.is_initialized_and_identified())
Beispiel #15
0
 def test_is_initialize_and_identified(self):
     with LogDir() as log_dir:
         KM.log_dir = log_dir
         with StdIO() as stdio:
             self.assertFalse(KM.is_initialized_and_identified())
             KM.init('key')
             self.assertFalse(KM.is_initialized_and_identified())
             KM.identify('id')
             self.assertTrue(KM.is_initialized_and_identified())
             KM.init(None)
             self.assertFalse(KM.is_initialized_and_identified())
Beispiel #16
0
 def test_log(self):
     with LogDir() as log_dir:
         KM.init('key', to_stderr=True, log_dir=log_dir)
         KM.log('error', 'Error')
         with self.get_log('error') as log:
             self.assertEndsWith(log.read(), 'Error\n')
         KM.log('query', 'Query')
         with self.get_log('query') as log:
             self.assertEndsWith(log.read(), 'Query\n')
         KM.log('send', 'Send')
         with self.get_log('send') as log:
             self.assertEndsWith(log.read(), 'Send\n')
         KM.log('invalid', 'Invalid')
Beispiel #17
0
 def test_log(self):
     with LogDir() as log_dir:
         KM.init('key', to_stderr=True, log_dir=log_dir)
         KM.log('error', 'Error')
         with self.get_log('error') as log:
             self.assertEndsWith(log.read(), 'Error\n')
         KM.log('query', 'Query')
         with self.get_log('query') as log:
             self.assertEndsWith(log.read(), 'Query\n')
         KM.log('send', 'Send')
         with self.get_log('send') as log:
             self.assertEndsWith(log.read(), 'Send\n')
         KM.log('invalid', 'Invalid')
Beispiel #18
0
 def test_generate_query_cron(self):
     host = 'example.com'
     _t = 1
     _k = 'key'
     _p = 'id'
     with LogDir() as log_dir:
         KM.init(_k,
                 host=host,
                 to_stderr=False,
                 log_dir=log_dir,
                 use_cron=True)
         KM.identify(_p)
         # Ensure time.time() always returns the same value
         time = self.mocker.replace('time.time')
         time()
         self.mocker.result(_t)
         self.mocker.count(1, None)
         with self.mocker:
             KM.generate_query('e', {}, update=False)
             KM.generate_query('e', {}, update=True)
             with self.get_log('query') as log:
                 self.assertEqual(log.readline(),
                                  '/e?_t=%s&_k=%s\n' % (_t, _k))
                 self.assertEqual(log.readline(),
                                  '/e?_t=%s&_k=%s&_p=%s\n' % (_t, _k, _p))
                 self.assertEqual(log.read(), '')
Beispiel #19
0
 def get_log(self, log_name):
     try:
         with open(KM.log_name(log_name), 'r') as log_file:
             yield log_file
     except IOError, e:
         if e.errno == errno.ENOENT:
             yield None
Beispiel #20
0
 def get_log(self, log_name):
     try:
         with open(KM.log_name(log_name), 'r') as log_file:
             yield log_file
     except IOError, e:
         if e.errno == errno.ENOENT:
             yield None
Beispiel #21
0
 def test_send_query(self):
     host = 'example.com'
     line = '/line?param=1'
     url = 'http://%s%s' % (host, line)
     with LogDir() as log_dir:
         KM.init('key', host=host, to_stderr=False, log_dir=log_dir)
         urlopen = self.mocker.replace('urllib2.urlopen')
         # First
         urlopen(url)
         self.mocker.result(None)
         # Second
         urlopen(url)
         self.mocker.throw(urllib2.HTTPError(url, 500, 'Error', None, None))
         with self.mocker:
             # First
             KM.send_query(line)
             # Second
             self.assertRaises(urllib2.HTTPError, KM.send_query, line)
Beispiel #22
0
 def test_send_query(self):
     host = 'example.com'
     line = '/line?param=1'
     url = 'http://%s%s' % (host, line)
     with LogDir() as log_dir:
         KM.init('key', host=host, to_stderr=False, log_dir=log_dir)
         urlopen = self.mocker.replace('urllib2.urlopen')
         # First
         urlopen(url)
         self.mocker.result(None)
         # Second
         urlopen(url)
         self.mocker.throw(urllib2.HTTPError(url, 500, 'Error', None, None))
         with self.mocker:
             # First
             KM.send_query(line)
             # Second
             self.assertRaises(urllib2.HTTPError, KM.send_query, line)
Beispiel #23
0
    def dispatch(self, dispatch_observ):
        """ Compute the assignment between drivers and passengers at each time step
        :param dispatch_observ: a list of dict, the key in the dict includes:
          order_id, int
          driver_id, int
          order_driver_distance, float
          order_start_location, a list as [lng, lat], float
          order_finish_location, a list as [lng, lat], float
          driver_location, a list as [lng, lat], float
          timestamp, int
          order_finish_timestamp, int
          day_of_week, int
          reward_units, float
          pick_up_eta, float

        :return: a list of dict, the key in the dict includes:
          order_id and driver_id, the pair indicating the assignment
        """
        if len(dispatch_observ) == 0:
            return []

        order_id2loc, driver_id2loc = {}, {}
        order_loc2id, driver_loc2id = {}, {}
        count_order, count_driver = 0, 0
        for pair in dispatch_observ:
            #if self.get_finish_prob(pair) <= 0: # TODO: may eliminate an order/driver?
            #    continue
            if pair['order_id'] not in order_id2loc:
                order_id2loc[pair['order_id']] = count_order
                order_loc2id[count_order] = pair['order_id']
                count_order += 1
            if pair['driver_id'] not in driver_id2loc:
                driver_id2loc[pair['driver_id']] = count_driver
                driver_loc2id[count_driver] = pair['driver_id']
                count_driver += 1

        weights = torch.zeros(len(order_id2loc),
                              len(driver_id2loc) + len(order_id2loc))
        for pair in dispatch_observ:
            i = order_id2loc[pair['order_id']]
            j = driver_id2loc[pair['driver_id']]
            weights[i, j] = self.get_weight(pair)
        raw_assign = KM(weights).run()[:len(driver_id2loc)]
        dispatch_action = []
        for i, item in enumerate(raw_assign):
            if item != -1:
                dispatch_action.append({
                    'order_id': order_loc2id[item.item()],
                    'driver_id': driver_loc2id[i]
                })

        self.update_value_network(dispatch_observ, dispatch_action)

        return dispatch_action
Beispiel #24
0
 def test_reset(self):
     with LogDir() as log_dir:
         KM.init('key', to_stderr=False, log_dir=log_dir)
         KM.identify('id')
         KM.log_query('Query')
         self.assertEqual(KM._key, 'key')
         self.assertEqual(KM._id, 'id')
         self.assertEqual(
             KM._logs,
             {'query': os.path.join(log_dir, 'kissmetrics_query.log')})
     KM.reset()
     self.assertEqual(KM._key, None)
     self.assertEqual(KM._id, None)
     self.assertEqual(KM._logs, {})
Beispiel #25
0
 def test_send_logged_queries(self):
     host = 'example.com'
     line = '/type?foo=1&bar=2'
     with LogDir() as log_dir:
         KM.init('key', host=host, log_dir=log_dir)
         # Write line to the query log
         KM.log_query(line)
         # Expect that line to be requested
         urlopen = self.mocker.replace('urllib2.urlopen')
         urlopen('http://%s%s' % (host, line))
         self.mocker.result(None)
         with self.mocker:
             KM.send_logged_queries()
             self.assertFalse(os.path.exists(KM.log_name('query')))
             self.assertFalse(os.path.exists(KM.log_name('send')))
Beispiel #26
0
 def test_reset(self):
     with LogDir() as log_dir:
         KM.init('key', to_stderr=False, log_dir=log_dir)
         KM.identify('id')
         KM.log_query('Query')
         self.assertEqual(KM._key, 'key')
         self.assertEqual(KM._id, 'id')
         self.assertEqual(
             KM._logs,
             {'query': os.path.join(log_dir, 'kissmetrics_query.log')}
         )
     KM.reset()
     self.assertEqual(KM._key, None)
     self.assertEqual(KM._id, None)
     self.assertEqual(KM._logs, {})
Beispiel #27
0
 def test_send_logged_queries(self):
     host = 'example.com'
     line = '/type?foo=1&bar=2'
     with LogDir() as log_dir:
         KM.init('key', host=host, log_dir=log_dir)
         # Write line to the query log
         KM.log_query(line)
         # Expect that line to be requested
         urlopen = self.mocker.replace('urllib2.urlopen')
         urlopen('http://%s%s' % (host, line))
         self.mocker.result(None)
         with self.mocker:
             KM.send_logged_queries()
             self.assertFalse(os.path.exists(KM.log_name('query')))
             self.assertFalse(os.path.exists(KM.log_name('send')))
Beispiel #28
0
 def test_log_name(self):
     log_dir = '/var/log'
     KM.init('key', to_stderr=False, log_dir=log_dir)
     self.assertEqual(KM.log_name('invalid'), os.path.join(log_dir, ''))
     self.assertEqual(KM.log_name('error'),
                      os.path.join(log_dir, 'kissmetrics_error.log'))
     self.assertEqual(KM.log_name('query'),
                      os.path.join(log_dir, 'kissmetrics_query.log'))
     send_name = KM.log_name('send')
     self.assertStartsWith(send_name, log_dir)
     self.assertEndsWith(send_name, 'kissmetrics_sending.log')
     self.assertEqual(KM.log_name('send'), send_name)
Beispiel #29
0
 def test_generate_query(self):
     host = 'example.com'
     _t = 1
     _k = 'key'
     _p = 'id'
     with LogDir() as log_dir:
         KM.init(_k,
                 host=host,
                 to_stderr=False,
                 log_dir=log_dir,
                 use_cron=False)
         KM.identify(_p)
         # Ensure time.time() always returns the same value
         time = self.mocker.replace('time.time')
         time()
         self.mocker.result(_t)
         self.mocker.count(1, None)
         urlopen = self.mocker.replace('urllib2.urlopen')
         # First
         urlopen('http://%s/e?_t=%d&_k=%s' % (host, _t, _k))
         self.mocker.result(None)
         # Second
         urlopen('http://%s/e?_t=%d&_k=%s&_p=%s' % (host, _t, _k, _p))
         self.mocker.result(None)
         # Third
         urlopen('http://%s/f?_t=%d&_k=%s&_p=%s' % (host, _t, _k, _p))
         self.mocker.throw(urllib2.HTTPError('', 500, 'Error', None, None))
         with self.mocker:
             # First
             KM.generate_query('e', {}, update=False)
             # Second
             KM.generate_query('e', {}, update=True)
             # Third
             KM.generate_query('f', {}, update=True)
             with self.get_log('error') as log:
                 self.assertEndsWith(log.read(),
                                     '> HTTP Error 500: Error\n')
Beispiel #30
0
 def test_log_name(self):
     log_dir = '/var/log'
     KM.init('key', to_stderr=False, log_dir=log_dir)
     self.assertEqual(KM.log_name('invalid'),
                      os.path.join(log_dir, ''))
     self.assertEqual(KM.log_name('error'),
                      os.path.join(log_dir, 'kissmetrics_error.log'))
     self.assertEqual(KM.log_name('query'),
                      os.path.join(log_dir, 'kissmetrics_query.log'))
     send_name = KM.log_name('send')
     self.assertStartsWith(send_name, log_dir)
     self.assertEndsWith(send_name, 'kissmetrics_sending.log')
     self.assertEqual(KM.log_name('send'), send_name)
Beispiel #31
0
 def test_generate_query_cron(self):
     host = 'example.com'
     _t = 1
     _k = 'key'
     _p = 'id'
     with LogDir() as log_dir:
         KM.init(_k, host=host, to_stderr=False, log_dir=log_dir,
                 use_cron=True)
         KM.identify(_p)
         # Ensure time.time() always returns the same value
         time = self.mocker.replace('time.time')
         time()
         self.mocker.result(_t)
         self.mocker.count(1, None)
         with self.mocker:
             KM.generate_query('e', {}, update=False)
             KM.generate_query('e', {}, update=True)
             with self.get_log('query') as log:
                 self.assertEqual(log.readline(),
                                  '/e?_t=%s&_k=%s\n' % (_t, _k))
                 self.assertEqual(log.readline(),
                                  '/e?_t=%s&_k=%s&_p=%s\n' % (_t, _k, _p))
                 self.assertEqual(log.read(), '')
Beispiel #32
0
 def test_set(self):
     data = {'a': 'a'}
     with self.assertQuery('s', data):
         KM.set(data)
Beispiel #33
0
 def test_log_query(self):
     with LogDir() as log_dir:
         KM.init('key', to_stderr=False, log_dir=log_dir)
         KM.log_query('Query')
         with self.get_log('query') as log:
             self.assertEndsWith(log.read(), 'Query\n')
Beispiel #34
0
 def test_init(self):
     self.assertRaises(TypeError, KM.init)
     KM.init('key1')
     self.assertEqual(KM._key, 'key1')
     KM.init(key='key2')
     self.assertEqual(KM._key, 'key2')
     KM.init('key', host='example.com:80')
     self.assertEqual(KM.host, 'example.com:80')
     KM.init('key', log_dir='/tmp/')
     self.assertEqual(KM.log_dir, '/tmp/')
     KM.init('key', use_cron=True)
     self.assertEqual(KM._use_cron, True)
     KM.init('key', to_stderr=False)
     self.assertEqual(KM._to_stderr, False)
Beispiel #35
0
 def test_log_send(self):
     with LogDir() as log_dir:
         KM.init('key', to_stderr=False, log_dir=log_dir)
         KM.log_send('Send')
         with self.get_log('send') as log:
             self.assertEndsWith(log.read(), 'Send\n')
Beispiel #36
0
 def test_log_query(self):
     with LogDir() as log_dir:
         KM.init('key', to_stderr=False, log_dir=log_dir)
         KM.log_query('Query')
         with self.get_log('query') as log:
             self.assertEndsWith(log.read(), 'Query\n')
Beispiel #37
0
 def test_set(self):
     data = {'a': 'a'}
     with self.assertQuery('s', data):
         KM.set(data)
Beispiel #38
0
 def test_alias(self):
     name = 'name'
     alias_to = 'alias_to'
     with self.assertQuery('a', {'_n': alias_to, '_p': name}, update=False):
         KM.alias(name, alias_to)
Beispiel #39
0
 def test_log_send(self):
     with LogDir() as log_dir:
         KM.init('key', to_stderr=False, log_dir=log_dir)
         KM.log_send('Send')
         with self.get_log('send') as log:
             self.assertEndsWith(log.read(), 'Send\n')
Beispiel #40
0
 def test_init(self):
     self.assertRaises(TypeError, KM.init)
     KM.init('key1')
     self.assertEqual(KM._key, 'key1')
     KM.init(key='key2')
     self.assertEqual(KM._key, 'key2')
     KM.init('key', host='example.com:80')
     self.assertEqual(KM.host, 'example.com:80')
     KM.init('key', log_dir='/tmp/')
     self.assertEqual(KM.log_dir, '/tmp/')
     KM.init('key', use_cron=True)
     self.assertEqual(KM._use_cron, True)
     KM.init('key', to_stderr=False)
     self.assertEqual(KM._to_stderr, False)
Beispiel #41
0
 def test_alias(self):
     name = 'name'
     alias_to = 'alias_to'
     with self.assertQuery('a', {'_n': alias_to, '_p': name}, update=False):
         KM.alias(name, alias_to)
Beispiel #42
0
 def test_log_dir(self):
     KM.init('key', to_stderr=False, log_dir='/invalid/')
Beispiel #43
0
 def test_log_dir(self):
     KM.init('key', to_stderr=False, log_dir='/invalid/')