/ Published in: Python
This is my Python code
Expand |
Embed | Plain Text
def str2datetime(s, microsecs = 0, format = "%Y-%m-%dT%H:%M:%S"): parts = s.split(".") dt = datetime.strptime(parts[0], format) if microsecs > 0: return dt.replace(microsecond=int(parts[1][0:6])) return dt def round_off(mins, secs, to_nearest=1): div_result, remainder = divmod(mins, to_nearest) if remainder < 7: return to_nearest * div_result elif remainder > 7: return to_nearest * (div_result + 1) else: #remainder == 7 if secs < 30: return to_nearest * div_result else: return to_nearest * (div_result + 1) def panelrollup(): print "rolling up panels" from datetime import timedelta format = "%Y-%m-%dT%H:%M:%S" my_min=db4.data_table.FreezeTime.min() my_max=db4.data_table.FreezeTime.max() firsttime = db4(db4.data_table).select(my_min).first()[my_min] lasttime = db4(db4.data_table).select(my_max).first()[my_max] starttime = firsttime.replace(minute=round_off(firsttime.minute, firsttime.second), second=0) finishtime = lasttime.replace(minute=round_off(lasttime.minute, lasttime.second), second=0) # round_off rounds down, so: if firsttime > starttime: starttime = starttime + timedelta(minutes=1) # starttime is the beginning of the rollup loop # endtime is the end # endtime = starttime + timedelta(minutes=1) # setting up the report queries vi_min = db4.data_table.Vi.min() vi_max = db4.data_table.Vi.max() vi_sum = db4.data_table.Vi.sum() vi_count = db4.data_table.Vi.count() vo_min = db4.data_table.Vo.min() vo_max = db4.data_table.Vo.max() vo_sum = db4.data_table.Vo.sum() vo_count = db4.data_table.Vo.count() ii_min = db4.data_table.Ii.min() ii_max = db4.data_table.Ii.max() ii_sum = db4.data_table.Ii.sum() ii_count = db4.data_table.Ii.count() io_min = db4.data_table.Io.min() io_max = db4.data_table.Io.max() io_sum = db4.data_table.Io.sum() io_count = db4.data_table.Io.count() pi_min = db4.data_table.Pi.min() pi_max = db4.data_table.Pi.max() pi_sum = db4.data_table.Pi.sum() pi_count = db4.data_table.Pi.count() po_min = db4.data_table.Po.min() po_max = db4.data_table.Po.max() po_sum = db4.data_table.Po.sum() po_count = db4.data_table.Po.count() my_macaddr = db4().select(db4.data_table.MacAddr, distinct=True, orderby=db4.data_table.MacAddr) my_panels = [str(my_macaddr[i].MacAddr) for i in range(len(my_macaddr))] endtime = starttime kickoff = datetime.utcnow() print "panels start", kickoff while endtime <= finishtime: endtime = endtime + timedelta(minutes=1) for panel in my_panels: myset = db4((db4.data_table.MacAddr == panel) & (db4.data_table.FreezeTime >= starttime) & (db4.data_table.FreezeTime < endtime)) rows = db4((db4.data_table.MacAddr == panel) & (db4.data_table.FreezeTime >= starttime) & (db4.data_table.FreezeTime < endtime)).select(vi_min, vi_max, vi_sum, vi_count, vo_min, vo_max, vo_sum, vo_count, ii_min, ii_max, ii_sum, ii_count, io_min, io_max, io_sum, io_count, pi_min, pi_max, pi_sum, pi_count, po_min, po_max, po_sum, po_count) l_vi_min=rows[0][vi_min] l_vi_max=rows[0][vi_max] l_vi_sum=rows[0][vi_sum] l_vi_count=rows[0][vi_count] l_vi_avg=l_vi_sum/(l_vi_count or 1) l_vo_min=rows[0][vo_min] l_vo_max=rows[0][vo_max] l_vo_sum=rows[0][vo_sum] l_vo_count=rows[0][vo_count] l_vo_avg=l_vo_sum/(l_vo_count or 1) l_ii_min=rows[0][ii_min] l_ii_max=rows[0][ii_max] l_ii_sum=rows[0][ii_sum] l_ii_count=rows[0][ii_count] l_ii_avg=l_ii_sum/(l_ii_count or 1) l_io_min=rows[0][io_min] l_io_max=rows[0][io_max] l_io_sum=rows[0][io_sum] l_io_count=rows[0][io_count] l_io_avg=l_io_sum/(l_io_count or 1) l_pi_min=rows[0][pi_min] l_pi_max=rows[0][pi_max] l_pi_sum=rows[0][pi_sum] l_pi_count=rows[0][pi_count] l_pi_avg=l_pi_sum/(l_pi_count or 1) l_po_min=rows[0][po_min] l_po_max=rows[0][po_max] l_po_sum=rows[0][po_sum] l_po_count=rows[0][po_count] l_po_avg=l_po_sum/(l_po_count or 1) string_id = db4((db4.data_table.MacAddr == panel)).select(db4.data_table.StringID).first() myRollupId = db4.panel_mins.insert(MacAddr=panel, FreezeTime=starttime, StringID=string_id.StringID, Vi_min=l_vi_min, Vi_max=l_vi_max, Vi_sum=l_vi_sum, Vi_count=l_vi_count, Vi_avg=l_vi_avg, Vo_min=l_vo_min, Vo_max=l_vo_max, Vo_sum=l_vo_sum, Vo_count=l_vo_count, Vo_avg=l_vo_avg, Ii_min=l_ii_min, Ii_max=l_ii_max, Ii_sum=l_ii_sum, Ii_count=l_ii_count, Ii_avg=l_ii_avg,Io_min=l_io_min, Io_max=l_io_max, Io_sum=l_io_sum, Io_count=l_io_count, Io_avg=l_io_avg, Pi_min=l_pi_min, Pi_max=l_pi_max, Pi_sum=l_pi_sum, Pi_count=l_pi_count, Pi_avg=l_pi_avg, Po_min=l_po_min, Po_max=l_po_max, Po_sum=l_po_sum, Po_count=l_po_count, Po_avg=l_po_avg) myset.update(RollupId=myRollupId) starttime = endtime if endtime == finishtime: touchdown = datetime.utcnow() print "done: ", touchdown, "ET: ", touchdown - kickoff return "Panels Rolled Up!"
You need to login to post a comment.
