diff --git a/Sausage b/Sausage index 7a64870..7aaeea5 100755 --- a/Sausage +++ b/Sausage @@ -1,50 +1,57 @@ #!/usr/bin/python3 from sausage.readconf import ReadConf from sausage.appargs import AppArgs from sausage.esclient import ESClient from sausage.display import Display from logging.handlers import SysLogHandler import logging import sys import os import json def main(): assert sys.version_info >= (3, 8) ReadConf() + AppArgs() pid = os.getpid() # Logger # we are trying to catch all log from other module level = logging.DEBUG if ReadConf.debug == True else logging.INFO fmt = f"[%(levelname)s] SAUSAGE {pid} %(name)s - %(message)s" # create a syslog handler - handler = SysLogHandler(address="/dev/log") - handler.setLevel(level) - handler.setFormatter(logging.Formatter(fmt)) + sys_h = SysLogHandler(address="/dev/log") + sys_h.setLevel(level) + sys_h.setFormatter(logging.Formatter(fmt)) + handlers = [sys_h] + + if AppArgs.verbose: + level = logging.DEBUG + # create console handler and set level to debug + c_h = logging.StreamHandler() + c_h.setLevel(logging.DEBUG) + handlers.append(c_h) + # add syslog handler to root - logging.basicConfig(level=level, format=fmt, handlers=[handler]) + logging.basicConfig(level=level, format=fmt, handlers=handlers) # create a sausage module wide logger which use root configuration logger = logging.getLogger("sausage") logger.setLevel(level) logger.debug("START") - AppArgs() client = ESClient(ReadConf.hosts, ReadConf.indexes, AppArgs.response, ReadConf.apikey) client.set_result() display = Display(client.result, client.total) - # print(display) - # print(display.get_table()) display.get_motd(carbon=AppArgs.response["carbon"]) # print(ReadConf.fields) logger.debug("END") if __name__ == "__main__": main() diff --git a/sausage/appargs.py b/sausage/appargs.py index 1baf55e..3f7fe43 100644 --- a/sausage/appargs.py +++ b/sausage/appargs.py @@ -1,104 +1,115 @@ import argparse import os import grp import getpass import sys from sausage.functions import valid_date, valid_period class AppArgs(object): def __init__(self): self.response = {} self.parser = argparse.ArgumentParser( prog="Sausage", description="SCITAS Account Usage.", formatter_class=argparse.ArgumentDefaultsHelpFormatter, ) self.add_args() def add_args(self): self.parser.add_argument( "-u", "--user", help="If not provided whoami is considered" ) self.parser.add_argument( "-a", "--all", help="all users from an account are printed", action="store_true", ) self.parser.add_argument( "-A", "--account", help="Prints account consumption per cluster" ) self.parser.add_argument( "-s", "--start", help="Start date - format YYYY-MM-DD", type=valid_date ) self.parser.add_argument( "-e", "--end", help="End date - format YYYY-MM-DD", type=valid_date ) self.parser.add_argument( "-c", "--carbon", help="Prints the carbon footprint per cluster", action="store_true", ) self.parser.add_argument( "-b", "--billing", help="Displays the billing period - format YYYY-MM", type=valid_period, ) + self.parser.add_argument( + "-v", + "--verbose", + help="Verbose", + action="store_true", + ) args = self.parser.parse_args() + + AppArgs.verbose = args.verbose # active = [k for k, v in vars(args).items() if v not in (None, False)] if args.billing: listofgroups = [grp.getgrgid(g).gr_name for g in os.getgroups()] # if self.billinggrp not in listofgroups: # self.parser.error( # "--billing is only available for users in " # + self.billinggrp # + " group" # ) if ( args.user or args.account or args.all or args.start or args.end or args.carbon ): self.parser.error("--billing is not compatible with any other option") if args.start and args.end is None: self.parser.error("range requires both dates (--start and --end)") if args.end: if args.start is None: self.parser.error("range requires both dates (--start and --end)") if args.end < args.start: self.parser.error("start date must be earlier than end date") if args.all and args.account is None: self.parser.error( "the option --all requires a valid account (--all and --account)" ) if args.all and args.user: self.parser.error("--all option is not compatible with --user option") - if len(sys.argv) <= 1: - if len(sys.argv) <= 1 or ( - all(v is not None for v in [args.start, args.end]) - and all(v is None for v in [args.account, args.user]) + if ( + len(sys.argv) <= 1 + or ( + all(v is not None for v in [args.start, args.end]) + and all(v is None for v in [args.account, args.user]) + ) + or any(v is not None for v in [args.carbon, args.verbose]) ): args.user = getpass.getuser() AppArgs.response = { "user": args.user, "account": args.account, "all": args.all, "start": args.start, "end": args.end, "carbon": args.carbon, "billing": args.billing, # "active": active, }