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("check_recurrent")
def is_need_to_run(lock_file: Path):
try:
content = lock_file.read_text()
next_run = float(content) if content else 0
current_time = time.time()
if current_time >= next_run:
logger.info(
"Need to wakeup agent to process scheduled task %s "
"(scheduled time: %d, current time: %d, next run in: %d)",
lock_file.name,
current_time,
next_run,
next_run - current_time,
)
return True
return False
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": ["wakeup"], "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()