Advertisement
Uno-Dan

Logging client demo

May 11th, 2019
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.38 KB | None | 0 0
  1.  
  2. import logging
  3. from logging import Formatter, getLogger, INFO, DEBUG, WARNING, ERROR, CRITICAL
  4.  
  5. from os import path, makedirs
  6. from time import sleep
  7. from random import randint
  8. from socket import gethostname, gethostbyname
  9.  
  10. from zmq import Context, ssh
  11. from zmq.log.handlers import PUBHandler
  12. from zmq.backend.cython.constants import PUB
  13.  
  14. from modules import spawn
  15.  
  16. LOGLEVELS = ('NOTSET', 'DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')
  17.  
  18. NBR_CLIENTS = 5
  19. LOGGER_PORT = '17770'
  20.  
  21. LOGGER_SERVER = '192.168.10.216'
  22. LOGGER_FORMAT = "%(levelname)s:%(asctime)s,%(msecs)d:%(process)d:%(name)s:%(filename)s:%(funcName)s:" \
  23.                 '%(lineno)d:%(message)s'
  24.  
  25. LOGGER_CONNECTION = f'tcp://{LOGGER_SERVER}:{LOGGER_PORT}'
  26.  
  27. PATH = path.dirname(path.realpath(__file__))
  28. PATH_LOGS = path.join(PATH, 'logs')
  29.  
  30.  
  31. class App:
  32.     def __init__(self, name=None):
  33.         self.processes = []
  34.  
  35.         self.hostname = gethostname()
  36.         self.ipaddr = gethostbyname(self.hostname)
  37.         self.name = name if name else __class__.__name__
  38.  
  39.         if not path.exists(PATH_LOGS):
  40.             makedirs(path.join(PATH_LOGS, 'local'))
  41.  
  42.     def start(self, nbr_clients):
  43.         for idx in range(nbr_clients):
  44.             process = spawn(self.task, idx)
  45.             self.processes.append(process)
  46.  
  47.         for process in self.processes:
  48.             process.join()
  49.  
  50.     def task(self, index):
  51.         identity = f'client-{index}'
  52.  
  53.         ctx = Context()
  54.         socket = ctx.socket(PUB)
  55.         # socket.connect(LOGGER_CONNECTION)
  56.  
  57.         ssh.tunnel_connection(socket, LOGGER_CONNECTION, "dan@localhost")
  58.         handler = PUBHandler(socket)
  59.  
  60.         formatter = Formatter(LOGGER_FORMAT, datefmt='%Y/%m/%d %H:%M:%S')
  61.         for level in [DEBUG, INFO, WARNING, ERROR, CRITICAL]:
  62.             handler.formatters[level] = formatter
  63.  
  64.         remote_logger = getLogger(self.name)
  65.         remote_logger.addHandler(handler)
  66.         remote_logger.setLevel(INFO)
  67.         remote_logger.info(f'{self.hostname}:{self.ipaddr}:{identity}:started')
  68.  
  69.         while True:
  70.             msg = f'{self.hostname}:{self.ipaddr}:Test message client'
  71.             level = LOGLEVELS[randint(1, 5)]
  72.             remote_logger.log(getattr(logging, level), msg)
  73.  
  74.             sleep(randint(1, 3))
  75.  
  76.  
  77. def main():
  78.     app = App('App One')
  79.     app.start(NBR_CLIENTS)
  80.  
  81.  
  82. if __name__ == "__main__":
  83.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement