From 4bc2c1ad4ba1f1f2cf560722ec247e4ee51e5233 Mon Sep 17 00:00:00 2001 From: Gregory Soutade Date: Thu, 25 May 2017 21:03:46 +0200 Subject: [PATCH] Add --dry-run (-D) argument --- display.py | 19 +++++++++++-------- iwla.py | 20 +++++++++++++++----- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/display.py b/display.py index 35dc0b3..2ad6abb 100644 --- a/display.py +++ b/display.py @@ -351,6 +351,8 @@ class DisplayHTMLPage(object): self.logger.debug('Write %s' % (filename)) + if self.iwla.dry_run: return + f = codecs.open(filename, 'w', 'utf-8') f.write(u'') f.write(u'') @@ -398,14 +400,15 @@ class DisplayHTMLBuild(object): self.pages.append(page) def build(self, root): - display_root = self.iwla.getConfValue('DISPLAY_ROOT', '') - if not os.path.exists(display_root): - os.makedirs(display_root) - for res_path in self.iwla.getResourcesPath(): - target = os.path.abspath(res_path) - link_name = os.path.join(display_root, res_path) - if not os.path.exists(link_name): - os.symlink(target, link_name) + if not self.iwla.dry_run: + display_root = self.iwla.getConfValue('DISPLAY_ROOT', '') + if not os.path.exists(display_root): + os.makedirs(display_root) + for res_path in self.iwla.getResourcesPath(): + target = os.path.abspath(res_path) + link_name = os.path.join(display_root, res_path) + if not os.path.exists(link_name): + os.symlink(target, link_name) for page in self.pages: page.build(root, filters=self.filters) diff --git a/iwla.py b/iwla.py index 44f4b73..8211032 100755 --- a/iwla.py +++ b/iwla.py @@ -133,7 +133,7 @@ class IWLA(object): API_VERSION = 1 IWLA_VERSION = '0.5-dev' - def __init__(self, logLevel): + def __init__(self, logLevel, dry_run): self.meta_infos = {} self.analyse_started = False self.current_analysis = {} @@ -141,6 +141,7 @@ class IWLA(object): self.cache_plugins = {} self.display = DisplayHTMLBuild(self) self.valid_visitors = None + self.dry_run = dry_run self.log_format_extracted = re.sub(r'([^\$\w])', r'\\\g<1>', conf.log_format) self.log_format_extracted = re.sub(r'\$(\w+)', '(?P<\g<1>>.+)', self.log_format_extracted) @@ -155,7 +156,10 @@ class IWLA(object): logging.basicConfig(format='%(name)s %(message)s', level=logLevel) self.logger = logging.getLogger(self.__class__.__name__) - self.logger.info('==> Start') + if self.dry_run: + self.logger.info('==> Start (DRY RUN)') + else: + self.logger.info('==> Start') try: t = gettext.translation('iwla', localedir=conf.locales_path, languages=[conf.locale], codeset='utf8') self.logger.info('\tUsing locale %s' % (conf.locale)) @@ -243,6 +247,7 @@ class IWLA(object): return gzip.open(filename, prot) def _serialize(self, obj, filename): + if self.dry_run: return base = os.path.dirname(filename) if not os.path.exists(base): os.makedirs(base) @@ -556,6 +561,7 @@ class IWLA(object): if not os.path.exists(gz_path) or\ os.stat(path).st_mtime >= build_time: + if self.dry_run: return with open(path, 'rb') as f_in, gzip.open(gz_path, 'wb') as f_out: f_out.write(f_in.read()) @@ -622,7 +628,7 @@ class IWLA(object): self._callPlugins(conf.POST_HOOK_DIRECTORY) path = self.getDBFilename(cur_time) - if os.path.exists(path): + if os.path.exists(path) and not self.dry_run: os.remove(path) self.logger.info("==> Serialize to %s" % (path)) @@ -853,6 +859,10 @@ if __name__ == '__main__': default=False, help='Only generate display') + parser.add_argument('-D', '--dry-run', dest='dry_run', action='store_true', + default=False, + help='Process log but don\'t write files (database and HTML) to disk') + args = parser.parse_args() # Load user conf @@ -872,7 +882,7 @@ if __name__ == '__main__': else: conf.__dict__.update({k:v}) - if args.clean_output: + if args.clean_output and not args.dry_run: if os.path.exists(conf.DB_ROOT): shutil.rmtree(conf.DB_ROOT) if os.path.exists(conf.DISPLAY_ROOT): shutil.rmtree(conf.DISPLAY_ROOT) @@ -880,7 +890,7 @@ if __name__ == '__main__': if not isinstance(loglevel, int): raise ValueError('Invalid log level: %s' % (args.loglevel)) - iwla = IWLA(loglevel) + iwla = IWLA(loglevel, args.dry_run) required_conf = ['analyzed_filename', 'domain_name'] if not validConfRequirements(required_conf, iwla, 'Main Conf'):