Esempio n. 1
0
    def test_merge(self, ):
        n1 = Network.get(10001)
        # merge None exists
        n1.merge(10005)
        n1_new = Network.get(10001)
        self.assertEqual(n1.create_at, n1_new.create_at)
        self.assertEqual(n1.last_active, n1_new.last_active)

        n2 = Network.get(10002)
        n1.merge(n2.nid)
        n1_new = Network.get(10001)
        self.assertEqual(n1_new.create_at, n1.create_at)
        self.assertEqual(n1_new.last_active, n2.last_active)
Esempio n. 2
0
 def test_create(self, ):
     ip = '111.111.111.222'
     time = datetime.now().replace(microsecond=0)
     network = Network.create(ip, time)
     self.assertEqual(network.last_ip, ip)
     self.assertEqual(network.create_at, time)
     self.assertEqual(network.last_active, time)
Esempio n. 3
0
    def test_active(self, ):
        n1 = Network.get(10001)
        t1 = n1.last_active
        ip1 = n1.last_ip

        t = n1.last_active - timedelta(seconds=1)
        ip = '111.111.111.145'
        n1.active(ip, t)
        n1_new = Network.get(10001)
        self.assertEqual(n1_new.last_ip, ip1)
        self.assertEqual(n1_new.last_active, t1)

        t = n1.last_active + timedelta(seconds=1)
        n1.active(ip, t)
        n1_new = Network.get(10001)
        self.assertEqual(n1_new.last_ip, ip)
        self.assertEqual(n1_new.last_active, t)
Esempio n. 4
0
 def polymerize(self, ip):
     r2 = self.get_cache_last(ip)
     if len(r2) == 0:
         return None
     r1 = self.get_cache_start(ip)
     # find uid has max number of uids
     r = {}
     for uid, dt in r2.items():
         r[uid] = {
             'start': r1[uid],
             'end': dt,
             'count': 0,
             'uids': [],
         }
     maxUid = None
     maxCount = 0
     for uid, dt in r1.items():
         for uid2, c in r.items():
             if dt >= c['start'] and dt <= c['end']:
                 c['count'] += 1
                 c['uids'].append(uid)
                 if c['count'] > maxCount:
                     maxCount = c['count']
                     maxUid = uid2
     # loop find more uids, use plan2
     start_time = r1[maxUid]
     end_time = r2[maxUid]
     outer = r1.keys()
     inner = []
     # loop find
     while True:
         changed = False
         for uid in outer:
             if uid in inner:
                 continue
             if r1[uid] >= start_time and r1[uid] <= end_time:
                 inner.append(uid)
                 if uid in r2 and r2[uid] > end_time:
                     end_time = r2[uid]
                     changed = True
                 continue
             if uid in r2 and r2[uid] >= start_time and r2[uid] <= end_time:
                 inner.append(uid)
                 if r1[uid] < start_time:
                     start_time = r1[uid]
                     changed = True
                 continue
         if not changed:
             break
     network = Network.create(ip, start_time, end_time)
     for uid in inner:
         dt = r2[uid] if uid in r2 else r1[uid]
         NetworkUser.create(network.nid, uid, ip, dt)
     # clear log
     self.clear_cache(ip)
     return network
Esempio n. 5
0
 def process(self, keys, ip, dt):
     dt = dt.replace(microsecond=0)
     uid = self.keys_to_uid(keys, dt)
     network = Network.get_active(ip)
     if network is not None:
         nu = NetworkUser.get_by_uid_nid(network.nid, uid)
         if nu is not None and \
             nu.last_active > dt - timedelta(CONTINUE_ACTIVE):
             # plan 1
             nu.update_active(ip, dt)
             network.active(ip, dt)
             self.collect_in_cache(ip, network)
             return
     self.cache_log(ip, uid, dt)
     self.try_polymerize(ip, dt, network)
Esempio n. 6
0
 def test_similar(self, ):
     n1 = Network.get(10001)
     n2 = Network.get(10002)
     self.assertTrue(n1.similar(n2))
Esempio n. 7
0
 def test_remove(self, ):
     Network.remove(10001)
     self.assertEqual(Network.get(10001), None)
Esempio n. 8
0
 def test_get_before_time(self, ):
     time = datetime.strptime("21/04/18 16:32", "%d/%m/%y %H:%M")
     all = [n for n in Network.get_before_time(time)]
     self.assertEqual(len(all), 2)