[docs]defoasis_ping(data):""" Sends a JSON message to either a websocket server or a socket server. If `analysis_pk` is in the data, `OASIS_WEBSOCKET_URL` and `OASIS_WEBSOCKET_URL` are in environment, sends a websocket message. If `analysis_pk` but missing variables, no message sent. Else, websocket sent to `OASIS_SOCKET_SERVER_IP` `OASIS_SOCKET_SERVER_PORT` defaulted to 127.0.0.1 8888. For a specific socket or websocket, use `oasis_ping_socket` or `oasis_ping_websocket` with the target location. Args: data (dict): dictionary of data: JSON serialisable Returns: Boolean: whether attempted call gets through """msg=json.dumps(data)ifdata.get('analysis_pk',None)isnotNone:ifall(iteminos.environforitemin['OASIS_WEBSOCKET_URL','OASIS_WEBSOCKET_PORT']):returnoasis_ping_websocket(f"{os.environ['OASIS_WEBSOCKET_URL']}:{os.environ['OASIS_WEBSOCKET_PORT']}/ws/analysis-status/",msg)logging.error("Missing environment variables `OASIS_WEBSOCKET_URL` and `OASIS_WEBSOCKET_PORT`.")returnFalsetarget=(os.environ.get("OASIS_SOCKET_SERVER_IP","127.0.0.1"),int(os.environ.get("OASIS_SOCKET_SERVER_PORT",8888)))returnoasis_ping_socket(target,msg)
[docs]defoasis_ping_socket(target,data):""" Sends a JSON message to a target socket Args: target ((str, int)): IP and port to hit data (str): JSON dumped string Returns: Boolean: whether attempted call gets through """try:withsocket.socket(socket.AF_INET,socket.SOCK_STREAM)asoasis_socket:oasis_socket.connect(target)oasis_socket.sendall(data.encode('utf-8'))returnTrueexceptConnectionRefusedErrorase:logging.error(f"oasis_ping_socket could not connect: {e}")returnFalse
[docs]defoasis_ping_websocket(ws_url,data):""" Sends a JSON message to a target websocket Args: ws_url (str): URL to hit (e.g. "ws://oasis-websocket:8001/ws/analysis-status/") data (str): JSON dumped string Returns: Boolean: whether attempted call gets through """ws=websocket.WebSocket()try:ws.connect(ws_url)ws.send(data)returnTrueexceptExceptionase:logging.error(f"oasis_ping_websocket could not connect: {e}")returnFalsefinally:ws.close()