OSDN Git Service

searchd: hide verbose message and add '-v' option to searchd_cli
authorhylom <hylom@users.osdn.me>
Wed, 19 Jun 2019 08:46:07 +0000 (08:46 +0000)
committerhylom <hylom@users.osdn.me>
Wed, 19 Jun 2019 08:46:07 +0000 (08:46 +0000)
src/ns_search/searchd_cli.py

index 2cfe99a..4ddc1b9 100755 (executable)
@@ -8,6 +8,7 @@ import os
 import sys
 import time
 import inspect
+import logging
 
 from yaml import load
 try:
@@ -26,6 +27,7 @@ class SearchCLIError(Exception):
 class SearchCLI(object):
     def __init__(self):
         self.index_dir = None
+        self.logger = logging.getLogger()
         self._parse_args()
 
         config_path = os.environ.get("SEARCHD_CONFIG", "/etc/newslash/searchd.conf")
@@ -41,6 +43,7 @@ class SearchCLI(object):
         # parse command line option
         parser = argparse.ArgumentParser(description='search daemon for Newslash')
         parser.add_argument('-i', '--index-dir', help='lucene index directory')
+        parser.add_argument('-v', '--verbose', action='store_true', help='show more log messages')
 
         # subcommands
         subparsers = parser.add_subparsers(help="subcommands")
@@ -132,10 +135,10 @@ class SearchCLI(object):
         index = Index(database=self.database, index_path=self.index_dir)
 
         def progress_cb(target, phase, success, errors):
-            print("{}: {} to index {} items... ({} errors)".format(target, phase, success, errors))
+            self.logger.info("{} {} index for {} items... ({} errors)".format(phase, target, success, errors))
 
         def error_cb(target, phase, item):
-            print("{}: indexing {} error: id={}".format(target, phase, item["sid"]))
+            self.logger.error("{} {} index error: id={}".format(phase, target, item["sid"]))
 
         if action == 'clear':
             index.delete_all()
@@ -157,11 +160,17 @@ class SearchCLI(object):
                 index.update_poll(progress_cb=progress_cb, error_cb=error_cb)
             elif target == 'user':
                 index.update_user(progress_cb=progress_cb, error_cb=error_cb)
-            print("indexing done. total time: {}s".format(time.time() - start_time))
+            else:
+                self.logger.error("invalid target - {}".format(target))
+            
+            self.logger.info("indexing done. total time: {}s".format(time.time() - start_time))
+
+        else:
+            self.logger.error("invalid action - {}".format(action))
 
     def query(self):
         if self.index_dir is None:
-            sys.stderr.write("error: index directory not given\n")
+            self.logger.error("index directory not given")
             return
 
         query_string = self.args.query_string
@@ -171,7 +180,7 @@ class SearchCLI(object):
         try:
             query = lucene_wrapper.Query("content_text", query_string)
         except lucene_wrapper.QueryParseError as e:
-            sys.stderr.write("query parse error\n")
+            self.logger.error("query parse error")
             return
 
         result = searcher.search(query)
@@ -182,7 +191,7 @@ class SearchCLI(object):
 
     def analyze(self):
         if self.index_dir is None:
-            sys.stderr.write("error: index directory not given\n")
+            self.logger.error("index directory not given")
             return
 
         query_string = self.args.query_string
@@ -199,7 +208,7 @@ class SearchCLI(object):
             query.add_should(content_query)
             query.add_should(title_query)
         except lucene_wrapper.QueryParseError as e:
-            sys.stderr.write("query parse error\n")
+            self.logger.error("query parse error")
             return
 
         sort = lucene_wrapper.Sort("create_time", lucene_wrapper.Sort.INT, True)
@@ -232,7 +241,7 @@ class SearchCLI(object):
             return
 
         if result.totalhits > 1:
-            print("warning: hits multiple items")
+            self.logger.warning("hits multiple items")
 
         print("#{} - {}: {}".format(result.number, result.id, result.content_text.encode('utf-8')))
 
@@ -241,9 +250,15 @@ class SearchCLI(object):
         try:
             index.metadata.create_table()
         except DatabaseError as e:
-            print('error: {}'.format(str(e)))
+            self.logger.error('{}'.format(str(e)))
             
     def run(self):
+        # set loglevel
+        if self.args.verbose:
+            self.logger.setLevel(logging.DEBUG)
+        else:
+            self.logger.setLevel(logging.WARNING)
+
         if self.sub_command == 'query':
             return self.query()
 
@@ -266,5 +281,6 @@ class SearchCLI(object):
 
 
 if __name__ == '__main__':
+    logging.basicConfig(format='%(asctime)s[%(levelname)s] %(message)s', level=logging.DEBUG)
     cli = SearchCLI()
     cli.run()