Skip to content

Commit

Permalink
Add logging level configuration and blacklist
Browse files Browse the repository at this point in the history
  • Loading branch information
gpulido committed Mar 7, 2019
1 parent 7d2181e commit 2b353ae
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 19 deletions.
2 changes: 2 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ ENV PUSHOVER_APP_KEY ""

ENV MSG_PREFIX ""
ENV WHITE_LIST ""
ENV BLACK_LIST ""
ENV LOGGING_LEVEL "INFO"
# seconds
ENV CHECK_INTERVAL "300"

Expand Down
45 changes: 27 additions & 18 deletions swarm-alert.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,20 @@
import docker
from pushover import init, Client

__version__ = '0.0.1-dev'
__version__ = '0.0.3-dev'
__author__ = 'gpt'


import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)


def service_list_to_str(services_list):
msg = ""
for service in services_list:
msg = f"{service.name}\n{msg}"
return msg
return '\n'.join([s.name for s in services_list])

def monitor_swarm_pushover(docker_client, white_pattern_list):
def monitor_swarm_pushover(docker_client, white_pattern_list, black_list):
logger.debug("Getting services from docker")
services = docker_client.services.list()
if len(white_pattern_list) > 0:
services = [service for service in docker_client.services.list() if service.name in white_pattern_list]
services = [s for s in services if s.name in white_pattern_list and s.name not in black_list]
else:
services = docker_client.services.list()
services = [s for s in services if s.name not in black_list]

services_name = [service.name for service in services]
logger.debug(str(services_name))
not_running_services = [service for service in services if(len(service.tasks({'desired-state':'Running'})) == 0)]
Expand All @@ -46,18 +39,33 @@ def monitor_swarm_pushover(docker_client, white_pattern_list):
parser.add_argument('--token', required=True, help="Pushover Token.", type=str)
parser.add_argument('--app_key', required=True, help="Pushover Application key.", type=str)
parser.add_argument('--whitelist', default='', required=False,
help="Skip checking certain containers. A list of regexp separated by comma.", type=str)
help="List of services to monitor. If not provided or empty, all will be monitorized.", type=str)
parser.add_argument('--blacklist', default='', required=False,
help="Skip checking certain services.", type=str)
parser.add_argument('--check_interval', default='300', required=False, help="Periodical check. By seconds.",
type=int)
parser.add_argument('--msg_prefix', default='', required=False, help="Pushover message prefix.", type=str)
logger.info("Initializing monitor")

parser.add_argument('--loglevel', default='DEBUG', choices=['INFO', 'DEBUG'], required=False, help="Logging level.", type=str)
l = parser.parse_args()
#Configure logging
import logging
numeric_level = getattr(logging, l.loglevel.upper(), None)
logging.basicConfig(format= '%(asctime)s %(levelname)s:%(message)s', level=numeric_level)
logger = logging.getLogger()

logger.info("Initializing monitor")

check_interval = l.check_interval
white_pattern_list = l.whitelist.split(',')
if white_pattern_list == ['']:
white_pattern_list = []
logger.debug("Whitelist: " + str(white_pattern_list))

black_list = l.blacklist.split(',')
if black_list == ['']:
black_list = []
logger.debug("BlackList: " + str(black_list))

pushover_token = l.token
pushover_key = l.app_key
msg_prefix = l.msg_prefix
Expand All @@ -69,12 +77,13 @@ def monitor_swarm_pushover(docker_client, white_pattern_list):

logger.info("Registering PushoverClient")
pushover_client = Client(pushover_key, api_token="pushover_token")
pushover_client.send_message("Initializing monitoring", title="SwarmAlert")
logger.info("Registering Docker Client")
docker_client = docker.DockerClient(base_url='unix://var/run/docker.sock')

has_send_error_alert = False
while True:
(status, err_msg) = monitor_swarm_pushover(docker_client, white_pattern_list)
(status, err_msg) = monitor_swarm_pushover(docker_client, white_pattern_list, black_list)
logger.debug(" Ouput of monitor: " + status + " " + err_msg)
if msg_prefix != "":
err_msg = "%s\n%s" % (msg_prefix, err_msg)
Expand Down
2 changes: 1 addition & 1 deletion swarm-alert.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/bin/bash -ex
python /swarm-alert.py --check_interval "$CHECK_INTERVAL" \
--token "$PUSHOVER_TOKEN" --app_key "$PUSHOVER_APP_KEY" --whitelist "$WHITE_LIST" \
--msg_prefix "$MSG_PREFIX"
--blacklist "$BLACK_LIST" --msg_prefix "$MSG_PREFIX" --loglevel "$LOGGING_LEVEL"
## File : swarm-alert.sh ends

0 comments on commit 2b353ae

Please sign in to comment.