CC-3700: media-monitor- Surround all accesses to external resources with try/except
-fixed
This commit is contained in:
parent
86282a8d8a
commit
7c49fc77d5
|
@ -4,6 +4,7 @@ import logging.config
|
|||
import sys
|
||||
import os
|
||||
import signal
|
||||
import traceback
|
||||
|
||||
from api_clients import api_client as apc
|
||||
from std_err_override import LogWriter
|
||||
|
@ -60,6 +61,7 @@ try:
|
|||
logger.info("Initializing event processor")
|
||||
except Exception, e:
|
||||
logger.error('Exception: %s', e)
|
||||
logger.error("traceback: %s", traceback.format_exc())
|
||||
|
||||
try:
|
||||
|
||||
|
@ -96,7 +98,5 @@ except KeyboardInterrupt:
|
|||
notifier.stop()
|
||||
logger.info("Keyboard Interrupt")
|
||||
except Exception, e:
|
||||
import traceback
|
||||
top = traceback.format_exc()
|
||||
logger.error('Exception: %s', e)
|
||||
logger.error("traceback: %s", top)
|
||||
logger.error("traceback: %s", traceback.format_exc())
|
||||
|
|
|
@ -140,9 +140,7 @@ class AirtimeMetadata:
|
|||
if key in self.mutagen2airtime and len(file_info[key]) > 0:
|
||||
md[self.mutagen2airtime[key]] = file_info[key][0]
|
||||
if 'MDATA_KEY_TITLE' not in md:
|
||||
#get rid of file extention from original name, name might have more than 1 '.' in it.
|
||||
#filepath = to_unicode(filepath)
|
||||
#filepath = filepath.encode('utf-8')
|
||||
#get rid of file extension from original name, name might have more than 1 '.' in it.
|
||||
original_name = os.path.basename(filepath)
|
||||
original_name = original_name.split(".")[0:-1]
|
||||
original_name = ''.join(original_name)
|
||||
|
|
|
@ -2,6 +2,7 @@ import json
|
|||
import time
|
||||
import os
|
||||
import logging
|
||||
import traceback
|
||||
|
||||
# For RabbitMQ
|
||||
from kombu.connection import BrokerConnection
|
||||
|
@ -116,7 +117,11 @@ class AirtimeNotifier(Notifier):
|
|||
|
||||
if m['delete']:
|
||||
self.logger.info("Deleting file: %s ", filepath)
|
||||
try:
|
||||
os.unlink(filepath)
|
||||
except Exception, e:
|
||||
self.logger.error('Exception: %s', e)
|
||||
self.logger.error("traceback: %s", traceback.format_exc())
|
||||
|
||||
|
||||
"""
|
||||
|
|
|
@ -4,6 +4,7 @@ import time
|
|||
import os
|
||||
import shutil
|
||||
import difflib
|
||||
import traceback
|
||||
|
||||
import pyinotify
|
||||
from pyinotify import ProcessEvent
|
||||
|
@ -147,10 +148,8 @@ class AirtimeProcessEvent(ProcessEvent):
|
|||
os.remove(oldPath)
|
||||
return
|
||||
except Exception, e:
|
||||
import traceback
|
||||
top = traceback.format_exc()
|
||||
self.logger.error('Exception: %s', e)
|
||||
self.logger.error("traceback: %s", top)
|
||||
self.logger.error("traceback: %s", traceback.format_exc())
|
||||
|
||||
self.mmc.set_needed_file_permissions(pathname, dir)
|
||||
is_recorded = self.mmc.is_parent_directory(pathname, self.config.recorded_directory)
|
||||
|
@ -255,11 +254,10 @@ class AirtimeProcessEvent(ProcessEvent):
|
|||
try:
|
||||
self.logger.info("Deleting file because it cannot be read properly: %s", event.pathname)
|
||||
os.remove(event.pathname)
|
||||
return
|
||||
except Exception, e:
|
||||
import traceback
|
||||
top = traceback.format_exc()
|
||||
self.logger.error('Exception: %s', e)
|
||||
self.logger.error("traceback: %s", top)
|
||||
self.logger.error("traceback: %s", traceback.format_exc())
|
||||
|
||||
else:
|
||||
filepath = event.pathname
|
||||
|
@ -275,11 +273,10 @@ class AirtimeProcessEvent(ProcessEvent):
|
|||
try:
|
||||
self.logger.info("Deleting file because it cannot be read properly: %s", event.pathname)
|
||||
os.remove(event.pathname)
|
||||
return
|
||||
except Exception, e:
|
||||
import traceback
|
||||
top = traceback.format_exc()
|
||||
self.logger.error('Exception: %s', e)
|
||||
self.logger.error("traceback: %s", top)
|
||||
self.logger.error("traceback: %s", traceback.format_exc())
|
||||
else:
|
||||
#show dragged from unwatched folder into a watched folder. Do not "organize".:q!
|
||||
if self.mmc.is_parent_directory(event.pathname, self.config.recorded_directory):
|
||||
|
@ -371,8 +368,14 @@ class AirtimeProcessEvent(ProcessEvent):
|
|||
# function.
|
||||
if os.path.exists(k):
|
||||
# check if file is open
|
||||
try:
|
||||
command = "lsof "+k
|
||||
f = os.popen(command)
|
||||
except Exception, e:
|
||||
self.logger.error('Exception: %s', e)
|
||||
self.logger.error("traceback: %s", traceback.format_exc())
|
||||
continue
|
||||
|
||||
if not f.readlines():
|
||||
self.logger.info("Handling file: %s", k)
|
||||
self.handle_created_file(False, k, os.path.basename(k))
|
||||
|
@ -387,9 +390,7 @@ class AirtimeProcessEvent(ProcessEvent):
|
|||
except socket.timeout:
|
||||
pass
|
||||
except Exception, e:
|
||||
import traceback
|
||||
top = traceback.format_exc()
|
||||
self.logger.error('Exception: %s', e)
|
||||
self.logger.error("traceback: %s", top)
|
||||
self.logger.error("traceback: %s", traceback.format_exc())
|
||||
time.sleep(3)
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ class AirtimeMediaConfig:
|
|||
self.cfg = config
|
||||
except Exception, e:
|
||||
logger.info('Error loading config: ', e)
|
||||
sys.exit()
|
||||
sys.exit(1)
|
||||
|
||||
self.storage_directory = None
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import pwd
|
|||
import logging
|
||||
import stat
|
||||
import subprocess
|
||||
import traceback
|
||||
|
||||
from subprocess import Popen, PIPE
|
||||
from airtimemetadata import AirtimeMetadata
|
||||
|
@ -49,6 +50,8 @@ class MediaMonitorCommon:
|
|||
|
||||
#check if file is readable by "nobody"
|
||||
def has_correct_permissions(self, filepath, euid='nobody', egid='nogroup'):
|
||||
|
||||
try:
|
||||
uid = pwd.getpwnam(euid)[2]
|
||||
gid = grp.getgrnam(egid)[2]
|
||||
|
||||
|
@ -56,15 +59,16 @@ class MediaMonitorCommon:
|
|||
os.setegid(gid)
|
||||
os.seteuid(uid)
|
||||
|
||||
try:
|
||||
open(filepath)
|
||||
readable = True
|
||||
except IOError:
|
||||
self.logger.warn("File does not have correct permissions: '%s'", filepath)
|
||||
readable = False
|
||||
self.logger.error("traceback: %s", traceback.format_exc())
|
||||
except Exception, e:
|
||||
self.logger.error("Unexpected exception thrown: %s", e)
|
||||
readable = False
|
||||
self.logger.error("traceback: %s", traceback.format_exc())
|
||||
finally:
|
||||
#reset effective user to root
|
||||
os.seteuid(0)
|
||||
|
@ -96,10 +100,11 @@ class MediaMonitorCommon:
|
|||
os.chmod(item, bitor)
|
||||
except Exception, e:
|
||||
self.logger.error("Failed to change file's owner/group/permissions. %s", e)
|
||||
return False;
|
||||
self.logger.error("traceback: %s", traceback.format_exc())
|
||||
return False
|
||||
finally:
|
||||
os.umask(omask)
|
||||
return True;
|
||||
return True
|
||||
|
||||
|
||||
#checks if path is a directory, and if it doesnt exist, then creates it.
|
||||
|
@ -125,6 +130,7 @@ class MediaMonitorCommon:
|
|||
os.rename(source, dest)
|
||||
except Exception, e:
|
||||
self.logger.error("failed to move file. %s", e)
|
||||
self.logger.error("traceback: %s", traceback.format_exc())
|
||||
finally:
|
||||
os.umask(omask)
|
||||
|
||||
|
@ -137,7 +143,12 @@ class MediaMonitorCommon:
|
|||
def cleanup_empty_dirs(self, dir):
|
||||
if os.path.normpath(dir) != self.config.organize_directory:
|
||||
if len(os.listdir(dir)) == 0:
|
||||
try:
|
||||
os.rmdir(dir)
|
||||
except Exception, e:
|
||||
#non-critical exception because we probably tried to delete a non-empty dir.
|
||||
#Don't need to log this, let's just "return"
|
||||
return
|
||||
|
||||
pdir = os.path.dirname(dir)
|
||||
self.cleanup_empty_dirs(pdir)
|
||||
|
@ -272,9 +283,13 @@ class MediaMonitorCommon:
|
|||
|
||||
def touch_index_file(self):
|
||||
dirname = os.path.dirname(self.timestamp_file)
|
||||
try:
|
||||
if not os.path.exists(dirname):
|
||||
os.makedirs(dirname)
|
||||
open(self.timestamp_file, "w")
|
||||
except Exception, e:
|
||||
self.logger.error('Exception: %s', e)
|
||||
self.logger.error("traceback: %s", traceback.format_exc())
|
||||
|
||||
def organize_new_file(self, pathname):
|
||||
self.logger.info("Organizing new file: %s", pathname)
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from mediaconfig import AirtimeMediaConfig
|
||||
import mediamonitorcommon
|
||||
import traceback
|
||||
|
||||
class MediaMonitorWorkerProcess:
|
||||
|
||||
|
@ -20,3 +21,4 @@ class MediaMonitorWorkerProcess:
|
|||
notifier.update_airtime(event)
|
||||
except Exception, e:
|
||||
notifier.logger.error(e)
|
||||
notifier.logger.error("traceback: %s", traceback.format_exc())
|
||||
|
|
Loading…
Reference in New Issue