import web
import json
from web.wsgiserver import CherryPyWSGIServer
+import urllib
import config
import bt
import users
import logger
+import cis_exceptions
if config.SECURITY:
CherryPyWSGIServer.ssl_certificate = "cacert.pem"
# Create torrent file.
bt.create_torrent(transcode_config['output_file'])
- # The torrent file is created in the same directory with the
- # source file. Move it to the torrents directory.
- shutil.move(transcode_config['output_file'] + '.tstream', \
- config.TORRENTS_PATH)
-
output_file = transcode_config['output_file'] + '.tstream'
output_file = output_file[(output_file.rindex('/') + 1):]
+
+ # The torrent file is created in the same directory with the
+ # source file. Move it to the torrents directory.
+ #if not os.path.exists(
+ # os.path.join(output_file, config.TORRENTS_PATH)):
+ try:
+ shutil.move(transcode_config['output_file'] + '.tstream', \
+ config.TORRENTS_PATH)
+ except:
+ pass
# * SEED TORRENTS
Server.bit_torrent.start_torrent( \
for f in files:
os.unlink(os.path.join(path, f))
+ def notify_completion(self, code):
+ logger.log_msg('#%s: notifying web server about the job completion...'\
+ % self.job_id)
+
+ if config.WS_COMPLETION[len(config.WS_COMPLETION) - 1] == '/':
+ url = config.WS_COMPLETION + code
+ else:
+ url = config.WS_COMPLETION + '/' + code
+
+ f = urllib.urlopen(url)
+ f.read()
+
def run(self):
while True:
job = Server.queue.get()
- self.job_id = job['id']
+ self.job_id = job['code']
# * TRANSFER RAW VIDEO IN
try:
self.transfer_in(job['raw_video'])
+ except cis_exceptions.FileAlreadyExistsException as e:
+ logger.log_msg('#%s: %s' \
+ % (job['code'], repr(e)), logger.LOG_LEVEL_ERROR)
+ continue
except Exception as e:
logger.log_msg('#%s: error while transferring in: %s' \
- % (job['id'], str(e)), logger.LOG_LEVEL_FATAL)
+ % (job['code'], repr(e)), logger.LOG_LEVEL_FATAL)
continue
# * TRANSCODE RAW VIDEO
try:
self.transcode(job['raw_video'], job['name'], \
job['transcode_configs'])
+ except cis_exceptions.FileAlreadyExistsException as e:
+ logger.log_msg('#%s: %s' \
+ % (job['code'], repr(e)), logger.LOG_LEVEL_ERROR)
+ continue
except Exception as e:
logger.log_msg('#%s: error while transcoding: %s' \
- % (job['id'], str(e)), logger.LOG_LEVEL_FATAL)
+ % (job['code'], repr(e)), logger.LOG_LEVEL_FATAL)
continue
# * EXTRACT THUMBNAIL IMAGES
try:
self.extract_thumbs(job['raw_video'], job['name'], \
job['thumbs'])
+ except cis_exceptions.FileAlreadyExistsException as e:
+ logger.log_msg('#%s: %s' \
+ % (job['code'], repr(e)), logger.LOG_LEVEL_ERROR)
+ continue
except Exception as e:
logger.log_msg( \
'#%s: error while extracting thumbnail images: %s' \
- % (job['id'], str(e)), logger.LOG_LEVEL_FATAL)
+ % (job['code'], repr(e)), logger.LOG_LEVEL_FATAL)
continue
# * CREATE TORRENTS AND START SEEDING OF TRANSCODED VIDEOS
config.WS_THUMBS_PATH)
except Exception as e:
logger.log_msg('#%s: error while transferring out: %s' \
- % (job['id'], str(e)), logger.LOG_LEVEL_FATAL)
+ % (job['code'], repr(e)), logger.LOG_LEVEL_FATAL)
+ continue
+
+ # * NOTIFY WEB SERVER ABOUT CONTENT INGESTION COMPLETION
+ # TODO in the future web server should also be notified about errors
+ try:
+ self.notify_completion(job['code'])
+ except Exception as e:
+ logger.log_msg(
+ '#%s: error while notifying web server about the job completion: %s' \
+ % (job['code'], repr(e)), logger.LOG_LEVEL_FATAL)
continue
# * CLEANUP RAW VIDEOS AND THUMBNAIL IMAGES
# * JOB FINISHED
Server.queue.task_done()
Server.load -= job['weight']
+ logger.log_msg('#%s: finished' \
+ % job['code'], logger.LOG_LEVEL_INFO)
class Server:
resp = {"load": Server.load}
web.header('Content-Type', 'application/json')
return json.dumps(resp)
+ elif request == 'get_torrent_list':
+ resp = Server.bit_torrent.get_torrent_list()
+ web.header('Content-Type', 'application/json')
+ return json.dumps(resp)
#elif request == 'shutdown':
- #sys.exit(0)
+ #exit(0)
elif request == 'test':
return ''
else:
web.badrequest()
- return ""
+ return ''
def POST(self, request):