From: <bel...@us...> - 2003-03-11 01:07:25
|
Update of /cvsroot/btplusplus/BT++/src/WebServer In directory sc8-pr-cvs1:/tmp/cvs-serv23728/WebServer Modified Files: BTWebServer.py Log Message: Abstraction of seed management, seed managament for WT++, a few bug fixes Index: BTWebServer.py =================================================================== RCS file: /cvsroot/btplusplus/BT++/src/WebServer/BTWebServer.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** BTWebServer.py 9 Mar 2003 11:50:27 -0000 1.7 --- BTWebServer.py 11 Mar 2003 01:07:15 -0000 1.8 *************** *** 3,7 **** from HTTPConfigFile import HTTPConfig from threading import Event ! from os import listdir, path, chdir, mkdir, remove from LoaderManager import LoaderManager from urlparse import urlparse --- 3,7 ---- from HTTPConfigFile import HTTPConfig from threading import Event ! from os import listdir, path, chdir, mkdir, remove, rename from LoaderManager import LoaderManager from urlparse import urlparse *************** *** 11,14 **** --- 11,15 ---- from BTConstants import * from htmltmpl import TemplateManager, TemplateProcessor + from SeedManager import SeedManager import socket *************** *** 81,107 **** WebLog[-1]['Entry'] = "Last entry repeated " + str(WebLog[-1]['Count']) + " times" WebLog[-1]['TimeCode'] = strftime("[%a, %d %b %Y %H:%M:%S]", localtime()) - ## log = WebLog[-1] - ## log['Count'] = log['Count'] + 1 - ## log['Entry'] = "Last entry repeated " + log['Count'] + " times" - ## log['TimeCode'] = strftime("[%a, %d %b %Y %H:%M:%S]", localtime()) - ## WebLog[-1] = log - ## log['TimeCode'] = strftime("[%a, %d %b %Y %H:%M:%S]", localtime()) - ## log['LogLevel'] = loglevel - ## log['LogLevelTrivial'] = false - ## log['LogLevelInfo'] = false - ## log['LogLevelError'] = false - ## log['LogLevelCritical'] = false - ## if loglevel == LOG_TRIVIAL: - ## log['LogLevelTrivial'] = true - ## elif loglevel == LOG_INFO: - ## log['LogLevelInfo'] = true - ## elif loglevel == LOG_ERROR: - ## log['LogLevelError'] = true - ## else: - ## log['LogLevelCritical'] = true - ## log['Count'] = WebLog[-1]['Count'] + 1 - ## log['Entry'] = "Last entry repeated " + str(log['Count']) + " times" - ## WebLog.pop() - ## WebLog.append( log ) elif (len(WebLog)>0) and (a == WebLog[-1]['Entry']): log['TimeCode'] = strftime("[%a, %d %b %Y %H:%M:%S]", localtime()) --- 82,85 ---- *************** *** 142,152 **** if len(WebLog) > int(HTTPConfig.Get('Display', 'LogCount')): del WebLog[0] ! BTHandler = LoaderManager( [ Config.Get('Paths', 'Torrent'), Config.Get('Paths', 'Temp'), Config.Get('Paths', 'Incoming'), Config.Get('Paths', 'History') ], ! log = WebLogit ) ! BTHandler.Update() ########################################################################################################### --- 120,171 ---- if len(WebLog) > int(HTTPConfig.Get('Display', 'LogCount')): del WebLog[0] + + WTSeeds = SeedManager( [ Config.Get('Paths', 'History'), + Config.Get('Paths', 'Incoming'), + '', + '' ], + log = WebLogit ) + + def MoveToHistory(loader): + + loader.PauseDownload() + loader.Hashed = true + loader.Finished = true + loader.Obj['Storage'].close() + + loader.UpdateStatus( fractionDone = 1, + timeEst = 0, + downRate = 0, + upRate = 0, + activity = 'Done' ) + + if loader.Config['DirTorFinish'] != '': + try: + rename( loader.Config['TorFull'], path.join(loader.Config['DirTorFinish'], loader.Config['Tor']) ) + loader.OnInfo( 'Download complete.' ) + except: + loader.OnError('Could not move torrent.') + + if loader.Config['DirFilFinish'] != '': + try: + rename( loader.Config['Filename'], path.join(loader.Config['DirFilFinish'], loader.Config['File']) ) + except: + loader.OnError('Could not move downloaded file.') + + new = WTSeeds.CreateNewLoader(loader.Config['Tor']) + if new == None: + return + + if Config.Get('Download', 'KeepUpload'): + new.StartDownload() ! WTLoaders = LoaderManager( [ Config.Get('Paths', 'Torrent'), Config.Get('Paths', 'Temp'), Config.Get('Paths', 'Incoming'), Config.Get('Paths', 'History') ], ! log = WebLogit, ! finish = MoveToHistory ) ! WTLoaders.Update() ! WTSeeds.Update() ########################################################################################################### *************** *** 166,170 **** self.wfile.write(tproc.process(templateRoot)) elif self.requested == 'torrents': ! BTHandler.Update() sleep(0.5) self.send_torrents() --- 185,190 ---- self.wfile.write(tproc.process(templateRoot)) elif self.requested == 'torrents': ! WTLoaders.Update() ! WTSeeds.Update() sleep(0.5) self.send_torrents() *************** *** 177,184 **** elif self.requested == 'exit': self.wfile.write(tproc.process(templateExit)) ! for loader in BTHandler.Loaders: ! if loader.IsRunning(): loader.PauseDownload() ! # for loader in BTHandler.Seeds: ! # if loader.IsRunning(): loader.PauseDownload() BTWait.set() --- 197,202 ---- elif self.requested == 'exit': self.wfile.write(tproc.process(templateExit)) ! ## WTLoaders.ShutDown() ! ## WTSeeds.ShutDown() BTWait.set() *************** *** 196,220 **** if self.requested == 'torrents': if result['command']=='Pause': ! # if result['seed']=='0': ! BTHandler.Loaders[int(result['nr'])-1].PauseDownload() ! # else: ! # BTHandler.Seeds[int(result['nr'])-1].PauseDownload() elif result['command']=='Resume': ! # if result['seed']=='0': ! BTHandler.Loaders[int(result['nr'])-1].StartDownload() ! # else: ! # BTHandler.Seeds[int(result['nr'])-1].StartDownload() elif result['command']=='MoveUp': c = int(result['nr']) ! # if result['seed']=='0': ! BTHandler.Move(c-1, c-2) ! # else: ! # BTHandler.MoveSeed(c-1, c-2) elif result['command']=='MoveDown': c = int(result['nr']) ! # if result['seed']=='0': ! BTHandler.Move(c-1, c) ! # else: ! # BTHandler.MoveSeed(c-1, c) elif result['command']=='Add': url = result['torr'] --- 214,234 ---- if self.requested == 'torrents': if result['command']=='Pause': ! if result['seed']=='0': ! WTLoaders.Loaders[int(result['nr'])-1].PauseDownload() ! else: ! WTSeeds.Loaders[int(result['nr'])-1].PauseDownload() elif result['command']=='Resume': ! if result['seed']=='0': ! WTLoaders.Loaders[int(result['nr'])-1].StartDownload() ! else: ! WTSeeds.Loaders[int(result['nr'])-1].StartDownload() elif result['command']=='MoveUp': c = int(result['nr']) ! if result['seed']=='0': ! WTLoaders.Move(c-1, c-2) elif result['command']=='MoveDown': c = int(result['nr']) ! if result['seed']=='0': ! WTLoaders.Move(c-1, c) elif result['command']=='Add': url = result['torr'] *************** *** 255,259 **** WebLogit("Configuration Changed.", loglevel = LOG_TRIVIAL) ! BTHandler.Update() sleep(0.5) self.send_torrents() --- 269,274 ---- WebLogit("Configuration Changed.", loglevel = LOG_TRIVIAL) ! WTLoaders.Update() ! WTSeeds.Update() sleep(0.5) self.send_torrents() *************** *** 298,302 **** LoaderInfos = [] c = 0 ! for loader in BTHandler.Loaders: LoaderInfo = {} c = c + 1 --- 313,317 ---- LoaderInfos = [] c = 0 ! for loader in WTLoaders.Loaders: LoaderInfo = {} c = c + 1 *************** *** 315,319 **** LoaderInfo['PercentDonePrec'] = '%.1f' % (loader.Info['FractionDone']*100) LoaderInfo['PercentLeftPrec'] = '%.1f' % (loader.Info['FractionRemain']*100) ! LoaderInfo['FileSize'] = '%.2f MB' % (loader.Config['Size'] / 1024 / 1024) if loader.Info['FractionDone'] == -1: LoaderInfo['FileSizeDone'] = '?' --- 330,334 ---- LoaderInfo['PercentDonePrec'] = '%.1f' % (loader.Info['FractionDone']*100) LoaderInfo['PercentLeftPrec'] = '%.1f' % (loader.Info['FractionRemain']*100) ! LoaderInfo['FileSize'] = '%.2f MB' % (float(loader.Config['Size']) / 1024 / 1024) if loader.Info['FractionDone'] == -1: LoaderInfo['FileSizeDone'] = '?' *************** *** 326,466 **** LoaderInfo['ETA'] = loader.Info['ETA'] LoaderInfos.append(LoaderInfo) tproc.set("Loaders", LoaderInfos) self.wfile.write(tproc.process(templateTorrent)) ! ! ! ## ret = "<html>\n<head>\n<title>WebTorrent++ Download Status</title>\n" ! ## ret = ret + "<META HTTP-EQUIV=\"Refresh\" CONTENT=\""+HTTPConfig.Get('Display', 'Refresh')+"\">\n" ! ## ret = ret + "</head>\n<body bgcolor=#%s>" % HTTPConfig.Get('WebColors','TorrBackground') ! ## if BTHandler.Loaders: ! ## ret = ret + "<table border=1 width=100% cellpadding=3>\n<tr bgcolor=#DDDDDD><th colspan=2>Incomplete</th><th align=left>File</th><th>Size</th><th>Transfered</th><th>Speed</th><th>Status</th><th width=15%>Progress</th><th>Remaining</th></tr>\n" ! ## c = 0 ! ## for loader in BTHandler.Loaders: ! ## c = c + 1 ! ## if loader.IsFinished(): ! ## ret = ret + "<tr bgcolor=#%s>" % HTTPConfig.Get('WebColors','TorrFinished') ! ## if c <= Config.Get('Download', 'MaxSimDown'): ! ## ret = ret + "<tr bgcolor=#%s>" % HTTPConfig.Get('WebColors','TorrAuto') ! ## else: ! ## ret = ret + "<tr bgcolor=#%s>" % HTTPConfig.Get('WebColors','TorrNonAuto') ! ## ! ## # Buttons ! ## if loader.Info['Status']!='Paused': ! ## cc = 'Pause' ! ## else: ! ## cc = 'Resume' ! ## ret = ret + "<form method=\"POST\" action=\"torrents\"><td>" ! ## ret = ret + "<button type=submit name=command value=%s>%s</button></td><td>" % (cc,cc) ! ## if c == 1: ! ## cc = 'DISABLED' ! ## else: ! ## cc = '' ! ## ret = ret + "<table><tr><td><button type=submit name=command %s value=MoveUp style=\"font-size:xx-small; font-weight:bold\">↑</button></td></tr>" % (cc) ! ## if c == len(BTHandler.Loaders): ! ## cc = 'DISABLED' ! ## else: ! ## cc = '' ! ## ret = ret + "<tr><td><button type=submit name=command %s value=MoveDown style=\"font-size:xx-small; font-weight:bold\">↓</button></td></tr></table>" % (cc) ! ## ret = ret + "<input type=hidden name=seed value=0><input type=hidden name=nr value=%d>" % (c) ! ## ret = ret + "</td></form>" ! ## ! ## # Filename ! ## ret = ret + "<td align=left nowrap><table width=100%><tr><td>" + loader.Config['File'] + "</td></tr>" ! ## ret = ret + "<tr><td><table width=100% bordercolor=#0000BB border=1 cellspacing=0 cellpadding=0><tr><td><table width=100% height=100%><tr>" ! ## if loader.Info['Status']=='Hashing': ! ## c1='#CC6666' ! ## c2='#6666CC' ! ## else: ! ## c1='#66CC66' ! ## c2='#CC6666' ! ## if loader.Info['FractionDone'] == -1: ! ## ret = ret + '<td bgcolor=#6666CC width=100% style=\"font-size:2px\"> </td>' ! ## else: ! ## ret = ret + ('<td bgcolor=%s width=%d%% style=\"font-size:2px\"> </td><td bgcolor=%s width=%d%% style=\"font-size:2px\"> \0\0</td>' % (c1, loader.Info['FractionDone']*100, c2, loader.Info['FractionRemain']*100)) ! ## ret = ret + "</tr></table></td></tr></table></td></tr></table></td>" ! ## ! ## # Filesize ! ## ret = ret + "<td align=center>" + ('%.2f MB' % (loader.Config['Size'] / 1024 / 1024)) + "</td>" ! ## ! ## # Fraction Done ! ## ret = ret + "<td align=center>" ! ## if loader.Info['FractionDone'] == -1: ! ## ret = ret + '?' ! ## else: ! ## ret = ret + ('%.2f MB' % (loader.Info['FractionDone'] * loader.Config['Size'] / 1024 / 1024)) ! ## ret = ret + "</td>" ! ## ! ## # Speed ! ## ret = ret + "<td align=center>" + ('%.1f / %.1f' % (loader.Info['SpeedDown'], loader.Info['SpeedUp'])) + "</td>" ! ## ! ## # Status ! ## ret = ret + "<td align=center>" + loader.Info['Status'] +"</td>" ! ## ! ## # Progress ! #### ret = ret + "<td><table width=100% bordercolor=#0000BB border=1 cellspacing=0 cellpadding=0><tr><td><table width=100% height=100%><tr>" ! #### if loader.Info['Status']=='Hashing': ! #### c1='#FF0000' ! #### c2='#0000FF' ! #### else: ! #### c1='#00FF00' ! #### c2='#FF0000' ! #### if loader.Info['FractionDone'] == -1: ! #### ret = ret + '<td bgcolor=#0000FF width=100%> </td>' ! #### else: ! #### ret = ret + ('<td bgcolor=%s width=%d%%> </td><td bgcolor=%s width=%d%%> </td>' % (c1, loader.Info['FractionDone']*100, c2, loader.Info['FractionRemain']*100)) ! #### ret = ret + "</tr></table></td></tr></table></td>" ! ## ! ## # Rest ! ## ret = ret + ('<td><table width=100%%><tr><td align=center width=100%% nowrap>%.1f%% [%.2f MB]</td></tr>' % (loader.Info['FractionRemain'] * 100, loader.Info['FractionRemain'] * loader.Config['Size'] / 1024 / 1024)) ! ## ret = ret + '<tr><td align=center width=100%% nowrap>%s</td></tr></table></td>' % loader.Info['ETA'] ! ## ! ## ret = ret + "</tr>\n" ! ## ret = ret + "</table>\n" ! ## else: ! ## ret = ret + "<p> No Torrents" ! ## if BTHandler.Seeds: ! ## ret = ret + "<p><table border=1 width=100% cellpadding=3>\n<tr bgcolor=#DDDDDD><th colspan=2>Seeds</th><th align=left>File</th><th>Size</th><th>Status</th><th>Speed</th></tr>\n" ! ## c = 0 ! ## for loader in BTHandler.Seeds: ! ## c = c + 1 ! ## if c <= HTTPConfig.Get('Seed', 'MaxSimSeed'): ! ## ret = ret + "<tr bgcolor=#FFCCCC>" ! ## else: ! ## ret = ret + "<tr bgcolor=#D8BFBC>" ! ## if loader.Info['Status']!='Paused': ! ## cc = 'Pause' ! ## else: ! ## cc = 'Resume' ! ## ret = ret + "<form method=\"POST\" action=\"torrents\"><td>" ! ## ret = ret + "<button type=submit name=command value=%s>%s</button></td><td>" % (cc,cc) ! ## if c == 1: ! ## cc = 'DISABLED' ! ## else: ! ## cc = '' ! ## ret = ret + "<table><tr><td><button type=submit name=command %s value=MoveUp style=\"font-size:xx-small; font-weight:bold\">↑</button></td></tr>" % (cc) ! ## if c == len(BTHandler.Seeds): ! ## cc = 'DISABLED' ! ## else: ! ## cc = '' ! ## ret = ret + "<tr><td><button type=submit name=command %s value=MoveDown style=\"font-size:xx-small; font-weight:bold\">↓</button></td></tr></table>" % (cc) ! ## ret = ret + "<input type=hidden name=seed value=1><input type=hidden name=nr value=%d>" % (c) ! ## ret = ret + "</td></form>" ! ## ret = ret + "<td align=left width=70%>" + loader.Config['File'] + "</td>" ! ## ret = ret + "<td align=center>" + ('%.2f MB' % (loader.Config['Size'] / 1024 / 1024)) + "</td>" ! ## if loader.Info['Status']!='Hashing': ! ## ret = ret + "<td align=center>" + loader.Info['Status'] ! ## else: ! ## ret = ret + ('<td align=center>Hashing (%.1f%%)' % (loader.Info['FractionDone'] * 100)) ! ## ret = ret + "</td><td align=center>" + ('%.1f' % (loader.Info['SpeedUp'])) + "</td>" ! ## ret = ret + "</tr>\n" ! ## ret = ret + "</table>\n" ! ## if BTHandler.StaleSeeds: ! ## ret = ret + "<p><table border=1 cellpadding=10><tr><td><b style=\"color:red\">Stale Seeds (content lacking):</b></td></tr><tr><td><b>" ! ## for s in BTHandler.StaleSeeds: ! ## ret = ret + s + "<br>" ! ## ret = ret + "</b></td></tr></table>" ! ## ret = ret + "</body>\n</html>\n" ! ## self.wfile.write(ret) ! def send_config(self): tproc = TemplateProcessor() --- 341,376 ---- LoaderInfo['ETA'] = loader.Info['ETA'] LoaderInfos.append(LoaderInfo) + SeedInfos = [] + for loader in WTSeeds.Loaders: + LoaderInfo = {} + if loader.Info['Status']!='Paused': + LoaderInfo['Command'] = 'Pause' + else: + LoaderInfo['Command'] = 'Resume' + LoaderInfo['FileName'] = loader.Config['File'] + LoaderInfo['Status'] = loader.Info['Status'] + ## LoaderInfo['Hashing'] = (loader.Info['Status']=='Hashing') + ## LoaderInfo['Finished'] = loader.IsFinished() + ## LoaderInfo['Auto'] = (c <= Config.Get('Download', 'MaxSimDown')) + ## LoaderInfo['Preparing'] = (loader.Info['FractionDone'] == -1) + ## LoaderInfo['PercentDone'] = '%d' % (loader.Info['FractionDone']*100) + ## LoaderInfo['PercentLeft'] = '%d' % (loader.Info['FractionRemain']*100) + ## LoaderInfo['PercentDonePrec'] = '%.1f' % (loader.Info['FractionDone']*100) + ## LoaderInfo['PercentLeftPrec'] = '%.1f' % (loader.Info['FractionRemain']*100) + LoaderInfo['FileSize'] = '%.2f MB' % (float(loader.Config['Size']) / 1024 / 1024) + ## if loader.Info['FractionDone'] == -1: + ## LoaderInfo['FileSizeDone'] = '?' + ## LoaderInfo['FileSizeLeft'] = LoaderInfo['FileSize'] + ## else: + ## LoaderInfo['FileSizeDone'] = ('%.2f MB' % (loader.Info['FractionDone'] * loader.Config['Size'] / 1024 / 1024)) + ## LoaderInfo['FileSizeLeft'] = ('%.2f MB' % (loader.Info['FractionRemain'] * loader.Config['Size'] / 1024 / 1024)) + ## LoaderInfo['SpeedDown'] = '%.1f' % loader.Info['SpeedDown'] + LoaderInfo['SpeedUp'] = '%.1f' % loader.Info['SpeedUp'] + ## LoaderInfo['ETA'] = loader.Info['ETA'] + SeedInfos.append(LoaderInfo) tproc.set("Loaders", LoaderInfos) + tproc.set("Seeds", SeedInfos) self.wfile.write(tproc.process(templateTorrent)) ! def send_config(self): tproc = TemplateProcessor() *************** *** 471,474 **** --- 381,385 ---- tproc.set('download_autostart', int(Config.Get('Download', 'AutoStart'))) tproc.set('download_autopause', int(Config.Get('Download', 'AutoPause'))) + tproc.set('download_keepupload', int(Config.Get('Download', 'KeepUpload'))) tproc.set('download_maxsimdown', Config.Get('Download', 'MaxSimDown')) tproc.set('download_maxspeeddown', Config.Get('Download', 'MaxSpeedDown')) |