diff --git a/fail2ban-client b/fail2ban-client
index fea1c8a6..8b8a2919 100755
--- a/fail2ban-client
+++ b/fail2ban-client
@@ -51,6 +51,7 @@ class Fail2banClient:
self.conf = dict()
self.conf["dump"] = False
self.conf["force"] = False
+ self.conf["verbose"] = 2
def dispUsage(self):
""" Prints Fail2Ban command line options and exits
@@ -62,6 +63,8 @@ class Fail2banClient:
print
print " -c
configuration directory"
print " -d dump configuration"
+ print " -v increase verbosity"
+ print " -q decrease verbosity"
print " -x force execution of the server"
print " -h display this help message"
print
@@ -74,28 +77,35 @@ class Fail2banClient:
for opt in optList:
if opt[0] == "-d":
self.conf["dump"] = True
- if opt[0] == "-x":
+ elif opt[0] == "-v":
+ self.conf["verbose"] = self.conf["verbose"] + 1
+ elif opt[0] == "-q":
+ self.conf["verbose"] = self.conf["verbose"] - 1
+ elif opt[0] == "-x":
self.conf["force"] = True
- if opt[0] in ["-h", "--help"]:
+ elif opt[0] in ["-h", "--help"]:
self.dispUsage()
def ping(self):
- return self.processCmd([["ping"]])
+ return self.processCmd([["ping"]], False)
@staticmethod
- def processCmd(cmd):
+ def processCmd(cmd, showRet = True):
for c in cmd:
try:
client = CSocket()
except Exception, e:
- logSys.error(e)
- logSys.error("Arrggh... Start the server first")
+ if showRet:
+ logSys.error(e)
+ logSys.error("Arrggh... Start the server first")
return False
ret = client.send(c)
if ret[0] == 0:
- logSys.info("OK : " + `ret[1]`)
+ logSys.debug("OK : " + `ret[1]`)
+ if showRet:
+ print `ret[1]`
else:
- logSys.info("NOK: " + `ret[1].args`)
+ logSys.error("NOK: " + `ret[1].args`)
return False
return True
@@ -114,7 +124,7 @@ class Fail2banClient:
if len(sys.argv) < 2:
self.dispUsage()
- if cmd[0] == "start" and len(cmd) == 1:
+ if len(cmd) == 1 and cmd[0] == "start":
if self.ping():
logSys.info("Server already running")
return False
@@ -126,17 +136,17 @@ class Fail2banClient:
# Wait for the server to start
self.waitOnServer()
# Configure the server
- self.processCmd(self.stream)
+ self.processCmd(self.stream, False)
return True
except ServerExecutionException:
logSys.error("Could not start server. Try -x option")
return False
- elif cmd[0] == "reload" and len(cmd) == 1:
+ elif len(cmd) == 1 and cmd[0] == "reload":
if self.ping():
self.readConfig()
- self.processCmd(['stop', 'all'])
+ self.processCmd(['stop', 'all'], False)
# Configure the server
- self.processCmd(self.stream)
+ self.processCmd(self.stream, False)
else:
logSys.error("Could not find server")
else:
@@ -177,7 +187,7 @@ class Fail2banClient:
# Reads the command line options.
try:
- cmdOpts = 'hc:xd'
+ cmdOpts = 'hc:xdvq'
cmdLongOpts = ['help']
optList, args = getopt.getopt(self.argv[1:], cmdOpts, cmdLongOpts)
except getopt.GetoptError:
@@ -185,11 +195,19 @@ class Fail2banClient:
self.getCmdLineOptions(optList)
- logSys.setLevel(logging.DEBUG)
+ verbose = self.conf["verbose"]
+ if verbose <= 0:
+ logSys.setLevel(logging.ERROR)
+ elif verbose == 1:
+ logSys.setLevel(logging.WARN)
+ elif verbose == 2:
+ logSys.setLevel(logging.INFO)
+ else:
+ logSys.setLevel(logging.DEBUG)
# Add the default logging handler
stdout = logging.StreamHandler(sys.stdout)
# set a format which is simpler for console use
- formatter = logging.Formatter('%(name)-16s: %(levelname)-6s %(message)s')
+ formatter = logging.Formatter('%(levelname)-6s %(message)s')
# tell the handler to use this format
stdout.setFormatter(formatter)
logSys.addHandler(stdout)