def get(self, request, filter_type, ressource): glob = None data = [] try: if filter_type == "vast": if ressource == "model": glob = VAST_MODELS_PATH + "*.dat" elif filter_type == "vaml": if ressource == "model": glob = VAML_MODELS_PATH + "*.dat" if glob is not None: data = [os_path.splitext(os_path.basename(file))[0] for file in file_glob(glob)] else: return JsonResponse({ 'error': 'wrong ressource or filter type' }, status=404) except Exception as e: logger.critical(e, exc_info=1) error = _("An error has occurred") if settings.DEV_MODE: error = str(e) return JsonResponse({ 'error': error }, status=500) return JsonResponse({ 'data': data }, status=200)
def main(): logging.info('{0:#^40}'.format('[ Plex Log Saver ]')) if not os.path.isdir('logs'): os.mkdir('logs') config_file = os.path.join('logs', 'config.cfg') config = config_load(config_file) if config['plex_log_dir'] == '': logging.info('Config missing "plex_log_dir", Exiting!') print('Config missing "plex_log_dir", Exiting!') return log_file_template = os.path.join( 'logs', config['log_file_name']) if config['log_save_mode'] == 'gzip': import gzip log_open = gzip.open else: log_open = open last_datetime = tuple(map(int, config['plex_last_datetime'].split('-'))) log_parser = PlexSuperLogParser(last_datetime) all_lines = [] # We're only interested in 'Plex Media Server.log' log files # I've been able to so far get all of the info i need from those logs log_file_glob = os.path.join( config['plex_log_dir'], 'Plex Media Server.log*') for log_file in file_glob(log_file_glob): all_lines.extend(log_parser.parse_file(log_file)) if len(all_lines) == 0: logging.info('No new lines, finishing.') return # Sort the logs based on datetime all_lines.sort(key=lambda line_body: line_body['datetime']) time_diff = datetime_diff(all_lines[0]['datetime'], last_datetime) logging.info(( ' Last entry last run:' ' {0:04d}-{1:02d}-{2:02d} {3:02d}:{4:02d}:{5:02d}').format( *last_datetime)) logging.info(( 'Earliest entry this run:' ' {0:04d}-{1:02d}-{2:02d} {3:02d}:{4:02d}:{5:02d}').format( *all_lines[0]['datetime'])) if time_diff > 60: logging.warn(( 'Possibly missing {0} seconds of log files').format(time_diff)) logging.info('{0} new log lines added'.format(len(all_lines))) ## TODO: replace this! No longer needed... # BasketOfHandles handles our open files for us, # keeping only 5 open at a time. with BasketOfHandles(log_open, 5) as basket: for line_body in all_lines: log_file_name = log_file_template.format(**line_body) file_handle = basket.open(log_file_name, 'at') json.dump(line_body, file_handle, sort_keys=True) file_handle.write('\n') if line_body['datetime'] > last_datetime: last_datetime = line_body['datetime'] config['plex_last_datetime'] = '-'.join(map(str, last_datetime)) config_save(config_file, config) logging.info('Finished.')
def main(): if not os.path.isdir("logs"): os.mkdir("logs") config_file = os.path.join("logs", "config.cfg") config = config_load(config_file) log_match = os.path.join("logs", config["log_file_match"]) total_before = 0 total_after = 0 if config["log_save_mode"] == "text": print("Enabling compression...") config["log_save_mode"] = "gzip" if not config["log_file_name"].endswith(".gz"): config["log_file_name"] = config["log_file_name"] + ".gz" for log_name in file_glob(log_match): # Shouldn't happen, but it might? if log_name.endswith(".gz"): continue new_log_name = log_name + ".gz" print(" Compressing {0} ...".format(log_name)) with gzip.open(new_log_name, "wt") as out_fh, open(log_name, "rt") as in_fh: read_from_write_to(in_fh, out_fh) new_log_size = os.stat(new_log_name).st_size log_size = os.stat(log_name).st_size total_before += log_size total_after += new_log_size print(" Original size {0} bytes".format(log_size)) print( " New size {0} bytes ({1:0.02f}% of original file)".format( new_log_size, (new_log_size / float(log_size) * 100) ) ) os.unlink(log_name) elif config["log_save_mode"] == "gzip": print("Disabling compression...") config["log_save_mode"] = "text" if config["log_file_name"].endswith(".gz"): config["log_file_name"] = config["log_file_name"][:-3] for log_name in file_glob(log_match): # Shouldn't happen, but it might? if not log_name.endswith(".gz"): continue new_log_name = log_name[:-3] print(" Decompressing {0} ...".format(log_name)) with open(new_log_name, "wt") as out_fh, gzip.open(log_name, "rt") as in_fh: read_from_write_to(in_fh, out_fh) new_log_size = os.stat(new_log_name).st_size log_size = os.stat(log_name).st_size total_before += log_size total_after += new_log_size print(" Original size {0} bytes".format(log_size)) print( " New size {0} bytes ({1:0.02f}% of original file)".format( new_log_size, (new_log_size / float(log_size) * 100) ) ) os.unlink(log_name) config_save(config_file, config) print("Logs size:") print(" Before: {0}".format(total_before)) print(" After: {0}".format(total_after))