Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import logging
- from logging import Formatter, getLogger, INFO, DEBUG, WARNING, ERROR, CRITICAL
- from os import path, makedirs
- from time import sleep
- from random import randint
- from socket import gethostname, gethostbyname
- from zmq import Context, ssh
- from zmq.log.handlers import PUBHandler
- from zmq.backend.cython.constants import PUB
- from modules import spawn
- LOGLEVELS = ('NOTSET', 'DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')
- NBR_CLIENTS = 5
- LOGGER_PORT = '17770'
- LOGGER_SERVER = '192.168.10.216'
- LOGGER_FORMAT = "%(levelname)s:%(asctime)s,%(msecs)d:%(process)d:%(name)s:%(filename)s:%(funcName)s:" \
- '%(lineno)d:%(message)s'
- LOGGER_CONNECTION = f'tcp://{LOGGER_SERVER}:{LOGGER_PORT}'
- PATH = path.dirname(path.realpath(__file__))
- PATH_LOGS = path.join(PATH, 'logs')
- class App:
- def __init__(self, name=None):
- self.processes = []
- self.hostname = gethostname()
- self.ipaddr = gethostbyname(self.hostname)
- self.name = name if name else __class__.__name__
- if not path.exists(PATH_LOGS):
- makedirs(path.join(PATH_LOGS, 'local'))
- def start(self, nbr_clients):
- for idx in range(nbr_clients):
- process = spawn(self.task, idx)
- self.processes.append(process)
- for process in self.processes:
- process.join()
- def task(self, index):
- identity = f'client-{index}'
- ctx = Context()
- socket = ctx.socket(PUB)
- # socket.connect(LOGGER_CONNECTION)
- ssh.tunnel_connection(socket, LOGGER_CONNECTION, "dan@localhost")
- handler = PUBHandler(socket)
- formatter = Formatter(LOGGER_FORMAT, datefmt='%Y/%m/%d %H:%M:%S')
- for level in [DEBUG, INFO, WARNING, ERROR, CRITICAL]:
- handler.formatters[level] = formatter
- remote_logger = getLogger(self.name)
- remote_logger.addHandler(handler)
- remote_logger.setLevel(INFO)
- remote_logger.info(f'{self.hostname}:{self.ipaddr}:{identity}:started')
- while True:
- msg = f'{self.hostname}:{self.ipaddr}:Test message client'
- level = LOGLEVELS[randint(1, 5)]
- remote_logger.log(getattr(logging, level), msg)
- sleep(randint(1, 3))
- def main():
- app = App('App One')
- app.start(NBR_CLIENTS)
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement