def get_usage_for_month(self, dateobj): """ Returns all C{UsageItem} for month C{dateobj} """ if not isinstance(dateobj, datetime.date): raise ValueError("Don't know what to do with %s" % dateobj) first_current_month_day = dateobj.replace(day=1).timetuple() if dateobj.month < 12: nextmonth = dateobj.month + 1 nextyear = dateobj.year else: nextmonth = 1 nextyear = dateobj.year + 1 first_next_month_day = dateobj.replace(day=1, month=nextmonth, year=nextyear).timetuple() return list( self.store.query( UsageItem, AND( UsageItem.start_time >= Time.fromStructTime(first_current_month_day), UsageItem.start_time < Time.fromStructTime(first_next_month_day))))
def test_get_usage_for_day(self): """ Append 2 3G sessions that occurred 21/11/07 and get usage for that day """ # 16:20 PM 21 Nov 2007 now = datetime.datetime(2007, 11, 21, 16, 20) args = [ True, Time.fromDatetime(now), # from now to now + 60m (60min) Time.fromDatetime(now + datetime.timedelta(minutes=45)), 11212100, 12321222 ] args2 = [ True, # from now + 80m to now + 120m (40min) Time.fromDatetime(now + datetime.timedelta(minutes=80)), Time.fromDatetime(now + datetime.timedelta(minutes=120)), 112128, 1232121 ] item1 = self.mana.add_usage_item(*args) item2 = self.mana.add_usage_item(*args2) resp = self.mana.get_usage_for_day(now.date()) self.failUnlessIn(item1, resp) self.failUnlessIn(item2, resp)
def test_append_item(self): """ Test that appending a couple of usage items works """ args = [ True, Time.fromDatetime(datetime.datetime.now()), Time.fromDatetime(datetime.datetime.now() + datetime.timedelta(minutes=59)), 112100, 121222 ] args2 = [ False, Time.fromDatetime(datetime.datetime.now() - datetime.timedelta(minutes=43)), Time.fromDatetime(datetime.datetime.now() + datetime.timedelta(minutes=50)), 11244443, 12243453 ] item1 = self.mana.add_usage_item(*args) item2 = self.mana.add_usage_item(*args2) self.assertEquals(self.mana.store.getItemByID(item1.storeID), item1) self.assertEquals(self.mana.store.getItemByID(item2.storeID), item2) item1.deleteFromStore() item2.deleteFromStore()
def add_usage_item(self, umts, start, end, bits_recv, bits_sent): self.add_usage_entry(umts, start, end, bits_recv, bits_sent) return UsageItem(store=self.store, umts=umts, start_time=Time.fromDatetime(start), end_time=Time.fromDatetime(end), bits_recv=bits_recv, bits_sent=bits_sent)
def get_usage_for_day(self, dateobj): """ Returns all C{UsageItem} for day C{dateobj} """ if not isinstance(dateobj, datetime.date): raise ValueError("Don't know what to do with %s" % dateobj) today = dateobj.timetuple() tomorrow = (dateobj + datetime.timedelta(hours=24)).timetuple() return list(self.store.query(UsageItem, AND(UsageItem.start_time >= Time.fromStructTime(today), UsageItem.end_time < Time.fromStructTime(tomorrow))) )
def test_get_usage_for_month(self): # 16:20 PM 21 Nov 2006 now = datetime.datetime(2006, 11, 21, 16, 20) args = [True, # from now + 180m to now + 210m (30min) Time.fromDatetime(now + datetime.timedelta(minutes=180)), Time.fromDatetime(now + datetime.timedelta(minutes=210)), 112128, 1232121] item3 = self.mana.add_usage_item(*args) resp = list(self.mana.get_usage_for_month(now.date())) self.failUnless(len(resp) == 1) self.failUnlessIn(item3, resp)
def get_usage_for_day(self, dateobj): """ Returns all C{UsageItem} for day C{dateobj} """ if not isinstance(dateobj, datetime.date): raise ValueError("Don't know what to do with %s" % dateobj) today = dateobj.timetuple() tomorrow = (dateobj + datetime.timedelta(hours=24)).timetuple() return list( self.store.query( UsageItem, AND(UsageItem.start_time >= Time.fromStructTime(today), UsageItem.end_time < Time.fromStructTime(tomorrow))))
def tag(self, obj, tagName, tagger=None): """ """ # check to see if that tag exists. Put the object attribute first, # since each object should only have a handful of tags and the object # reference is indexed. As long as this is the case, it doesn't matter # whether the name or catalog attributes are indexed because selecting # from a small set of results is fast even without an index. if self.store.findFirst( Tag, AND(Tag.object == obj, Tag.name == tagName, Tag.catalog == self)): return # if the tag doesn't exist, maybe we need to create a new tagname object self.store.findOrCreate(_TagName, name=tagName, catalog=self) # Increment only if we are creating a new tag self.tagCount += 1 Tag(store=self.store, object=obj, name=tagName, catalog=self, created=Time(), tagger=tagger)
def add_message(self, sms, where=None): assert isinstance(sms, ShortMessage), "What are you trying to store?" return DBShortMessage(store=self.store, number=to_u(sms.get_number()), text=sms.get_text(), date=Time.fromDatetime(sms.datetime), where=where)
def test_get_usage_for_month(self): # 16:20 PM 21 Nov 2006 now = datetime.datetime(2006, 11, 21, 16, 20) args = [ True, # from now + 180m to now + 210m (30min) Time.fromDatetime(now + datetime.timedelta(minutes=180)), Time.fromDatetime(now + datetime.timedelta(minutes=210)), 112128, 1232121 ] item3 = self.mana.add_usage_item(*args) resp = list(self.mana.get_usage_for_month(now.date())) self.failUnless(len(resp) == 1) self.failUnlessIn(item3, resp)
def test_append_item(self): """ Test that appending a couple of usage items works """ args = [True, Time.fromDatetime(datetime.datetime.now()), Time.fromDatetime(datetime.datetime.now() + datetime.timedelta(minutes=59)), 112100, 121222] args2 = [False, Time.fromDatetime(datetime.datetime.now() - datetime.timedelta(minutes=43)), Time.fromDatetime(datetime.datetime.now() + datetime.timedelta(minutes=50)), 11244443, 12243453] item1 = self.mana.add_usage_item(*args) item2 = self.mana.add_usage_item(*args2) self.assertEquals(self.mana.store.getItemByID(item1.storeID), item1) self.assertEquals(self.mana.store.getItemByID(item2.storeID), item2) item1.deleteFromStore() item2.deleteFromStore()
def test_get_usage_for_day(self): """ Append 2 3G sessions that occurred 21/11/07 and get usage for that day """ # 16:20 PM 21 Nov 2007 now = datetime.datetime(2007, 11, 21, 16, 20) args = [True, Time.fromDatetime(now), # from now to now + 60m (60min) Time.fromDatetime(now + datetime.timedelta(minutes=45)), 11212100, 12321222] args2 = [True, # from now + 80m to now + 120m (40min) Time.fromDatetime(now + datetime.timedelta(minutes=80)), Time.fromDatetime(now + datetime.timedelta(minutes=120)), 112128, 1232121] item1 = self.mana.add_usage_item(*args) item2 = self.mana.add_usage_item(*args2) resp = self.mana.get_usage_for_day(now.date()) self.failUnlessIn(item1, resp) self.failUnlessIn(item2, resp)
def get_usage_for_month(self, dateobj): """ Returns all C{UsageItem} for month C{dateobj} """ if not isinstance(dateobj, datetime.date): raise ValueError("Don't know what to do with %s" % dateobj) first_current_month_day = dateobj.replace(day=1).timetuple() if dateobj.month < 12: nextmonth = dateobj.month + 1 nextyear = dateobj.year else: nextmonth = 1 nextyear = dateobj.year + 1 first_next_month_day = dateobj.replace(day=1, month=nextmonth, year=nextyear).timetuple() return list(self.store.query(UsageItem, AND(UsageItem.start_time >= Time.fromStructTime( first_current_month_day), UsageItem.start_time < Time.fromStructTime( first_next_month_day))) )
def add_current_usage(self, restart=True): """ Adds the current usage statistics to the database """ from vmc.common.oal import osobj tzinfo = osobj.get_tzinfo() end = Time.fromDatetime(datetime.datetime.now(tzinfo)) umts = self.conn_mode in THREEG_SIGNALS def get_iface_stats_cb(usage): # append usage item usage_manager.add_usage_item(umts, self.start, end, *usage) if restart: # reset start time self.start = end # reset usage stats self.start_recv = usage[0] self.start_sent = usage[1] d = osobj.get_iface_stats() d.addCallback(get_iface_stats_cb)
def now(self): # Testing hook return Time()
def get_iface_stats_cb(stats): self.start_recv, self.start_sent = stats self.start = Time.fromDatetime(datetime.datetime.now(tzinfo)) self.session_start = self.start
def outfilter(self, dbval, oself): if dbval is None: return None return Time.fromPOSIXTimestamp(dbval / MICRO)