Exemple #1
0
 def __init__(self, server):
     self.request_queue = asyncio.Queue()
     self.server = server
     self.logger = logging.getLogger('wazuh').getChild('dapi')
     self.logger.addFilter(
         cluster.ClusterFilter(tag='Cluster', subtag='D API'))
     self.pending_requests = {}
Exemple #2
0
 def __init__(self,
              performance_test: int,
              concurrency_test: int,
              configuration: Dict,
              cluster_items: Dict,
              enable_ssl: bool,
              logger: logging.Logger,
              tag: str = "Abstract Server"):
     """
     Class constructor
     :param performance_test: Message length to use in the performance test
     :param concurrency_test: Number of requests to do in the concurrency test
     :param configuration: ossec.conf cluster configuration
     :param cluster_items: cluster.json cluster internal configuration
     :param enable_ssl: Whether to enable asyncio's SSL support
     :param logger: Logger to use
     :param tag: Log tag
     """
     self.clients = {}
     self.performance = performance_test
     self.concurrency = concurrency_test
     self.configuration = configuration
     self.cluster_items = cluster_items
     self.enable_ssl = enable_ssl
     self.tag = tag
     self.logger = logger.getChild(tag)
     # logging tag
     self.logger.addFilter(cluster.ClusterFilter(tag=tag, subtag="Main"))
     self.tasks = [self.check_clients_keepalive]
     self.handler_class = AbstractServerHandler
     self.loop = asyncio.get_running_loop()
Exemple #3
0
    def __init__(self, configuration: Dict, cluster_items: Dict, enable_ssl: bool, performance_test: int,
                 concurrency_test: int, file: str, string: int, logger: logging.Logger, tag: str = "Client Manager"):
        """
        Class constructor

        :param configuration: client configuration
        :param enable_ssl: Whether to use SSL encryption or not
        :param performance_test: Value for the performance test function
        :param concurrency_test: Value for the concurrency test function
        :param file: File path for the send file test function
        :param string: String size for the send string test function
        """
        self.name = configuration['node_name']
        self.configuration = configuration
        self.cluster_items = cluster_items
        self.ssl = enable_ssl
        self.performance_test = performance_test
        self.concurrency_test = concurrency_test
        self.file = file
        self.string = string
        self.logger = logger.getChild(tag)
        # logging tag
        self.tag = tag
        self.logger.addFilter(cluster.ClusterFilter(tag=self.tag, subtag="Main"))
        self.tasks = []
        self.handler_class = AbstractClient
        self.client = None
        self.extra_args = {}
        self.loop = asyncio.get_running_loop()
Exemple #4
0
    def __init__(self,
                 fernet_key: str,
                 logger: logging.Logger,
                 cluster_items: Dict,
                 tag: str = "Handler"):
        """
        Class constructor

        :param fernet_key: 32 length string used as key to initialize cryptography's Fernet.
        :param tag: logging tag to use
        """
        super().__init__()
        # The counter is used to identify each message. If an incoming request has a known ID,
        # it is processed as a response
        self.counter = random.SystemRandom().randint(0, 2**32 - 1)
        # The box stores all sent messages IDs
        self.box = {}
        # defines command length
        self.cmd_len = 12
        # defines header length
        self.header_len = self.cmd_len + 8  # 4 bytes of counter and 4 bytes of message size
        # defines header format
        self.header_format = '!2I{}s'.format(self.cmd_len)
        # stores received data
        self.in_buffer = b''
        # stores last received message
        self.in_msg = InBuffer()
        # stores incoming file information from file commands
        self.in_file = {}
        # stores incoming string information from string commands
        self.in_str = {}
        # maximum message length to send in a single request
        self.request_chunk = 5242880
        # stores message to be sent
        self.out_msg = bytearray(self.header_len + self.request_chunk * 2)
        # object use to encrypt and decrypt requests
        self.my_fernet = cryptography.fernet.Fernet(
            base64.b64encode(fernet_key.encode())) if fernet_key else None
        # logging.Logger object used to write logs
        self.logger = logger.getChild(tag)
        # logging tag
        self.tag = tag
        self.logger_filter = cluster.ClusterFilter(tag=self.tag, subtag="Main")
        self.logger.addFilter(self.logger_filter)
        self.cluster_items = cluster_items
        # transports in asyncio are an abstraction of sockets
        self.transport = None
Exemple #5
0
def set_logging(debug_mode=0):
    logger = logging.getLogger('wazuh')
    logger.propagate = False
    # configure logger
    fh = cluster.CustomFileRotatingHandler(
        filename="{}/logs/cluster.log".format(common.ossec_path),
        when='midnight')
    formatter = logging.Formatter(
        fmt=
        '%(asctime)s wazuh-clusterd: %(levelname)s: [%(tag)s] [%(subtag)s] %(message)s',
        datefmt="%Y/%m/%d %H:%M:%S")
    formatter.converter = time.gmtime
    fh.setFormatter(formatter)
    logger.addHandler(fh)

    ch = logging.StreamHandler()
    ch.setFormatter(formatter)
    logger.addHandler(ch)

    logger.addFilter(cluster.ClusterFilter(tag='Cluster', subtag='Main'))

    # add a new debug level
    logging.DEBUG2 = 5

    def debug2(self, message, *args, **kws):
        if self.isEnabledFor(logging.DEBUG2):
            self._log(logging.DEBUG2, message, args, **kws)

    def error(self, msg, *args, **kws):
        if self.isEnabledFor(logging.ERROR):
            kws['exc_info'] = self.isEnabledFor(logging.DEBUG2)
            self._log(logging.ERROR, msg, args, **kws)

    logging.addLevelName(logging.DEBUG2, "DEBUG2")

    logging.Logger.debug2 = debug2
    logging.Logger.error = error

    debug_level = logging.DEBUG2 if debug_mode == 2 else logging.DEBUG if \
                  debug_mode == 1 else logging.INFO

    logger.setLevel(debug_level)
    return logger
Exemple #6
0
 def __init__(self,
              performance_test: int,
              concurrency_test: int,
              configuration: Dict,
              cluster_items: Dict,
              enable_ssl: bool,
              logger: logging.Logger,
              tag: str = "Abstract Server"):
     self.clients = {}
     self.performance = performance_test
     self.concurrency = concurrency_test
     self.configuration = configuration
     self.cluster_items = cluster_items
     self.enable_ssl = enable_ssl
     self.tag = tag
     self.logger = logger.getChild(tag)
     # logging tag
     self.logger.addFilter(cluster.ClusterFilter(tag=tag, subtag="Main"))
     self.tasks = [self.check_clients_keepalive]
     self.handler_class = AbstractServerHandler
     self.loop = asyncio.get_running_loop()
Exemple #7
0
 def setup_task_logger(self, task_tag: str):
     task_logger = self.logger.getChild(task_tag)
     task_logger.addFilter(
         cluster.ClusterFilter(tag=self.tag, subtag=task_tag))
     return task_logger