Compare commits

..

13 Commits

Author SHA1 Message Date
b95b776418 drop when empty 2025-02-18 15:23:06 +01:00
b6e11f148f add debug 2025-02-18 14:46:42 +01:00
a9e4febaa5 add debug 2025-02-18 14:43:51 +01:00
25b17f93fc add debug 2025-02-18 14:41:53 +01:00
e9f57dd3f9 add debug 2025-02-18 14:39:44 +01:00
845c937d80 fix status 2025-02-18 14:38:20 +01:00
ecb2429a0d REmove lock 2025-02-18 14:36:10 +01:00
5509f5e177 REmove lock 2025-02-18 14:35:27 +01:00
73592dd53e REmove lock 2025-02-18 14:34:26 +01:00
f92a44b5c1 Fix 2025-02-18 14:32:12 +01:00
a969b950d1 Fix 2025-02-18 14:31:40 +01:00
6bedd576be Added ZMQ 2025-02-18 14:28:51 +01:00
fbfc7d9992 Added ZMQ 2025-02-18 14:27:46 +01:00
3 changed files with 112 additions and 41 deletions

80
server/src/notifier.py Normal file
View File

@@ -0,0 +1,80 @@
#!/bin/env python3
import websocket
import json
import random
import zmq
from pprint import pprint
__version__ = "2.0.0b2"
ws = None
uri = "ws://localhost:5080"
ws = websocket.create_connection(uri)
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5555")
def sendsmpmessage(target, message):
global ws
print("Sendmessage %s called to %s" % (message, target))
msg = ("%s %s" % (target, message))
# Create a unique correlation ID
command = {
"corrId": f"id{random.randint(0, 999999)}",
"cmd": msg,
}
json_command = json.dumps(command)
""" Connects to WebSocket server, sends a message, and returns the response """
if ws is None:
uri = "ws://localhost:5080"
ws = websocket.create_connection(uri) # Blocking WebSocket connection
ws.send(json_command) # Send message to WebSocket
responsejson = ws.recv() # Receive response
response = json.loads(responsejson)
# ws.close()
if response is not None:
return True
else:
return False
# for chatitem in response['resp']['chatItems']:
# statusdict = chatitem['chatItem']['meta']['itemStatus']
# try:
# status = statusdict['sndProgress']
# except KeyError:
# pprint(response['resp']['chatItems'])
# print('---')
# pprint(chatitem)
# print("FAILED")
# status = 'FAILED'
# else:
# smessage = chatitem['chatItem']['meta']['itemText']
# print("Message '%s' sent over websocket to %s, status was %s" % (smessage, target, status))
# if status == 'complete' or status == 'partial':
# return True
# else:
# return False
if __name__ == '__main__':
print("Tellme Notifier started...")
while True:
zmqmessage = socket.recv_string()
print(f"Received request: {zmqmessage}")
result = True
decoded = json.loads(zmqmessage)
pprint(decoded)
result = sendsmpmessage(decoded.get('target'), decoded.get('message'))
print(result)
if result is True:
socket.send_string("sent")
else:
socket.send_string("failed")

View File

@@ -3,61 +3,38 @@ from flask import Flask, request, jsonify
import websocket import websocket
import json import json
import yaml import yaml
import random import zmq
import threading
from pprint import pprint from pprint import pprint
__version__ = "2.0.0b2" __version__ = "2.0.0b2"
versionstring='Taurix TellMe server v' + __version__ versionstring='Taurix TellMe server v' + __version__
app = Flask(__name__) app = Flask(__name__)
lock = threading.Lock()
ws = None context = zmq.Context()
uri = "ws://localhost:5080" socket = context.socket(zmq.REQ)
ws = websocket.create_connection(uri) socket.connect("tcp://localhost:5555")
hooks = {} hooks = {}
with open(r'/etc/tellme/hooks.yml') as hooksfile: with open(r'/etc/tellme/hooks.yml') as hooksfile:
hooks = yaml.load(hooksfile, Loader=yaml.FullLoader) hooks = yaml.load(hooksfile, Loader=yaml.FullLoader)
def sendmessage(target, message): def sendmessage(target, message):
global ws global socket
print("Sendmessage %s called to %s" % (message, target)) jsonmessage = {}
msg = ("%s %s" % (target, message)) jsonmessage['target'] = target
jsonmessage['message'] = message
socket.send_string(json.dumps(jsonmessage))
# Create a unique correlation ID # Wait for a reply
command = { reply = socket.recv_string()
"corrId": f"id{random.randint(0, 999999)}", print(f"Received reply: {reply}")
"cmd": msg,
}
json_command = json.dumps(command)
""" Connects to WebSocket server, sends a message, and returns the response """ if reply == 'sent':
if ws is None: return True
uri = "ws://localhost:5080" else:
ws = websocket.create_connection(uri) # Blocking WebSocket connection return False
ws.send(json_command) # Send message to WebSocket
responsejson = ws.recv() # Receive response
response = json.loads(responsejson)
# ws.close()
for chatitem in response['resp']['chatItems']:
statusdict = chatitem['chatItem']['meta']['itemStatus']
try:
status = statusdict['sndProgress']
except KeyError:
print("FAILED")
status = 'FAILED'
else:
smessage = chatitem['chatItem']['meta']['itemText']
print("Message '%s' sent over websocket to %s, status was %s" % (smessage, target, status))
if status == 'complete':
return True
else:
return False
@app.route("/webhook/<id>", methods=['POST']) @app.route("/webhook/<id>", methods=['POST'])
@@ -75,8 +52,10 @@ def webhook_receiver(id):
if target is not None: if target is not None:
print(target) print(target)
with lock: if data.get('message') is not None:
sendmessage(target, data.get('message')) sendmessage(target, data.get('message'))
else:
print("No message, droppint")
else: else:
print("No target found, dropping message") print("No target found, dropping message")

View File

@@ -0,0 +1,12 @@
[Unit]
Description=Tellme Notifier
After=network.target
[Service]
User=tellme
WorkingDirectory=/opt/tellme
ExecStart=python3 notifier.py
Restart=always
[Install]
WantedBy=multi-user.target