import sys
import time
import inspect
+import logging
from yaml import load
try:
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")
# 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")
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()
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
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)
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
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)
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')))
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()
if __name__ == '__main__':
+ logging.basicConfig(format='%(asctime)s[%(levelname)s] %(message)s', level=logging.DEBUG)
cli = SearchCLI()
cli.run()