Mini Shell
#!/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