MOON
Server: Apache
System: Linux 54-179-220-51.cprapid.com 3.10.0-1160.144.1.el7.tuxcare.els4.x86_64 #1 SMP Tue Apr 7 08:40:40 UTC 2026 x86_64
User: thehunarfound (1001)
PHP: 7.4.29
Disabled: NONE
Upload Files
File: //opt/imunify360/venv/lib64/python3.11/site-packages/im360/plugins/fgw.py
import contextlib
import logging
from typing import Generator

from defence360agent.api.server import send_message, FGWSendMessgeException
from defence360agent.contracts.config import Core
from defence360agent.contracts.plugins import MessageSink
from defence360agent.internals.global_scope import g
from defence360agent.plugins.client import SendToServerClient
from defence360agent.utils import Scope

logger = logging.getLogger(__name__)


class SendToServerFGW(SendToServerClient, MessageSink):
    SCOPE = Scope.IM360

    @contextlib.contextmanager
    def _get_api(
        self,
    ) -> Generator[send_message.FileBasedGatewayAPI, None, None]:
        api = send_message.FileBasedGatewayAPI(Core.VERSION)

        yield self._set_api_attrs(api)

    async def _send_pending_messages(self) -> None:
        if self._pending.empty():
            return None

        messages = self._pending.pop_all()
        logger.info("Sending %s messages", len(messages))
        with self._get_api() as api:
            try:
                if g.get("DEBUG"):
                    logger.info(
                        "Writing messages to gw folder: %s",
                        list((m[0], m[1][:40], len(m[1])) for m in messages),
                    )
                await api.send_messages(messages)
                if self._pending.qsize() > 0:
                    logger.info(
                        "Still need to send %s messages",
                        self._pending.qsize(),
                    )
            except FGWSendMessgeException:
                self._pending.put_many(messages)

                logger.warning(
                    "Unsuccessful to send %s messages",
                    self._pending.qsize(),
                )