예제 #1
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)
예제 #2
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