Mini Shell

Direktori : /opt/imunify360/venv/share/imunify360/scripts/
Upload File :
Current File : //opt/imunify360/venv/share/imunify360/scripts/check_recurrent.py

#!/opt/imunify360/venv/bin/python
import socket
import json
import time
from pathlib import Path
from logging import getLogger
from defence360agent.internals import logger as lg

from defence360agent.contracts.config import SimpleRpc
from defence360agent.subsys.persistent_state import PERSISTENT_STATE_DIR

logger = getLogger(__name__)


def is_need_to_run(lock_file: Path):
    try:
        content = lock_file.read_text()
        next_run = float(content) if content else 0
        return time.time() >= next_run
    except (FileNotFoundError, ValueError) as e:
        logger.error(
            "Error while reading scheduled-lock file %s %s", lock_file, e
        )
        return False


def main():
    for lock_file in PERSISTENT_STATE_DIR.glob("*.lock"):
        if is_need_to_run(lock_file):
            try:
                with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as sock:
                    sock.settimeout(30)
                    sock.connect(SimpleRpc.SOCKET_PATH)
                    # it's doesn't matter what we send, we just need to wake up the server
                    msg = (
                        json.dumps({"command": ["version"], "params": {}})
                        + "\n"
                    )
                    sock.sendall(msg.encode())
            except Exception as e:
                logger.error("Failed to connect to rpc socket %s", e)
            else:
                return


if __name__ == "__main__":
    lg.reconfigure()
    main()

Zerion Mini Shell 1.0