From 0eb0a3c03676636526131e90972bbcce65650911 Mon Sep 17 00:00:00 2001 From: Christian Eilers Date: Thu, 15 Sep 2022 19:23:00 -0700 Subject: [PATCH 1/2] started working on python api --- .gitignore | 8 +- .../journey_bot/main.py | 36 +++++--- .../journey_bot}/requirements.txt | 0 .../journey_speech}/Dockerfile | 0 .../journey_speech}/Picovoice.py | 0 .../journey_speech}/PorcupineMicrophone.py | 0 .../journey_speech}/SpeechRecognition.py | 0 .../journey_speech}/SpeechToText.py | 0 .../journey_speech}/TextToSpeech.py | 0 .../google-application-credentials.json | 12 +++ .../journey_speech}/model/Gr.fst | Bin .../journey_speech}/model/HCLr.fst | Bin .../journey_speech}/model/README | 0 .../journey_speech}/model/disambig_tid.int | 0 .../journey_speech}/model/final.mdl | Bin .../journey_speech}/model/ivector/final.dubm | Bin .../journey_speech}/model/ivector/final.ie | Bin .../journey_speech}/model/ivector/final.mat | Bin .../model/ivector/global_cmvn.stats | 0 .../model/ivector/online_cmvn.conf | 0 .../journey_speech}/model/ivector/splice.conf | 0 .../journey_speech}/model/mfcc.conf | 0 .../journey_speech}/model/word_boundary.int | 0 .../porcupine_models/linux/hey-journey.ppn | Bin .../porcupine_models/linux/yo-journey.ppn | Bin .../porcupine_models/windows/hey-journey.ppn | Bin .../porcupine_models/windows/yo-journey.ppn | Bin .../journey_speech}/request_interface.py | 0 .../journey_speech}/requirements.txt | 0 channels/voice/__init__.py | 21 +++++ channels/voice/main.py | 0 docker-compose-v2.yml | 25 ++++++ docker-compose.yml | 2 +- journey_apis/python/MessagePublisher.py | 0 journey_apis/python/kafka_producer.py | 3 + journey_apis/python/python-api.iml | 9 ++ journey_apis/python/python.iml | 9 ++ .../.gradle/7.3.2/checksums/checksums.lock | Bin 17 -> 17 bytes .../.gradle/7.3.2/checksums/md5-checksums.bin | Bin 0 -> 19097 bytes .../7.3.2/checksums/sha1-checksums.bin | Bin 0 -> 20171 bytes .../executionHistory/executionHistory.bin | Bin 0 -> 64319 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .../.gradle/7.3.2/fileHashes/fileHashes.bin | Bin 0 -> 19747 bytes .../.gradle/7.3.2/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../7.3.2/fileHashes/resourceHashesCache.bin | Bin 0 -> 19381 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../buildOutputCleanup/outputFiles.bin | Bin 0 -> 18803 bytes journey_central/build.gradle | 7 +- .../google-application-credentials.json | 12 +++ .../journey/service/KafkaConsumer.java | 20 +++++ .../journey/service/KafkaProducer.java | 27 ++++++ .../src/main/resources/application.properties | 10 ++- journey_integrations_executer/Dockerfile | 31 ------- journey_integrations_executer/app.py | 77 ------------------ journey_integrations_executer/entrypoint.sh | 2 - .../requirements.txt | 2 - journey_speech/output.mp3 | Bin 12480 -> 0 bytes 57 files changed, 180 insertions(+), 133 deletions(-) rename journey_bot/bot_starter.py => channels/journey_bot/main.py (53%) rename {journey_bot => channels/journey_bot}/requirements.txt (100%) rename {journey_speech => channels/journey_speech}/Dockerfile (100%) rename {journey_speech => channels/journey_speech}/Picovoice.py (100%) rename {journey_speech => channels/journey_speech}/PorcupineMicrophone.py (100%) rename {journey_speech => channels/journey_speech}/SpeechRecognition.py (100%) rename {journey_speech => channels/journey_speech}/SpeechToText.py (100%) rename {journey_speech => channels/journey_speech}/TextToSpeech.py (100%) create mode 100644 channels/journey_speech/google-application-credentials.json rename {journey_speech => channels/journey_speech}/model/Gr.fst (100%) rename {journey_speech => channels/journey_speech}/model/HCLr.fst (100%) rename {journey_speech => channels/journey_speech}/model/README (100%) rename {journey_speech => channels/journey_speech}/model/disambig_tid.int (100%) rename {journey_speech => channels/journey_speech}/model/final.mdl (100%) rename {journey_speech => channels/journey_speech}/model/ivector/final.dubm (100%) rename {journey_speech => channels/journey_speech}/model/ivector/final.ie (100%) rename {journey_speech => channels/journey_speech}/model/ivector/final.mat (100%) rename {journey_speech => channels/journey_speech}/model/ivector/global_cmvn.stats (100%) rename {journey_speech => channels/journey_speech}/model/ivector/online_cmvn.conf (100%) rename {journey_speech => channels/journey_speech}/model/ivector/splice.conf (100%) rename {journey_speech => channels/journey_speech}/model/mfcc.conf (100%) rename {journey_speech => channels/journey_speech}/model/word_boundary.int (100%) rename {journey_speech => channels/journey_speech}/porcupine_models/linux/hey-journey.ppn (100%) rename {journey_speech => channels/journey_speech}/porcupine_models/linux/yo-journey.ppn (100%) rename {journey_speech => channels/journey_speech}/porcupine_models/windows/hey-journey.ppn (100%) rename {journey_speech => channels/journey_speech}/porcupine_models/windows/yo-journey.ppn (100%) rename {journey_speech => channels/journey_speech}/request_interface.py (100%) rename {journey_speech => channels/journey_speech}/requirements.txt (100%) create mode 100644 channels/voice/__init__.py create mode 100644 channels/voice/main.py create mode 100644 docker-compose-v2.yml create mode 100644 journey_apis/python/MessagePublisher.py create mode 100644 journey_apis/python/kafka_producer.py create mode 100644 journey_apis/python/python-api.iml create mode 100644 journey_apis/python/python.iml create mode 100644 journey_central/.gradle/7.3.2/checksums/md5-checksums.bin create mode 100644 journey_central/.gradle/7.3.2/checksums/sha1-checksums.bin create mode 100644 journey_central/.gradle/7.3.2/executionHistory/executionHistory.bin create mode 100644 journey_central/.gradle/7.3.2/fileHashes/fileHashes.bin create mode 100644 journey_central/.gradle/7.3.2/fileHashes/resourceHashesCache.bin create mode 100644 journey_central/.gradle/buildOutputCleanup/outputFiles.bin create mode 100644 journey_central/google-application-credentials.json create mode 100644 journey_central/src/main/java/com/journey/central/journey/service/KafkaConsumer.java create mode 100644 journey_central/src/main/java/com/journey/central/journey/service/KafkaProducer.java delete mode 100644 journey_integrations_executer/Dockerfile delete mode 100644 journey_integrations_executer/app.py delete mode 100644 journey_integrations_executer/entrypoint.sh delete mode 100644 journey_integrations_executer/requirements.txt delete mode 100644 journey_speech/output.mp3 diff --git a/.gitignore b/.gitignore index 56e3704..0ab8af6 100644 --- a/.gitignore +++ b/.gitignore @@ -226,7 +226,7 @@ $RECYCLE.BIN/ bin/ integrations/*/.idea/ .env -journey_bot/.env +channels/journey_bot/.env journey_central/.idea/ journey_central/.jython_cache/ journey_central/treeassistant-tatan.json @@ -236,9 +236,9 @@ journey_core_nlp/.generated/ journey_core_nlp/__pycache__/ journey_core_nlp/elasticsearch-7.8.0/* */.env -journey_speech/__pycache__/ -journey_speech/.env -journey_speech/treeassistant-tatan.json +channels/journey_speech/__pycache__/ +channels/journey_speech/.env +channels/journey_speech/treeassistant-tatan.json lib/ log/ venv/ diff --git a/journey_bot/bot_starter.py b/channels/journey_bot/main.py similarity index 53% rename from journey_bot/bot_starter.py rename to channels/journey_bot/main.py index c4db060..a8465e3 100644 --- a/journey_bot/bot_starter.py +++ b/channels/journey_bot/main.py @@ -1,16 +1,16 @@ +import logging import os -import mindmeld + +from dotenv import load_dotenv from telegram.ext import ( Updater, CommandHandler, MessageHandler, Filters, - ConversationHandler, CallbackContext, ) -import logging -import requests -from dotenv import load_dotenv + +from channels.voice import JourneyChannel url = "http://localhost:7150/parse" @@ -21,22 +21,34 @@ level=logging.INFO) dispatcher = updater.dispatcher +bot_channel = JourneyChannel(__name__) + + +class TelegramBot: + def __init__(self): + pass + def start(update, context): context.bot.send_message(chat_id=update.effective_chat.id, text="Hello, I'm Journey. What can I do for you?") -def message_received(update: Updater, context: CallbackContext): +def telegram_message_received(update: Updater, context: CallbackContext, channel: JourneyChannel): msg = update.message.text - body = {"text": msg} - response = requests.post(url, json=body) - print(response.json()) - context.bot.send_message(chat_id=update.effective_chat.id, text=response.json()["directives"][0].payload.text) + dialogue_id = channel.process_message(msg) + session = channel.get_session(dialogue_id) + session.chat_id = update.effective_chat.id + session.context = context -message_handler = MessageHandler(Filters.text, message_received) -dispatcher.add_handler(message_handler) +@bot_channel.process_message +def process_message(session, message): + context = session.context + context.bot.send_message(chat_id=session.chat_id, text=message) + +message_handler = MessageHandler(Filters.text, lambda x, y: telegram_message_received(x, y, bot_channel)) +dispatcher.add_handler(message_handler) start_handler = CommandHandler('start', start) dispatcher.add_handler(start_handler) diff --git a/journey_bot/requirements.txt b/channels/journey_bot/requirements.txt similarity index 100% rename from journey_bot/requirements.txt rename to channels/journey_bot/requirements.txt diff --git a/journey_speech/Dockerfile b/channels/journey_speech/Dockerfile similarity index 100% rename from journey_speech/Dockerfile rename to channels/journey_speech/Dockerfile diff --git a/journey_speech/Picovoice.py b/channels/journey_speech/Picovoice.py similarity index 100% rename from journey_speech/Picovoice.py rename to channels/journey_speech/Picovoice.py diff --git a/journey_speech/PorcupineMicrophone.py b/channels/journey_speech/PorcupineMicrophone.py similarity index 100% rename from journey_speech/PorcupineMicrophone.py rename to channels/journey_speech/PorcupineMicrophone.py diff --git a/journey_speech/SpeechRecognition.py b/channels/journey_speech/SpeechRecognition.py similarity index 100% rename from journey_speech/SpeechRecognition.py rename to channels/journey_speech/SpeechRecognition.py diff --git a/journey_speech/SpeechToText.py b/channels/journey_speech/SpeechToText.py similarity index 100% rename from journey_speech/SpeechToText.py rename to channels/journey_speech/SpeechToText.py diff --git a/journey_speech/TextToSpeech.py b/channels/journey_speech/TextToSpeech.py similarity index 100% rename from journey_speech/TextToSpeech.py rename to channels/journey_speech/TextToSpeech.py diff --git a/channels/journey_speech/google-application-credentials.json b/channels/journey_speech/google-application-credentials.json new file mode 100644 index 0000000..1336a73 --- /dev/null +++ b/channels/journey_speech/google-application-credentials.json @@ -0,0 +1,12 @@ +{ + "type": "service_account", + "project_id": "treeassistant-tatan", + "private_key_id": "c17762b3284ad4b2892da86b5acad31d81456480", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCxPkpEu2F/AgfT\nRN1E6d3AWKuUlN6EvWtbMkzJBTVPNE3dHNYwmXv+BdiPr63ZBIruRGngkzmlTWmA\nBnXzxL62ddyUUAGMix0Ei6iI9Dd31YUf8fpxfoesckoTVPVygIVjxaN9a3Bp3vl5\nHffGcMYCJqUjEempno0B4OM+d4NY4Z7giBkUrTJ1OPKWFwJm0EGHVoO+mmMLlnoj\ny4ybKlxzbY67jFRD6x4Ua9q5G3D19h2Xi1GnySIKhwCGRCcl6CIPJr0hJxyBzHS0\ny40QnBPYLL9cM8t8bUuMMvjWyz8On075aEyaUuqSrUE8aLn5vFBSiKHG6f+UFi/8\nW+YwEmxzAgMBAAECggEAB+t3a7ICKnSvkm2MHZCXPtY3d7PEBaMyvg51ukqOfHPv\n240QUERrcyK7vIZMrfSZm9ZYWZdg7Tv6SaUAQqlsUPOo3/YU1TzaFq8brSyMb430\nHUTovFPuqAv4HckFqd1VGIVnFF5nbxoH6uhZGMR6DidZgnZ1PgXYDL9wKAU0snuM\nHhr9DlvPeqh7Y6ghU11wTHEobZV5Ys9Kiz4cekWYKRe4/8yaYHOPThCOIMVukS5q\nxekTIkIcciFOSAqQ7g4U+PILf1+9ZxDbtsdLs0s5R37v8o7YpCxvFaZ6zNxAHrbS\noFrLi2hOUb1deFw5H1a2wADDR/UbcHAlgIj+Vl36cQKBgQDlS6slj52OXNHqiWar\nGkBwbVU9eBKOIT6G6TVSZEfVhUCB5eU+A+zofEnHxoeI6os7JcdW5SBzn7p7tJwN\nBgtvSFF0DLUMVGhyLH6VfCCLC9HsmY0b5f8Nf/+KJz3oZIADcLgtwK7cZwROGTVF\n9I5SxSq/5Y+P9CT82O9Bf7XQ1wKBgQDF4rW4eyjMDsE1orVKXr+K3ItAcOKg5LCC\np83iwtrmt6LiSRTe6JQsSmlkRZhV0z4zFjKqoyYem6u3yhCAUPk2V00vx2hy9gxz\nuGXtY0WZRnGZ4HG+mscORi5JpHr28WjJCSQDUA4jCtpJ4cSUizDikHOXDlKw4TGL\nweP7gAshxQKBgQCyrRVPrqrq7b+SEMHVYR6HvVroDHIBGTy9KmsnqgckBrMuxfOu\nMKbivz9LEpQ5B/O5AoZkWyW/k99gWGwl5ejxLZxzXxeR5RCCr9NwLwq471wFD96a\nt83ZOj3p7Qxb1DzA8YxD8tsP2qLLLO+LdLeXHhdi88K8PVa5RV6jXp5SfwKBgQCs\nQ/wmKTEO0xlnc8mWgH0GiY+//YWMwwjV9PbKnQ6rItntW+mLU7UKCY1N+TfwHwFa\nv8xDt9uLccE/MezDh7orkDxlh5Zp3cBhTPmOeokwMZ7bcgQTBfKbfoT1Hvbc2rN5\nrzdmmt5zqxL0llHnbnSUB2RY7+MUkDXtkFDDtGf8cQKBgQCAescmKqvwC+rXJb1c\nU+HOS9DJMzQzjI54MZqgfjcN68C1zm8Y6TZ9lBGkkGHOoRVolCY5QLTrgeFzCoTC\ns+uhss9CEewRJs8OxxfnAr373JG8ZiGIrw4PHFG3hlPiCCNKoOarEhWT09EAOPY0\ng/LjdJToLWRghp3sFC4v6FUKTA==\n-----END PRIVATE KEY-----\n", + "client_email": "treetester@treeassistant-tatan.iam.gserviceaccount.com", + "client_id": "109961751830646460170", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/treetester%40treeassistant-tatan.iam.gserviceaccount.com" +} diff --git a/journey_speech/model/Gr.fst b/channels/journey_speech/model/Gr.fst similarity index 100% rename from journey_speech/model/Gr.fst rename to channels/journey_speech/model/Gr.fst diff --git a/journey_speech/model/HCLr.fst b/channels/journey_speech/model/HCLr.fst similarity index 100% rename from journey_speech/model/HCLr.fst rename to channels/journey_speech/model/HCLr.fst diff --git a/journey_speech/model/README b/channels/journey_speech/model/README similarity index 100% rename from journey_speech/model/README rename to channels/journey_speech/model/README diff --git a/journey_speech/model/disambig_tid.int b/channels/journey_speech/model/disambig_tid.int similarity index 100% rename from journey_speech/model/disambig_tid.int rename to channels/journey_speech/model/disambig_tid.int diff --git a/journey_speech/model/final.mdl b/channels/journey_speech/model/final.mdl similarity index 100% rename from journey_speech/model/final.mdl rename to channels/journey_speech/model/final.mdl diff --git a/journey_speech/model/ivector/final.dubm b/channels/journey_speech/model/ivector/final.dubm similarity index 100% rename from journey_speech/model/ivector/final.dubm rename to channels/journey_speech/model/ivector/final.dubm diff --git a/journey_speech/model/ivector/final.ie b/channels/journey_speech/model/ivector/final.ie similarity index 100% rename from journey_speech/model/ivector/final.ie rename to channels/journey_speech/model/ivector/final.ie diff --git a/journey_speech/model/ivector/final.mat b/channels/journey_speech/model/ivector/final.mat similarity index 100% rename from journey_speech/model/ivector/final.mat rename to channels/journey_speech/model/ivector/final.mat diff --git a/journey_speech/model/ivector/global_cmvn.stats b/channels/journey_speech/model/ivector/global_cmvn.stats similarity index 100% rename from journey_speech/model/ivector/global_cmvn.stats rename to channels/journey_speech/model/ivector/global_cmvn.stats diff --git a/journey_speech/model/ivector/online_cmvn.conf b/channels/journey_speech/model/ivector/online_cmvn.conf similarity index 100% rename from journey_speech/model/ivector/online_cmvn.conf rename to channels/journey_speech/model/ivector/online_cmvn.conf diff --git a/journey_speech/model/ivector/splice.conf b/channels/journey_speech/model/ivector/splice.conf similarity index 100% rename from journey_speech/model/ivector/splice.conf rename to channels/journey_speech/model/ivector/splice.conf diff --git a/journey_speech/model/mfcc.conf b/channels/journey_speech/model/mfcc.conf similarity index 100% rename from journey_speech/model/mfcc.conf rename to channels/journey_speech/model/mfcc.conf diff --git a/journey_speech/model/word_boundary.int b/channels/journey_speech/model/word_boundary.int similarity index 100% rename from journey_speech/model/word_boundary.int rename to channels/journey_speech/model/word_boundary.int diff --git a/journey_speech/porcupine_models/linux/hey-journey.ppn b/channels/journey_speech/porcupine_models/linux/hey-journey.ppn similarity index 100% rename from journey_speech/porcupine_models/linux/hey-journey.ppn rename to channels/journey_speech/porcupine_models/linux/hey-journey.ppn diff --git a/journey_speech/porcupine_models/linux/yo-journey.ppn b/channels/journey_speech/porcupine_models/linux/yo-journey.ppn similarity index 100% rename from journey_speech/porcupine_models/linux/yo-journey.ppn rename to channels/journey_speech/porcupine_models/linux/yo-journey.ppn diff --git a/journey_speech/porcupine_models/windows/hey-journey.ppn b/channels/journey_speech/porcupine_models/windows/hey-journey.ppn similarity index 100% rename from journey_speech/porcupine_models/windows/hey-journey.ppn rename to channels/journey_speech/porcupine_models/windows/hey-journey.ppn diff --git a/journey_speech/porcupine_models/windows/yo-journey.ppn b/channels/journey_speech/porcupine_models/windows/yo-journey.ppn similarity index 100% rename from journey_speech/porcupine_models/windows/yo-journey.ppn rename to channels/journey_speech/porcupine_models/windows/yo-journey.ppn diff --git a/journey_speech/request_interface.py b/channels/journey_speech/request_interface.py similarity index 100% rename from journey_speech/request_interface.py rename to channels/journey_speech/request_interface.py diff --git a/journey_speech/requirements.txt b/channels/journey_speech/requirements.txt similarity index 100% rename from journey_speech/requirements.txt rename to channels/journey_speech/requirements.txt diff --git a/channels/voice/__init__.py b/channels/voice/__init__.py new file mode 100644 index 0000000..37ff1b0 --- /dev/null +++ b/channels/voice/__init__.py @@ -0,0 +1,21 @@ +class JourneyChannel: + def __init__(self, name__): + self.name = name__ + self._sessions = dict() + + def start(self): + pass + + def send_message(self, originator_id, message): + print("Received message: " + message) + pass + + def process_message(self, func): + def wrapper(): + + func(session, message) + print("after") + return wrapper + + def get_session(self, dialogue_id): + return self._sessions[dialogue_id] \ No newline at end of file diff --git a/channels/voice/main.py b/channels/voice/main.py new file mode 100644 index 0000000..e69de29 diff --git a/docker-compose-v2.yml b/docker-compose-v2.yml new file mode 100644 index 0000000..f437e1f --- /dev/null +++ b/docker-compose-v2.yml @@ -0,0 +1,25 @@ +version: '3.3' + +services: + zookeeper: + image: confluentinc/cp-zookeeper:latest + environment: + ZOOKEEPER_CLIENT_PORT: 2181 + ZOOKEEPER_TICK_TIME: 2000 + ports: + - 22181:2181 + + kafka: + image: confluentinc/cp-kafka:latest + depends_on: + - zookeeper + ports: + - 29092:29092 + environment: + KAFKA_BROKER_ID: 1 + KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 + KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092 + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT + KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT + KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 + diff --git a/docker-compose.yml b/docker-compose.yml index ca87d7e..12a7807 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -63,7 +63,7 @@ services: volumes: - /mnt/wslg/:/mnt/wslg/ journey_speech: - build: ./journey_speech + build: channels/journey_speech environment: PULSE_SERVER: /mnt/wslg/PulseServer GOOGLE_APPLICATION_CREDENTIALS: "google-application-credentials.json" diff --git a/journey_apis/python/MessagePublisher.py b/journey_apis/python/MessagePublisher.py new file mode 100644 index 0000000..e69de29 diff --git a/journey_apis/python/kafka_producer.py b/journey_apis/python/kafka_producer.py new file mode 100644 index 0000000..6d22980 --- /dev/null +++ b/journey_apis/python/kafka_producer.py @@ -0,0 +1,3 @@ +class KafkaProducer: + def __init__(self): + pass \ No newline at end of file diff --git a/journey_apis/python/python-api.iml b/journey_apis/python/python-api.iml new file mode 100644 index 0000000..60e0ed3 --- /dev/null +++ b/journey_apis/python/python-api.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/journey_apis/python/python.iml b/journey_apis/python/python.iml new file mode 100644 index 0000000..60e0ed3 --- /dev/null +++ b/journey_apis/python/python.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/journey_central/.gradle/7.3.2/checksums/checksums.lock b/journey_central/.gradle/7.3.2/checksums/checksums.lock index 76fb1a440532b92266b6469231fd7163a2e4de77..8f93022b4e543fb02d12b80190748db59c2c3ff0 100644 GIT binary patch literal 17 TcmZQ(%2CbNHu<}Y0RoHxBR~UB literal 17 ScmZQ(%2CbNHu<}Y0SW*k4Feni diff --git a/journey_central/.gradle/7.3.2/checksums/md5-checksums.bin b/journey_central/.gradle/7.3.2/checksums/md5-checksums.bin new file mode 100644 index 0000000000000000000000000000000000000000..342188ca81e1291aada5945ba29b825c4c0e2be0 GIT binary patch literal 19097 zcmeI(`%6<%00;2vMw^cfM>?DO!2(f!T=OlUmfFQmXwjI7Z-?Mu@zwVwK zj?<`C=*6vF>a`(85P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SNpr0)_lW!pUYd zi4tKDS;KML75qSPZCPuS_vGlv*SXp3{{!ocsVRFv)lT!*EO(4q6RMnxDJ0MHu-tif zQ%0pP_=V*8QkFmWjHcPjo-NV&RV<&ZFZQ*>Cw0*EEiCsPy6V3$_V_KG-@)>^OP!k~ zN`;%QpY|ueQlRsuRaoi#OqR>ul=cPR9UG?Wcd`6H%>GV=-us=dV`ll;!_8&oPrGC2 zI$-m>(7(k~gsu@mC`uQ=e&fMGN*^7V>}Lw|XGWN&|Cazm@LskZ)LFKJXhB#m&bxDop#TITc=83)oG z^N!D@=SahBBn_og+$fe76n4d>?0SFl)VFqzc8)ga^Z#<;oWZ)gI+E4m@39)(v-bX4 z<@v;Iw87titcPQ{-T9wVhpHQ- z`)n&*b#bP+_>QijabMWckIZr+&jK!xt})ZIfh8#B*?m*FN|D2<64=vok%U3 rRlbz)r$2;!1Tx57MN7pElWD`$dC=NA<%+8*!wew+W5k=%qX2 literal 0 HcmV?d00001 diff --git a/journey_central/.gradle/7.3.2/checksums/sha1-checksums.bin b/journey_central/.gradle/7.3.2/checksums/sha1-checksums.bin new file mode 100644 index 0000000000000000000000000000000000000000..86c46090644032fe1633b6aff3ea198c29ff7640 GIT binary patch literal 20171 zcmeI4X;2eq7=S~NBwS+^Q4YC1iUcGGgNTZNC`Tee1+m;gKv1wUC{_hWjKPSCfZ|1= zid7ISLW{+#*kVx-#e%3Df{NmW913!o(%t=bbtdbtj(^&DcP7cslRW$GJ_-2)9}5`_ zt*=JOjqz#I{Im;uPyh-*0Vn_kpa2wr0#E=7KmjNK1)u;FfC5ke3P1rU00p4H|D}L8 zb|EV0VzjtSd}nMtgJG$L?HEXeEDMuFM=SL75>x8;2U3}Vke#>C2yxeVis#<)-hJ=a z^NNV`)hS-a6LqNG>-z(7_bQ5C98AB!MRE3!+5Ff&=~oeV z)26uLUpqUCd>unxIEcG>QamtwlU5nuJe=e^DK1)lBiB*5YZBt_859o3!-ZuBF-C;$bZ02F`%Pyh-*0Vn_k{<{TcVW)16-KOHV3CBtncfV*lRJUiG)OmHe zo#(dr8OIn5g`{@1u*c{cS#PmNt1n?S-tq}j4qCrJ(=Ofiz_=N`UUMSd(X8+yG)o2l z3w*g*|ISkCXm)a{35b{Wt3I5P-jsC1D`zj76(K~k)UVQKy>N(5|4^ipyI*3xrd1$G zx|?u#IcZ@wzOe_eJGnEQrex`Fbg4?W;$>jn)MoR2+NM`ekybt-G1#$mOL8)!T#%5R z`bHyEq0>9iVmh~NEwa}85th4t7TsFdEw0Dk^9KnahI@6Il*-6e$u+V*Sl0o z8;aM|4!^e+AC(@qN0zvquo!DI=$4M{v&@DLv&IFC%AV5p!#VbQqau*C(+pWMd~Jo? z8TK0&`khrQQDCod&}?b^eu|F6k4KOt9Zy(#h4{NIXN?Gb8b?z^Jg)LZUE{Aa`)h7% zVCyQd8XDc9XqNV^&sb3*r*AwjaT9Ygca=5p6h?-c&yp4@&tP@YEk{M=Rask21e)ht z?Om-R)AiL&u(ch;EE$@mqDr?S&T&%)H^yn&Y~L^tt0J+?FZS7wtR8Y<5a$ft61hy@ zJ~^yQ*QHXX&1p&z=bavdt{Wn@(6%qA@! zvc@v8N4bWrN4*l#)*TZ+jU0Xy%+B9e$_l}L@`+h#B3Ef>wTpB3d(>NHWT<6ul$__8c)Im)yEy0uK9Iq+y>Z$jQTf=<@sdJVQ-)dOU` z_a!X%Nj`MTYvJpe9LF&+Ll?9vWlqx)lM8*>$Qp7aEOs~kzu@GqYllsiQQyf2$%@4l zQ7WRli#N~Aeu=DMJHlddZRl37jZ#F-Qm$f}C{LDL{_1&Kbr$wn$KS8v6vARME$LRl kwm`m8UG=DBlk?J!;kXS3Y4zy)P(xNrSf*p}6-HM70EjDCod5s; literal 0 HcmV?d00001 diff --git a/journey_central/.gradle/7.3.2/executionHistory/executionHistory.bin b/journey_central/.gradle/7.3.2/executionHistory/executionHistory.bin new file mode 100644 index 0000000000000000000000000000000000000000..9511970137ca63e4369e66bcbf0ea674b583b9be GIT binary patch literal 64319 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 literal 0 HcmV?d00001 diff --git a/journey_central/.gradle/7.3.2/executionHistory/executionHistory.lock b/journey_central/.gradle/7.3.2/executionHistory/executionHistory.lock index 2d2ae82a0dca8e1ecbe0ff3439dd1f87f71d7620..50b708b22dc86a30c102065e08426c337e4a0116 100644 GIT binary patch literal 17 UcmZRc&Ma~-RQ%sb1_)pV04z8I#sB~S literal 17 TcmZRc&Ma~-RQ%sb1}FdkEHwke diff --git a/journey_central/.gradle/7.3.2/fileHashes/fileHashes.bin b/journey_central/.gradle/7.3.2/fileHashes/fileHashes.bin new file mode 100644 index 0000000000000000000000000000000000000000..4ecf0e62e9c34fb5566ddadf40ab65b932f54bb7 GIT binary patch literal 19747 zcmeI3doWyA9LMjjkoDf0h)9BHrCEt*kqXi+B3VSyJX)fZ!FHn_^;qInc{Hff)T1RN zswIgeBhgH#c%>bW8AQ5Tk3pv5ohFFK5Cpw<&pnf=+yDAs=XYoJy7S%hIltfe?CxLA zIY1CwxNG!9yt>q1J;Ds7rhyq&776Uf*pc+jOCQ9Uk=9d~7q6-${AJE&*jrjiu-z*p8pLk(;1m#Y7IKQ#f zCz^8ccBk`JoZsy&ye@g>kco1~LY)7sk$5rx)>=<&WdSLT&BskS(J zp#1O&oa+TX^gf!E=SAn~IDfM`u4KBYUmxXy5}X^Ie&f-CP3#VO{4~zZRL=!fxkgvf z<85(nQ7)YHH6JxbxnnTS_xWWJr7wva^gQ)Aw^ceNINfwGjUI1}bNiF|!Wfs;V0!)t zoV(r;WhhsKyoGWn8JxSnHZ{nJc1osm3!Hx>j5zSR*P1QLowIQ6=btb8aG%XClsigr z9@Kd2c}1G@RXUf)d5lR?k%icDf}Upq=lCx{u<6eLjet8C00UqE41fVJ00zJS7ytuc z01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9QfB`T72EYIq00UqE41fVJ00zJS7ytuc z01W(h17_qD)JAt*>c!1B96YMw&y7pEvMAwYPxTN4E7AR(-ZfN*P3`D6`X|9JQ1p7CrpH5pc{Th^wC%sjaSL~OKY5?#%HQMn=hM+S@!j{nl7L+)y4C9LW!(Yw!yX(q9v zEY2-(k= zLK|HEomv)btUI>b3?SBu3_G;x+m)HGCPY*pR=X~Kie>fes#Qh-pHWD>)nnS8cB+h=rJlxpz!biTB!A>9jzAhMZ+PG3*Yo;1N! zY2aG#oTJc}BoYS4o;o3dMV&}k*VUPo9Zxz6R+m$B%jzZPMTJz207aR5h}aOxB<#L_ z!N~}4`LK`oYlOXu?=nSX=C;tM6gK2AiR_@qiI?yE#jdTqMTcU7M3MoL&A zf{0}jLaRLi!kk)**vhtsVve2ZI-;FP`23dov01p>+^~jcrL1e`ed#)kyW8j*VkU7_ z?-S=L6WRVDUf12kCtqJAiNvI^9K literal 0 HcmV?d00001 diff --git a/journey_central/.gradle/7.3.2/fileHashes/fileHashes.lock b/journey_central/.gradle/7.3.2/fileHashes/fileHashes.lock index 7ce0e0bc5c111ab674ee27984a7b68240307004c..3789cb3388e8854dcfaaf9cda30d6ebcf0df9af7 100644 GIT binary patch literal 17 UcmZQRnZ0(!ue6<~7$Cp~07JnAtN;K2 literal 17 TcmZQRnZ0(!ue6<~7@z8I#GEUwwpr)dtpE{fDkR{&{>fbn87uJwK?aR8PCnGmw%JO$(LWA=6upS zS^+`0*iX<8;={xF!zEmS00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x{9gpV zFyDv`bu%sttt=PJRD$@-)_gHHtLSdPUxvso>dz83`u{<}wL3{(T;~z0ivm$Uw~E6^ zOG;Qmb*T#V;*Q(H?bn^MsV?qDUFUjs{WROrrS$n*QSZth$PSBd3Z~Eh67_z0Vcj2{ z;#&HgI@Ar$AF+h49Sf)~<)S`#s_H}{%h7T#=7*#lbt5ro8qd^8sV<#?`ulU*u^TN> z15_8EL7hR=Z(tjES z`=QPwj`#}W$a=b)P+#tLeEPG5cn;m|P$x?iX&Pe3A*xGds0&!@&aYI4I8j}s{-;-8 z{iHtEx|=>H0`(9l{-welZeP*oB%v;hJ2;;|(@4K9MA@jzg4B_-^~-#yy`%;8$TO0O ztyZQ+`gQN4F2C1Gwmh*yZmUpFej2KOH!E`%eNHCo=r=)F(f39z;3o)x00@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@A`eV**;$ZvqF4D(^P*T)`JdbuRVi-~5z#_0yGoqrBPS_+q~M7V-4r z5!;hqH5IjGJt6Z*1rUx`Y>&6h037b-RRC}+2ewz(x}pCsYp7JMOBbfy-B zZD6Z4s;cOw)2s2tNUPTISWliIF0YNdBII%(zHm-IdaYa>>(j94=k`6lWnz4xkm>(4 z86!W|gdcQUzOegOe9;*5qASs+Gj>crZ(`X6u>fE6WxP!1zi-Ui>0OYy&FFXoU&s<_ z6c6SMY~#A}YT6^NSiUbZ>HVSg*m!e>zct&TvOyoL^Y|KHwAnNVULNAkQ#G=MQy#}! zzH2e*48J}m)Bo`PS8tVvKi_V6-H$JhKPRp00!U-nuD5GC$}ZI_LTp|oZ8D-Tl~th_!|i)Go%0j literal 0 HcmV?d00001 diff --git a/journey_central/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/journey_central/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 826db08062abeaf0da288fb8b7bebc5d526b3887..615b060b12b02df0cd5a15f7ce87bba62d13e031 100644 GIT binary patch literal 17 UcmZRcakg&56ArgZ1_+P@05`b=TL1t6 literal 17 UcmZRcakg&56ArgZ1_)pT05_ooLjV8( diff --git a/journey_central/.gradle/buildOutputCleanup/outputFiles.bin b/journey_central/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..f1d3299845b9152e2c14598e69ba048d813cbf1e GIT binary patch literal 18803 zcmeI%Jt%~69KiACMBH^9lAMl(bizPN3IRDx zDX|E}z+&){L)moYY{GLr|6j6Ml=OY-d7gjY=hy$a=d)g|rrA?I)S-PH>0e7$2q1s} z0tg_000IagfB*srAba-`;aq~G|Tf>TK+Y3jYL((i&pyXX8N1lN6+Qf^@_WDV$2)%l#7^!3 literal 0 HcmV?d00001 diff --git a/journey_central/build.gradle b/journey_central/build.gradle index ad575f2..2ce246f 100644 --- a/journey_central/build.gradle +++ b/journey_central/build.gradle @@ -16,6 +16,9 @@ configurations { repositories { mavenCentral() + maven { + url "https://packages.confluent.io/maven/" + } } dependencies { @@ -49,9 +52,7 @@ dependencies { // https://mvnrepository.com/artifact/commons-io/commons-io implementation 'commons-io:commons-io:2.6' - - // https://mvnrepository.com/artifact/org.python/jython - implementation 'org.python:jython-standalone:2.7.2' + implementation "org.springframework.kafka:spring-kafka" } test { diff --git a/journey_central/google-application-credentials.json b/journey_central/google-application-credentials.json new file mode 100644 index 0000000..1336a73 --- /dev/null +++ b/journey_central/google-application-credentials.json @@ -0,0 +1,12 @@ +{ + "type": "service_account", + "project_id": "treeassistant-tatan", + "private_key_id": "c17762b3284ad4b2892da86b5acad31d81456480", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCxPkpEu2F/AgfT\nRN1E6d3AWKuUlN6EvWtbMkzJBTVPNE3dHNYwmXv+BdiPr63ZBIruRGngkzmlTWmA\nBnXzxL62ddyUUAGMix0Ei6iI9Dd31YUf8fpxfoesckoTVPVygIVjxaN9a3Bp3vl5\nHffGcMYCJqUjEempno0B4OM+d4NY4Z7giBkUrTJ1OPKWFwJm0EGHVoO+mmMLlnoj\ny4ybKlxzbY67jFRD6x4Ua9q5G3D19h2Xi1GnySIKhwCGRCcl6CIPJr0hJxyBzHS0\ny40QnBPYLL9cM8t8bUuMMvjWyz8On075aEyaUuqSrUE8aLn5vFBSiKHG6f+UFi/8\nW+YwEmxzAgMBAAECggEAB+t3a7ICKnSvkm2MHZCXPtY3d7PEBaMyvg51ukqOfHPv\n240QUERrcyK7vIZMrfSZm9ZYWZdg7Tv6SaUAQqlsUPOo3/YU1TzaFq8brSyMb430\nHUTovFPuqAv4HckFqd1VGIVnFF5nbxoH6uhZGMR6DidZgnZ1PgXYDL9wKAU0snuM\nHhr9DlvPeqh7Y6ghU11wTHEobZV5Ys9Kiz4cekWYKRe4/8yaYHOPThCOIMVukS5q\nxekTIkIcciFOSAqQ7g4U+PILf1+9ZxDbtsdLs0s5R37v8o7YpCxvFaZ6zNxAHrbS\noFrLi2hOUb1deFw5H1a2wADDR/UbcHAlgIj+Vl36cQKBgQDlS6slj52OXNHqiWar\nGkBwbVU9eBKOIT6G6TVSZEfVhUCB5eU+A+zofEnHxoeI6os7JcdW5SBzn7p7tJwN\nBgtvSFF0DLUMVGhyLH6VfCCLC9HsmY0b5f8Nf/+KJz3oZIADcLgtwK7cZwROGTVF\n9I5SxSq/5Y+P9CT82O9Bf7XQ1wKBgQDF4rW4eyjMDsE1orVKXr+K3ItAcOKg5LCC\np83iwtrmt6LiSRTe6JQsSmlkRZhV0z4zFjKqoyYem6u3yhCAUPk2V00vx2hy9gxz\nuGXtY0WZRnGZ4HG+mscORi5JpHr28WjJCSQDUA4jCtpJ4cSUizDikHOXDlKw4TGL\nweP7gAshxQKBgQCyrRVPrqrq7b+SEMHVYR6HvVroDHIBGTy9KmsnqgckBrMuxfOu\nMKbivz9LEpQ5B/O5AoZkWyW/k99gWGwl5ejxLZxzXxeR5RCCr9NwLwq471wFD96a\nt83ZOj3p7Qxb1DzA8YxD8tsP2qLLLO+LdLeXHhdi88K8PVa5RV6jXp5SfwKBgQCs\nQ/wmKTEO0xlnc8mWgH0GiY+//YWMwwjV9PbKnQ6rItntW+mLU7UKCY1N+TfwHwFa\nv8xDt9uLccE/MezDh7orkDxlh5Zp3cBhTPmOeokwMZ7bcgQTBfKbfoT1Hvbc2rN5\nrzdmmt5zqxL0llHnbnSUB2RY7+MUkDXtkFDDtGf8cQKBgQCAescmKqvwC+rXJb1c\nU+HOS9DJMzQzjI54MZqgfjcN68C1zm8Y6TZ9lBGkkGHOoRVolCY5QLTrgeFzCoTC\ns+uhss9CEewRJs8OxxfnAr373JG8ZiGIrw4PHFG3hlPiCCNKoOarEhWT09EAOPY0\ng/LjdJToLWRghp3sFC4v6FUKTA==\n-----END PRIVATE KEY-----\n", + "client_email": "treetester@treeassistant-tatan.iam.gserviceaccount.com", + "client_id": "109961751830646460170", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/treetester%40treeassistant-tatan.iam.gserviceaccount.com" +} diff --git a/journey_central/src/main/java/com/journey/central/journey/service/KafkaConsumer.java b/journey_central/src/main/java/com/journey/central/journey/service/KafkaConsumer.java new file mode 100644 index 0000000..cba89c3 --- /dev/null +++ b/journey_central/src/main/java/com/journey/central/journey/service/KafkaConsumer.java @@ -0,0 +1,20 @@ +package com.journey.central.journey.service; + +import org.apache.kafka.clients.producer.Producer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.stereotype.Service; + +import java.io.IOException; + +@Service +public class KafkaConsumer { + private final Logger logger = LoggerFactory.getLogger(Producer.class); + + + @KafkaListener(topics = "users", groupId = "group_id") + public void consume(String message) throws IOException { + logger.info(String.format("#### -> Consumed message -> %s", message)); + } +} diff --git a/journey_central/src/main/java/com/journey/central/journey/service/KafkaProducer.java b/journey_central/src/main/java/com/journey/central/journey/service/KafkaProducer.java new file mode 100644 index 0000000..7ee42b4 --- /dev/null +++ b/journey_central/src/main/java/com/journey/central/journey/service/KafkaProducer.java @@ -0,0 +1,27 @@ +package com.journey.central.journey.service; + +import org.apache.kafka.clients.producer.Producer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.kafka.annotation.KafkaHandler; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Service; + +import java.io.IOException; + +@Service +public class KafkaProducer { + + private static final Logger logger = LoggerFactory.getLogger(Producer.class); + private static final String TOPIC = "users"; + + @Autowired + private KafkaTemplate kafkaTemplate; + + public void sendMessage(String message) { + logger.info(String.format("#### -> Producing message -> %s", message)); + this.kafkaTemplate.send(TOPIC, message); + } +} \ No newline at end of file diff --git a/journey_central/src/main/resources/application.properties b/journey_central/src/main/resources/application.properties index df65272..08e7b69 100644 --- a/journey_central/src/main/resources/application.properties +++ b/journey_central/src/main/resources/application.properties @@ -5,4 +5,12 @@ spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect spring.jpa.generate-ddl=true spring.jpa.hibernate.ddl-auto = update -spring.jpa.show-sql= true \ No newline at end of file +spring.jpa.show-sql= true +spring.kafka.consumer.bootstrap-servers=localhost:9092 +spring.kafka.consumer.group-id=group_id +spring.kafka.consumer.auto-offset-reset=earliest +spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer +spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer +spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer +spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer +spring.kafka.producer.bootstrap-servers=localhost:9092 \ No newline at end of file diff --git a/journey_integrations_executer/Dockerfile b/journey_integrations_executer/Dockerfile deleted file mode 100644 index 812537c..0000000 --- a/journey_integrations_executer/Dockerfile +++ /dev/null @@ -1,31 +0,0 @@ -#Deriving the latest base image -FROM python:3.6 - - -#Labels as key value pair -LABEL Maintainer="tatanpoker09" - - -# Any working directory can be chosen as per choice like '/' or '/home' etc -# i have chosen /usr/app/src -WORKDIR /usr/app/src - -#to COPY the remote file at working directory in container -COPY ./journey_integrations_executer/app.py ./ -COPY ./journey_integrations_executer/entrypoint.sh ./entrypoint.sh -COPY ./journey_integrations_executer/requirements.txt requirements.txt -COPY ./journey_integrations_executer/scripts ./scripts -COPY ./integrations/*/*.py ./scripts/ -COPY ./integrations ./integrations -RUN cat ./integrations/*/requirements.txt >> ./requirements.txt -RUN cat ./integrations/*/apt-requirements.txt >> ./apt-requirements.txt - -# Now the structure looks like this '/usr/app/src/test.py' -RUN apt-get update -y && xargs -a apt-requirements.txt -n 1 -L 1 apt-get install -y -RUN python -m pip install --upgrade pip -RUN cat requirements.txt | xargs -n 1 -L 1 pip install --upgrade -EXPOSE 9090 -#CMD instruction should be used to run the software -#contained by your image, along with any arguments. - -ENTRYPOINT [ "./entrypoint.sh" ] \ No newline at end of file diff --git a/journey_integrations_executer/app.py b/journey_integrations_executer/app.py deleted file mode 100644 index 5396abd..0000000 --- a/journey_integrations_executer/app.py +++ /dev/null @@ -1,77 +0,0 @@ -import importlib -import sys -import threading -from pathlib import Path - -from flask import Flask, request - -app = Flask(__name__) -SCRIPTS_PATH = 'scripts' - -mod = None - - -def run_script_thread(script_name, script_arguments): - global mod - print("Running script {} with arguments {}".format(script_name, script_arguments)) - sys.argv[1:] = script_arguments - script_name = script_name.replace(".py", "") - try: - mod = importlib.import_module(SCRIPTS_PATH + "." + script_name) - except Exception as e: - print("Error importing script {}".format(e)) - return "Script {} returned error".format(e) - return "OK" - - -def run_method_thread(method_name, method_arguments): - global mod - print("Running method {} with arguments {}".format(method_name, method_arguments)) - try: - if method_arguments: - function = getattr(mod, method_name) - result = function(*method_arguments) - else: - result = getattr(mod, method_name)() - except Exception as e: - print("Error calling method {}".format(e)) - return "Script {} returned error".format(e) - return "OK" - - -@app.route('/method', methods=['POST']) -def call_specific_method(): - global mod - params = request.json - method_name = params['method_name'] if 'method_name' in params else None - method_arguments = params['method_arguments'] if 'method_arguments' in params else None - if method_name: - try: - x = threading.Thread(target=run_method_thread, args=(method_name, method_arguments)) - x.start() - x.join() - except Exception as e: - return "Script {} returned error".format(e), 405 - return "Called method", 200 - return "Method can't be null", 400 - - -@app.route('/script', methods=['POST']) -def run_script(): - # Get the script from the request - script = request.json - script_name = script['script_name'] - script_arguments = script['script_arguments'] - try: - x = threading.Thread(target=run_script_thread, args=(script_name, script_arguments)) - x.start() - x.join() - except Exception as e: - return "Script {} returned error".format(e) - - return "200" - - -if __name__ == '__main__': - Path("./scripts").mkdir(parents=True, exist_ok=True) - app.run(host='0.0.0.0', port=9090) diff --git a/journey_integrations_executer/entrypoint.sh b/journey_integrations_executer/entrypoint.sh deleted file mode 100644 index 57cc756..0000000 --- a/journey_integrations_executer/entrypoint.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -export $(cat ./integrations/*/.env | xargs) && python -u ./app.py \ No newline at end of file diff --git a/journey_integrations_executer/requirements.txt b/journey_integrations_executer/requirements.txt deleted file mode 100644 index 30692b7..0000000 --- a/journey_integrations_executer/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -flask -requests diff --git a/journey_speech/output.mp3 b/journey_speech/output.mp3 deleted file mode 100644 index 7db1443863f961db961b9d799246766a404eb5b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12480 zcmeI&WmHsQxG3N~G)T?R2sm^%(%mf~NOvQxh)Q?ophI^fEsY>0-JObrgdi%Y)V>U7 zt$Y5QweG!Z-ShA4U$Z8j{jPU^^X~Wi_6Pn_><6H_ZA}19I3j~3k2~n5ynJGUD@sY( z*S4^*NTTuPsKVFRwha8kP>3w0lx^T(kKGy~C&B6gzB&omG0+R!VR6t1pyMQqoZQ$g z3Lnhh>%w6Omj@Ib&%X8tfVVyYOqB-!_y!>=#SA%h_gCk;@Dr2U4#Aj zJd;$BcboU?6*sOF(de+?_YII_KhP{kCg_GRoO8=w}@d(onmBSFNOKo6~1RvmvP13o^O3DSMmwuWcz0|XOKUg}aeU=Q-8prK*1 zg5N#1>i#A$=mwq5N{1%<)%&7Z1D|gT;@C6-#OXmP(C4<^Kmg`h!QZ#kc%X= z#Vrri3;eY@vZwL0QS1*(=CF9>cAahlnGU&|qm~Ws!;mGouOf|0Ybsj)DuR?qtMvi@ zJ<(`>A{WAn9G!I z`&nj&oUp+h@7(M5PVlWcO+K?Kk!GjrUroI8Y zK1}LU?1_qddS7Hj;+A*a`6SEU)xhWkf-!)AyP&fGUp|j_7JK8;q(RtJdz*P&)r{!3 zKblT_*XBw`_pke4#&@qlBpdF-`<0*8r&1CN8~bUCuQzYF07?puS@lg1h5o(w-Lm-c*+~)jZH-)-Owgd!Uay^xQKk@|pQ@6hOx#+8MOE{J}hqf?3O##X$B2x=( z1^Si{QV6D&%gFjG+MtZ?^xaM}?H8esYZ6lZ&CRw`X^1inVdTC%-c}OcI#I&n-!!%k zJ_*d9EYq@**LKr%OHWJjbbz-hJgaQ3jzQDoMG#eHvCE-+d}swv58$8c$w^PEmR{ZP z{E$Dua`94r@jRwgQ{&a>jQq)#0JM5O&A`9RC*9;srNa;#mYfEQ+(Ij0Wvv1aiL;f! zaeoSBpY2jUJ!@m!j;|5pbL#$HzXM;Od`jYfft|p|8HB~vPmyg0Pev9DujlDMSR*GN zk#Gf1bFZ-`4_!rc2)G&8&b=E3FK1tX;LNoFGqLeijgsm>X-=Npz6>GmqwzqGUma&R z?zS`aT1KJ})^{IFEl@ryG$gbR7+ykr#UL@9*x+Aw=gRb-$y#h%JYV}Gl|;A-Zit$K z;K9Q8c(^e6->BZDkCX*h60hNK5=qaujH{O5#Ti@sm}r1g_)I<__Zw`7BJG{#9FP5t zn+=pNbnBO+{Ee}b+F#FKs1{_$$^29Y!HbIZ-{lxj83z3A#7Z)W9pDQg3L2}%G6byL z-!rAYusOsSTE-5pxP99Cw?{PHyU4Bl=Gg;&S*EA;{nL-2*s&w4J1Acc8bgQxW@kKY z1`;Ij=S#x@mHYWo7~aU_6yZ4HwP!d?Mnh;wIAm#-z>;8~=HShz6l7`3nyVQcfixUx z(Jaa;cq?++GR$}Mk1u<89 z=zS;)NwPXbweL#KC%Px22o?VmsMSq8uz~N%%Y~uf8>cwrrkZkHyj)sAxU|X6>yvTv z@M9c-3r?;5_|ivG8%HXms7o&W?Sg*1;h~s3@Pfn9#m-7C|3dYzE}V7-i3XoObkM=Q zN06abUl)t=?V!_y;lKixXR;clVpPk+(ZsVy*Uw>z?YY;bTa?RxX30r81W-KXxKat`?Pu2_e)nMEM@D z@|$2_L)o*SWMl{Xg{`r8{**4M7GazJXj@k#O(DU(ZMGBuL!ud>U!$J>s3Leh;#
jx{vSgxipiVR|Z{aze}!! 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 AOaK4? From 389042233726a06fad0124e7e84b2b757a117fff Mon Sep 17 00:00:00 2001 From: Christian Eilers Date: Sat, 17 Sep 2022 18:23:38 -0700 Subject: [PATCH 2/2] Finished version 2 mvp of journey with kafka approach --- channels/JourneyTelegramBot/Dockerfile | 6 + .../JourneyTelegramBot/kafka_connector.py | 9 + channels/JourneyTelegramBot/main.py | 40 + channels/JourneyTelegramBot/requirements.txt | 3 + channels/journey_bot/main.py | 55 - channels/journey_bot/requirements.txt | 3 - docker-compose-v2.yml | 25 - docker-compose.yml | 149 +-- .../TelegramSenderIntegration/Dockerfile | 6 + .../TelegramSenderIntegration/main.py | 78 ++ .../requirements.txt | 2 + journey_apis/python/python-api.iml | 9 - journey_apis/python/python.iml | 9 - .../.gradle/7.3.2/checksums/checksums.lock | Bin 17 -> 0 bytes .../.gradle/7.3.2/checksums/md5-checksums.bin | Bin 19097 -> 0 bytes .../7.3.2/checksums/sha1-checksums.bin | Bin 20171 -> 0 bytes .../dependencies-accessors.lock | Bin 17 -> 0 bytes .../dependencies-accessors/gc.properties | 0 .../executionHistory/executionHistory.bin | Bin 64319 -> 0 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 0 bytes .../.gradle/7.3.2/fileChanges/last-build.bin | Bin 1 -> 0 bytes .../.gradle/7.3.2/fileHashes/fileHashes.bin | Bin 19747 -> 0 bytes .../.gradle/7.3.2/fileHashes/fileHashes.lock | Bin 17 -> 0 bytes .../7.3.2/fileHashes/resourceHashesCache.bin | Bin 19381 -> 0 bytes journey_central/.gradle/7.3.2/gc.properties | 0 .../buildOutputCleanup.lock | Bin 17 -> 0 bytes .../buildOutputCleanup/cache.properties | 2 - .../buildOutputCleanup/outputFiles.bin | Bin 18803 -> 0 bytes journey_central/.gradle/vcs-1/gc.properties | 0 journey_central/Dockerfile | 26 +- .../google-application-credentials.json | 12 - journey_central/gradlew | 0 journey_central/scripts/play_song.py | 78 -- .../{journey => }/JourneyApplication.java | 3 +- .../config/WebSecurityConfig.java | 2 +- .../controller/DialogueController.java | 32 + .../{journey => }/dao/DialogueRepository.java | 4 +- .../journey/central/journey/MP3Player.java | 44 - .../controller/DialogueController.java | 46 - .../journey/integrations/Integration.java | 61 - .../integrations/IntegrationConfig.java | 64 - .../integrations/IntegrationManager.java | 134 --- .../integrations/IntegrationMethod.java | 32 - .../integrations/IntegrationTrigger.java | 34 - .../journey/integrations/NotifyingThread.java | 29 - .../journey/integrations/PythonConnector.java | 64 - .../journey/integrations/PythonExecutor.java | 70 -- .../integrations/ThreadCompleteListener.java | 5 - .../central/journey/peripherals/Speaker.java | 6 - .../journey/peripherals/WifiSpeaker.java | 13 - .../bluetooth/BluetoothModule.java | 178 --- .../bluetooth/BluetoothSpeaker.java | 16 - .../journey/service/BluetoothService.java | 5 - .../journey/service/BluetoothServiceImpl.java | 26 - .../journey/service/KafkaConsumer.java | 20 - .../journey/utils/SpeechSynthesizer.java | 38 - .../central/{journey => }/model/Dialogue.java | 6 +- .../service/DialogueService.java | 6 +- .../service/DialogueServiceImpl.java | 8 +- .../com/journey/central/service/Entity.java | 47 + .../central/service/IncomingMessage.java | 33 + .../service/IncomingMessageParser.java | 29 + .../central/service/IntegrationManager.java | 17 + .../central/service/KafkaConsumer.java | 69 ++ .../{journey => }/service/KafkaProducer.java | 13 +- .../central/service/OutgoingMessage.java | 64 + .../src/main/resources/application.properties | 8 +- .../central/journey/BluetoothModuleTest.java | 53 - .../journey/JourneyApplicationTests.java | 12 - .../central/journey/KafkaConsumerTest.java | 71 ++ journey_core_nlp/Dockerfile | 86 +- journey_core_nlp/__init__.py | 5 - journey_core_nlp/__main__.py | 8 - journey_core_nlp/config.py | 53 - journey_core_nlp/custom_features.py | 39 - .../data/programming_languages.json | 43 - .../domains/common/greet/train.txt | 5 - .../domains/food/order_pizza/train.txt | 4 - .../domains/media/play_song/train.txt | 1029 ----------------- .../domains/media/play_video/train.txt | 511 -------- .../domains/media/stop_song/train.txt | 2 - .../programming/create_new_project/train.txt | 6 - .../programming_language/gazetteer.txt | 0 .../entities/song_name/gazetteer.txt | 0 journey_core_nlp/handlers.py | 62 - journey_core_nlp/main.py | 67 ++ journey_core_nlp/requirements.txt | 3 +- journey_core_nlp/root.py | 4 - journey_core_nlp/start_mindmeld.sh | 2 - journey_speech/hey-journey.ppn | Bin 2812 -> 0 bytes journey_speech/voice_parser.py | 92 -- journey_speech/yo-journey.ppn | Bin 2776 -> 0 bytes init.sql => mysql-init-files/init.sql | 4 +- 93 files changed, 704 insertions(+), 3195 deletions(-) create mode 100644 channels/JourneyTelegramBot/Dockerfile create mode 100644 channels/JourneyTelegramBot/kafka_connector.py create mode 100644 channels/JourneyTelegramBot/main.py create mode 100644 channels/JourneyTelegramBot/requirements.txt delete mode 100644 channels/journey_bot/main.py delete mode 100644 channels/journey_bot/requirements.txt delete mode 100644 docker-compose-v2.yml create mode 100644 integrations/TelegramSenderIntegration/Dockerfile create mode 100644 integrations/TelegramSenderIntegration/main.py create mode 100644 integrations/TelegramSenderIntegration/requirements.txt delete mode 100644 journey_apis/python/python-api.iml delete mode 100644 journey_apis/python/python.iml delete mode 100644 journey_central/.gradle/7.3.2/checksums/checksums.lock delete mode 100644 journey_central/.gradle/7.3.2/checksums/md5-checksums.bin delete mode 100644 journey_central/.gradle/7.3.2/checksums/sha1-checksums.bin delete mode 100644 journey_central/.gradle/7.3.2/dependencies-accessors/dependencies-accessors.lock delete mode 100644 journey_central/.gradle/7.3.2/dependencies-accessors/gc.properties delete mode 100644 journey_central/.gradle/7.3.2/executionHistory/executionHistory.bin delete mode 100644 journey_central/.gradle/7.3.2/executionHistory/executionHistory.lock delete mode 100644 journey_central/.gradle/7.3.2/fileChanges/last-build.bin delete mode 100644 journey_central/.gradle/7.3.2/fileHashes/fileHashes.bin delete mode 100644 journey_central/.gradle/7.3.2/fileHashes/fileHashes.lock delete mode 100644 journey_central/.gradle/7.3.2/fileHashes/resourceHashesCache.bin delete mode 100644 journey_central/.gradle/7.3.2/gc.properties delete mode 100644 journey_central/.gradle/buildOutputCleanup/buildOutputCleanup.lock delete mode 100644 journey_central/.gradle/buildOutputCleanup/cache.properties delete mode 100644 journey_central/.gradle/buildOutputCleanup/outputFiles.bin delete mode 100644 journey_central/.gradle/vcs-1/gc.properties delete mode 100644 journey_central/google-application-credentials.json mode change 100644 => 100755 journey_central/gradlew delete mode 100644 journey_central/scripts/play_song.py rename journey_central/src/main/java/com/journey/central/{journey => }/JourneyApplication.java (88%) rename journey_central/src/main/java/com/journey/central/{journey => }/config/WebSecurityConfig.java (93%) create mode 100644 journey_central/src/main/java/com/journey/central/controller/DialogueController.java rename journey_central/src/main/java/com/journey/central/{journey => }/dao/DialogueRepository.java (60%) delete mode 100644 journey_central/src/main/java/com/journey/central/journey/MP3Player.java delete mode 100644 journey_central/src/main/java/com/journey/central/journey/controller/DialogueController.java delete mode 100644 journey_central/src/main/java/com/journey/central/journey/integrations/Integration.java delete mode 100644 journey_central/src/main/java/com/journey/central/journey/integrations/IntegrationConfig.java delete mode 100644 journey_central/src/main/java/com/journey/central/journey/integrations/IntegrationManager.java delete mode 100644 journey_central/src/main/java/com/journey/central/journey/integrations/IntegrationMethod.java delete mode 100644 journey_central/src/main/java/com/journey/central/journey/integrations/IntegrationTrigger.java delete mode 100644 journey_central/src/main/java/com/journey/central/journey/integrations/NotifyingThread.java delete mode 100644 journey_central/src/main/java/com/journey/central/journey/integrations/PythonConnector.java delete mode 100644 journey_central/src/main/java/com/journey/central/journey/integrations/PythonExecutor.java delete mode 100644 journey_central/src/main/java/com/journey/central/journey/integrations/ThreadCompleteListener.java delete mode 100644 journey_central/src/main/java/com/journey/central/journey/peripherals/Speaker.java delete mode 100644 journey_central/src/main/java/com/journey/central/journey/peripherals/WifiSpeaker.java delete mode 100644 journey_central/src/main/java/com/journey/central/journey/peripherals/bluetooth/BluetoothModule.java delete mode 100644 journey_central/src/main/java/com/journey/central/journey/peripherals/bluetooth/BluetoothSpeaker.java delete mode 100644 journey_central/src/main/java/com/journey/central/journey/service/BluetoothService.java delete mode 100644 journey_central/src/main/java/com/journey/central/journey/service/BluetoothServiceImpl.java delete mode 100644 journey_central/src/main/java/com/journey/central/journey/service/KafkaConsumer.java delete mode 100644 journey_central/src/main/java/com/journey/central/journey/utils/SpeechSynthesizer.java rename journey_central/src/main/java/com/journey/central/{journey => }/model/Dialogue.java (94%) rename journey_central/src/main/java/com/journey/central/{journey => }/service/DialogueService.java (66%) rename journey_central/src/main/java/com/journey/central/{journey => }/service/DialogueServiceImpl.java (87%) create mode 100644 journey_central/src/main/java/com/journey/central/service/Entity.java create mode 100644 journey_central/src/main/java/com/journey/central/service/IncomingMessage.java create mode 100644 journey_central/src/main/java/com/journey/central/service/IncomingMessageParser.java create mode 100644 journey_central/src/main/java/com/journey/central/service/IntegrationManager.java create mode 100644 journey_central/src/main/java/com/journey/central/service/KafkaConsumer.java rename journey_central/src/main/java/com/journey/central/{journey => }/service/KafkaProducer.java (60%) create mode 100644 journey_central/src/main/java/com/journey/central/service/OutgoingMessage.java delete mode 100644 journey_central/src/test/java/com/journey/central/journey/BluetoothModuleTest.java delete mode 100644 journey_central/src/test/java/com/journey/central/journey/JourneyApplicationTests.java create mode 100644 journey_central/src/test/java/com/journey/central/journey/KafkaConsumerTest.java delete mode 100644 journey_core_nlp/__init__.py delete mode 100644 journey_core_nlp/__main__.py delete mode 100644 journey_core_nlp/config.py delete mode 100644 journey_core_nlp/custom_features.py delete mode 100644 journey_core_nlp/data/programming_languages.json delete mode 100644 journey_core_nlp/domains/common/greet/train.txt delete mode 100644 journey_core_nlp/domains/food/order_pizza/train.txt delete mode 100644 journey_core_nlp/domains/media/play_song/train.txt delete mode 100644 journey_core_nlp/domains/media/play_video/train.txt delete mode 100644 journey_core_nlp/domains/media/stop_song/train.txt delete mode 100644 journey_core_nlp/domains/programming/create_new_project/train.txt delete mode 100644 journey_core_nlp/entities/programming_language/gazetteer.txt delete mode 100644 journey_core_nlp/entities/song_name/gazetteer.txt delete mode 100644 journey_core_nlp/handlers.py create mode 100644 journey_core_nlp/main.py delete mode 100644 journey_core_nlp/root.py delete mode 100644 journey_core_nlp/start_mindmeld.sh delete mode 100644 journey_speech/hey-journey.ppn delete mode 100644 journey_speech/voice_parser.py delete mode 100644 journey_speech/yo-journey.ppn rename init.sql => mysql-init-files/init.sql (76%) diff --git a/channels/JourneyTelegramBot/Dockerfile b/channels/JourneyTelegramBot/Dockerfile new file mode 100644 index 0000000..55499d4 --- /dev/null +++ b/channels/JourneyTelegramBot/Dockerfile @@ -0,0 +1,6 @@ +FROM python:3.10 +WORKDIR /app +COPY requirements.txt ./ +RUN pip install -r requirements.txt +COPY ./ /app +CMD ["python","-u","main.py"] \ No newline at end of file diff --git a/channels/JourneyTelegramBot/kafka_connector.py b/channels/JourneyTelegramBot/kafka_connector.py new file mode 100644 index 0000000..2358889 --- /dev/null +++ b/channels/JourneyTelegramBot/kafka_connector.py @@ -0,0 +1,9 @@ +import json + +from kafka import KafkaProducer + +producer = KafkaProducer(bootstrap_servers='kafka:9092', value_serializer=lambda v: json.dumps(v).encode('utf-8')) + + +def send(topic, message): + producer.send(topic, {"msg": message, "source": "telegram"}) diff --git a/channels/JourneyTelegramBot/main.py b/channels/JourneyTelegramBot/main.py new file mode 100644 index 0000000..2223f8a --- /dev/null +++ b/channels/JourneyTelegramBot/main.py @@ -0,0 +1,40 @@ +import logging +from dotenv import load_dotenv +from telegram.ext import ( + Updater, + CommandHandler, + MessageHandler, + CallbackContext, Filters, +) +from typing import TypeVar + +import kafka_connector + +url = "http://localhost:7150/parse" + +load_dotenv() + +updater = Updater(token='5617224032:AAG7RzjQ6vva7nreeOaCk6IHFBE3t9k23VA', use_context=True) +logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', + level=logging.INFO) +dispatcher = updater.dispatcher +RT = TypeVar('RT') + + +def start(update, context): + context.bot.send_message(chat_id=update.effective_chat.id, text="Hello, I'm Journey. What can I do for you?") + + +def telegram_message_received(update: Updater, context: CallbackContext) -> RT: + msg = update.message.text + context.bot.send_message(chat_id=update.effective_chat.id, text=f"Sending '{msg}' to journey_nlp over kafka.") + kafka_connector.send('journey_nlp.incoming_messages', msg) + return 200 + + +message_handler = MessageHandler(Filters.text & (~Filters.command), telegram_message_received) +dispatcher.add_handler(message_handler) +start_handler = CommandHandler('start', start) +dispatcher.add_handler(start_handler) + +updater.start_polling() diff --git a/channels/JourneyTelegramBot/requirements.txt b/channels/JourneyTelegramBot/requirements.txt new file mode 100644 index 0000000..90287ee --- /dev/null +++ b/channels/JourneyTelegramBot/requirements.txt @@ -0,0 +1,3 @@ +python-telegram-bot +python-dotenv +kafka-python \ No newline at end of file diff --git a/channels/journey_bot/main.py b/channels/journey_bot/main.py deleted file mode 100644 index a8465e3..0000000 --- a/channels/journey_bot/main.py +++ /dev/null @@ -1,55 +0,0 @@ -import logging -import os - -from dotenv import load_dotenv -from telegram.ext import ( - Updater, - CommandHandler, - MessageHandler, - Filters, - CallbackContext, -) - -from channels.voice import JourneyChannel - -url = "http://localhost:7150/parse" - -load_dotenv() - -updater = Updater(token=os.getenv('BOT_TOKEN'), use_context=True) -logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', - level=logging.INFO) -dispatcher = updater.dispatcher - -bot_channel = JourneyChannel(__name__) - - -class TelegramBot: - def __init__(self): - pass - - -def start(update, context): - context.bot.send_message(chat_id=update.effective_chat.id, text="Hello, I'm Journey. What can I do for you?") - - -def telegram_message_received(update: Updater, context: CallbackContext, channel: JourneyChannel): - msg = update.message.text - dialogue_id = channel.process_message(msg) - session = channel.get_session(dialogue_id) - session.chat_id = update.effective_chat.id - session.context = context - - -@bot_channel.process_message -def process_message(session, message): - context = session.context - context.bot.send_message(chat_id=session.chat_id, text=message) - - -message_handler = MessageHandler(Filters.text, lambda x, y: telegram_message_received(x, y, bot_channel)) -dispatcher.add_handler(message_handler) -start_handler = CommandHandler('start', start) -dispatcher.add_handler(start_handler) - -updater.start_polling() diff --git a/channels/journey_bot/requirements.txt b/channels/journey_bot/requirements.txt deleted file mode 100644 index eaa40e4..0000000 --- a/channels/journey_bot/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -telegram -python-telegram-bot -python-dotenv \ No newline at end of file diff --git a/docker-compose-v2.yml b/docker-compose-v2.yml deleted file mode 100644 index f437e1f..0000000 --- a/docker-compose-v2.yml +++ /dev/null @@ -1,25 +0,0 @@ -version: '3.3' - -services: - zookeeper: - image: confluentinc/cp-zookeeper:latest - environment: - ZOOKEEPER_CLIENT_PORT: 2181 - ZOOKEEPER_TICK_TIME: 2000 - ports: - - 22181:2181 - - kafka: - image: confluentinc/cp-kafka:latest - depends_on: - - zookeeper - ports: - - 29092:29092 - environment: - KAFKA_BROKER_ID: 1 - KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 - KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092 - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT - KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT - KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 - diff --git a/docker-compose.yml b/docker-compose.yml index 12a7807..9a82e0c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,80 +1,99 @@ -version: '3.3' +version: '3.9' services: - backend: - build: - context: ./ - dockerfile: ./journey_central/Dockerfile - container_name: journey_central - restart: on-failure - ports: - - $SPRING_LOCAL_PORT:$SPRING_DOCKER_PORT - - 2375:2375 - - 2376:2376 + zookeeper: + image: confluentinc/cp-zookeeper:latest environment: - SPRING_APPLICATION_JSON: '{ - "spring.datasource.url" : "jdbc:mysql://journey_database:$MYSQLDB_DOCKER_PORT/$MYSQLDB_DATABASE?useSSL=false", - "spring.datasource.username" : "$MYSQLDB_USER", - "spring.datasource.password" : "$MYSQLDB_ROOT_PASSWORD", - "spring.jpa.properties.hibernate.dialect" : "org.hibernate.dialect.MySQL5InnoDBDialect", - "spring.jpa.hibernate.ddl-auto" : "update" - }' - GOOGLE_APPLICATION_CREDENTIALS: "google-application-credentials.json" - tty: true - stdin_open: true - volumes: - - .m2:/root/.m2 - - journey_nlp_domains:/usr/journey_core_nlp/domains/ - - journey_nlp_entities:/usr/journey_core_nlp/entities/ - - journey_nlp_data:/usr/journey_core_nlp/data/ + ZOOKEEPER_CLIENT_PORT: 2181 + ZOOKEEPER_TICK_TIME: 2000 + ports: + - "22181:2181" + healthcheck: + test: ["CMD", "nc", "-vz", "localhost", "2181"] + start_period: 10s + interval: 10s + timeout: 5s + retries: 3 + + kafka: + image: confluentinc/cp-kafka:latest + restart: always depends_on: - - journey_database - - command: "sh test.sh" - journey_database: - #container_name: journey_central_db - restart: unless-stopped - image: mysql:5.7 - command: --init-file /var/lib/mysql_journey/init.sql + zookeeper: + condition: service_healthy ports: - - $MYSQLDB_LOCAL_PORT:$MYSQLDB_DOCKER_PORT + - "29092:9092" environment: - MYSQL_ROOT_PASSWORD: $MYSQLDB_ROOT_PASSWORD - MYSQL_DATABASE: $MYSQLDB_DATABASE + KAFKA_BROKER_ID: 1 + KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 + KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092 + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT + KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT + KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 + healthcheck: + test: ["CMD", "nc", "-vz", "localhost", "9092"] + start_period: 15s + interval: 5s + timeout: 10s + retries: 10 + + journey_telegram_bot: + restart: always + depends_on: + kafka: + condition: service_healthy + journey_core_nlp: + condition: service_started + build: + context: ./channels/JourneyTelegramBot volumes: - - my-db:/var/lib/mysql - - ./init.sql:/var/lib/mysql_journey/init.sql - journey_nlp: - build: ./journey_core_nlp + - ./channels/JourneyTelegramBot:/app + journey_core_nlp: + restart: always + depends_on: + kafka: + condition: service_healthy + build: + context: ./journey_core_nlp volumes: - - journey_nlp_domains:/root/journey_nlp/domains/ - - journey_nlp_entities:/root/journey_nlp/entities/ - - journey_nlp_data:/root/journey_nlp/data/ + - ./journey_core_nlp:/app + + journey_central_database: + restart: always + image: mysql/mysql-server:8.0.23 ports: - - 7150:7150 - journeyintegrations: - build: - context: ./ - dockerfile: ./journey_integrations_executer/Dockerfile + - "3306:3306" environment: - PULSE_SERVER: /mnt/wslg/PulseServer - ports: - - 9090:9090 + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: dev_journey + MYSQL_USER: Journey + MYSQL_PASSWORD: test_password123 + healthcheck: + test: "mysqladmin ping -h 127.0.0.1 -u root --password=root" + timeout: 20s + retries: 10 volumes: - - /mnt/wslg/:/mnt/wslg/ - journey_speech: - build: channels/journey_speech - environment: - PULSE_SERVER: /mnt/wslg/PulseServer - GOOGLE_APPLICATION_CREDENTIALS: "google-application-credentials.json" + - journey-central-db:/var/lib/mysql_journey + - ./mysql-init-files:/docker-entrypoint-initdb.d + journey_central: + restart: always + depends_on: + kafka: + condition: service_healthy + journey_central_database: + condition: service_started + build: + context: ./journey_central volumes: - - /mnt/wslg/:/mnt/wslg/ - - + - ./journey_central:/workspace/app + telegram_sender_bot: + depends_on: + - journey_central + build: + context: ./integrations/TelegramSenderIntegration + volumes: + - ./integrations/TelegramSenderIntegration:/app volumes: - my-db: - journey_nlp_domains: - journey_nlp_entities: - journey_nlp_data: \ No newline at end of file + journey-central-db: \ No newline at end of file diff --git a/integrations/TelegramSenderIntegration/Dockerfile b/integrations/TelegramSenderIntegration/Dockerfile new file mode 100644 index 0000000..55499d4 --- /dev/null +++ b/integrations/TelegramSenderIntegration/Dockerfile @@ -0,0 +1,6 @@ +FROM python:3.10 +WORKDIR /app +COPY requirements.txt ./ +RUN pip install -r requirements.txt +COPY ./ /app +CMD ["python","-u","main.py"] \ No newline at end of file diff --git a/integrations/TelegramSenderIntegration/main.py b/integrations/TelegramSenderIntegration/main.py new file mode 100644 index 0000000..f26a870 --- /dev/null +++ b/integrations/TelegramSenderIntegration/main.py @@ -0,0 +1,78 @@ +import json +import logging +import threading +from typing import TypeVar + +from kafka import KafkaConsumer +from telegram.ext import ( + Updater, + CommandHandler, +) + +updater = Updater(token='5449115559:AAGcG99ZIIITgEvR7NGBnHrFbYLnxXeJtTg', use_context=True) +logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', + level=logging.INFO) +dispatcher = updater.dispatcher +RT = TypeVar('RT') + + +def start(update, context): + context.bot.send_message(chat_id=update.effective_chat.id, text="Hello, I'm the integration!") + + +def send_message(bot, chat_id, message): + bot.send_message(chat_id=chat_id, text=message) + + +def handle_message(message): + if message.value: + value = json.loads(message.value) + print(value) + if value['intent'] == 'telegram_message': + entities = value['entities'] + chat_id = entities[0]['attributes']['chat_id'] + send_message(updater.bot, chat_id, "We made a whole trip!") + + +class UpdaterPolling(threading.Thread): + def __init__(self): + threading.Thread.__init__(self) + + def run(self): + start_handler = CommandHandler('start', start) + dispatcher.add_handler(start_handler) + updater.start_polling() + + +class Consumer(threading.Thread): + def __init__(self): + threading.Thread.__init__(self) + self.stop_event = threading.Event() + + def stop(self): + self.stop_event.set() + + def run(self): + consumer = KafkaConsumer(bootstrap_servers='kafka:9092', + auto_offset_reset='earliest', + consumer_timeout_ms=1000) + consumer.subscribe(['telegram_sender.telegram_message']) + print("Starting to consume messages") + while not self.stop_event.is_set(): + for message in consumer: + handle_message(message) + if self.stop_event.is_set(): + break + + consumer.close() + + +logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', + level=logging.INFO) +print("creating consumer") +consumer = Consumer() +consumer.start() +poller = UpdaterPolling() +poller.start() +consumer.join() +poller.join() diff --git a/integrations/TelegramSenderIntegration/requirements.txt b/integrations/TelegramSenderIntegration/requirements.txt new file mode 100644 index 0000000..095a985 --- /dev/null +++ b/integrations/TelegramSenderIntegration/requirements.txt @@ -0,0 +1,2 @@ +kafka-python +python-telegram-bot \ No newline at end of file diff --git a/journey_apis/python/python-api.iml b/journey_apis/python/python-api.iml deleted file mode 100644 index 60e0ed3..0000000 --- a/journey_apis/python/python-api.iml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/journey_apis/python/python.iml b/journey_apis/python/python.iml deleted file mode 100644 index 60e0ed3..0000000 --- a/journey_apis/python/python.iml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/journey_central/.gradle/7.3.2/checksums/checksums.lock b/journey_central/.gradle/7.3.2/checksums/checksums.lock deleted file mode 100644 index 8f93022b4e543fb02d12b80190748db59c2c3ff0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZQ(%2CbNHu<}Y0RoHxBR~UB diff --git a/journey_central/.gradle/7.3.2/checksums/md5-checksums.bin b/journey_central/.gradle/7.3.2/checksums/md5-checksums.bin deleted file mode 100644 index 342188ca81e1291aada5945ba29b825c4c0e2be0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19097 zcmeI(`%6<%00;2vMw^cfM>?DO!2(f!T=OlUmfFQmXwjI7Z-?Mu@zwVwK zj?<`C=*6vF>a`(85P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SNpr0)_lW!pUYd zi4tKDS;KML75qSPZCPuS_vGlv*SXp3{{!ocsVRFv)lT!*EO(4q6RMnxDJ0MHu-tif zQ%0pP_=V*8QkFmWjHcPjo-NV&RV<&ZFZQ*>Cw0*EEiCsPy6V3$_V_KG-@)>^OP!k~ zN`;%QpY|ueQlRsuRaoi#OqR>ul=cPR9UG?Wcd`6H%>GV=-us=dV`ll;!_8&oPrGC2 zI$-m>(7(k~gsu@mC`uQ=e&fMGN*^7V>}Lw|XGWN&|Cazm@LskZ)LFKJXhB#m&bxDop#TITc=83)oG z^N!D@=SahBBn_og+$fe76n4d>?0SFl)VFqzc8)ga^Z#<;oWZ)gI+E4m@39)(v-bX4 z<@v;Iw87titcPQ{-T9wVhpHQ- z`)n&*b#bP+_>QijabMWckIZr+&jK!xt})ZIfh8#B*?m*FN|D2<64=vok%U3 rRlbz)r$2;!1Tx57MN7pElWD`$dC=NA<%+8*!wew+W5k=%qX2 diff --git a/journey_central/.gradle/7.3.2/checksums/sha1-checksums.bin b/journey_central/.gradle/7.3.2/checksums/sha1-checksums.bin deleted file mode 100644 index 86c46090644032fe1633b6aff3ea198c29ff7640..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20171 zcmeI4X;2eq7=S~NBwS+^Q4YC1iUcGGgNTZNC`Tee1+m;gKv1wUC{_hWjKPSCfZ|1= zid7ISLW{+#*kVx-#e%3Df{NmW913!o(%t=bbtdbtj(^&DcP7cslRW$GJ_-2)9}5`_ zt*=JOjqz#I{Im;uPyh-*0Vn_kpa2wr0#E=7KmjNK1)u;FfC5ke3P1rU00p4H|D}L8 zb|EV0VzjtSd}nMtgJG$L?HEXeEDMuFM=SL75>x8;2U3}Vke#>C2yxeVis#<)-hJ=a z^NNV`)hS-a6LqNG>-z(7_bQ5C98AB!MRE3!+5Ff&=~oeV z)26uLUpqUCd>unxIEcG>QamtwlU5nuJe=e^DK1)lBiB*5YZBt_859o3!-ZuBF-C;$bZ02F`%Pyh-*0Vn_k{<{TcVW)16-KOHV3CBtncfV*lRJUiG)OmHe zo#(dr8OIn5g`{@1u*c{cS#PmNt1n?S-tq}j4qCrJ(=Ofiz_=N`UUMSd(X8+yG)o2l z3w*g*|ISkCXm)a{35b{Wt3I5P-jsC1D`zj76(K~k)UVQKy>N(5|4^ipyI*3xrd1$G zx|?u#IcZ@wzOe_eJGnEQrex`Fbg4?W;$>jn)MoR2+NM`ekybt-G1#$mOL8)!T#%5R z`bHyEq0>9iVmh~NEwa}85th4t7TsFdEw0Dk^9KnahI@6Il*-6e$u+V*Sl0o z8;aM|4!^e+AC(@qN0zvquo!DI=$4M{v&@DLv&IFC%AV5p!#VbQqau*C(+pWMd~Jo? z8TK0&`khrQQDCod&}?b^eu|F6k4KOt9Zy(#h4{NIXN?Gb8b?z^Jg)LZUE{Aa`)h7% zVCyQd8XDc9XqNV^&sb3*r*AwjaT9Ygca=5p6h?-c&yp4@&tP@YEk{M=Rask21e)ht z?Om-R)AiL&u(ch;EE$@mqDr?S&T&%)H^yn&Y~L^tt0J+?FZS7wtR8Y<5a$ft61hy@ zJ~^yQ*QHXX&1p&z=bavdt{Wn@(6%qA@! zvc@v8N4bWrN4*l#)*TZ+jU0Xy%+B9e$_l}L@`+h#B3Ef>wTpB3d(>NHWT<6ul$__8c)Im)yEy0uK9Iq+y>Z$jQTf=<@sdJVQ-)dOU` z_a!X%Nj`MTYvJpe9LF&+Ll?9vWlqx)lM8*>$Qp7aEOs~kzu@GqYllsiQQyf2$%@4l zQ7WRli#N~Aeu=DMJHlddZRl37jZ#F-Qm$f}C{LDL{_1&Kbr$wn$KS8v6vARME$LRl kwm`m8UG=DBlk?J!;kXS3Y4zy)P(xNrSf*p}6-HM70EjDCod5s; diff --git a/journey_central/.gradle/7.3.2/dependencies-accessors/dependencies-accessors.lock b/journey_central/.gradle/7.3.2/dependencies-accessors/dependencies-accessors.lock deleted file mode 100644 index 7c6a3aab2a632fd2f9f6a10f75b43c5874782b11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZSH*4=pF_1*L|1}FdkL52k@ diff --git a/journey_central/.gradle/7.3.2/dependencies-accessors/gc.properties b/journey_central/.gradle/7.3.2/dependencies-accessors/gc.properties deleted file mode 100644 index e69de29..0000000 diff --git a/journey_central/.gradle/7.3.2/executionHistory/executionHistory.bin b/journey_central/.gradle/7.3.2/executionHistory/executionHistory.bin deleted file mode 100644 index 9511970137ca63e4369e66bcbf0ea674b583b9be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64319 zcmeHw37k#!`~S=xiq@lqic-o_?l{Xmn|&E&-^E{vD^L(D|^PH4~gfi5* z(7%Mde|O|v#;@WWh;ty$fj9@^9Efuu&Ve`w;v9%`AkKj}2jU!vb0E%vI0xb!h;ty$ zfj9@^9Efw^e}x0>LC6h3V#-u?kc(S;CM3`|;Udw|?Z;zdo-a}~_;sUt;rv1PH||#n zei#24=RlkTaSp^e5a&Rg191+-IS}VSoC9$V#5oY>K%4_{4#YVS=RlkTaSp^e5a&Rg z191+-IS}VSoC9$V#5oY>K%4_{4#YVS=RlkTaSp^e5a&Rg191+-IS}VSoC9$V#5oY> zK%4_t0|&T-girp!|HI_}SoXAPhS@BPZ39WdUquUDneA9&gqI^>p1sE|iSs zMnKV(fYQvXDddj7fj7(aq~`bxALX0tzkhedchhb;cf)XLPw#}7pj~okI>_r_`22WU zv9aedf{-5iZb*lQZQ3?&*`g~W4$1WDIT?!26UZ%*@LALlPgcP2fr{kx9+}B0hN*YnMRrf9{JvI+&vM0+leAY;#l@drx9PG`uxKScu zcGTl8oT|_?wG94s)Wgo7t&t&s;Ys$@^QHQ4N=zE+%vQ+Mfe!!h@Zac$nvryJkKFGS zFtW(ZrFeY)gxA8iO~sSZGOMA_=k+BHi`;}XI`aMmpIU~QI^~iyJd*dP7m)CFH1rU> zWTTg%Bx~NOg;uV$j-A;)uV(oDUZ0yy z7Lr*v^pK#4Ca-h6p=$lp7KbL( z{qxJEKNtV5yLXb~8;3pmfN;8@1v0#us<*p4^ovPmq-2(L%Ni{i3hUAYLlqg9!Ri7d z(uTyatVRp6LaU0bD4H1>=M0StqWJJfUmxwJFRyvz^qQGPN3#bU3kqur{Fr~NWGB(6 zPM_fqgqUy2z?%~|mnieR;W8LO=UIVQHBnUzMv-{KPz+9U)ieY%~JZl z^VRTDkAHssu-hHSZL<9z#VU+OPeTn+BS^f;a)M%NG~;q9Jj+R(rn4H)iX5ZsG$WX@ zs_1%w)BwyS>G(B9boe3s&{JU?LLae6e1=5^<5n5oOXK0>=reWV&?GPa>*QRK(gK@5v9CgIOcBJX@M5AAEv5EFqhS%IZxfsr|dW*Jl9c%ET2jgwhc z5hb3X3j*P^Km=!H(>FJ}>euT~zEsNe`#XGfsH)@7!log(C4|UOTmnNIGUw8vd~{I~ z8P#M>&X8G7Hw{CURYMenyd5CIi6E3{N|cHz%Ft84KfY|(VYNhmuB78w;ZuTj8=4Nt zm8^pjM$%=`#mFW;izY2;x}qDhi&q(_C0)E=I>_3OrefQ(LmN0>uQRh;-C}Jj{WkM2 z$8sA~c)ZClI(>#majO|Qu-1DJ{eu0+t*THejKp(-#u=JR(U3>Jch z8_lN~@l?^qRiq!P&WOr&j)UWS=a@4>oYi%=JH+;kJGf>mUo;tJmiw_KjOg zrjuFGjg_g$CPOQnZeV+op!yUS!*R4rQB){KMWJ1=6u1I`IDT|)ydkoRpcpc(%aQ^afl&Zef;r)N(|nH8jITyJ*v(u_>Cm%cb(7sF;cwHO|^nEZoXA zJ#c5|_cxV2l(X;dB0Kqhj$Jl5M(lDWo7nBi-4(OD;w9cUIPvIp?-Y5% zvE2sFQIZOiJK$AwOn3Mqs2jLsM#jYJg5;uU7j`>E#`+S#V6Yc_mL(NlgUUngx?JZC zb_NFr@y#3}+%f0q-unBmUp{Ml=kk z(a@nOBtznKMc`PKylt9n#BGKh|$Zf!?3r1Ep?=Q;<0uQrcK*D`$5OI zSBx+f0UO3mC(AU*V_;~TAPP1sFK{Z>r>Kb{=z+<_xKv$YWrk5i`d^S|!F2}V250Zi zN!&BPmZnzZem1ztb@k7Ubez6CX;X3nX<=$@$jZdfd%V zIo4kuIjK2h9}WKGET!j6hmFE8G8|QvRW+7|CBjKCQQ&hkqA02?ZPKhN!|isd!I93q zkwGl$eo=b&2BwCS=6bv8XPr_U%WPl?o5WfsMf@HW9 zjh7jh#K4shpn+6QXBFAy4i5zX$iN_K_utUY`$CPo4&2_>T(|1$<1gFt^z)$xn}qC) zm~;z0jfO@sc+9ODn=VcU?@Z`E-4q#`S9I7*24}*h(M5$3U9d-jIEF{(L-M;D zr&M@jUs|VUp7ywEo=l$W*cK}!v7!Qyz#umzNTMo;z{`}e@6bB2KB4+J?AZd1rKBNl zqN~z*m=X~A(A~FbZkGk~j=ZuXvE$hv*M9q^W5wm7>ks6pVJxA3feXA_69yZjNwP{T zPgZw{Ce{#-Py@}u)uMw~l9Bn4`}*MK?$^KXHQKY=5*{AF|KV6?1G)S=j2pWQtYuh#QnqZf^KeX6dI32RYnlO820T;=zZC;<8Jg7%kv7?&2`|IJ69txmrc!zVD+~#) z=4lN^7q26aO&PVyImmdn?gYo`%jX<Cc#pe=N3n4w<;l? zNR+f82omFBL_;*O@91zQ5b>e~T)^)XLxxYp3W z$Q~H8NF52egnisdz>$P4GJ9xl4iQ=!A!QD7sl%%`R8>&m*uf{&VHCmVKs1#`7|GTVhmnz!JsxJ zxPP*u37m$_jaE&bfsLT?YQcdqfVm_cv5F^Md`5It3lU;syMr_#gd_>7DKi{`dWQo`)?+kb|k+2PsAu%d^b6$jCnKA-<21$!>Dq;(Q!7GfS z(FUw&C9=%(kr9M+$=R?Idn#Zy!dwigC?2*s<8rGA6@&94L<#zqmqd7%tV@>^l~!Qz z8LG}`CbqWxqY=j=ql2ocg1WnC&4z6k^l#s|?825i>)MLo6o7DY!7A3uAp{jHrzkGn zAW<6u&O8maYrF>U9uYKERW%I;wnlVp82LOsZ3QEv)N98gcl6jYP^q}F>zgN5zqsHr z$G#YeP#UTSyox`JLHHxAL~IZ|tQbVDkzx>e(?n`bp-llvDWnNGl`){B5Uhu%aNcNQ zgN65n`zCL^Vb!aTR4D(*pT!ea2Rb>n#0K&3BZF~xOH?G9(PaTb!GN!bnqajWux}Cc zlMR-kMb3b4LmQFA6NcuKlNIgvz4TDkp@Wait9ws2w}W-;jSZ?7%1JmA0&7AinM+Am zML{E;Is6)q7IhM@VtI~{XpLi3(a^%=S`vcc)`ARey`!7HSm`!T#*2R%%pI+t8PeQw zB1U*$py=V3dxPPARDguEi>S%aF9rkVbFh8|P1973Q3TQD(ilU5hif7t$eCdZEbWpH zP_%M+_twp4T8#X@v|2KA)_rwX_qG+oDrl{qPfG}U6`LyjADGF==0PFyxD*i4#!c+D z49D=;vao;U!#+y2-}yr6o9_@@J6rY0edoOf1NJ-4#EAF7+MMuXgP+3bNyK)N+ca#} zuwL7SZkb0`Qe!wcZt#Olmx5Hc2F#H^;5lAJ)DuRjX+#qDQINp*C`dtFxnfB6?VpaD z_cZJ4o-ln1Rnf6CHuQuE3H$UR?T+*+vS%)tHSr7FHevd!$f|Otrn(qbWnB1(D8zZg z^DWy4pX!kG<*s>KzpeFgmB2G=UWv7aA=X(4U0@02A|U=Q%ZwqR>;QLESs(#5Q-Cjn zInX6KBJ0E=i{6R)^QAwlx{vNKV~wiUml;NtH#COVXhhx-x}l-H5%?1k zGcjZYJRv9$4HBe{*e)2F57kAfwMJL&QDjNcFSczj`^B~o99v^62>0fHDa7t+B*ayT7y&HymCgX zG@#PMuCiU9e|q*H$Hv$)JJ2i4Y9gKrOc9T|5az{!QUzwZS^4%iE#((zBQCqR80w!D1?|jXqlR8PCSfNx4Jn#mZ<3qigiaMiq}$M-q}` z9{kiuSc+v;k(OML4vk09R1-9nq@GbeqH^%@E`*Q|@zb}BsXW;`jeTVCO~3c4nvxys z#b=qQA(V9q;a+6Pk?cT*0LUTg!s*ZqtO^SXg$*K)@)v~-qik8G`IK7OaW(r+dOh&| z(GiO$@6>w6TB)UL8DWtyO$}-R6>6w#;aC}#lE`qP#G#~!*incH!`n2p2(B2KkFQ1g z4t}SHF-WO@W@ohnUsRrLD;`MXH%-YzS^@=J;fwIr%(^)fTNXh~P&fwVAIRTH91`a+ z^F`!GO>7y6U?RewZz!}usABH#Hv2Y+Ipd18YWHX5>D7j|bJ!_)N>{q0)J#bZ_^_Z9 ztE$&sz`aoPpG)T48X{S;PE!0tKagK6!|+hRx|*`yZOkGfLLh&(&$UMTU;f&|GF47esp2|#LH&~Hc(@h-*1 z^8(y2WY3Y!Bay|6fwATwM8ck5zkI#>8k#mrypc-P3U#$=`Jb8H-4)ibEg z<)#o(V{Igxo-7?T+kSVt--iSZBDbi_akD(Kh=!!XJ>(=s5)oYER2^mq3nvV_I~IZ{ znY11ng+MJv1x4gfZ$`i2;zzAl&b-k$yma#P%c#Urva-A=QYMu+!P1<(8xhTd;#}+^ zG?JVMe3+PjAe5d$>1awrNbn-1G7oRb`A|FXp*EV8pFz1 ztnPe+for6;W%Gx7KVZLq=fK)io;fE^?CRs#e|aSUL0mH|MMx^y&71&n!DakQrkzG+ zb|4o)Kc~{e>(QZKvdj#R7I60TAdem#s=~iQ{g8%`jx0jGpcc+VLQO&lkOfg3W&l~b=SP5L7WGMlxN7K2mofG&M6w4V7QYg@i7oqV|iNEuvrPFB)}ZI7#!?Z z1Wu6cwT9mFa;0(&wl13Sbcq%1mz1}q`J)y`I_p)_HFxlrGa7qr^lnw5QMABFszw$A za>giLgoi28GzY%%B`3rzHQYeic%R;g>R^X~g%M#*0{XO6GcdRIfoS{s}v zk`hSs88{-7X^)MabYk{z5AJ3T*^2HErkV;Y7+Gd!J+^vGE@a$|8ZZRuB~j&N5ydX7gk@|%gK{nxBp+!ns8mr?!RdnG5Fr7aAU$6< zuF&PV@6GFajmYUkZF^L=6$vkx9?PW&;}9(_VLA{MR7u2`LsSiCO;9$fX{dmeB^Wv! zj58#qanwPK&=CbA9}PQ-{&4rMLk;#Gx_$Qk?B1ouIhNbhtQXEn@N7*4gW$)!6IjkH zoW!zLFPRun15X1PN5rkHGCh+R4=grclboSpbk!u)0P;V8%SYSB_4RW-v;TOuUWcds zhbFds!m-E3iuf1vV@+0QVt_Piyb0zy;sS!ENRo)O7fQcbl(ZvB2eSyZ7E*)`%K?m* zsup*B_rsYgt2W(x`wfq#9zQt8R{XhOtVzJ+BCAC2E``^K1Vb4`h={--UMR?@yCDfK z4yLD0(>e{y4jvg&01*K2+W`y*c9@SKmg>!{-s5I-(2er>>h45ESLG@ z@3-2ms7>yz^y-BY-$ov|k)8&v+$5dDxsgMGrh!?B!Xbo_Xn{v?h7=3v5@elIRU{HM zxVVvVICX+?LEW=t`;ArmZMpC6?a!@0Q2*z0lWghI0%AwjiPo@N>V zq}F)}-YwD-0xiH=fOn|Et3{0)3_20kAFm*}&cmI#6euwJ;$;Hg+mV#C%H3q-C}4=9RG1W=(1wAOE{_6i5T%_z96K3? z2f5Gr$7QXk*sNFj4?Sx>v+>T=wsTvddgc&s3FfYJ@?cjwu|NG8CO$$rpfuTS@TkLN zkx)@lmnXy4L5VnriY>&NP}l>b4Vnhtu6o{ZBGII>*|HJ5Rgym*T68b{!N{XOE^~IC zWUFM)k{S!M^qh=5G#QjTapWKs%_CBd%n1U`qz)J=gl04p!bm7Egh7L91xeLa9Hhz{ z4BnE#K_t6L{y@rm!>dhkw(+g$TYtJ^gB?+TnUJpJ_Ed6{Nks}d3<~cJr76}`Fy1WS z+yc%8!dS%4LUXWTbU3K0%n3N+fW!o9uwi*AFx$cdEr|{Ba!SI4_DQ=ZC3J4k<-z@J zJzqIi*+4Uom)2Z|{5*@18oVZx<75{KpiEL`hMHp-T?Y6IH_G5;hyv1_$aa&tAS3f} z@wprN9Mr#jp8v4ID?3saEiPj#h#wAe^w4xIyB0)znt?AZ0-!yz+|lyTlTvid`dzivvB`rYl#H%xhD@KB@lt2=GE zIAr2Oi$7Qsl5AumI_M4+h*%#;d70k}uPxw)Tbhi(j}BdB2uO?YsM$0mBv}y})m27^ z_dqKDa4qA+t9%hK&LEf|gO`dOYBWAxYtkRhn)Vv7`O7TF&o&wSk7QW(QHTO$0zC3l9NR@SZ4C@ z5D|Yx{RnCz4II)&)Cxx_I8t{ctEd4JH6{OGEItelitV?p#x?zl>z(*`zwAaU%K!AL zEr*4m843Q9E)k^uIC29KpWrE|JRL`3v}FGeo`!?+HBDqq1w}`y6^G5?6eCW8n;IlU z6hs*ZkR(mIG)M$HBOrscecGt!kB|NQ;|uF1_?PU+uDQatRHv(6zhwtm7Mu0S8L}}D z>TyL8!iXwlg3}RTz<#Imq_i0+As5QlajXkk2C)_c)-REP6wQuD3+s5H>B`c8Oa|eHt z(rXb>GjbqbM~#jGUXf$5IKKybj8i0J|KPtuN5JHvgM+Z*Fer%7H^=&Rd}8y3OH z)04`T&$4yOg9x)VKiE~Xbc58YBYzVTRh>gr2Gv9+v;Zu1j+apP2L}!Z7Icw^k1fK+ zU=)~R)>um&gvJI@thPYYE0#P^yW!&2;xn7Nw|A_uu}$Q2N8Oe^o=K88Bsjz%$7jHx z(UIsy$P_0GQ3`@GJ{;}PfVhG59x6p~f=0_5h-oE@$1)VgA8&Z9YQn4CZaC*{7^tyh zuB|vW;bAIq6HJdk4RCuAhV)XMz8oBt$|S{EFihMEikTD~N=GsmX(Sx!0Q*oFLep3< zJcCpzbenEk%*-1LmPU-48!E4=s}B0C(`DPC|17)YkGcjdP?XiyH{0Mh^u$LvCf&Ru%e;`2PBr zDn8$?T(?d2zqFao2pV@JKxcX7VQVjZ!?G9&TY#{HgB=Lff{Q3L#}>e$o>_;;l6@7% zxuJl`C`F7|jL|SG)`l>j_)L@LUrwI>OSLC%?fTqKrmrn$y#O%?^y-NOkv07WPRyXz z2L;PWxFC@)sf-}FaJZC*>d{bBYmk$t3Jd^@iJtb&KOgr6CKMf+#*eiWSg zQg8wU$N6D$X$p?^DW-`o7TCy$dvE1^A-NH!{HDKtGavtTLyycIpstzpSiAy+{%OcOfqplYjPI4j|_AP@ZI)Z`2N+Exo_-E0s z_*1=F?r2*3%&v1k%#J#mf0z-@p>ead(hv$rXLo807C3tfr>(*H?EK%L;<6VgS&u}e(v*zN2B^>``Isd z+urHczRTLLDwbAZp5wHQeVxp_wv|TjQEe)X0XPJ+$J+k^PuE-YWLv=J&Gf)MAlkdVU+NE7g9AGM@dB`eSs}F%4#1rBY}rz}+VPy<>~x1I zSVFE)<0-0C!_~WvpX`75SLc=rEq9L@9IIo3;Yz7+LM8m!Do^pGB0fP}shG8$qDrNA z9`TFoqeU;AZt)FuqV(8D{tSytf?YfKwWQPWm`+%$XSsSP{!4(s%l>+U{r%DV zd%rY#(XDpM`=TT?+ykX>noLp0UaqoZf9tXpeYMZES(5Vm?*EMzQ&gQvHwDfvSUX|B zR`|M_Nr(0jk?WL%LRT|f7{E#*@WnVpK?U&AU zyb7C3QMc4Q*yz5)ox3bdT64zp=<~I%mex|#smEHbD?Q<+H%GG9RqFlim>=wT?}gb| zikjSZSHUt1|^d#$IwE}vTE)UGpia_;fo^6b^zREm0S{Ia!G z`qvxq+vzdOYxH)NzIs|pQ8UyEZ?8=JVa4GIKd)KT=jGv7T|+4<&~bd=?1%-AE}u7C z9LaRP%Z~jOwLg>i@#VIYq9)dU^w)|_mW^H5dCtUUYuoO;s+vhrGqO%*_U^KB#;JXu z+?90p*0tAWD=F&SJA->{I9YSq+_xtW@>QuZHC7QfQmPvE;mNhtxxTO(Nl|kuoaN5+ z^~m3U^1`EiUg+YCRW#!K{twP@YjToHKxChkh{mvu6t!ja)P5}zhAi&WeByyw?2dnMb(-)aPQYr_SuQY6oBr9ErG~saw|a` z>dhCc)=^ZikBl0lT72_B$@@O-^WM;J&s`ghqo~xmEqmWrVd28-yH8y4kg)W(tF>(u zwd${9f8X%d+4mOIuTihU=Ff{?6HTM2cGcR9zjNZ(z3R1~?%k`MX>-lCjH0ONML*xX zB5>QrQN`crd(R8U?Zl%BTA}Bw_K-@yyoOO!VDJg`t)B)y(tKI*ATXS9WdvT}Acax|md1!xlPId;k9&UTykdNgk@HP*`e$FCyDD2mQ4_LDw|;0s zmAchNeNlQ=wLQb_#F+}v#$od=rVXN~O{ph_J@&S^`i0HAxuhOt2gb-W3L{%c?V+d# zO8Nsg?_ah2_O*ZZ9WZKUW{j7db@(MV&7r9NKixmDNlvjp#~i5mJ$GW#?=e4J) zz1B70ysk{|voHNJ>&Oyi*LXW|JtDUk9C8WT^yH+=5x=DN?ws`M+ojMIGC4U`B=Rdnde5vfGr-r%L5q4gpaOpdxkFQTIaS+9-mKVN)oo zQFg0==9lhcfxjBA6IQ%Z`&wuTMfIv{bm%aBd&Y0x!2^@#ypu;~pEmk3?aQRVKJBL3PQadP$s&RN%zaRFsJ8iu3&gzN_mtAJcuP~ZH zQ8V^*I^{Vyu370~+m3s*#K-Md$>be8!+IodY0JA2Ic*!WR!~%(29Mo5V8w=7llCva zY0ihGdR(=QpeXj%X0^L)UGT|WL+7vD^X8LP{y%90Mg7#}?Ul2J@>SOjx-I#KbE%Kn z^~$eE6DaD;7wcXv@%;Ms`j|5{$C=E`Yq13s^)B`l!TT zp*Mh{_BH$@aaQhz>NTg&IeOi)V>ex8?VqUC&D*y+He)ocZP~oE|FEVxc49Szp%*q9 zA|B&K+S(LW^Czm*_xx9U(Jr~O(%xVHc*U)Q?L@K*rp9s@3cvLe)%?Wr?|WuW8nckj z_;9jXsp$Vq<0q=|Gp`J4x2;^SlWRu&y}6-w#~vFslmB9FtcePCZgO94+b8PeOPOs0 z`qI7SMm*&|SYc@eI}zl9alXXrD2%30)Jqk27rSj+VDHj*hK+ru-+O;uLoJ^uEpV^i zJ8ju}2Nu@;?bt)5{{L|MB}+PrT?_h&PmOSohXfQvnOhK!_({Dn6P}I5{Xsajc zr9Vc_-_hZo#S7OReewxq*u8d&=q!0Dv_?;qzu#nGf9}vJ&sLw*sKG~zZ@L=WJW)K~ zVdc@w=L=%qNPJyJV<(E1a(g%@mVeei(!X`d zL$~~HN6lK|T!?L*s0NRhK67G)*>KLu_RkeLlGD?UGeVGz^l-XbnmSPvPtQDCxyq_- zsZ9npC^^Nu+^#fV*_KY!r#U|!-BU5^zFC`I`SXEK-)mq;Y6`od6V-cS<+}QO?Zpq5 zt|_&As!RKC+c{AUJDwTQ=gsOXw$GkA^qxo8d}ill1rg%HYUV^`w>)!mwK{daeD>yL z6M8Mb=a;Lil@k?cR^+-tQy&zEep-6d_tSRmwiAaY{44ZEPE>BFb~O-`~y7@{jI}l-Ga>w%%p8ZlX#qyDqcdu!`P<18v`_(_!v?cFIJe(L1m6 zQV7S(Z`?$!Y`wL&F=6@Wfup|oqS3sRHveVYChB_qU)`>1a`y;muUNq$|7i3ynD?($o`g z{lqJK@peMNz#Ea#KNqc|(TQCmZ`G#JZV@j8mlZ`bL*qz8PckmpqwMy^v!`vDxwzTS zY5Tk@vfu9K_}`j?Yp>H5)pWw{CEq`?LtMMBQ~LCh$D5B0FB&3sepE_jHy{C8(uF-? zMEEv{-sJa`gEY+uEqS0NdI~`wS8M*Ez!QbWa9g(f@ z{jQpkg@>Tww@-6tDxTo0wA{#yg#W@F{);fA;2W6T9Syau5o{9F055#a!2!a1E&K!<*mPgMU8ptAC&iK+jX;`L50O@@{Mk-@%TN7%_Dij6t*=`=!{)3-!Tb+rt)0)4nm21FR=R&}HSC3X z>yD2EDSleGN(L-h{7`N873+omMW z|JMtxAb?kzs8+d z=QGO8U$U&euSwS1-4bVAYPK!{=8wWB0PojBLMv>eg^=&ubxY6D%^oZF{=5-WJ1lyw zZsNz6Lf!%qv5qVdzZE{>&0BG;GL+ni4E?@*{_R7yz3_|i!a8U5h7)%uPQ4V)`A4rV z{KbHS5uWTc15SqDt!CsH0XQ~k?)u@Y=3YG~!w9kej=nE`G^ufyhvp`K^=;<%cN-@z zyX10+0$nWvx>`Y?*Zk*nw#_#1N~N$$>)LYHsnbW>+&!;(?|bE{TNfrSzZ^oNVV^2| z0gPh1JNnT{)EAxhewTg2mM$lD-FHqL*El8d(@TkB6r5_&aL!&?5;}TJPxRxHsNGK= z=v(XL7Xv+2Mn9__y?til+kBEKS;Em9dYMJ#(*R`ehtIo2* zC*QW7(%{lAQV3Yy8j1#X1uUG45z`pEXNaKr6&{~;BVW8+i4W%PYOu0G+NCX=ixCt7 zcm;$lOjLNUiRNh%weE%`^(Ox6yl=!8&iR- zO!D@de`z7JU=fvE04!Ljv53l133F3_bWtB)mqMgu<+VXHo*ya?@9vALB-p z7*vd#!8d$mSdsU`f!0(b3x-R;(1Y>SmN|j!oIoBfhc6G82y}NapzFsAud=*2n}Mte z;V{**>F($D8AC0H?>35u8ArIdS}QdFTW( jvq@wcAdMzu`ofPvawhT|>qX||ElLSR5)u+VIraYl_XeaQ diff --git a/journey_central/.gradle/7.3.2/executionHistory/executionHistory.lock b/journey_central/.gradle/7.3.2/executionHistory/executionHistory.lock deleted file mode 100644 index 50b708b22dc86a30c102065e08426c337e4a0116..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZRc&Ma~-RQ%sb1_)pV04z8I#sB~S diff --git a/journey_central/.gradle/7.3.2/fileChanges/last-build.bin b/journey_central/.gradle/7.3.2/fileChanges/last-build.bin deleted file mode 100644 index f76dd238ade08917e6712764a16a22005a50573d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1 IcmZPo000310RR91 diff --git a/journey_central/.gradle/7.3.2/fileHashes/fileHashes.bin b/journey_central/.gradle/7.3.2/fileHashes/fileHashes.bin deleted file mode 100644 index 4ecf0e62e9c34fb5566ddadf40ab65b932f54bb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19747 zcmeI3doWyA9LMjjkoDf0h)9BHrCEt*kqXi+B3VSyJX)fZ!FHn_^;qInc{Hff)T1RN zswIgeBhgH#c%>bW8AQ5Tk3pv5ohFFK5Cpw<&pnf=+yDAs=XYoJy7S%hIltfe?CxLA zIY1CwxNG!9yt>q1J;Ds7rhyq&776Uf*pc+jOCQ9Uk=9d~7q6-${AJE&*jrjiu-z*p8pLk(;1m#Y7IKQ#f zCz^8ccBk`JoZsy&ye@g>kco1~LY)7sk$5rx)>=<&WdSLT&BskS(J zp#1O&oa+TX^gf!E=SAn~IDfM`u4KBYUmxXy5}X^Ie&f-CP3#VO{4~zZRL=!fxkgvf z<85(nQ7)YHH6JxbxnnTS_xWWJr7wva^gQ)Aw^ceNINfwGjUI1}bNiF|!Wfs;V0!)t zoV(r;WhhsKyoGWn8JxSnHZ{nJc1osm3!Hx>j5zSR*P1QLowIQ6=btb8aG%XClsigr z9@Kd2c}1G@RXUf)d5lR?k%icDf}Upq=lCx{u<6eLjet8C00UqE41fVJ00zJS7ytuc z01SWuFaQR?02lxRU;qq&0WbgtzyKHk17H9QfB`T72EYIq00UqE41fVJ00zJS7ytuc z01W(h17_qD)JAt*>c!1B96YMw&y7pEvMAwYPxTN4E7AR(-ZfN*P3`D6`X|9JQ1p7CrpH5pc{Th^wC%sjaSL~OKY5?#%HQMn=hM+S@!j{nl7L+)y4C9LW!(Yw!yX(q9v zEY2-(k= zLK|HEomv)btUI>b3?SBu3_G;x+m)HGCPY*pR=X~Kie>fes#Qh-pHWD>)nnS8cB+h=rJlxpz!biTB!A>9jzAhMZ+PG3*Yo;1N! zY2aG#oTJc}BoYS4o;o3dMV&}k*VUPo9Zxz6R+m$B%jzZPMTJz207aR5h}aOxB<#L_ z!N~}4`LK`oYlOXu?=nSX=C;tM6gK2AiR_@qiI?yE#jdTqMTcU7M3MoL&A zf{0}jLaRLi!kk)**vhtsVve2ZI-;FP`23dov01p>+^~jcrL1e`ed#)kyW8j*VkU7_ z?-S=L6WRVDUf12kCtqJAiNvI^9K diff --git a/journey_central/.gradle/7.3.2/fileHashes/fileHashes.lock b/journey_central/.gradle/7.3.2/fileHashes/fileHashes.lock deleted file mode 100644 index 3789cb3388e8854dcfaaf9cda30d6ebcf0df9af7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZQRnZ0(!ue6<~7$Cp~07JnAtN;K2 diff --git a/journey_central/.gradle/7.3.2/fileHashes/resourceHashesCache.bin b/journey_central/.gradle/7.3.2/fileHashes/resourceHashesCache.bin deleted file mode 100644 index 5e8299b3afb9640ffd129ff964f17399d0ee39a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19381 zcmeI(T})GF9LMo9d}%8I#GEUwwpr)dtpE{fDkR{&{>fbn87uJwK?aR8PCnGmw%JO$(LWA=6upS zS^+`0*iX<8;={xF!zEmS00@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?x{9gpV zFyDv`bu%sttt=PJRD$@-)_gHHtLSdPUxvso>dz83`u{<}wL3{(T;~z0ivm$Uw~E6^ zOG;Qmb*T#V;*Q(H?bn^MsV?qDUFUjs{WROrrS$n*QSZth$PSBd3Z~Eh67_z0Vcj2{ z;#&HgI@Ar$AF+h49Sf)~<)S`#s_H}{%h7T#=7*#lbt5ro8qd^8sV<#?`ulU*u^TN> z15_8EL7hR=Z(tjES z`=QPwj`#}W$a=b)P+#tLeEPG5cn;m|P$x?iX&Pe3A*xGds0&!@&aYI4I8j}s{-;-8 z{iHtEx|=>H0`(9l{-welZeP*oB%v;hJ2;;|(@4K9MA@jzg4B_-^~-#yy`%;8$TO0O ztyZQ+`gQN4F2C1Gwmh*yZmUpFej2KOH!E`%eNHCo=r=)F(f39z;3o)x00@8p2!H?x zfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=900@8p2!H?xfB*=9 z00@A`eV**;$ZvqF4D(^P*T)`JdbuRVi-~5z#_0yGoqrBPS_+q~M7V-4r z5!;hqH5IjGJt6Z*1rUx`Y>&6h037b-RRC}+2ewz(x}pCsYp7JMOBbfy-B zZD6Z4s;cOw)2s2tNUPTISWliIF0YNdBII%(zHm-IdaYa>>(j94=k`6lWnz4xkm>(4 z86!W|gdcQUzOegOe9;*5qASs+Gj>crZ(`X6u>fE6WxP!1zi-Ui>0OYy&FFXoU&s<_ z6c6SMY~#A}YT6^NSiUbZ>HVSg*m!e>zct&TvOyoL^Y|KHwAnNVULNAkQ#G=MQy#}! zzH2e*48J}m)Bo`PS8tVvKi_V6-H$JhKPRp00!U-nuD5GC$}ZI_LTp|oZ8D-Tl~th_!|i)Go%0j diff --git a/journey_central/.gradle/7.3.2/gc.properties b/journey_central/.gradle/7.3.2/gc.properties deleted file mode 100644 index e69de29..0000000 diff --git a/journey_central/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/journey_central/.gradle/buildOutputCleanup/buildOutputCleanup.lock deleted file mode 100644 index 615b060b12b02df0cd5a15f7ce87bba62d13e031..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZRcakg&56ArgZ1_+P@05`b=TL1t6 diff --git a/journey_central/.gradle/buildOutputCleanup/cache.properties b/journey_central/.gradle/buildOutputCleanup/cache.properties deleted file mode 100644 index 5dafcdf..0000000 --- a/journey_central/.gradle/buildOutputCleanup/cache.properties +++ /dev/null @@ -1,2 +0,0 @@ -#Wed Feb 02 23:57:24 CLST 2022 -gradle.version=7.3.2 diff --git a/journey_central/.gradle/buildOutputCleanup/outputFiles.bin b/journey_central/.gradle/buildOutputCleanup/outputFiles.bin deleted file mode 100644 index f1d3299845b9152e2c14598e69ba048d813cbf1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18803 zcmeI%Jt%~69KiACMBH^9lAMl(bizPN3IRDx zDX|E}z+&){L)moYY{GLr|6j6Ml=OY-d7gjY=hy$a=d)g|rrA?I)S-PH>0e7$2q1s} z0tg_000IagfB*srAba-`;aq~G|Tf>TK+Y3jYL((i&pyXX8N1lN6+Qf^@_WDV$2)%l#7^!3 diff --git a/journey_central/.gradle/vcs-1/gc.properties b/journey_central/.gradle/vcs-1/gc.properties deleted file mode 100644 index e69de29..0000000 diff --git a/journey_central/Dockerfile b/journey_central/Dockerfile index f0bcb29..63b4c29 100644 --- a/journey_central/Dockerfile +++ b/journey_central/Dockerfile @@ -1,16 +1,16 @@ -# actual container -FROM amazoncorretto:17-alpine3.15-full -ENV APP_HOME=/usr/app/ -RUN apk add gcompat -ENV LD_PRELOAD=/lib/libgcompat.so.0 +FROM amazoncorretto:18.0.2-al2 as build +WORKDIR /workspace/app -WORKDIR $APP_HOME -ARG JAR_FILE=build/libs/journey-0.0.1-SNAPSHOT.jar -COPY journey_central/${JAR_FILE} ./app.jar -COPY ./integrations ../integrations -COPY ./journey_central/treeassistant-tatan.json ./treeassistant-tatan.json -RUN apk add --update pulseaudio +COPY gradle gradle +COPY build.gradle settings.gradle gradlew ./ +COPY src src +RUN ./gradlew build -x test +RUN mkdir -p build/libs/dependency && (cd build/libs/dependency; find ../ -name "*.jar" -exec jar -xf {} \;) -EXPOSE 8080 -ENTRYPOINT ["java","-jar","app.jar"] \ No newline at end of file +FROM amazoncorretto:18.0.2-al2 +ARG DEPENDENCY=/workspace/app/build/libs/dependency +COPY --from=build ${DEPENDENCY}/BOOT-INF/lib /app/lib +COPY --from=build ${DEPENDENCY}/META-INF /app/META-INF +COPY --from=build ${DEPENDENCY}/BOOT-INF/classes /app +ENTRYPOINT ["java","-cp","app:app/lib/*","com.journey.central.JourneyApplication"] \ No newline at end of file diff --git a/journey_central/google-application-credentials.json b/journey_central/google-application-credentials.json deleted file mode 100644 index 1336a73..0000000 --- a/journey_central/google-application-credentials.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "service_account", - "project_id": "treeassistant-tatan", - "private_key_id": "c17762b3284ad4b2892da86b5acad31d81456480", - "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCxPkpEu2F/AgfT\nRN1E6d3AWKuUlN6EvWtbMkzJBTVPNE3dHNYwmXv+BdiPr63ZBIruRGngkzmlTWmA\nBnXzxL62ddyUUAGMix0Ei6iI9Dd31YUf8fpxfoesckoTVPVygIVjxaN9a3Bp3vl5\nHffGcMYCJqUjEempno0B4OM+d4NY4Z7giBkUrTJ1OPKWFwJm0EGHVoO+mmMLlnoj\ny4ybKlxzbY67jFRD6x4Ua9q5G3D19h2Xi1GnySIKhwCGRCcl6CIPJr0hJxyBzHS0\ny40QnBPYLL9cM8t8bUuMMvjWyz8On075aEyaUuqSrUE8aLn5vFBSiKHG6f+UFi/8\nW+YwEmxzAgMBAAECggEAB+t3a7ICKnSvkm2MHZCXPtY3d7PEBaMyvg51ukqOfHPv\n240QUERrcyK7vIZMrfSZm9ZYWZdg7Tv6SaUAQqlsUPOo3/YU1TzaFq8brSyMb430\nHUTovFPuqAv4HckFqd1VGIVnFF5nbxoH6uhZGMR6DidZgnZ1PgXYDL9wKAU0snuM\nHhr9DlvPeqh7Y6ghU11wTHEobZV5Ys9Kiz4cekWYKRe4/8yaYHOPThCOIMVukS5q\nxekTIkIcciFOSAqQ7g4U+PILf1+9ZxDbtsdLs0s5R37v8o7YpCxvFaZ6zNxAHrbS\noFrLi2hOUb1deFw5H1a2wADDR/UbcHAlgIj+Vl36cQKBgQDlS6slj52OXNHqiWar\nGkBwbVU9eBKOIT6G6TVSZEfVhUCB5eU+A+zofEnHxoeI6os7JcdW5SBzn7p7tJwN\nBgtvSFF0DLUMVGhyLH6VfCCLC9HsmY0b5f8Nf/+KJz3oZIADcLgtwK7cZwROGTVF\n9I5SxSq/5Y+P9CT82O9Bf7XQ1wKBgQDF4rW4eyjMDsE1orVKXr+K3ItAcOKg5LCC\np83iwtrmt6LiSRTe6JQsSmlkRZhV0z4zFjKqoyYem6u3yhCAUPk2V00vx2hy9gxz\nuGXtY0WZRnGZ4HG+mscORi5JpHr28WjJCSQDUA4jCtpJ4cSUizDikHOXDlKw4TGL\nweP7gAshxQKBgQCyrRVPrqrq7b+SEMHVYR6HvVroDHIBGTy9KmsnqgckBrMuxfOu\nMKbivz9LEpQ5B/O5AoZkWyW/k99gWGwl5ejxLZxzXxeR5RCCr9NwLwq471wFD96a\nt83ZOj3p7Qxb1DzA8YxD8tsP2qLLLO+LdLeXHhdi88K8PVa5RV6jXp5SfwKBgQCs\nQ/wmKTEO0xlnc8mWgH0GiY+//YWMwwjV9PbKnQ6rItntW+mLU7UKCY1N+TfwHwFa\nv8xDt9uLccE/MezDh7orkDxlh5Zp3cBhTPmOeokwMZ7bcgQTBfKbfoT1Hvbc2rN5\nrzdmmt5zqxL0llHnbnSUB2RY7+MUkDXtkFDDtGf8cQKBgQCAescmKqvwC+rXJb1c\nU+HOS9DJMzQzjI54MZqgfjcN68C1zm8Y6TZ9lBGkkGHOoRVolCY5QLTrgeFzCoTC\ns+uhss9CEewRJs8OxxfnAr373JG8ZiGIrw4PHFG3hlPiCCNKoOarEhWT09EAOPY0\ng/LjdJToLWRghp3sFC4v6FUKTA==\n-----END PRIVATE KEY-----\n", - "client_email": "treetester@treeassistant-tatan.iam.gserviceaccount.com", - "client_id": "109961751830646460170", - "auth_uri": "https://accounts.google.com/o/oauth2/auth", - "token_uri": "https://oauth2.googleapis.com/token", - "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", - "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/treetester%40treeassistant-tatan.iam.gserviceaccount.com" -} diff --git a/journey_central/gradlew b/journey_central/gradlew old mode 100644 new mode 100755 diff --git a/journey_central/scripts/play_song.py b/journey_central/scripts/play_song.py deleted file mode 100644 index 37928f4..0000000 --- a/journey_central/scripts/play_song.py +++ /dev/null @@ -1,78 +0,0 @@ -import urllib.request -import sys - -import pafy -import vlc -from pyyoutube import Api -import threading - -api = Api(api_key="AIzaSyBl2Uuh-SdIYcSxiTx7B_Mm5TEO8FEbpcY") - -output_devices = [] - - -def search_video(keyword): - response = api.search_by_keywords(q=keyword, search_type=["video"], count=1, limit=1) - video_id = response.items[0].id.videoId - return "https://youtube.com/watch?v=" + video_id - - -def search_output_devices(player): - mods = player.audio_output_device_enum() - if mods: - mod = mods - while mod: - mod = mod.contents - output_devices.append([mod.description, mod.device]) - mod = mod.next - - -def set_output_device(player, device_name): - if not output_devices: - search_output_devices(player) - device = None - - for elem in output_devices: - if bytes(device_name) in elem[0]: - device = elem[1] - if device: - player.audio_output_device_set(None, device) - - -def play_song(url, show_video=False): - video = pafy.new(url) - best = video.getbest() - playurl = best.url - ins = vlc.Instance("" if show_video else "--no-video") - player = ins.media_player_new() - - code = urllib.request.urlopen(url).getcode() - if str(code).startswith('2') or str(code).startswith('3'): - print('Stream is working') - else: - print('Stream is dead') - - Media = ins.media_new(playurl) - Media.get_mrl() - player.set_media(Media) - player.set_hwnd(0) - player.play() - player.audio_set_volume(50) - - good_states = ["State.Playing", "State.NothingSpecial", "State.Opening", "State.Paused"] - while str(player.get_state()) in good_states: - pass - # print('Stream is working. Current state = {}'.format(player.get_state())) - - print('Stream is not working. Current state = {}'.format(player.get_state())) - player.stop() - - -song_name = sys.argv[1] -show_video = sys.argv[2] == "true" or sys.argv[2] == "True" -print("Song name: {}".format(song_name)) -print("Show video: {}".format(show_video)) -if song_name: - url = search_video(song_name) - thread = threading.Thread(target=play_song, args=(url, show_video)) - thread.start() diff --git a/journey_central/src/main/java/com/journey/central/journey/JourneyApplication.java b/journey_central/src/main/java/com/journey/central/JourneyApplication.java similarity index 88% rename from journey_central/src/main/java/com/journey/central/journey/JourneyApplication.java rename to journey_central/src/main/java/com/journey/central/JourneyApplication.java index 4ec22d4..bcdfd0d 100644 --- a/journey_central/src/main/java/com/journey/central/journey/JourneyApplication.java +++ b/journey_central/src/main/java/com/journey/central/JourneyApplication.java @@ -1,11 +1,10 @@ -package com.journey.central.journey; +package com.journey.central; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class JourneyApplication { - public static void main(String[] args) { SpringApplication.run(JourneyApplication.class, args); } diff --git a/journey_central/src/main/java/com/journey/central/journey/config/WebSecurityConfig.java b/journey_central/src/main/java/com/journey/central/config/WebSecurityConfig.java similarity index 93% rename from journey_central/src/main/java/com/journey/central/journey/config/WebSecurityConfig.java rename to journey_central/src/main/java/com/journey/central/config/WebSecurityConfig.java index 9f7a43e..64cbb43 100644 --- a/journey_central/src/main/java/com/journey/central/journey/config/WebSecurityConfig.java +++ b/journey_central/src/main/java/com/journey/central/config/WebSecurityConfig.java @@ -1,4 +1,4 @@ -package com.journey.central.journey.config; +package com.journey.central.config; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; diff --git a/journey_central/src/main/java/com/journey/central/controller/DialogueController.java b/journey_central/src/main/java/com/journey/central/controller/DialogueController.java new file mode 100644 index 0000000..ec5373f --- /dev/null +++ b/journey_central/src/main/java/com/journey/central/controller/DialogueController.java @@ -0,0 +1,32 @@ +package com.journey.central.controller; + +import com.journey.central.model.Dialogue; +import com.journey.central.service.DialogueService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; + +@Controller +@RequestMapping(path = "/dialogue") +public class DialogueController { + + private DialogueService dialogueService; + @Autowired + public DialogueController(DialogueService dialogueService) { + this.dialogueService = dialogueService; + } + + @PostMapping(path = "/") + public @ResponseBody String dialogue(@RequestBody Dialogue dialogue) { + System.out.println("Received dialogue: "+dialogue); + if(dialogue.getIntent()==null){ + return "Error"; + } + dialogueService.saveDialogue(dialogue); + //We now use the response to send to the speaker. + + return "Saved"; + } +} diff --git a/journey_central/src/main/java/com/journey/central/journey/dao/DialogueRepository.java b/journey_central/src/main/java/com/journey/central/dao/DialogueRepository.java similarity index 60% rename from journey_central/src/main/java/com/journey/central/journey/dao/DialogueRepository.java rename to journey_central/src/main/java/com/journey/central/dao/DialogueRepository.java index 6046f57..688a921 100644 --- a/journey_central/src/main/java/com/journey/central/journey/dao/DialogueRepository.java +++ b/journey_central/src/main/java/com/journey/central/dao/DialogueRepository.java @@ -1,6 +1,6 @@ -package com.journey.central.journey.dao; +package com.journey.central.dao; -import com.journey.central.journey.model.Dialogue; +import com.journey.central.model.Dialogue; import org.springframework.data.repository.CrudRepository; public interface DialogueRepository extends CrudRepository { diff --git a/journey_central/src/main/java/com/journey/central/journey/MP3Player.java b/journey_central/src/main/java/com/journey/central/journey/MP3Player.java deleted file mode 100644 index f966ed4..0000000 --- a/journey_central/src/main/java/com/journey/central/journey/MP3Player.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.journey.central.journey; - -import com.google.protobuf.ByteString; -import javazoom.jl.player.AudioDevice; -import javazoom.jl.player.Player; - -import java.io.BufferedInputStream; -import java.io.ByteArrayInputStream; -import java.io.FileInputStream; -import java.io.InputStream; - -public class MP3Player { - private final ByteString byteString; - private Player jlPlayer; - - public MP3Player(ByteString byteString) { - this.byteString = byteString; - } - - public void play() { - try { - ByteArrayInputStream bufferedInputStream = new ByteArrayInputStream(byteString.toByteArray()); - - jlPlayer = new Player(bufferedInputStream); - } catch (Exception e) { - System.out.println("Problem playing mp3 file " + byteString); - System.out.println(e.getMessage()); - } - - new Thread(() -> { - try { - jlPlayer.play(); - } catch (Exception e) { - System.out.println(e.getMessage()); - } - }).start(); - - - } - - public void close() { - if (jlPlayer != null) jlPlayer.close(); - } -} \ No newline at end of file diff --git a/journey_central/src/main/java/com/journey/central/journey/controller/DialogueController.java b/journey_central/src/main/java/com/journey/central/journey/controller/DialogueController.java deleted file mode 100644 index 8e24e06..0000000 --- a/journey_central/src/main/java/com/journey/central/journey/controller/DialogueController.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.journey.central.journey.controller; - -import com.journey.central.journey.integrations.IntegrationManager; -import com.journey.central.journey.integrations.IntegrationTrigger; -import com.journey.central.journey.model.Dialogue; -import com.journey.central.journey.service.BluetoothService; -import com.journey.central.journey.service.DialogueService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.*; - -import java.util.HashMap; - -@Controller -@RequestMapping(path = "/dialogue") -public class DialogueController { - - private DialogueService dialogueService; - private BluetoothService bluetoothService; - private IntegrationManager integrationManager; - - @Autowired - public DialogueController(DialogueService dialogueService, BluetoothService bluetoothService, IntegrationManager integrationManager) { - this.dialogueService = dialogueService; - this.bluetoothService = bluetoothService; - this.integrationManager = integrationManager; - } - - @PostMapping(path = "/") - public @ResponseBody String dialogue(@RequestBody Dialogue dialogue) { - System.out.println("Received dialogue: "+dialogue); - if(dialogue.getIntent()==null){ - return "Error"; - } - dialogueService.saveDialogue(dialogue); - //We now use the response to send to the speaker. - - //bluetoothService.speak(dialogue.getResponse()); - //And we finally just do whatever it should do. - - IntegrationTrigger trigger = new IntegrationTrigger(dialogue.getDomain(), dialogue.getIntent()); - HashMap entities = dialogue.getEntities(); - integrationManager.onTrigger(trigger, entities); - return "Saved"; - } -} diff --git a/journey_central/src/main/java/com/journey/central/journey/integrations/Integration.java b/journey_central/src/main/java/com/journey/central/journey/integrations/Integration.java deleted file mode 100644 index d83c057..0000000 --- a/journey_central/src/main/java/com/journey/central/journey/integrations/Integration.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.journey.central.journey.integrations; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class Integration { - private File filePath; - private IntegrationConfig integrationConfig; - private Map methods; //map from domain:intent to method. - - Logger logger = LoggerFactory.getLogger(Integration.class); - - - public Integration(File filePath, IntegrationConfig integrationConfig) { - this.filePath = filePath; - this.integrationConfig = integrationConfig; - this.methods = new HashMap<>(); - loadMethods(integrationConfig.getMethods()); - } - - private void loadMethods(List integrationMethods) { - logger.info("Loading {} methods: ", integrationMethods.size()); - if( methods == null) { - methods = new HashMap<>(); - } - for (IntegrationMethod integrationMethod : integrationMethods) { - logger.info("Found method: "+integrationMethod.getFileName()+" "+integrationMethod.getParameters()); - for (IntegrationTrigger integrationTrigger : integrationMethod.getTriggers()) { - methods.put(integrationTrigger, integrationMethod); - } - } - } - - - private boolean isService() { - return integrationConfig.isService(); - } - - public void load() { - if(isService()) { - //TODO We initialize straight away. - } - String name = integrationConfig.getName(); - String description = integrationConfig.getDescription(); - String version = integrationConfig.getVersion(); - List authors = integrationConfig.getAuthors(); - logger.info("Loaded integration: " + name+ " " + version+ " " + description+ " " + authors); - } - - public void onTrigger(IntegrationTrigger trigger, Map entities, PythonConnector pythonConnector){ - IntegrationMethod integrationMethod = methods.get(trigger); - if(integrationMethod != null) { - integrationMethod.execute(entities, pythonConnector); - } - } -} diff --git a/journey_central/src/main/java/com/journey/central/journey/integrations/IntegrationConfig.java b/journey_central/src/main/java/com/journey/central/journey/integrations/IntegrationConfig.java deleted file mode 100644 index ebe0516..0000000 --- a/journey_central/src/main/java/com/journey/central/journey/integrations/IntegrationConfig.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.journey.central.journey.integrations; - -import java.util.List; - -public class IntegrationConfig { - private String name; - private String description; - private String version; - private boolean service; - private List authors; - private List methods; - - public void setAuthors(List authors) { - this.authors = authors; - } - - public void setName(String name) { - this.name = name; - } - - public void setDescription(String description) { - this.description = description; - } - - public void setVersion(String version) { - this.version = version; - } - - public void setAuthor(String author) { - authors = List.of(author); - } - - public String getName() { - return name; - } - - public String getDescription() { - return description; - } - - public String getVersion() { - return version; - } - - public List getAuthors() { - return authors; - } - - public boolean isService() { - return service; - } - - public void setService(boolean service) { - this.service = service; - } - - public void setMethods(List methods) { - this.methods = methods; - } - - public List getMethods() { - return methods; - } -} diff --git a/journey_central/src/main/java/com/journey/central/journey/integrations/IntegrationManager.java b/journey_central/src/main/java/com/journey/central/journey/integrations/IntegrationManager.java deleted file mode 100644 index 13f69b5..0000000 --- a/journey_central/src/main/java/com/journey/central/journey/integrations/IntegrationManager.java +++ /dev/null @@ -1,134 +0,0 @@ -package com.journey.central.journey.integrations; - -import com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.commons.io.FileUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -@Component -public class IntegrationManager { - public static final String SCRIPTS_FOLDER = "scripts"; - private static final String NLP_FOLDER = "../journey_core_nlp"; - private static IntegrationManager instance; - private List integrations; - private static final String INTEGRATION_FOLDER = "../integrations"; - private static final String INTEGRATION_CONFIG_NAME = "config.json"; - - Logger logger = LoggerFactory.getLogger(IntegrationManager.class); - - @Autowired - private ObjectMapper objectMapper; - - @Autowired - private PythonConnector pythonConnector; - - - @PostConstruct - public void loadIntegrations(){ - integrations = new ArrayList<>(); - File scriptsFolder = new File(SCRIPTS_FOLDER); - if(!scriptsFolder.exists()){ - logger.info("Creating scripts folder: " + scriptsFolder.getAbsolutePath()); - scriptsFolder.mkdir(); - } - File integrationFolder = new File(INTEGRATION_FOLDER); - logger.info("Loading integrations from path "+ integrationFolder.getAbsolutePath()); - if (!integrationFolder.exists()){ - logger.info("Integration folder does not exist"); - integrationFolder.mkdir(); - } - for(File file : integrationFolder.listFiles()){ - if (!file.isDirectory()) { - logger.warn("Found a file in the integration folder, ignoring"); - continue; - } - logger.info("Loading integration from folder: " + file.getName()); - loadIntegration(file); - } - } - - private void loadIntegration(File integrationFolder){ - File configFile = new File(integrationFolder.getAbsolutePath() + File.separator + INTEGRATION_CONFIG_NAME); - if (!configFile.exists()){ - logger.warn("Integration config file does not exist. Skiping integration"); - return; - } - try { - logger.info("Loading integration config file: " + configFile.getAbsolutePath()); - IntegrationConfig integrationConfig = objectMapper.readValue(configFile, IntegrationConfig.class); - File parentDirectory = configFile.getParentFile(); - //Copy python files. - copyScripts(parentDirectory); - //Copy nlp folders. - copyNLPFolders(parentDirectory); - - Integration integration = new Integration(parentDirectory, integrationConfig); - integration.load(); - integrations.add(integration); - } catch (IOException e) { - e.printStackTrace(); - } - } - - private void copyNLPFolders(File parentDirectory) throws IOException { - File nlpFolder = new File(parentDirectory.getAbsolutePath() + File.separator + "nlp"); - if (!nlpFolder.exists()){ - logger.warn("NLP folder does not exist. Skipping"); - return; - } - File originalDomainsFolder = new File(nlpFolder + File.separator + "domains"); - File originalEntitiesFolder = new File(nlpFolder + File.separator + "entities"); - File targetDomainsFolder = new File(NLP_FOLDER+ File.separator + "domains"); - File targetEntitiesFolder = new File(NLP_FOLDER + File.separator + "entities"); - if (originalDomainsFolder.exists()) { - logger.info("Copying NLP domains folder"); - for(File file : Objects.requireNonNull(originalDomainsFolder.listFiles())){ - File newFile = new File(targetDomainsFolder.getAbsolutePath() + File.separator + file.getName()); - FileUtils.copyDirectory(file, newFile, true); - } - } else { - logger.warn("NLP domains folder does not exist. Skipping"); - } - if (originalEntitiesFolder.exists()) { - logger.info("Copying NLP entities folder"); - for(File file : Objects.requireNonNull(originalEntitiesFolder.listFiles())){ - File newFile = new File(targetEntitiesFolder.getAbsolutePath() + File.separator + file.getName()); - FileUtils.copyDirectory(file, newFile, true); - } - } else { - logger.warn("NLP entities folder does not exist. Skipping"); - } - } - - private void copyScripts(File integrationDirectory) throws IOException { - for(File file : Objects.requireNonNull(integrationDirectory.listFiles())){ - if (file.getName().endsWith(".py")){ - File newFile = new File(SCRIPTS_FOLDER + File.separator + file.getName()); - - logger.info("Copying python file: " + file.getAbsolutePath() + " to " + newFile.getAbsolutePath()); - if(newFile.exists()){ - logger.warn("Python file already exists. Will replace old file."); - } - Files.copy(file.toPath(), newFile.toPath(), java.nio.file.StandardCopyOption.REPLACE_EXISTING); - } - } - } - - public void onTrigger(IntegrationTrigger trigger, Map entities){ - for(Integration integration : integrations){ - integration.onTrigger(trigger, entities, pythonConnector); - } - } - -} diff --git a/journey_central/src/main/java/com/journey/central/journey/integrations/IntegrationMethod.java b/journey_central/src/main/java/com/journey/central/journey/integrations/IntegrationMethod.java deleted file mode 100644 index bfd6008..0000000 --- a/journey_central/src/main/java/com/journey/central/journey/integrations/IntegrationMethod.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.journey.central.journey.integrations; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; -import org.springframework.beans.factory.annotation.Configurable; - -import javax.validation.constraints.NotNull; -import java.util.List; -import java.util.Map; - -@Data -@Configurable -public class IntegrationMethod { - @NotNull - private List triggers; - - private List entities; - private List parameters; - - @NotNull - @JsonProperty("file_name") - private String fileName; - - @JsonProperty("method_name") - private String methodName; - - public void execute(Map entities, PythonConnector pythonConnector) { - if (pythonConnector != null) { - pythonConnector.execute(this, entities); - } - } -} diff --git a/journey_central/src/main/java/com/journey/central/journey/integrations/IntegrationTrigger.java b/journey_central/src/main/java/com/journey/central/journey/integrations/IntegrationTrigger.java deleted file mode 100644 index f1aa29c..0000000 --- a/journey_central/src/main/java/com/journey/central/journey/integrations/IntegrationTrigger.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.journey.central.journey.integrations; - -import lombok.Data; - -import java.util.Objects; - -@Data -public class IntegrationTrigger { - private String domain; - private String intent; - - public IntegrationTrigger(String domain, String intent) { - this.domain = domain; - this.intent = intent; - } - - @Override - public String toString() { - return "IntegrationTrigger [domain=" + domain + ", intent=" + intent + "]"; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - IntegrationTrigger that = (IntegrationTrigger) o; - return Objects.equals(domain, that.domain) && Objects.equals(intent, that.intent); - } - - @Override - public int hashCode() { - return Objects.hash(domain, intent); - } -} diff --git a/journey_central/src/main/java/com/journey/central/journey/integrations/NotifyingThread.java b/journey_central/src/main/java/com/journey/central/journey/integrations/NotifyingThread.java deleted file mode 100644 index a29a305..0000000 --- a/journey_central/src/main/java/com/journey/central/journey/integrations/NotifyingThread.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.journey.central.journey.integrations; - -import java.util.Set; -import java.util.concurrent.CopyOnWriteArraySet; - -public abstract class NotifyingThread extends Thread { - private final Set listeners - = new CopyOnWriteArraySet(); - public final void addListener(final ThreadCompleteListener listener) { - listeners.add(listener); - } - public final void removeListener(final ThreadCompleteListener listener) { - listeners.remove(listener); - } - private void notifyListeners() { - for (ThreadCompleteListener listener : listeners) { - listener.onThreadComplete(this); - } - } - @Override - public final void run() { - try { - doRun(); - } finally { - notifyListeners(); - } - } - public abstract void doRun(); -} \ No newline at end of file diff --git a/journey_central/src/main/java/com/journey/central/journey/integrations/PythonConnector.java b/journey_central/src/main/java/com/journey/central/journey/integrations/PythonConnector.java deleted file mode 100644 index 4fd58d9..0000000 --- a/journey_central/src/main/java/com/journey/central/journey/integrations/PythonConnector.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.journey.central.journey.integrations; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -@Component -public class PythonConnector implements ThreadCompleteListener{ - private static final String SCRIPTS_FOLDER = IntegrationManager.SCRIPTS_FOLDER; - private String pythonCommand = "python"; - private Logger logger = LoggerFactory.getLogger(PythonConnector.class); - - - @PostConstruct - public void init() { - - } - - private void jythonInit() { - - } - - public void checkPythonVersion(){ - } - - public void execute(IntegrationMethod integrationMethod, Map entities) { - //TODO modify this to use the Flask service. - //First we check if there is already a process running this method, and we destroy it in case there is. - - List parameters = new ArrayList<>(); - for (String value : integrationMethod.getParameters()){ - if(value.contains("{") && value.contains("}")){ - String key = value.substring(value.indexOf("{") + 1, value.indexOf("}")); - if (integrationMethod.getEntities().contains(key)) { - if (entities.containsKey(key)) { - parameters.add('"'+entities.get(key)+'"'); - } - } - } else { - parameters.add(value); - } - } - PythonExecutor pythonExecutor = new PythonExecutor(integrationMethod, parameters); - pythonExecutor.addListener(this); - pythonExecutor.start(); - } - - @PreDestroy - public void onShutdown(){ - logger.info("Shutting down integration manager"); - //TODO kill the threads in the executor service. - } - - @Override - public void onThreadComplete(Thread thread) { - //This might still be useful later on. - } -} diff --git a/journey_central/src/main/java/com/journey/central/journey/integrations/PythonExecutor.java b/journey_central/src/main/java/com/journey/central/journey/integrations/PythonExecutor.java deleted file mode 100644 index b41b8cf..0000000 --- a/journey_central/src/main/java/com/journey/central/journey/integrations/PythonExecutor.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.journey.central.journey.integrations; - -import com.fasterxml.jackson.databind.ObjectMapper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.net.URI; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; -import java.util.HashMap; -import java.util.List; - -public class PythonExecutor extends NotifyingThread{ - private final IntegrationMethod integrationMethod; - private List parameters; - - - public PythonExecutor(IntegrationMethod integrationMethod, List parameters){ - this.integrationMethod = integrationMethod; - this.parameters = parameters; - } - - @Override - public void doRun() { - //Send post request to python executor service. - //For now we simulate it. - Logger logger = LoggerFactory.getLogger(Integration.class); - logger.info("PythonExecutor: Sending post request to python executor service."); - logger.info("PythonExecutor: {} {}", integrationMethod.getMethodName(), parameters); - HttpClient client = HttpClient.newHttpClient(); - try { - var objectMapper = new ObjectMapper(); - HashMap values = new HashMap<>() {{ - put("script_name", integrationMethod.getFileName()); - put("script_arguments", "[]"); - }}; - - String requestBody = objectMapper - .writerWithDefaultPrettyPrinter() - .writeValueAsString(values); - - HttpRequest request = HttpRequest.newBuilder(URI.create("http://journeyintegrations:9090/script")) - .header("Content-Type", "application/json") - .POST(HttpRequest.BodyPublishers.ofString(requestBody)) - .build(); - client.send(request, HttpResponse.BodyHandlers.ofString()); - values = new HashMap<>() {{ - put("method_name", integrationMethod.getMethodName()); - put("method_arguments", parameters); - }}; - requestBody = objectMapper - .writerWithDefaultPrettyPrinter() - .writeValueAsString(values); - - request = HttpRequest.newBuilder() - .uri(URI.create("http://journeyintegrations:9090/method")) - .header("Content-Type", "application/json") - .POST(HttpRequest.BodyPublishers.ofString(requestBody)) - .build(); - HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); - } catch (IOException | InterruptedException e) { - e.printStackTrace(); - } - - - } - -} \ No newline at end of file diff --git a/journey_central/src/main/java/com/journey/central/journey/integrations/ThreadCompleteListener.java b/journey_central/src/main/java/com/journey/central/journey/integrations/ThreadCompleteListener.java deleted file mode 100644 index be482a4..0000000 --- a/journey_central/src/main/java/com/journey/central/journey/integrations/ThreadCompleteListener.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.journey.central.journey.integrations; - -public interface ThreadCompleteListener { - void onThreadComplete(final Thread thread); -} diff --git a/journey_central/src/main/java/com/journey/central/journey/peripherals/Speaker.java b/journey_central/src/main/java/com/journey/central/journey/peripherals/Speaker.java deleted file mode 100644 index 541f8bf..0000000 --- a/journey_central/src/main/java/com/journey/central/journey/peripherals/Speaker.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.journey.central.journey.peripherals; - -public interface Speaker { - void connect(); - void play(); -} diff --git a/journey_central/src/main/java/com/journey/central/journey/peripherals/WifiSpeaker.java b/journey_central/src/main/java/com/journey/central/journey/peripherals/WifiSpeaker.java deleted file mode 100644 index 9cc5871..0000000 --- a/journey_central/src/main/java/com/journey/central/journey/peripherals/WifiSpeaker.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.journey.central.journey.peripherals; - -public class WifiSpeaker implements Speaker{ - @Override - public void connect() { - - } - - @Override - public void play() { - - } -} diff --git a/journey_central/src/main/java/com/journey/central/journey/peripherals/bluetooth/BluetoothModule.java b/journey_central/src/main/java/com/journey/central/journey/peripherals/bluetooth/BluetoothModule.java deleted file mode 100644 index 8ddf627..0000000 --- a/journey_central/src/main/java/com/journey/central/journey/peripherals/bluetooth/BluetoothModule.java +++ /dev/null @@ -1,178 +0,0 @@ -package com.journey.central.journey.peripherals.bluetooth; - - -import com.google.protobuf.ByteString; -import com.intel.bluetooth.obex.OBEXClientSessionImpl; -import com.journey.central.journey.MP3Player; -import com.journey.central.journey.utils.SpeechSynthesizer; -import javazoom.jl.player.Player; - -import javax.bluetooth.*; -import javax.microedition.io.Connection; -import javax.microedition.io.Connector; -import javax.microedition.io.StreamConnection; -import javax.microedition.io.StreamConnectionNotifier; -import javax.obex.ClientSession; -import javax.obex.HeaderSet; -import javax.obex.Operation; -import javax.obex.ResponseCodes; -import javax.print.attribute.standard.Media; -import javax.sound.sampled.*; -import java.io.*; -import java.net.URL; -import java.util.Vector; - -public class BluetoothModule { - private JourneyDiscoveryListener discoveryListener = new JourneyDiscoveryListener(); - - //Function to get bluetooth devices - public void searchBluetoothDevices(int timeout) throws IOException, InterruptedException { - System.out.println("Searching for bluetooth devices..."); - synchronized (discoveryListener.inquiryCompletedEvent) { - boolean started = LocalDevice.getLocalDevice().getDiscoveryAgent().startInquiry(DiscoveryAgent.GIAC, discoveryListener); - if (started) { - System.out.println("Inquiry started"); - discoveryListener.inquiryCompletedEvent.wait(); - System.out.println(discoveryListener.devicesDiscovered.size() + " devices discovered"); - } - } - System.out.println("Stopping bluetooth discovery..."); - - - } - - public RemoteDevice getDevice(String name) { - for (RemoteDevice device : discoveryListener.devicesDiscovered) { - try { - if (device.getFriendlyName(false).equals(name)) { - return device; - } - } catch (IOException e) { - System.out.println("Error getting device name: " + e.getMessage()); - } - } - return null; - } - - public void searchServices(RemoteDevice device) throws BluetoothStateException { - UUID[] uuidSet = new UUID[1]; - uuidSet[0] = new UUID(0x1105); //OBEX Object Push service - - int[] attrIDs = new int[]{ - 0x0100 // Service name - }; - - LocalDevice localDevice = LocalDevice.getLocalDevice(); - DiscoveryAgent agent = localDevice.getDiscoveryAgent(); - try { - System.out.println("Searching for services... in " + device.getFriendlyName(false)); - } catch (IOException e) { - e.printStackTrace(); - } - agent.searchServices(null, uuidSet, device, discoveryListener); - - - try { - synchronized (discoveryListener.inquiryCompletedEvent) { - discoveryListener.inquiryCompletedEvent.wait(); - } - } catch (InterruptedException e) { - e.printStackTrace(); - return; - } - } - - public Connection connect(RemoteDevice device) throws IOException { - System.out.println("Connecting to device..."); - String url = device.getBluetoothAddress(); - url = "btspp://" + url + ":2;authenticate=false;encrypt=false;master=false"; - System.out.println(url); - StreamConnection connection = (StreamConnection) Connector.open(url); - System.out.println("Connected to device"); - return connection; - } - - public Connection connect(String macAddress) throws IOException { - System.out.println("Connecting to device..."); - String url = "btspp://"+macAddress+":2;authenticate=false;encrypt=false;master=false"; - StreamConnection connection = (StreamConnection) Connector.open(url); - System.out.println("Connected to device"); - return connection; - - } - - public void sendToDevice(String message) throws IOException { - System.out.println("Sending message..."); - - try { - ByteString bytes = SpeechSynthesizer.synthesizeText(message); - MP3Player mp3Player = new MP3Player(bytes); - mp3Player.play(); - } catch (Exception e) { - e.printStackTrace(); - } - - System.out.println("Message sent"); - } - - public void playFile(String filePath) throws UnsupportedAudioFileException, IOException, InterruptedException { - // Take the path of the audio file from command line - //MP3Player mp3Player = new MP3Player(filePath); - //mp3Player.play(); - } - -} -class JourneyDiscoveryListener implements DiscoveryListener{ - - protected final Object inquiryCompletedEvent = new Object(); - protected Vector devicesDiscovered = new Vector<>(); - - @Override - public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) { - System.out.println("Device discovered: " + btDevice.getBluetoothAddress()); - devicesDiscovered.addElement(btDevice); - try{ - System.out.println("Device name: " + btDevice.getFriendlyName(false)); - } catch (IOException e) { - System.out.println("Error getting device name: " + e.getMessage()); - } - } - - @Override - public void servicesDiscovered(int transID, ServiceRecord[] services) { - for (int i = 0; i < services.length; i++) { - String url = services[i].getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false); - if (url == null) { - continue; - } - - DataElement serviceName = services[i].getAttributeValue(0x0100); - if (serviceName != null) { - System.out.println("service " + serviceName.getValue() + " found " + url); - } else { - System.out.println("service found " + url); - } - - if(serviceName.getValue().equals("OBEX Object Push")){ - System.out.println("We're getting closer!"); - } - } - } - - @Override - public void serviceSearchCompleted(int transID, int respCode) { - System.out.println("Service search completed: " + respCode); - synchronized (inquiryCompletedEvent){ - inquiryCompletedEvent.notify(); - } - } - - @Override - public void inquiryCompleted(int discType) { - System.out.println("Inquiry completed: " + discType); - synchronized (inquiryCompletedEvent) { - inquiryCompletedEvent.notifyAll(); - } - } - -} \ No newline at end of file diff --git a/journey_central/src/main/java/com/journey/central/journey/peripherals/bluetooth/BluetoothSpeaker.java b/journey_central/src/main/java/com/journey/central/journey/peripherals/bluetooth/BluetoothSpeaker.java deleted file mode 100644 index 291e6a5..0000000 --- a/journey_central/src/main/java/com/journey/central/journey/peripherals/bluetooth/BluetoothSpeaker.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.journey.central.journey.peripherals.bluetooth; - -import com.journey.central.journey.peripherals.Speaker; - -public class BluetoothSpeaker implements Speaker { - @Override - public void connect() { - - } - - - @Override - public void play() { - - } -} diff --git a/journey_central/src/main/java/com/journey/central/journey/service/BluetoothService.java b/journey_central/src/main/java/com/journey/central/journey/service/BluetoothService.java deleted file mode 100644 index 4844c9e..0000000 --- a/journey_central/src/main/java/com/journey/central/journey/service/BluetoothService.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.journey.central.journey.service; - -public interface BluetoothService { - void speak(String text); -} diff --git a/journey_central/src/main/java/com/journey/central/journey/service/BluetoothServiceImpl.java b/journey_central/src/main/java/com/journey/central/journey/service/BluetoothServiceImpl.java deleted file mode 100644 index 12f4e71..0000000 --- a/journey_central/src/main/java/com/journey/central/journey/service/BluetoothServiceImpl.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.journey.central.journey.service; - -import com.google.protobuf.ByteString; -import com.journey.central.journey.MP3Player; -import com.journey.central.journey.peripherals.bluetooth.BluetoothModule; -import com.journey.central.journey.utils.SpeechSynthesizer; -import org.springframework.stereotype.Service; - -@Service -public class BluetoothServiceImpl implements BluetoothService { - private BluetoothModule bluetoothModule = new BluetoothModule(); - - @Override - public void speak(String text) { - System.out.println("BluetoothServiceImpl speak: " + text); - try { - ByteString bytes = SpeechSynthesizer.synthesizeText(text); - if(bytes!=null){ - MP3Player mp3Player = new MP3Player(bytes); - mp3Player.play(); - } - } catch (Exception e) { - e.printStackTrace(); - } - } -} diff --git a/journey_central/src/main/java/com/journey/central/journey/service/KafkaConsumer.java b/journey_central/src/main/java/com/journey/central/journey/service/KafkaConsumer.java deleted file mode 100644 index cba89c3..0000000 --- a/journey_central/src/main/java/com/journey/central/journey/service/KafkaConsumer.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.journey.central.journey.service; - -import org.apache.kafka.clients.producer.Producer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.kafka.annotation.KafkaListener; -import org.springframework.stereotype.Service; - -import java.io.IOException; - -@Service -public class KafkaConsumer { - private final Logger logger = LoggerFactory.getLogger(Producer.class); - - - @KafkaListener(topics = "users", groupId = "group_id") - public void consume(String message) throws IOException { - logger.info(String.format("#### -> Consumed message -> %s", message)); - } -} diff --git a/journey_central/src/main/java/com/journey/central/journey/utils/SpeechSynthesizer.java b/journey_central/src/main/java/com/journey/central/journey/utils/SpeechSynthesizer.java deleted file mode 100644 index 375248d..0000000 --- a/journey_central/src/main/java/com/journey/central/journey/utils/SpeechSynthesizer.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.journey.central.journey.utils; - -import com.google.cloud.texttospeech.v1.*; -import com.google.protobuf.ByteString; - -public class SpeechSynthesizer { - public static ByteString synthesizeText(String text) throws Exception { - if(text == null || text.isEmpty()) { - return null; - } - // Instantiates a client - try (TextToSpeechClient textToSpeechClient = TextToSpeechClient.create()) { - // Set the text input to be synthesized - SynthesisInput input = SynthesisInput.newBuilder().setText(text).build(); - - // Build the voice request - VoiceSelectionParams voice = - VoiceSelectionParams.newBuilder() - .setLanguageCode("en-US") // languageCode = "en_us" - .setSsmlGender(SsmlVoiceGender.FEMALE) // ssmlVoiceGender = SsmlVoiceGender.FEMALE - .build(); - - // Select the type of audio file you want returned - AudioConfig audioConfig = - AudioConfig.newBuilder() - .setAudioEncoding(AudioEncoding.MP3) // MP3 audio. - .build(); - - // Perform the text-to-speech request - SynthesizeSpeechResponse response = - textToSpeechClient.synthesizeSpeech(input, voice, audioConfig); - - // Get the audio contents from the response - - return response.getAudioContent(); - } - } -} diff --git a/journey_central/src/main/java/com/journey/central/journey/model/Dialogue.java b/journey_central/src/main/java/com/journey/central/model/Dialogue.java similarity index 94% rename from journey_central/src/main/java/com/journey/central/journey/model/Dialogue.java rename to journey_central/src/main/java/com/journey/central/model/Dialogue.java index 852ca7c..783e0e2 100644 --- a/journey_central/src/main/java/com/journey/central/journey/model/Dialogue.java +++ b/journey_central/src/main/java/com/journey/central/model/Dialogue.java @@ -1,4 +1,4 @@ -package com.journey.central.journey.model; +package com.journey.central.model; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -40,4 +40,8 @@ public Dialogue(long id, String prompt, String response, String intent, String d e.printStackTrace(); } } + + public Dialogue() { + + } } diff --git a/journey_central/src/main/java/com/journey/central/journey/service/DialogueService.java b/journey_central/src/main/java/com/journey/central/service/DialogueService.java similarity index 66% rename from journey_central/src/main/java/com/journey/central/journey/service/DialogueService.java rename to journey_central/src/main/java/com/journey/central/service/DialogueService.java index b55e5da..3229118 100644 --- a/journey_central/src/main/java/com/journey/central/journey/service/DialogueService.java +++ b/journey_central/src/main/java/com/journey/central/service/DialogueService.java @@ -1,8 +1,6 @@ -package com.journey.central.journey.service; +package com.journey.central.service; -import com.journey.central.journey.model.Dialogue; - -import java.security.Principal; +import com.journey.central.model.Dialogue; public interface DialogueService { void createDialogue(Dialogue dialogue); diff --git a/journey_central/src/main/java/com/journey/central/journey/service/DialogueServiceImpl.java b/journey_central/src/main/java/com/journey/central/service/DialogueServiceImpl.java similarity index 87% rename from journey_central/src/main/java/com/journey/central/journey/service/DialogueServiceImpl.java rename to journey_central/src/main/java/com/journey/central/service/DialogueServiceImpl.java index b51a7f6..90229d6 100644 --- a/journey_central/src/main/java/com/journey/central/journey/service/DialogueServiceImpl.java +++ b/journey_central/src/main/java/com/journey/central/service/DialogueServiceImpl.java @@ -1,12 +1,10 @@ -package com.journey.central.journey.service; +package com.journey.central.service; -import com.journey.central.journey.dao.DialogueRepository; -import com.journey.central.journey.model.Dialogue; +import com.journey.central.dao.DialogueRepository; +import com.journey.central.model.Dialogue; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.security.Principal; - @Service public class DialogueServiceImpl implements DialogueService { @Autowired diff --git a/journey_central/src/main/java/com/journey/central/service/Entity.java b/journey_central/src/main/java/com/journey/central/service/Entity.java new file mode 100644 index 0000000..e01b8f6 --- /dev/null +++ b/journey_central/src/main/java/com/journey/central/service/Entity.java @@ -0,0 +1,47 @@ +package com.journey.central.service; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + +import java.util.Map; + +@JsonDeserialize(using = EntityDeserializer.class) +public class Entity { + private String name; + private String type; + private Map attributes; + + public Entity (String name, String type, Map attributes){ + this.name = name; + this.type = type; + this.attributes = attributes; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public Map getAttributes() { + return attributes; + } + + public void setAttributes(Map attributes) { + this.attributes = attributes; + } + + @Override + public String toString(){ + return String.format("name: %s, type: %s, attributes_len: %d", name, type, attributes.size()); + } +} \ No newline at end of file diff --git a/journey_central/src/main/java/com/journey/central/service/IncomingMessage.java b/journey_central/src/main/java/com/journey/central/service/IncomingMessage.java new file mode 100644 index 0000000..5478838 --- /dev/null +++ b/journey_central/src/main/java/com/journey/central/service/IncomingMessage.java @@ -0,0 +1,33 @@ +package com.journey.central.service; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.util.List; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class IncomingMessage { + @JsonProperty("msg") + private String message; + @JsonProperty("intent") + private String intent; + @JsonProperty("entities") + private List entities; + + @Override + public String toString() { + return "IncomingMessage{" + + "message='" + message + '\'' + + ", intent='" + intent + '\'' + + ", entities=" + entities + + '}'; + } + + public List getEntities() { + return entities; + } + + public String getIntent() { + return intent; + } +} \ No newline at end of file diff --git a/journey_central/src/main/java/com/journey/central/service/IncomingMessageParser.java b/journey_central/src/main/java/com/journey/central/service/IncomingMessageParser.java new file mode 100644 index 0000000..1ad5ca3 --- /dev/null +++ b/journey_central/src/main/java/com/journey/central/service/IncomingMessageParser.java @@ -0,0 +1,29 @@ +package com.journey.central.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +class IncomingMessageParser { + @Autowired + private KafkaProducer producer; + + @Autowired + private IntegrationManager integrationManager; + public void parseIncomingMessage(IncomingMessage incomingMessage){ + String intent = incomingMessage.getIntent(); + String integration = integrationManager.getIntegration(intent); + String topic = getTopic(integration, intent); + OutgoingMessage outgoingMessage = new OutgoingMessage(intent, incomingMessage.getEntities()); + try { + producer.sendMessage(topic, outgoingMessage); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + private String getTopic(String integration, String intent) { + return integration + "." + intent; + } +} \ No newline at end of file diff --git a/journey_central/src/main/java/com/journey/central/service/IntegrationManager.java b/journey_central/src/main/java/com/journey/central/service/IntegrationManager.java new file mode 100644 index 0000000..9800ca3 --- /dev/null +++ b/journey_central/src/main/java/com/journey/central/service/IntegrationManager.java @@ -0,0 +1,17 @@ +package com.journey.central.service; + +import org.springframework.stereotype.Service; + +import java.util.Map; + +@Service +public class IntegrationManager { + private Map intentIntegrationMap; + + public String getIntegration(String intent){ + if (intent.equals("telegram_message")){ + return "telegram_sender"; + } + return "undefined"; + } +} diff --git a/journey_central/src/main/java/com/journey/central/service/KafkaConsumer.java b/journey_central/src/main/java/com/journey/central/service/KafkaConsumer.java new file mode 100644 index 0000000..7f69ecb --- /dev/null +++ b/journey_central/src/main/java/com/journey/central/service/KafkaConsumer.java @@ -0,0 +1,69 @@ +package com.journey.central.service; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import org.apache.kafka.clients.producer.Producer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +@Service +public class KafkaConsumer { + private final Logger logger = LoggerFactory.getLogger(Producer.class); + @Autowired + private final IncomingMessageParser incomingMessageParser = new IncomingMessageParser(); + + @KafkaListener(topics = "journey_central.incoming_messages", groupId = "journey_central") + public void consume(String message) throws IOException { + logger.info(String.format("#### -> Consumed message! -> %s", message)); + ObjectMapper mapper = new ObjectMapper(); + IncomingMessage incomingMessage = mapper.readValue(message, IncomingMessage.class); + logger.info(incomingMessage.toString()); + incomingMessageParser.parseIncomingMessage(incomingMessage); + } +} + +class EntityDeserializer extends StdDeserializer { + public EntityDeserializer(){ + this(null); + } + protected EntityDeserializer(Class vc) { + super(vc); + } + + @Override + public Entity deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JacksonException { + JsonNode node = jp.getCodec().readTree(jp); + String name = node.get("name").asText(); + String type = node.get("type").asText(); + Iterator> elements = node.fields(); + + Map entities = new HashMap<>(); + while(elements.hasNext()){ + Map.Entry next = elements.next(); + String key = next.getKey(); + if (key.equals("type") || key.equals("name")){ + continue; + } + + String value = next.getValue().asText(); + entities.put(key, value); + } + + return new Entity(name, type, entities); + } +} + + + diff --git a/journey_central/src/main/java/com/journey/central/journey/service/KafkaProducer.java b/journey_central/src/main/java/com/journey/central/service/KafkaProducer.java similarity index 60% rename from journey_central/src/main/java/com/journey/central/journey/service/KafkaProducer.java rename to journey_central/src/main/java/com/journey/central/service/KafkaProducer.java index 7ee42b4..aac46b6 100644 --- a/journey_central/src/main/java/com/journey/central/journey/service/KafkaProducer.java +++ b/journey_central/src/main/java/com/journey/central/service/KafkaProducer.java @@ -1,5 +1,7 @@ -package com.journey.central.journey.service; +package com.journey.central.service; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.kafka.clients.producer.Producer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -9,19 +11,18 @@ import org.springframework.kafka.core.KafkaTemplate; import org.springframework.stereotype.Service; -import java.io.IOException; - @Service public class KafkaProducer { private static final Logger logger = LoggerFactory.getLogger(Producer.class); - private static final String TOPIC = "users"; @Autowired private KafkaTemplate kafkaTemplate; - public void sendMessage(String message) { + public void sendMessage(String topic, OutgoingMessage message) throws JsonProcessingException { logger.info(String.format("#### -> Producing message -> %s", message)); - this.kafkaTemplate.send(TOPIC, message); + ObjectMapper objectMapper = new ObjectMapper(); + String serializedMessage = objectMapper.writeValueAsString(message); + this.kafkaTemplate.send(topic, serializedMessage); } } \ No newline at end of file diff --git a/journey_central/src/main/java/com/journey/central/service/OutgoingMessage.java b/journey_central/src/main/java/com/journey/central/service/OutgoingMessage.java new file mode 100644 index 0000000..cdd0f6c --- /dev/null +++ b/journey_central/src/main/java/com/journey/central/service/OutgoingMessage.java @@ -0,0 +1,64 @@ +package com.journey.central.service; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.journey.central.service.Entity; + +import java.io.IOException; +import java.util.List; + +public class OutgoingMessage { + @JsonProperty("intent") + private String intent; + @JsonProperty("entities") + @JsonSerialize(using = EntitySerializer.class) + private List entities; + + public OutgoingMessage(String intent, List entities) { + this.intent = intent; + this.entities = entities; + } + + @Override + public String toString() { + return "OutgoingMessage{" + + "intent='" + intent + '\'' + + ", entities=" + entities + + '}'; + } + + public String getIntent() { + return intent; + } + + public void setIntent(String intent) { + this.intent = intent; + } + + public List getEntities() { + return entities; + } + + public void setEntities(List entities) { + this.entities = entities; + } +} + +class EntitySerializer extends JsonSerializer> { + + @Override + public void serialize(List value, JsonGenerator jgen, + SerializerProvider provider) throws IOException { + jgen.writeStartArray(); + for (Entity entity : value) { + jgen.writeStartObject(); + jgen.writeObjectField("entity", entity); + jgen.writeEndObject(); + } + jgen.writeEndArray(); + } + +} \ No newline at end of file diff --git a/journey_central/src/main/resources/application.properties b/journey_central/src/main/resources/application.properties index 08e7b69..c80b49f 100644 --- a/journey_central/src/main/resources/application.properties +++ b/journey_central/src/main/resources/application.properties @@ -1,16 +1,16 @@ -spring.datasource.url=jdbc:mysql://localhost:3306/dev_journey -spring.datasource.username=root +spring.datasource.url=jdbc:mysql://journey_central_database:3306/dev_journey +spring.datasource.username=Journey spring.datasource.password=test_password123 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect spring.jpa.generate-ddl=true spring.jpa.hibernate.ddl-auto = update spring.jpa.show-sql= true -spring.kafka.consumer.bootstrap-servers=localhost:9092 +spring.kafka.consumer.bootstrap-servers=kafka:9092 spring.kafka.consumer.group-id=group_id spring.kafka.consumer.auto-offset-reset=earliest spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer -spring.kafka.producer.bootstrap-servers=localhost:9092 \ No newline at end of file +spring.kafka.producer.bootstrap-servers=kafka:9092 \ No newline at end of file diff --git a/journey_central/src/test/java/com/journey/central/journey/BluetoothModuleTest.java b/journey_central/src/test/java/com/journey/central/journey/BluetoothModuleTest.java deleted file mode 100644 index cfca839..0000000 --- a/journey_central/src/test/java/com/journey/central/journey/BluetoothModuleTest.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.journey.central.journey; - -import com.intel.bluetooth.obex.OBEXClientSessionImpl; -import com.journey.central.journey.peripherals.bluetooth.BluetoothModule; -import org.junit.Test; - -import javax.bluetooth.RemoteDevice; -import javax.microedition.io.Connection; -import javax.microedition.io.StreamConnection; -import javax.sound.sampled.UnsupportedAudioFileException; -import java.io.IOException; -import java.util.concurrent.CountDownLatch; - -public class BluetoothModuleTest { - - private CountDownLatch lock = new CountDownLatch(1); - @Test - public void discoverDevices(){ - BluetoothModule bluetoothModule = new BluetoothModule(); - try { - bluetoothModule.searchBluetoothDevices(10000); - } catch (IOException | InterruptedException e) { - e.printStackTrace(); - } - } - - @Test - public void sendSpeechToDevice(){ - BluetoothModule bluetoothModule = new BluetoothModule(); - try { - /*bluetoothModule.searchBluetoothDevices(5); - RemoteDevice naga = bluetoothModule.getDevice("Naga"); - bluetoothModule.searchServices(naga); - StreamConnection connect = (StreamConnection) bluetoothModule.connect(naga);*/ - bluetoothModule.sendToDevice("Hello this is a test I'm doing"); - Thread.sleep(8000); - } catch (IOException | InterruptedException e) { - e.printStackTrace(); - } - } - @Test - public void fastFileTest(){ - BluetoothModule bluetoothModule = new BluetoothModule(); - try { - //StreamConnection connect = (StreamConnection) bluetoothModule.connect("EAE4B2DD71B5"); - bluetoothModule.playFile("output.mp3"); - Thread.sleep(10009); - } catch (IOException | UnsupportedAudioFileException | InterruptedException e) { - e.printStackTrace(); - } - - } -} diff --git a/journey_central/src/test/java/com/journey/central/journey/JourneyApplicationTests.java b/journey_central/src/test/java/com/journey/central/journey/JourneyApplicationTests.java deleted file mode 100644 index f4fb952..0000000 --- a/journey_central/src/test/java/com/journey/central/journey/JourneyApplicationTests.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.journey.central.journey; - -import org.junit.Assert; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class JourneyApplicationTests { - - -} diff --git a/journey_central/src/test/java/com/journey/central/journey/KafkaConsumerTest.java b/journey_central/src/test/java/com/journey/central/journey/KafkaConsumerTest.java new file mode 100644 index 0000000..0135785 --- /dev/null +++ b/journey_central/src/test/java/com/journey/central/journey/KafkaConsumerTest.java @@ -0,0 +1,71 @@ +package com.journey.central.journey; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.journey.central.service.Entity; +import com.journey.central.service.IncomingMessage; +import com.journey.central.service.KafkaConsumer; +import com.journey.central.service.OutgoingMessage; +import org.junit.Test; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class KafkaConsumerTest { + @Test + public void deserialize(){ + String incoming = "{\"msg\": \"message telegram sweta\", \"intent\": \"telegram_message\", \"entities\": [{\"name\": \"Sweta\", \"type\": \"person\", \"chat_id\": \"5223390622\"}]}"; + + ObjectMapper mapper = new ObjectMapper(); + IncomingMessage incomingMessage = null; + try { + incomingMessage = mapper.readValue(incoming, IncomingMessage.class); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + System.out.println(incomingMessage); + } + + @Test + public void serialize(){ + List entities = new ArrayList<>(); + Map attributes = new HashMap<>(); + attributes.put("chat_id", "5223390622"); + entities.add(new Entity("Sweta", "person", attributes)); + OutgoingMessage outgoingMessage = new OutgoingMessage("telegram_message", entities); + ObjectMapper objectMapper = new ObjectMapper(); + try { + String string = objectMapper.writeValueAsString(outgoingMessage); + System.out.println(string); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + @Test + public void receiveAndSend(){ + String incoming = "{\"msg\": \"message telegram sweta\", \"intent\": \"telegram_message\", \"entities\": [{\"name\": \"Sweta\", \"type\": \"person\", \"chat_id\": \"5223390622\"}]}"; + + ObjectMapper mapper = new ObjectMapper(); + IncomingMessage incomingMessage = null; + try { + incomingMessage = mapper.readValue(incoming, IncomingMessage.class); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + + OutgoingMessage outgoingMessage = new OutgoingMessage(incomingMessage.getIntent(), incomingMessage.getEntities()); + ObjectMapper objectMapper = new ObjectMapper(); + try { + String string = objectMapper.writeValueAsString(outgoingMessage); + System.out.println(string); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + + } +} diff --git a/journey_core_nlp/Dockerfile b/journey_core_nlp/Dockerfile index eb8c401..55499d4 100644 --- a/journey_core_nlp/Dockerfile +++ b/journey_core_nlp/Dockerfile @@ -1,80 +1,6 @@ -FROM ubuntu:20.04 - -WORKDIR /root/journey_nlp/ -ENV ES_PKG_NAME elasticsearch-7.8.0-linux-x86_64 -ENV ES_FOLDER_NAME elasticsearch-7.8.0 - -# System packages -RUN apt-get update && \ - apt-get -y install software-properties-common curl vim - -# Create directories -RUN mkdir /root/.pip /root/.mindmeld /data - -# Install python pip -RUN apt-get -y install python3-pip python-dev build-essential && \ - apt-get -y install software-properties-common - -# Install Java -RUN apt update -RUN apt-get update -RUN apt-get install -y wget -RUN apt install openjdk-8-jdk -y -RUN apt install python-is-python3 -y - -# Install duckling dependency -RUN apt-get -y update && \ - DEBIAN_FRONTEND="noninteractive" apt-get -y upgrade tzdata - -# set JAVA_HOME -ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64 - -# Install Elasticsearch. -RUN cd / && \ - wget https://artifacts.elastic.co/downloads/elasticsearch/$ES_PKG_NAME.tar.gz && \ - tar xvzf $ES_PKG_NAME.tar.gz && \ - rm -f $ES_PKG_NAME.tar.gz && \ - mv ./$ES_FOLDER_NAME ./elasticsearch - -RUN useradd -ms /bin/bash mindmeld -RUN mkdir /elasticsearch/log -RUN chown -R mindmeld:mindmeld /elasticsearch /data /var/log - - -# Add Config Files -#COPY ./${ES_FOLDER_NAME}/config/elasticsearch.yml /elasticsearch/config/elasticsearch.yml - -COPY requirements.txt requirements.txt - -RUN curl -o /tmp/get-pip.py https://bootstrap.pypa.io/get-pip.py -RUN python3 /tmp/get-pip.py - -# system as both 2 and 3, make 3 the default -RUN echo alias python=python3 >> /root/.bashrc -RUN echo alias pip=pip3 >> /root/.bashrc - -RUN pip3 install --upgrade pip -RUN pip3 install -U numpy -RUN pip3 install -U scipy -RUN pip3 install -U spacy mindmeld -RUN pip3 install click-log==0.1.8 - -RUN export LC_ALL=C.UTF-8 && \ - export LANG=C.UTF-8 && \ - pip3 install mindmeld --upgrade && \ - mindmeld num-parse --start - -# Expose ports. -# - 9200: HTTP -# - 9300: transport -EXPOSE 9200 -EXPOSE 9300 -EXPOSE 7151 -COPY . . - -ENTRYPOINT export LC_ALL=C.UTF-8 && \ - export LANG=C.UTF-8 && \ - pip3 install mindmeld --upgrade && \ - python3 . build && \ - python3 . run & su mindmeld -c "ES_JAVA_OPTS='-Xms1g -Xmx1g' /elasticsearch/bin/elasticsearch" - +FROM python:3.10 +WORKDIR /app +COPY requirements.txt ./ +RUN pip install -r requirements.txt +COPY ./ /app +CMD ["python","-u","main.py"] \ No newline at end of file diff --git a/journey_core_nlp/__init__.py b/journey_core_nlp/__init__.py deleted file mode 100644 index b76a422..0000000 --- a/journey_core_nlp/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# -*- coding: utf-8 -*- -"""This module contains a template MindMeld application""" -from root import app - -import handlers \ No newline at end of file diff --git a/journey_core_nlp/__main__.py b/journey_core_nlp/__main__.py deleted file mode 100644 index 0248194..0000000 --- a/journey_core_nlp/__main__.py +++ /dev/null @@ -1,8 +0,0 @@ -# -*- coding: utf-8 -*- -"""This module defines the command line interface for this app. Use -`python -m ` to see available commands. -""" - -if __name__ == '__main__': - from root import app - app.cli() diff --git a/journey_core_nlp/config.py b/journey_core_nlp/config.py deleted file mode 100644 index 51e9643..0000000 --- a/journey_core_nlp/config.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- coding: utf-8 -*- -"""This module contains a template MindMeld app configuration""" - -# The namespace of the application. Used to prevent collisions in supporting services across -# applications. If not set here, the app's enclosing directory name is used. -# APP_NAMESPACE = 'app-name' - -# Dictionaries for the various NLP classifier configurations - -# An example decision tree model for intent classification -INTENT_CLASSIFIER_CONFIG = { - 'model_type': 'text', - 'model_settings': { - 'classifier_type': 'dtree' - }, - 'param_selection': { - 'type': 'k-fold', - 'k': 10, - 'grid': { - 'max_features': ['log2', 'sqrt', 0.01, 0.1] - }, - }, - "features": { - "exact": {}, - } -} - - -LANGUAGE_CONFIG = { - 'language': 'en', - 'locale': 'en_US' -} - -""" -# Fill in the other model configurations if necessary -# DOMAIN_CLASSIFIER_CONFIG = {} -# ENTITY_RECOGNIZER_CONFIG = {} -# ROLE_CLASSIFIER_CONFIG = {} -""" - -# A example configuration for the parser -""" -# *** Note: these are place holder entity types *** -PARSER_CONFIG = { - 'grandparent': { - 'parent': {}, - 'child': {'max_instances': 1} - }, - 'parent': { - 'child': {'max_instances': 1} - } -} -""" diff --git a/journey_core_nlp/custom_features.py b/journey_core_nlp/custom_features.py deleted file mode 100644 index f8cf182..0000000 --- a/journey_core_nlp/custom_features.py +++ /dev/null @@ -1,39 +0,0 @@ -from mindmeld.models.helpers import register_query_feature, register_entity_feature - - -@register_query_feature(feature_name='average-token-length') -def extract_average_token_length(**args): - """ - Example query feature that gets the average length of normalized tokens in the query - - Returns: - (function) A feature extraction function that takes a query and - returns the average normalized token length - """ - def _extractor(query, resources): - tokens = query.normalized_tokens - average_token_length = sum([len(t) for t in tokens]) / len(tokens) - return {'average_token_length': average_token_length} - - return _extractor - - -@register_entity_feature(feature_name='entity-span-start') -def extract_entity_span_start(**args): - """ - Example entity feature that gets the start span for each entity - - Returns: - (function) A feature extraction function that returns the start span of the entity - """ - def _extractor(example, resources): - query, entities, entity_index = example - features = {} - - current_entity = entities[entity_index] - current_entity_token_start = current_entity.token_span.start - - features['entity_span_start'] = current_entity_token_start - return features - - return _extractor diff --git a/journey_core_nlp/data/programming_languages.json b/journey_core_nlp/data/programming_languages.json deleted file mode 100644 index db470b4..0000000 --- a/journey_core_nlp/data/programming_languages.json +++ /dev/null @@ -1,43 +0,0 @@ -[ - { - "id": "1", - "language_name": "Java", - "Context": ["Backend", "Bukkit","Spigot", "Web", "Fullstack"] - - }, - { - "id": "2", - "language_name": "Javascript", - "Context": ["Backend", "Frontend", "Web", "Fullstack"] - }, - { - "id": "3", - "language_name": "Node", - "Context": ["Backend", "Web", "Fullstack"] - }, - { - "id": "4", - "language_name": "express", - "Context": ["Backend", "Web", "Fullstack"] - }, - { - "id": "5", - "language_name": "react", - "Context": ["frontend", "Web", "Fullstack"] - }, - { - "id": "6", - "language_name": "Python", - "Context": ["Backend", "Web", "Fullstack"] - }, - { - "id": "7", - "language_name": "Django", - "Context": ["Backend", "Web", "Fullstack"] - }, - { - "id": "8", - "language_name": "Ruby on Rails", - "Context": ["Backend", "Web", "Fullstack"] - } -] \ No newline at end of file diff --git a/journey_core_nlp/domains/common/greet/train.txt b/journey_core_nlp/domains/common/greet/train.txt deleted file mode 100644 index 42c44d2..0000000 --- a/journey_core_nlp/domains/common/greet/train.txt +++ /dev/null @@ -1,5 +0,0 @@ -Hello -Hi -What's up? -Yo -Howdy \ No newline at end of file diff --git a/journey_core_nlp/domains/food/order_pizza/train.txt b/journey_core_nlp/domains/food/order_pizza/train.txt deleted file mode 100644 index 65570cc..0000000 --- a/journey_core_nlp/domains/food/order_pizza/train.txt +++ /dev/null @@ -1,4 +0,0 @@ -Order a pizza from Melt -Order a pizza -I want to eat a pizza -Give me a pizza \ No newline at end of file diff --git a/journey_core_nlp/domains/media/play_song/train.txt b/journey_core_nlp/domains/media/play_song/train.txt deleted file mode 100644 index 211199e..0000000 --- a/journey_core_nlp/domains/media/play_song/train.txt +++ /dev/null @@ -1,1029 +0,0 @@ -Play song {All star|song_name} -Play song {Summer paradise|song_name} -Play {All star|song_name} -Play {rock or bust|song_name} -Play {Summer paradise|song_name} -Play {Hey princess|song_name} -Play song {I need your love|song_name} -Play {All star|song_name} -Play {rock or bust|song_name} -Play {Summer paradise|song_name} -Play {Hey princess|song_name} -Play song {rock or bust|song_name} -Play song {Summer paradise|song_name} -Play song {Hey princess|song_name} -Play song {All star|song_name} -Play song {Welcome to the black parade|song_name} -Play {This is my biome|song_name} -Play song {power of love|song_name} -Play song {Above And Beyond (The Call Of Love)|song_name} -play {Above And Beyond (The Call Of Love)|song_name} -Play song {AC/DC Current|song_name} -play {AC/DC Current|song_name} -Play song {Acadian Driftwood|song_name} -play {Acadian Driftwood|song_name} -Play song {Ac-Cent-Tchu-Ate The Positive|song_name} -play {Ac-Cent-Tchu-Ate The Positive|song_name} -Play song {Accident In Paradise An|song_name} -play {Accident In Paradise An|song_name} -Play song {Ace Of Spades|song_name} -play {Ace Of Spades|song_name} -Play song {Acid Tracks|song_name} -play {Acid Tracks|song_name} -Play song {Acperience|song_name} -play {Acperience|song_name} -Play song {Acquiesce|song_name} -play {Acquiesce|song_name} -Play song {Across The Universe|song_name} -play {Across The Universe|song_name} -Play song {Act Naturally|song_name} -play {Act Naturally|song_name} -Play song {Action Satisfaction|song_name} -play {Action Satisfaction|song_name} -Play song {Addicted To Love|song_name} -play {Addicted To Love|song_name} -Play song {Adventures Of Grandmaster Flash On The Wheels Of Steel The|song_name} -play {Adventures Of Grandmaster Flash On The Wheels Of Steel The|song_name} -Play song {Africa|song_name} -play {Africa|song_name} -Play song {Afro Puffs|song_name} -play {Afro Puffs|song_name} -Play song {After Hours|song_name} -play {After Hours|song_name} -Play song {After Hours|song_name} -play {After Hours|song_name} -Play song {After Midnight|song_name} -play {After Midnight|song_name} -Play song {After The Gold Rush|song_name} -play {After The Gold Rush|song_name} -Play song {After You've Gone|song_name} -play {After You've Gone|song_name} -Play song {Aftermath|song_name} -play {Aftermath|song_name} -Play song {Against All Odds (Take A Look At Me Now)|song_name} -play {Against All Odds (Take A Look At Me Now)|song_name} -Play song {Agua De Beber (Water To Drink)|song_name} -play {Agua De Beber (Water To Drink)|song_name} -Play song {Ah! Sweet Mystery Of Life|song_name} -play {Ah! Sweet Mystery Of Life|song_name} -Play song {Ahead By A Century|song_name} -play {Ahead By A Century|song_name} -Play song {Ain't It A Shame (aka Ain't That A Shame)|song_name} -play {Ain't It A Shame (aka Ain't That A Shame)|song_name} -Play song {Ain't Life A Brook|song_name} -play {Ain't Life A Brook|song_name} -Play song {Ain't Misbehavin'|song_name} -play {Ain't Misbehavin'|song_name} -Play song {Ain't No Cure For Love|song_name} -play {Ain't No Cure For Love|song_name} -Play song {Ain't No Half Steppin'|song_name} -play {Ain't No Half Steppin'|song_name} -Play song {Ain't No Mountain High Enough|song_name} -play {Ain't No Mountain High Enough|song_name} -Play song {Ain't No Sunshine (When She's Gone)|song_name} -play {Ain't No Sunshine (When She's Gone)|song_name} -Play song {Ain't Nobody|song_name} -play {Ain't Nobody|song_name} -Play song {Ain't Nobody Here But Us Chickens|song_name} -play {Ain't Nobody Here But Us Chickens|song_name} -Play song {Ain't Nothin' Goin On But The Rent|song_name} -play {Ain't Nothin' Goin On But The Rent|song_name} -Play song {Ain't She Sweet|song_name} -play {Ain't She Sweet|song_name} -Play song {Ain't Talkin' 'Bout Love|song_name} -play {Ain't Talkin' 'Bout Love|song_name} -Play song {Ain't That Just Like A Woman|song_name} -play {Ain't That Just Like A Woman|song_name} -Play song {Ain't That Lonely Yet|song_name} -play {Ain't That Lonely Yet|song_name} -Play song {Ain't That Peculiar|song_name} -play {Ain't That Peculiar|song_name} -Play song {Ain't Too Proud To Beg|song_name} -play {Ain't Too Proud To Beg|song_name} -Play song {Ain't We Got Fun|song_name} -play {Ain't We Got Fun|song_name} -Play song {Air|song_name} -play {Air|song_name} -Play song {Air Mail Special|song_name} -play {Air Mail Special|song_name} -Play song {Al Capone|song_name} -play {Al Capone|song_name} -Play song {Alabama|song_name} -play {Alabama|song_name} -Play song {Alabama Jubilee|song_name} -play {Alabama Jubilee|song_name} -Play song {Alabama Song (Whisky Bar)|song_name} -play {Alabama Song (Whisky Bar)|song_name} -Play song {Alabamy Bound|song_name} -play {Alabamy Bound|song_name} -Play song {Albert Flasher|song_name} -play {Albert Flasher|song_name} -Play song {Alberta's Child|song_name} -play {Alberta's Child|song_name} -Play song {Alexander's Ragtime Band|song_name} -play {Alexander's Ragtime Band|song_name} -Play song {Alfie|song_name} -play {Alfie|song_name} -Play song {Alice Blue Gown|song_name} -play {Alice Blue Gown|song_name} -Play song {Alice's Restaurant Massacree|song_name} -play {Alice's Restaurant Massacree|song_name} -Play song {Alifib/Alfie|song_name} -play {Alifib/Alfie|song_name} -Play song {Alison|song_name} -play {Alison|song_name} -Play song {Alive|song_name} -play {Alive|song_name} -Play song {All Alone|song_name} -play {All Alone|song_name} -Play song {All Along The Watchtower|song_name} -play {All Along The Watchtower|song_name} -Play song {All Apologies|song_name} -play {All Apologies|song_name} -Play song {All Around The World|song_name} -play {All Around The World|song_name} -Play song {All Around The World|song_name} -play {All Around The World|song_name} -Play song {All Around The World (aka Grits Ain't Groceries)|song_name} -play {All Around The World (aka Grits Ain't Groceries)|song_name} -Play song {All Blues|song_name} -play {All Blues|song_name} -Play song {All By Myself|song_name} -play {All By Myself|song_name} -Play song {All Day And All Of The Night|song_name} -play {All Day And All Of The Night|song_name} -Play song {All I Do Is Dream Of You|song_name} -play {All I Do Is Dream Of You|song_name} -Play song {All I Have Is Love|song_name} -play {All I Have Is Love|song_name} -Play song {All I Have To Do Is Dream|song_name} -play {All I Have To Do Is Dream|song_name} -Play song {All I Really Want To Do|song_name} -play {All I Really Want To Do|song_name} -Play song {All I Wanna Do|song_name} -play {All I Wanna Do|song_name} -Play song {All I Want|song_name} -play {All I Want|song_name} -Play song {All My Ex's Live In Texas|song_name} -play {All My Ex's Live In Texas|song_name} -Play song {All Night Long|song_name} -play {All Night Long|song_name} -Play song {All Of Me|song_name} -play {All Of Me|song_name} -Play song {All Or Nothing At All|song_name} -play {All Or Nothing At All|song_name} -Play song {All Right Now|song_name} -play {All Right Now|song_name} -Play song {All Shook Up|song_name} -play {All Shook Up|song_name} -Play song {All That I Can Say|song_name} -play {All That I Can Say|song_name} -Play song {All The Best|song_name} -play {All The Best|song_name} -Play song {All The Gold In California|song_name} -play {All The Gold In California|song_name} -Play song {All The Lovely Ladies|song_name} -play {All The Lovely Ladies|song_name} -Play song {All The Things You Are|song_name} -play {All The Things You Are|song_name} -Play song {All The Way|song_name} -play {All The Way|song_name} -Play song {All The Young Dudes|song_name} -play {All The Young Dudes|song_name} -Play song {All Things Dull And Ugly|song_name} -play {All Things Dull And Ugly|song_name} -Play song {All Tomorrow's Parties|song_name} -play {All Tomorrow's Parties|song_name} -Play song {All You Need Is Love|song_name} -play {All You Need Is Love|song_name} -Play song {All Your Love|song_name} -play {All Your Love|song_name} -Play song {All Your Love (I Miss Loving)|song_name} -play {All Your Love (I Miss Loving)|song_name} -Play song {Almost Independence Day|song_name} -play {Almost Independence Day|song_name} -Play song {Almost Persuaded|song_name} -play {Almost Persuaded|song_name} -Play song {Alone And Forsaken|song_name} -play {Alone And Forsaken|song_name} -Play song {Along Came Betty|song_name} -play {Along Came Betty|song_name} -Play song {Alright|song_name} -play {Alright|song_name} -Play song {Alright Okay You Win|song_name} -play {Alright Okay You Win|song_name} -Play song {Always|song_name} -play {Always|song_name} -Play song {Always Be My Baby|song_name} -play {Always Be My Baby|song_name} -Play song {Always Late (With Your Kisses)|song_name} -play {Always Late (With Your Kisses)|song_name} -Play song {Always Look On The Bright Side Of Life|song_name} -play {Always Look On The Bright Side Of Life|song_name} -Play song {Always On My Mind|song_name} -play {Always On My Mind|song_name} -Play song {Always Say Goodbye|song_name} -play {Always Say Goodbye|song_name} -Play song {Always Something There To Remind Me|song_name} -play {Always Something There To Remind Me|song_name} -Play song {Am I Blue?|song_name} -play {Am I Blue?|song_name} -Play song {Amanda|song_name} -play {Amanda|song_name} -Play song {Amarillo By Morning|song_name} -play {Amarillo By Morning|song_name} -Play song {Amelia|song_name} -play {Amelia|song_name} -Play song {America|song_name} -play {America|song_name} -Play song {America Without Tears|song_name} -play {America Without Tears|song_name} -Play song {American Girl|song_name} -play {American Girl|song_name} -Play song {American In Paris An|song_name} -play {American In Paris An|song_name} -Play song {American Pie|song_name} -play {American Pie|song_name} -Play song {American Tune|song_name} -play {American Tune|song_name} -Play song {American Woman|song_name} -play {American Woman|song_name} -Play song {AmeriKKKa's Most Wanted|song_name} -play {AmeriKKKa's Most Wanted|song_name} -Play song {Among My Souvenirs|song_name} -play {Among My Souvenirs|song_name} -Play song {Amsterdam|song_name} -play {Amsterdam|song_name} -Play song {Anarchy In The UK|song_name} -play {Anarchy In The UK|song_name} -Play song {Anasthasia|song_name} -play {Anasthasia|song_name} -Play song {Anchorage|song_name} -play {Anchorage|song_name} -Play song {Anchors Aweigh|song_name} -play {Anchors Aweigh|song_name} -Play song {And All That Jazz|song_name} -play {And All That Jazz|song_name} -Play song {And Her Tears Flowed Like Wine|song_name} -play {And Her Tears Flowed Like Wine|song_name} -Play song {And If Venice Is Sinking|song_name} -play {And If Venice Is Sinking|song_name} -Play song {And The Angels Swing|song_name} -play {And The Angels Swing|song_name} -Play song {And The Band Played Waltzing Matilda|song_name} -play {And The Band Played Waltzing Matilda|song_name} -Play song {And The Green Grass Grew All Around|song_name} -play {And The Green Grass Grew All Around|song_name} -Play song {And When I Die|song_name} -play {And When I Die|song_name} -Play song {Androgynous|song_name} -play {Androgynous|song_name} -Play song {Angel|song_name} -play {Angel|song_name} -Play song {Angel Eyes|song_name} -play {Angel Eyes|song_name} -Play song {Angel Flying Too Close To The Ground|song_name} -play {Angel Flying Too Close To The Ground|song_name} -Play song {Angel From Montgomery|song_name} -play {Angel From Montgomery|song_name} -Play song {Angel In Manhattan|song_name} -play {Angel In Manhattan|song_name} -Play song {Angel Of Death The|song_name} -play {Angel Of Death The|song_name} -Play song {Angel Of The Morning|song_name} -play {Angel Of The Morning|song_name} -Play song {Angels|song_name} -play {Angels|song_name} -Play song {Angi|song_name} -play {Angi|song_name} -Play song {Angie|song_name} -play {Angie|song_name} -Play song {Anniversary Song The|song_name} -play {Anniversary Song The|song_name} -Play song {Anniversary Song The|song_name} -play {Anniversary Song The|song_name} -Play song {Another Brick In The Wall (Part 2)|song_name} -play {Another Brick In The Wall (Part 2)|song_name} -Play song {Another One Bites The Dust|song_name} -play {Another One Bites The Dust|song_name} -Play song {Another Sad Love Song|song_name} -play {Another Sad Love Song|song_name} -Play song {Another Saturday Night|song_name} -play {Another Saturday Night|song_name} -Play song {Another World|song_name} -play {Another World|song_name} -Play song {Answer Me My Love|song_name} -play {Answer Me My Love|song_name} -Play song {Answering Machine|song_name} -play {Answering Machine|song_name} -Play song {Anthem|song_name} -play {Anthem|song_name} -Play song {Anthropology|song_name} -play {Anthropology|song_name} -Play song {Any Old Time|song_name} -play {Any Old Time|song_name} -Play song {Any Old Time|song_name} -play {Any Old Time|song_name} -Play song {Any Place I Hang My Hat Is Home|song_name} -play {Any Place I Hang My Hat Is Home|song_name} -Play song {Any Time|song_name} -play {Any Time|song_name} -Play song {Anyone Who Had A Heart|song_name} -play {Anyone Who Had A Heart|song_name} -Play song {Anything Goes|song_name} -play {Anything Goes|song_name} -Play song {Anything You Can Do|song_name} -play {Anything You Can Do|song_name} -Play song {Apache|song_name} -play {Apache|song_name} -Play song {Apache|song_name} -play {Apache|song_name} -Play song {Appletree|song_name} -play {Appletree|song_name} -Play song {April Fools|song_name} -play {April Fools|song_name} -Play song {April In Paris|song_name} -play {April In Paris|song_name} -Play song {April Kisses|song_name} -play {April Kisses|song_name} -Play song {April Showers|song_name} -play {April Showers|song_name} -Play song {Aqua Boogie (A Psychoalphadisco-betabioaquadoloop)|song_name} -play {Aqua Boogie (A Psychoalphadisco-betabioaquadoloop)|song_name} -Play song {Aquarius|song_name} -play {Aquarius|song_name} -Play song {Aquemini|song_name} -play {Aquemini|song_name} -Play song {Are You Gonna Go My Way?|song_name} -play {Are You Gonna Go My Way?|song_name} -Play song {Are You Lonesome Tonight?|song_name} -play {Are You Lonesome Tonight?|song_name} -Play song {Arkansas Road Blues|song_name} -play {Arkansas Road Blues|song_name} -Play song {Around The World|song_name} -play {Around The World|song_name} -Play song {Artistry In Rhythm|song_name} -play {Artistry In Rhythm|song_name} -Play song {As Soon As I Find My Shoes I'm Gone|song_name} -play {As Soon As I Find My Shoes I'm Gone|song_name} -Play song {As Tears Go By|song_name} -play {As Tears Go By|song_name} -Play song {As The World Turns|song_name} -play {As The World Turns|song_name} -Play song {As The Years Go Passing By|song_name} -play {As The Years Go Passing By|song_name} -Play song {As Time Goes By|song_name} -play {As Time Goes By|song_name} -Play song {Ascension (Don't Ever Wonder)|song_name} -play {Ascension (Don't Ever Wonder)|song_name} -Play song {Ask The Angels|song_name} -play {Ask The Angels|song_name} -Play song {Astral Weeks|song_name} -play {Astral Weeks|song_name} -Play song {Astronomy Domine|song_name} -play {Astronomy Domine|song_name} -Play song {At Last|song_name} -play {At Last|song_name} -Play song {At Les|song_name} -play {At Les|song_name} -Play song {At Seventeen|song_name} -play {At Seventeen|song_name} -Play song {At The Chime Of A City Clock|song_name} -play {At The Chime Of A City Clock|song_name} -Play song {A-Tisket A-Tasket|song_name} -play {A-Tisket A-Tasket|song_name} -Play song {Atomic Dog|song_name} -play {Atomic Dog|song_name} -Play song {Atomic Moog|song_name} -play {Atomic Moog|song_name} -Play song {Attica Blues|song_name} -play {Attica Blues|song_name} -Play song {Auctioneer The|song_name} -play {Auctioneer The|song_name} -Play song {Auf Wiedersehn|song_name} -play {Auf Wiedersehn|song_name} -Play song {Aural Prostitution|song_name} -play {Aural Prostitution|song_name} -Play song {Autobahn|song_name} -play {Autobahn|song_name} -Play song {Autumn In New York|song_name} -play {Autumn In New York|song_name} -Play song {Autumn Leaves|song_name} -play {Autumn Leaves|song_name} -Play song {Avalon|song_name} -play {Avalon|song_name} -Play song {Avalon|song_name} -play {Avalon|song_name} -Play song {Avalon Blues|song_name} -play {Avalon Blues|song_name} -Play song {Avon|song_name} -play {Avon|song_name} -Play song {Award Tour|song_name} -play {Award Tour|song_name} -Play song {Away Down In The Alley Blues|song_name} -play {Away Down In The Alley Blues|song_name} -Play song {Ay-te Te Fee|song_name} -play {Ay-te Te Fee|song_name} -Play song {B (Song Title)|song_name} -play {B (Song Title)|song_name} -Play song {Baba O'Riley|song_name} -play {Baba O'Riley|song_name} -Play song {Babbitt And The Bromide The|song_name} -play {Babbitt And The Bromide The|song_name} -Play song {Babe I'm Gonna Leave You|song_name} -play {Babe I'm Gonna Leave You|song_name} -Play song {Baby Face|song_name} -play {Baby Face|song_name} -Play song {Baby Got Back|song_name} -play {Baby Got Back|song_name} -Play song {Baby I Need Your Loving|song_name} -play {Baby I Need Your Loving|song_name} -Play song {Baby I'm Yours|song_name} -play {Baby I'm Yours|song_name} -Play song {Baby Love|song_name} -play {Baby Love|song_name} -Play song {Baby Luv|song_name} -play {Baby Luv|song_name} -Play song {Baby Please Don't Go|song_name} -play {Baby Please Don't Go|song_name} -Play song {Baby Wants To Ride|song_name} -play {Baby Wants To Ride|song_name} -Play song {Baby What You Want Me To Do|song_name} -play {Baby What You Want Me To Do|song_name} -Play song {Baby It's Cold Outside|song_name} -play {Baby It's Cold Outside|song_name} -Play song {Baby Let Me Follow You Down|song_name} -play {Baby Let Me Follow You Down|song_name} -Play song {Baby Scratch My Back|song_name} -play {Baby Scratch My Back|song_name} -Play song {Babylon|song_name} -play {Babylon|song_name} -Play song {Babylon Burning|song_name} -play {Babylon Burning|song_name} -Play song {Babylon Falling|song_name} -play {Babylon Falling|song_name} -Play song {Back At The Chicken Shack|song_name} -play {Back At The Chicken Shack|song_name} -Play song {Back Door Man|song_name} -play {Back Door Man|song_name} -Play song {Back For Good|song_name} -play {Back For Good|song_name} -Play song {Back Home Again In Indiana|song_name} -play {Back Home Again In Indiana|song_name} -Play song {Back In Black|song_name} -play {Back In Black|song_name} -Play song {Back In The Saddle Again|song_name} -play {Back In The Saddle Again|song_name} -Play song {Back In The U. S. S. R.|song_name} -play {Back In The U. S. S. R.|song_name} -Play song {Back On The Chain Gang|song_name} -play {Back On The Chain Gang|song_name} -Play song {Back Stabbers The|song_name} -play {Back Stabbers The|song_name} -Play song {Back That Azz Up|song_name} -play {Back That Azz Up|song_name} -Play song {Back To Life|song_name} -play {Back To Life|song_name} -Play song {Backwater Blues|song_name} -play {Backwater Blues|song_name} -Play song {Bad Boys|song_name} -play {Bad Boys|song_name} -Play song {Bad Girls|song_name} -play {Bad Girls|song_name} -Play song {Bad Luck Blues|song_name} -play {Bad Luck Blues|song_name} -Play song {Bad Moon Rising|song_name} -play {Bad Moon Rising|song_name} -Play song {Bad To The Bone|song_name} -play {Bad To The Bone|song_name} -Play song {Bad Bad Leroy Brown|song_name} -play {Bad Bad Leroy Brown|song_name} -Play song {Bali Ha'i|song_name} -play {Bali Ha'i|song_name} -Play song {Ball And Chain|song_name} -play {Ball And Chain|song_name} -Play song {Ballad Of A Teenage Queen|song_name} -play {Ballad Of A Teenage Queen|song_name} -Play song {Ballad Of A Thin Man|song_name} -play {Ballad Of A Thin Man|song_name} -Play song {Ballad Of Bonnie And Clyde The|song_name} -play {Ballad Of Bonnie And Clyde The|song_name} -Play song {Ballad Of Davy Crockett The|song_name} -play {Ballad Of Davy Crockett The|song_name} -Play song {Ballad Of El Goodo The|song_name} -play {Ballad Of El Goodo The|song_name} -Play song {Ballad Of Hollis Brown The|song_name} -play {Ballad Of Hollis Brown The|song_name} -Play song {Ballad Of Ira Hayes The|song_name} -play {Ballad Of Ira Hayes The|song_name} -play song {All star|song_name} -play song {rock or bust|song_name} -play song {Summer paradise|song_name} -play song {Hey princess|song_name} -play song {rock or bust|song_name} -play song {Summer paradise|song_name} -play song {Hey princess|song_name} -play song {All star|song_name} -play song {Welcome to the black parade|song_name} -play song {This is my biome|song_name} -play song {power of love|song_name} -play song {Above And Beyond (The Call Of Love)|song_name} -play song {Above And Beyond (The Call Of Love)|song_name} -play song {AC/DC Current|song_name} -play song {AC/DC Current|song_name} -play song {Acadian Driftwood|song_name} -play song {Acadian Driftwood|song_name} -play song {Ac-Cent-Tchu-Ate The Positive|song_name} -play song {Ac-Cent-Tchu-Ate The Positive|song_name} -play song {Accident In Paradise An|song_name} -play song {Accident In Paradise An|song_name} -play song {Ace Of Spades|song_name} -play song {Ace Of Spades|song_name} -play song {Acid Tracks|song_name} -play song {Acid Tracks|song_name} -play song {Acperience|song_name} -play song {Acperience|song_name} -play song {Acquiesce|song_name} -play song {Acquiesce|song_name} -play song {Across The Universe|song_name} -play song {Across The Universe|song_name} -play song {Act Naturally|song_name} -play song {Act Naturally|song_name} -play song {Action Satisfaction|song_name} -play song {Action Satisfaction|song_name} -play song {Addicted To Love|song_name} -play song {Addicted To Love|song_name} -play song {Adventures Of Grandmaster Flash On The Wheels Of Steel The|song_name} -play song {Adventures Of Grandmaster Flash On The Wheels Of Steel The|song_name} -play song {Africa|song_name} -play song {Africa|song_name} -play song {Afro Puffs|song_name} -play song {Afro Puffs|song_name} -play song {After Hours|song_name} -play song {After Hours|song_name} -play song {After Hours|song_name} -play song {After Hours|song_name} -play song {After Midnight|song_name} -play song {After Midnight|song_name} -play song {After The Gold Rush|song_name} -play song {After The Gold Rush|song_name} -play song {After You've Gone|song_name} -play song {After You've Gone|song_name} -play song {Aftermath|song_name} -play song {Aftermath|song_name} -play song {Against All Odds (Take A Look At Me Now)|song_name} -play song {Against All Odds (Take A Look At Me Now)|song_name} -play song {Agua De Beber (Water To Drink)|song_name} -play song {Agua De Beber (Water To Drink)|song_name} -play song {Ah! Sweet Mystery Of Life|song_name} -play song {Ah! Sweet Mystery Of Life|song_name} -play song {Ahead By A Century|song_name} -play song {Ahead By A Century|song_name} -play song {Ain't It A Shame (aka Ain't That A Shame)|song_name} -play song {Ain't It A Shame (aka Ain't That A Shame)|song_name} -play song {Ain't Life A Brook|song_name} -play song {Ain't Life A Brook|song_name} -play song {Ain't Misbehavin'|song_name} -play song {Ain't Misbehavin'|song_name} -play song {Ain't No Cure For Love|song_name} -play song {Ain't No Cure For Love|song_name} -play song {Ain't No Half Steppin'|song_name} -play song {Ain't No Half Steppin'|song_name} -play song {Ain't No Mountain High Enough|song_name} -play song {Ain't No Mountain High Enough|song_name} -play song {Ain't No Sunshine (When She's Gone)|song_name} -play song {Ain't No Sunshine (When She's Gone)|song_name} -play song {Ain't Nobody|song_name} -play song {Ain't Nobody|song_name} -play song {Ain't Nobody Here But Us Chickens|song_name} -play song {Ain't Nobody Here But Us Chickens|song_name} -play song {Ain't Nothin' Goin On But The Rent|song_name} -play song {Ain't Nothin' Goin On But The Rent|song_name} -play song {Ain't She Sweet|song_name} -play song {Ain't She Sweet|song_name} -play song {Ain't Talkin' 'Bout Love|song_name} -play song {Ain't Talkin' 'Bout Love|song_name} -play song {Ain't That Just Like A Woman|song_name} -play song {Ain't That Just Like A Woman|song_name} -play song {Ain't That Lonely Yet|song_name} -play song {Ain't That Lonely Yet|song_name} -play song {Ain't That Peculiar|song_name} -play song {Ain't That Peculiar|song_name} -play song {Ain't Too Proud To Beg|song_name} -play song {Ain't Too Proud To Beg|song_name} -play song {Ain't We Got Fun|song_name} -play song {Ain't We Got Fun|song_name} -play song {Air|song_name} -play song {Air|song_name} -play song {Air Mail Special|song_name} -play song {Air Mail Special|song_name} -play song {Al Capone|song_name} -play song {Al Capone|song_name} -play song {Alabama|song_name} -play song {Alabama|song_name} -play song {Alabama Jubilee|song_name} -play song {Alabama Jubilee|song_name} -play song {Alabama Song (Whisky Bar)|song_name} -play song {Alabama Song (Whisky Bar)|song_name} -play song {Alabamy Bound|song_name} -play song {Alabamy Bound|song_name} -play song {Albert Flasher|song_name} -play song {Albert Flasher|song_name} -play song {Alberta's Child|song_name} -play song {Alberta's Child|song_name} -play song {Alexander's Ragtime Band|song_name} -play song {Alexander's Ragtime Band|song_name} -play song {Alfie|song_name} -play song {Alfie|song_name} -play song {Alice Blue Gown|song_name} -play song {Alice Blue Gown|song_name} -play song {Alice's Restaurant Massacree|song_name} -play song {Alice's Restaurant Massacree|song_name} -play song {Alifib/Alfie|song_name} -play song {Alifib/Alfie|song_name} -play song {Alison|song_name} -play song {Alison|song_name} -play song {Alive|song_name} -play song {Alive|song_name} -play song {All Alone|song_name} -play song {All Alone|song_name} -play song {All Along The Watchtower|song_name} -play song {All Along The Watchtower|song_name} -play song {All Apologies|song_name} -play song {All Apologies|song_name} -play song {All Around The World|song_name} -play song {All Around The World|song_name} -play song {All Around The World|song_name} -play song {All Around The World|song_name} -play song {All Around The World (aka Grits Ain't Groceries)|song_name} -play song {All Around The World (aka Grits Ain't Groceries)|song_name} -play song {All Blues|song_name} -play song {All Blues|song_name} -play song {All By Myself|song_name} -play song {All By Myself|song_name} -play song {All Day And All Of The Night|song_name} -play song {All Day And All Of The Night|song_name} -play song {All I Do Is Dream Of You|song_name} -play song {All I Do Is Dream Of You|song_name} -play song {All I Have Is Love|song_name} -play song {All I Have Is Love|song_name} -play song {All I Have To Do Is Dream|song_name} -play song {All I Have To Do Is Dream|song_name} -play song {All I Really Want To Do|song_name} -play song {All I Really Want To Do|song_name} -play song {All I Wanna Do|song_name} -play song {All I Wanna Do|song_name} -play song {All I Want|song_name} -play song {All I Want|song_name} -play song {All My Ex's Live In Texas|song_name} -play song {All My Ex's Live In Texas|song_name} -play song {All Night Long|song_name} -play song {All Night Long|song_name} -play song {All Of Me|song_name} -play song {All Of Me|song_name} -play song {All Or Nothing At All|song_name} -play song {All Or Nothing At All|song_name} -play song {All Right Now|song_name} -play song {All Right Now|song_name} -play song {All Shook Up|song_name} -play song {All Shook Up|song_name} -play song {All That I Can Say|song_name} -play song {All That I Can Say|song_name} -play song {All The Best|song_name} -play song {All The Best|song_name} -play song {All The Gold In California|song_name} -play song {All The Gold In California|song_name} -play song {All The Lovely Ladies|song_name} -play song {All The Lovely Ladies|song_name} -play song {All The Things You Are|song_name} -play song {All The Things You Are|song_name} -play song {All The Way|song_name} -play song {All The Way|song_name} -play song {All The Young Dudes|song_name} -play song {All The Young Dudes|song_name} -play song {All Things Dull And Ugly|song_name} -play song {All Things Dull And Ugly|song_name} -play song {All Tomorrow's Parties|song_name} -play song {All Tomorrow's Parties|song_name} -play song {All You Need Is Love|song_name} -play song {All You Need Is Love|song_name} -play song {All Your Love|song_name} -play song {All Your Love|song_name} -play song {All Your Love (I Miss Loving)|song_name} -play song {All Your Love (I Miss Loving)|song_name} -play song {Almost Independence Day|song_name} -play song {Almost Independence Day|song_name} -play song {Almost Persuaded|song_name} -play song {Almost Persuaded|song_name} -play song {Alone And Forsaken|song_name} -play song {Alone And Forsaken|song_name} -play song {Along Came Betty|song_name} -play song {Along Came Betty|song_name} -play song {Alright|song_name} -play song {Alright|song_name} -play song {Alright Okay You Win|song_name} -play song {Alright Okay You Win|song_name} -play song {Always|song_name} -play song {Always|song_name} -play song {Always Be My Baby|song_name} -play song {Always Be My Baby|song_name} -play song {Always Late (With Your Kisses)|song_name} -play song {Always Late (With Your Kisses)|song_name} -play song {Always Look On The Bright Side Of Life|song_name} -play song {Always Look On The Bright Side Of Life|song_name} -play song {Always On My Mind|song_name} -play song {Always On My Mind|song_name} -play song {Always Say Goodbye|song_name} -play song {Always Say Goodbye|song_name} -play song {Always Something There To Remind Me|song_name} -play song {Always Something There To Remind Me|song_name} -play song {Am I Blue?|song_name} -play song {Am I Blue?|song_name} -play song {Amanda|song_name} -play song {Amanda|song_name} -play song {Amarillo By Morning|song_name} -play song {Amarillo By Morning|song_name} -play song {Amelia|song_name} -play song {Amelia|song_name} -play song {America|song_name} -play song {America|song_name} -play song {America Without Tears|song_name} -play song {America Without Tears|song_name} -play song {American Girl|song_name} -play song {American Girl|song_name} -play song {American In Paris An|song_name} -play song {American In Paris An|song_name} -play song {American Pie|song_name} -play song {American Pie|song_name} -play song {American Tune|song_name} -play song {American Tune|song_name} -play song {American Woman|song_name} -play song {American Woman|song_name} -play song {AmeriKKKa's Most Wanted|song_name} -play song {AmeriKKKa's Most Wanted|song_name} -play song {Among My Souvenirs|song_name} -play song {Among My Souvenirs|song_name} -play song {Amsterdam|song_name} -play song {Amsterdam|song_name} -play song {Anarchy In The UK|song_name} -play song {Anarchy In The UK|song_name} -play song {Anasthasia|song_name} -play song {Anasthasia|song_name} -play song {Anchorage|song_name} -play song {Anchorage|song_name} -play song {Anchors Aweigh|song_name} -play song {Anchors Aweigh|song_name} -play song {And All That Jazz|song_name} -play song {And All That Jazz|song_name} -play song {And Her Tears Flowed Like Wine|song_name} -play song {And Her Tears Flowed Like Wine|song_name} -play song {And If Venice Is Sinking|song_name} -play song {And If Venice Is Sinking|song_name} -play song {And The Angels Swing|song_name} -play song {And The Angels Swing|song_name} -play song {And The Band play songed Waltzing Matilda|song_name} -play song {And The Band play songed Waltzing Matilda|song_name} -play song {And The Green Grass Grew All Around|song_name} -play song {And The Green Grass Grew All Around|song_name} -play song {And When I Die|song_name} -play song {And When I Die|song_name} -play song {Androgynous|song_name} -play song {Androgynous|song_name} -play song {Angel|song_name} -play song {Angel|song_name} -play song {Angel Eyes|song_name} -play song {Angel Eyes|song_name} -play song {Angel Flying Too Close To The Ground|song_name} -play song {Angel Flying Too Close To The Ground|song_name} -play song {Angel From Montgomery|song_name} -play song {Angel From Montgomery|song_name} -play song {Angel In Manhattan|song_name} -play song {Angel In Manhattan|song_name} -play song {Angel Of Death The|song_name} -play song {Angel Of Death The|song_name} -play song {Angel Of The Morning|song_name} -play song {Angel Of The Morning|song_name} -play song {Angels|song_name} -play song {Angels|song_name} -play song {Angi|song_name} -play song {Angi|song_name} -play song {Angie|song_name} -play song {Angie|song_name} -play song {Anniversary Song The|song_name} -play song {Anniversary Song The|song_name} -play song {Anniversary Song The|song_name} -play song {Anniversary Song The|song_name} -play song {Another Brick In The Wall (Part 2)|song_name} -play song {Another Brick In The Wall (Part 2)|song_name} -play song {Another One Bites The Dust|song_name} -play song {Another One Bites The Dust|song_name} -play song {Another Sad Love Song|song_name} -play song {Another Sad Love Song|song_name} -play song {Another Saturday Night|song_name} -play song {Another Saturday Night|song_name} -play song {Another World|song_name} -play song {Another World|song_name} -play song {Answer Me My Love|song_name} -play song {Answer Me My Love|song_name} -play song {Answering Machine|song_name} -play song {Answering Machine|song_name} -play song {Anthem|song_name} -play song {Anthem|song_name} -play song {Anthropology|song_name} -play song {Anthropology|song_name} -play song {Any Old Time|song_name} -play song {Any Old Time|song_name} -play song {Any Old Time|song_name} -play song {Any Old Time|song_name} -play song {Any Place I Hang My Hat Is Home|song_name} -play song {Any Place I Hang My Hat Is Home|song_name} -play song {Any Time|song_name} -play song {Any Time|song_name} -play song {Anyone Who Had A Heart|song_name} -play song {Anyone Who Had A Heart|song_name} -play song {Anything Goes|song_name} -play song {Anything Goes|song_name} -play song {Anything You Can Do|song_name} -play song {Anything You Can Do|song_name} -play song {Apache|song_name} -play song {Apache|song_name} -play song {Apache|song_name} -play song {Apache|song_name} -play song {Appletree|song_name} -play song {Appletree|song_name} -play song {April Fools|song_name} -play song {April Fools|song_name} -play song {April In Paris|song_name} -play song {April In Paris|song_name} -play song {April Kisses|song_name} -play song {April Kisses|song_name} -play song {April Showers|song_name} -play song {April Showers|song_name} -play song {Aqua Boogie (A Psychoalphadisco-betabioaquadoloop)|song_name} -play song {Aqua Boogie (A Psychoalphadisco-betabioaquadoloop)|song_name} -play song {Aquarius|song_name} -play song {Aquarius|song_name} -play song {Aquemini|song_name} -play song {Aquemini|song_name} -play song {Are You Gonna Go My Way?|song_name} -play song {Are You Gonna Go My Way?|song_name} -play song {Are You Lonesome Tonight?|song_name} -play song {Are You Lonesome Tonight?|song_name} -play song {Arkansas Road Blues|song_name} -play song {Arkansas Road Blues|song_name} -play song {Around The World|song_name} -play song {Around The World|song_name} -play song {Artistry In Rhythm|song_name} -play song {Artistry In Rhythm|song_name} -play song {As Soon As I Find My Shoes I'm Gone|song_name} -play song {As Soon As I Find My Shoes I'm Gone|song_name} -play song {As Tears Go By|song_name} -play song {As Tears Go By|song_name} -play song {As The World Turns|song_name} -play song {As The World Turns|song_name} -play song {As The Years Go Passing By|song_name} -play song {As The Years Go Passing By|song_name} -play song {As Time Goes By|song_name} -play song {As Time Goes By|song_name} -play song {Ascension (Don't Ever Wonder)|song_name} -play song {Ascension (Don't Ever Wonder)|song_name} -play song {Ask The Angels|song_name} -play song {Ask The Angels|song_name} -play song {Astral Weeks|song_name} -play song {Astral Weeks|song_name} -play song {Astronomy Domine|song_name} -play song {Astronomy Domine|song_name} -play song {At Last|song_name} -play song {At Last|song_name} -play song {At Les|song_name} -play song {At Les|song_name} -play song {At Seventeen|song_name} -play song {At Seventeen|song_name} -play song {At The Chime Of A City Clock|song_name} -play song {At The Chime Of A City Clock|song_name} -play song {A-Tisket A-Tasket|song_name} -play song {A-Tisket A-Tasket|song_name} -play song {Atomic Dog|song_name} -play song {Atomic Dog|song_name} -play song {Atomic Moog|song_name} -play song {Atomic Moog|song_name} -play song {Attica Blues|song_name} -play song {Attica Blues|song_name} -play song {Auctioneer The|song_name} -play song {Auctioneer The|song_name} -play song {Auf Wiedersehn|song_name} -play song {Auf Wiedersehn|song_name} -play song {Aural Prostitution|song_name} -play song {Aural Prostitution|song_name} -play song {Autobahn|song_name} -play song {Autobahn|song_name} -play song {Autumn In New York|song_name} -play song {Autumn In New York|song_name} -play song {Autumn Leaves|song_name} -play song {Autumn Leaves|song_name} -play song {Avalon|song_name} -play song {Avalon|song_name} -play song {Avalon|song_name} -play song {Avalon|song_name} -play song {Avalon Blues|song_name} -play song {Avalon Blues|song_name} -play song {Avon|song_name} -play song {Avon|song_name} -play song {Award Tour|song_name} -play song {Award Tour|song_name} -play song {Away Down In The Alley Blues|song_name} -play song {Away Down In The Alley Blues|song_name} -play song {Ay-te Te Fee|song_name} -play song {Ay-te Te Fee|song_name} -play song {B (Song Title)|song_name} -play song {B (Song Title)|song_name} -play song {Baba O'Riley|song_name} -play song {Baba O'Riley|song_name} -play song {Babbitt And The Bromide The|song_name} -play song {Babbitt And The Bromide The|song_name} -play song {Babe I'm Gonna Leave You|song_name} -play song {Babe I'm Gonna Leave You|song_name} -play song {Baby Face|song_name} -play song {Baby Face|song_name} -play song {Baby Got Back|song_name} -play song {Baby Got Back|song_name} -play song {Baby I Need Your Loving|song_name} -play song {Baby I Need Your Loving|song_name} -play song {Baby I'm Yours|song_name} -play song {Baby I'm Yours|song_name} -play song {Baby Love|song_name} -play song {Baby Love|song_name} -play song {Baby Luv|song_name} -play song {Baby Luv|song_name} -play song {Baby Please Don't Go|song_name} -play song {Baby Please Don't Go|song_name} -play song {Baby Wants To Ride|song_name} -play song {Baby Wants To Ride|song_name} -play song {Baby What You Want Me To Do|song_name} -play song {Baby What You Want Me To Do|song_name} -play song {Baby It's Cold Outside|song_name} -play song {Baby It's Cold Outside|song_name} -play song {Baby Let Me Follow You Down|song_name} -play song {Baby Let Me Follow You Down|song_name} -play song {Baby Scratch My Back|song_name} -play song {Baby Scratch My Back|song_name} -play song {Babylon|song_name} -play song {Babylon|song_name} -play song {Babylon Burning|song_name} -play song {Babylon Burning|song_name} -play song {Babylon Falling|song_name} -play song {Babylon Falling|song_name} -play song {Back At The Chicken Shack|song_name} -play song {Back At The Chicken Shack|song_name} -play song {Back Door Man|song_name} -play song {Back Door Man|song_name} -play song {Back For Good|song_name} -play song {Back For Good|song_name} -play song {Back Home Again In Indiana|song_name} -play song {Back Home Again In Indiana|song_name} -play song {Back In Black|song_name} -play song {Back In Black|song_name} -play song {Back In The Saddle Again|song_name} -play song {Back In The Saddle Again|song_name} -play song {Back In The U. S. S. R.|song_name} -play song {Back In The U. S. S. R.|song_name} -play song {Back On The Chain Gang|song_name} -play song {Back On The Chain Gang|song_name} -play song {Back Stabbers The|song_name} -play song {Back Stabbers The|song_name} -play song {Back That Azz Up|song_name} -play song {Back That Azz Up|song_name} -play song {Back To Life|song_name} -play song {Back To Life|song_name} -play song {Backwater Blues|song_name} -play song {Backwater Blues|song_name} -play song {Bad Boys|song_name} -play song {Bad Boys|song_name} -play song {Bad Girls|song_name} -play song {Bad Girls|song_name} -play song {Bad Luck Blues|song_name} -play song {Bad Luck Blues|song_name} -play song {Bad Moon Rising|song_name} -play song {Bad Moon Rising|song_name} -play song {Bad To The Bone|song_name} -play song {Bad To The Bone|song_name} -play song {Bad Bad Leroy Brown|song_name} -play song {Bad Bad Leroy Brown|song_name} -play song {Bali Ha'i|song_name} -play song {Bali Ha'i|song_name} -play song {Ball And Chain|song_name} -play song {Ball And Chain|song_name} -play song {Ballad Of A Teenage Queen|song_name} -play song {Ballad Of A Teenage Queen|song_name} -play song {Ballad Of A Thin Man|song_name} -play song {Ballad Of A Thin Man|song_name} -play song {Ballad Of Bonnie And Clyde The|song_name} -play song {Ballad Of Bonnie And Clyde The|song_name} -play song {Ballad Of Davy Crockett The|song_name} -play song {Ballad Of Davy Crockett The|song_name} -play song {Ballad Of El Goodo The|song_name} -play song {Ballad Of El Goodo The|song_name} -play song {Ballad Of Hollis Brown The|song_name} -play song {Ballad Of Hollis Brown The|song_name} -play song {Ballad Of Ira Hayes The|song_name} -play song {Ballad Of Ira Hayes The|song_name} \ No newline at end of file diff --git a/journey_core_nlp/domains/media/play_video/train.txt b/journey_core_nlp/domains/media/play_video/train.txt deleted file mode 100644 index c503039..0000000 --- a/journey_core_nlp/domains/media/play_video/train.txt +++ /dev/null @@ -1,511 +0,0 @@ -Play {All star|song_name} with video -Play {rock or bust|song_name} with video -Play {Summer paradise|song_name} with video -Play {Hey princess|song_name} with video -Play video {rock or bust|song_name} -Play video {Summer paradise|song_name} -Play video {Hey princess|song_name} -Play video {All star|song_name} -Play video {Welcome to the black parade|song_name} -Play {This is my biome|song_name} with video -Play video {power of love|song_name} -Play video {Above And Beyond (The Call Of Love)|song_name} -play {Above And Beyond (The Call Of Love)|song_name} with video -Play video {AC/DC Current|song_name} -play {AC/DC Current|song_name} with video -Play video {Acadian Driftwood|song_name} -play {Acadian Driftwood|song_name} with video -Play video {Ac-Cent-Tchu-Ate The Positive|song_name} -play {Ac-Cent-Tchu-Ate The Positive|song_name} with video -Play video {Accident In Paradise An|song_name} -play {Accident In Paradise An|song_name} with video -Play video {Ace Of Spades|song_name} -play {Ace Of Spades|song_name} with video -Play video {Acid Tracks|song_name} -play {Acid Tracks|song_name} with video -Play video {Acperience|song_name} -play {Acperience|song_name} with video -Play video {Acquiesce|song_name} -play {Acquiesce|song_name} with video -Play video {Across The Universe|song_name} -play {Across The Universe|song_name} with video -Play video {Act Naturally|song_name} -play {Act Naturally|song_name} with video -Play video {Action Satisfaction|song_name} -play {Action Satisfaction|song_name} with video -Play video {Addicted To Love|song_name} -play {Addicted To Love|song_name} with video -Play video {Adventures Of Grandmaster Flash On The Wheels Of Steel The|song_name} -play {Adventures Of Grandmaster Flash On The Wheels Of Steel The|song_name} with video -Play video {Africa|song_name} -play {Africa|song_name} with video -Play video {Afro Puffs|song_name} -play {Afro Puffs|song_name} with video -Play video {After Hours|song_name} -play {After Hours|song_name} with video -Play video {After Hours|song_name} -play {After Hours|song_name} with video -Play video {After Midnight|song_name} -play {After Midnight|song_name} with video -Play video {After The Gold Rush|song_name} -play {After The Gold Rush|song_name} with video -Play video {After You've Gone|song_name} -play {After You've Gone|song_name} with video -Play video {Aftermath|song_name} -play {Aftermath|song_name} with video -Play video {Against All Odds (Take A Look At Me Now)|song_name} -play {Against All Odds (Take A Look At Me Now)|song_name} with video -Play video {Agua De Beber (Water To Drink)|song_name} -play {Agua De Beber (Water To Drink)|song_name} with video -Play video {Ah! Sweet Mystery Of Life|song_name} -play {Ah! Sweet Mystery Of Life|song_name} with video -Play video {Ahead By A Century|song_name} -play {Ahead By A Century|song_name} with video -Play video {Ain't It A Shame (aka Ain't That A Shame)|song_name} -play {Ain't It A Shame (aka Ain't That A Shame)|song_name} with video -Play video {Ain't Life A Brook|song_name} -play {Ain't Life A Brook|song_name} with video -Play video {Ain't Misbehavin'|song_name} -play {Ain't Misbehavin'|song_name} with video -Play video {Ain't No Cure For Love|song_name} -play {Ain't No Cure For Love|song_name} with video -Play video {Ain't No Half Steppin'|song_name} -play {Ain't No Half Steppin'|song_name} with video -Play video {Ain't No Mountain High Enough|song_name} -play {Ain't No Mountain High Enough|song_name} with video -Play video {Ain't No Sunshine (When She's Gone)|song_name} -play {Ain't No Sunshine (When She's Gone)|song_name} with video -Play video {Ain't Nobody|song_name} -play {Ain't Nobody|song_name} with video -Play video {Ain't Nobody Here But Us Chickens|song_name} -play {Ain't Nobody Here But Us Chickens|song_name} with video -Play video {Ain't Nothin' Goin On But The Rent|song_name} -play {Ain't Nothin' Goin On But The Rent|song_name} with video -Play video {Ain't She Sweet|song_name} -play {Ain't She Sweet|song_name} with video -Play video {Ain't Talkin' 'Bout Love|song_name} -play {Ain't Talkin' 'Bout Love|song_name} with video -Play video {Ain't That Just Like A Woman|song_name} -play {Ain't That Just Like A Woman|song_name} with video -Play video {Ain't That Lonely Yet|song_name} -play {Ain't That Lonely Yet|song_name} with video -Play video {Ain't That Peculiar|song_name} -play {Ain't That Peculiar|song_name} with video -Play video {Ain't Too Proud To Beg|song_name} -play {Ain't Too Proud To Beg|song_name} with video -Play video {Ain't We Got Fun|song_name} -play {Ain't We Got Fun|song_name} with video -Play video {Air|song_name} -play {Air|song_name} with video -Play video {Air Mail Special|song_name} -play {Air Mail Special|song_name} with video -Play video {Al Capone|song_name} -play {Al Capone|song_name} with video -Play video {Alabama|song_name} -play {Alabama|song_name} with video -Play video {Alabama Jubilee|song_name} -play {Alabama Jubilee|song_name} with video -Play video {Alabama Song (Whisky Bar)|song_name} -play {Alabama Song (Whisky Bar)|song_name} with video -Play video {Alabamy Bound|song_name} -play {Alabamy Bound|song_name} with video -Play video {Albert Flasher|song_name} -play {Albert Flasher|song_name} with video -Play video {Alberta's Child|song_name} -play {Alberta's Child|song_name} with video -Play video {Alexander's Ragtime Band|song_name} -play {Alexander's Ragtime Band|song_name} with video -Play video {Alfie|song_name} -play {Alfie|song_name} with video -Play video {Alice Blue Gown|song_name} -play {Alice Blue Gown|song_name} with video -Play video {Alice's Restaurant Massacree|song_name} -play {Alice's Restaurant Massacree|song_name} with video -Play video {Alifib/Alfie|song_name} -play {Alifib/Alfie|song_name} with video -Play video {Alison|song_name} -play {Alison|song_name} with video -Play video {Alive|song_name} -play {Alive|song_name} with video -Play video {All Alone|song_name} -play {All Alone|song_name} with video -Play video {All Along The Watchtower|song_name} -play {All Along The Watchtower|song_name} with video -Play video {All Apologies|song_name} -play {All Apologies|song_name} with video -Play video {All Around The World|song_name} -play {All Around The World|song_name} with video -Play video {All Around The World|song_name} -play {All Around The World|song_name} with video -Play video {All Around The World (aka Grits Ain't Groceries)|song_name} -play {All Around The World (aka Grits Ain't Groceries)|song_name} with video -Play video {All Blues|song_name} -play {All Blues|song_name} with video -Play video {All By Myself|song_name} -play {All By Myself|song_name} with video -Play video {All Day And All Of The Night|song_name} -play {All Day And All Of The Night|song_name} with video -Play video {All I Do Is Dream Of You|song_name} -play {All I Do Is Dream Of You|song_name} with video -Play video {All I Have Is Love|song_name} -play {All I Have Is Love|song_name} with video -Play video {All I Have To Do Is Dream|song_name} -play {All I Have To Do Is Dream|song_name} with video -Play video {All I Really Want To Do|song_name} -play {All I Really Want To Do|song_name} with video -Play video {All I Wanna Do|song_name} -play {All I Wanna Do|song_name} with video -Play video {All I Want|song_name} -play {All I Want|song_name} with video -Play video {All My Ex's Live In Texas|song_name} -play {All My Ex's Live In Texas|song_name} with video -Play video {All Night Long|song_name} -play {All Night Long|song_name} with video -Play video {All Of Me|song_name} -play {All Of Me|song_name} with video -Play video {All Or Nothing At All|song_name} -play {All Or Nothing At All|song_name} with video -Play video {All Right Now|song_name} -play {All Right Now|song_name} with video -Play video {All Shook Up|song_name} -play {All Shook Up|song_name} with video -Play video {All That I Can Say|song_name} -play {All That I Can Say|song_name} with video -Play video {All The Best|song_name} -play {All The Best|song_name} with video -Play video {All The Gold In California|song_name} -play {All The Gold In California|song_name} with video -Play video {All The Lovely Ladies|song_name} -play {All The Lovely Ladies|song_name} with video -Play video {All The Things You Are|song_name} -play {All The Things You Are|song_name} with video -Play video {All The Way|song_name} -play {All The Way|song_name} with video -Play video {All The Young Dudes|song_name} -play {All The Young Dudes|song_name} with video -Play video {All Things Dull And Ugly|song_name} -play {All Things Dull And Ugly|song_name} with video -Play video {All Tomorrow's Parties|song_name} -play {All Tomorrow's Parties|song_name} with video -Play video {All You Need Is Love|song_name} -play {All You Need Is Love|song_name} with video -Play video {All Your Love|song_name} -play {All Your Love|song_name} with video -Play video {All Your Love (I Miss Loving)|song_name} -play {All Your Love (I Miss Loving)|song_name} with video -Play video {Almost Independence Day|song_name} -play {Almost Independence Day|song_name} with video -Play video {Almost Persuaded|song_name} -play {Almost Persuaded|song_name} with video -Play video {Alone And Forsaken|song_name} -play {Alone And Forsaken|song_name} with video -Play video {Along Came Betty|song_name} -play {Along Came Betty|song_name} with video -Play video {Alright|song_name} -play {Alright|song_name} with video -Play video {Alright Okay You Win|song_name} -play {Alright Okay You Win|song_name} with video -Play video {Always|song_name} -play {Always|song_name} with video -Play video {Always Be My Baby|song_name} -play {Always Be My Baby|song_name} with video -Play video {Always Late (With Your Kisses)|song_name} -play {Always Late (With Your Kisses)|song_name} with video -Play video {Always Look On The Bright Side Of Life|song_name} -play {Always Look On The Bright Side Of Life|song_name} with video -Play video {Always On My Mind|song_name} -play {Always On My Mind|song_name} with video -Play video {Always Say Goodbye|song_name} -play {Always Say Goodbye|song_name} with video -Play video {Always Something There To Remind Me|song_name} -play {Always Something There To Remind Me|song_name} with video -Play video {Am I Blue?|song_name} -play {Am I Blue?|song_name} with video -Play video {Amanda|song_name} -play {Amanda|song_name} with video -Play video {Amarillo By Morning|song_name} -play {Amarillo By Morning|song_name} with video -Play video {Amelia|song_name} -play {Amelia|song_name} with video -Play video {America|song_name} -play {America|song_name} with video -Play video {America Without Tears|song_name} -play {America Without Tears|song_name} with video -Play video {American Girl|song_name} -play {American Girl|song_name} with video -Play video {American In Paris An|song_name} -play {American In Paris An|song_name} with video -Play video {American Pie|song_name} -play {American Pie|song_name} with video -Play video {American Tune|song_name} -play {American Tune|song_name} with video -Play video {American Woman|song_name} -play {American Woman|song_name} with video -Play video {AmeriKKKa's Most Wanted|song_name} -play {AmeriKKKa's Most Wanted|song_name} with video -Play video {Among My Souvenirs|song_name} -play {Among My Souvenirs|song_name} with video -Play video {Amsterdam|song_name} -play {Amsterdam|song_name} with video -Play video {Anarchy In The UK|song_name} -play {Anarchy In The UK|song_name} with video -Play video {Anasthasia|song_name} -play {Anasthasia|song_name} with video -Play video {Anchorage|song_name} -play {Anchorage|song_name} with video -Play video {Anchors Aweigh|song_name} -play {Anchors Aweigh|song_name} with video -Play video {And All That Jazz|song_name} -play {And All That Jazz|song_name} with video -Play video {And Her Tears Flowed Like Wine|song_name} -play {And Her Tears Flowed Like Wine|song_name} with video -Play video {And If Venice Is Sinking|song_name} -play {And If Venice Is Sinking|song_name} with video -Play video {And The Angels Swing|song_name} -play {And The Angels Swing|song_name} with video -Play video {And The Band Played Waltzing Matilda|song_name} -play {And The Band Played Waltzing Matilda|song_name} with video -Play video {And The Green Grass Grew All Around|song_name} -play {And The Green Grass Grew All Around|song_name} with video -Play video {And When I Die|song_name} -play {And When I Die|song_name} with video -Play video {Androgynous|song_name} -play {Androgynous|song_name} with video -Play video {Angel|song_name} -play {Angel|song_name} with video -Play video {Angel Eyes|song_name} -play {Angel Eyes|song_name} with video -Play video {Angel Flying Too Close To The Ground|song_name} -play {Angel Flying Too Close To The Ground|song_name} with video -Play video {Angel From Montgomery|song_name} -play {Angel From Montgomery|song_name} with video -Play video {Angel In Manhattan|song_name} -play {Angel In Manhattan|song_name} with video -Play video {Angel Of Death The|song_name} -play {Angel Of Death The|song_name} with video -Play video {Angel Of The Morning|song_name} -play {Angel Of The Morning|song_name} with video -Play video {Angels|song_name} -play {Angels|song_name} with video -Play video {Angi|song_name} -play {Angi|song_name} with video -Play video {Angie|song_name} -play {Angie|song_name} with video -Play video {Anniversary Song The|song_name} -play {Anniversary Song The|song_name} with video -Play video {Anniversary Song The|song_name} -play {Anniversary Song The|song_name} with video -Play video {Another Brick In The Wall (Part 2)|song_name} -play {Another Brick In The Wall (Part 2)|song_name} with video -Play video {Another One Bites The Dust|song_name} -play {Another One Bites The Dust|song_name} with video -Play video {Another Sad Love Song|song_name} -play {Another Sad Love Song|song_name} with video -Play video {Another Saturday Night|song_name} -play {Another Saturday Night|song_name} with video -Play video {Another World|song_name} -play {Another World|song_name} with video -Play video {Answer Me My Love|song_name} -play {Answer Me My Love|song_name} with video -Play video {Answering Machine|song_name} -play {Answering Machine|song_name} with video -Play video {Anthem|song_name} -play {Anthem|song_name} with video -Play video {Anthropology|song_name} -play {Anthropology|song_name} with video -Play video {Any Old Time|song_name} -play {Any Old Time|song_name} with video -Play video {Any Old Time|song_name} -play {Any Old Time|song_name} with video -Play video {Any Place I Hang My Hat Is Home|song_name} -play {Any Place I Hang My Hat Is Home|song_name} with video -Play video {Any Time|song_name} -play {Any Time|song_name} with video -Play video {Anyone Who Had A Heart|song_name} -play {Anyone Who Had A Heart|song_name} with video -Play video {Anything Goes|song_name} -play {Anything Goes|song_name} with video -Play video {Anything You Can Do|song_name} -play {Anything You Can Do|song_name} with video -Play video {Apache|song_name} -play {Apache|song_name} with video -Play video {Apache|song_name} -play {Apache|song_name} with video -Play video {Appletree|song_name} -play {Appletree|song_name} with video -Play video {April Fools|song_name} -play {April Fools|song_name} with video -Play video {April In Paris|song_name} -play {April In Paris|song_name} with video -Play video {April Kisses|song_name} -play {April Kisses|song_name} with video -Play video {April Showers|song_name} -play {April Showers|song_name} with video -Play video {Aqua Boogie (A Psychoalphadisco-betabioaquadoloop)|song_name} -play {Aqua Boogie (A Psychoalphadisco-betabioaquadoloop)|song_name} with video -Play video {Aquarius|song_name} -play {Aquarius|song_name} with video -Play video {Aquemini|song_name} -play {Aquemini|song_name} with video -Play video {Are You Gonna Go My Way?|song_name} -play {Are You Gonna Go My Way?|song_name} with video -Play video {Are You Lonesome Tonight?|song_name} -play {Are You Lonesome Tonight?|song_name} with video -Play video {Arkansas Road Blues|song_name} -play {Arkansas Road Blues|song_name} with video -Play video {Around The World|song_name} -play {Around The World|song_name} with video -Play video {Artistry In Rhythm|song_name} -play {Artistry In Rhythm|song_name} with video -Play video {As Soon As I Find My Shoes I'm Gone|song_name} -play {As Soon As I Find My Shoes I'm Gone|song_name} with video -Play video {As Tears Go By|song_name} -play {As Tears Go By|song_name} with video -Play video {As The World Turns|song_name} -play {As The World Turns|song_name} with video -Play video {As The Years Go Passing By|song_name} -play {As The Years Go Passing By|song_name} with video -Play video {As Time Goes By|song_name} -play {As Time Goes By|song_name} with video -Play video {Ascension (Don't Ever Wonder)|song_name} -play {Ascension (Don't Ever Wonder)|song_name} with video -Play video {Ask The Angels|song_name} -play {Ask The Angels|song_name} with video -Play video {Astral Weeks|song_name} -play {Astral Weeks|song_name} with video -Play video {Astronomy Domine|song_name} -play {Astronomy Domine|song_name} with video -Play video {At Last|song_name} -play {At Last|song_name} with video -Play video {At Les|song_name} -play {At Les|song_name} with video -Play video {At Seventeen|song_name} -play {At Seventeen|song_name} with video -Play video {At The Chime Of A City Clock|song_name} -play {At The Chime Of A City Clock|song_name} with video -Play video {A-Tisket A-Tasket|song_name} -play {A-Tisket A-Tasket|song_name} with video -Play video {Atomic Dog|song_name} -play {Atomic Dog|song_name} with video -Play video {Atomic Moog|song_name} -play {Atomic Moog|song_name} with video -Play video {Attica Blues|song_name} -play {Attica Blues|song_name} with video -Play video {Auctioneer The|song_name} -play {Auctioneer The|song_name} with video -Play video {Auf Wiedersehn|song_name} -play {Auf Wiedersehn|song_name} with video -Play video {Aural Prostitution|song_name} -play {Aural Prostitution|song_name} with video -Play video {Autobahn|song_name} -play {Autobahn|song_name} with video -Play video {Autumn In New York|song_name} -play {Autumn In New York|song_name} with video -Play video {Autumn Leaves|song_name} -play {Autumn Leaves|song_name} with video -Play video {Avalon|song_name} -play {Avalon|song_name} with video -Play video {Avalon|song_name} -play {Avalon|song_name} with video -Play video {Avalon Blues|song_name} -play {Avalon Blues|song_name} with video -Play video {Avon|song_name} -play {Avon|song_name} with video -Play video {Award Tour|song_name} -play {Award Tour|song_name} with video -Play video {Away Down In The Alley Blues|song_name} -play {Away Down In The Alley Blues|song_name} with video -Play video {Ay-te Te Fee|song_name} -play {Ay-te Te Fee|song_name} with video -Play video {B (Song Title)|song_name} -play {B (Song Title)|song_name} with video -Play video {Baba O'Riley|song_name} -play {Baba O'Riley|song_name} with video -Play video {Babbitt And The Bromide The|song_name} -play {Babbitt And The Bromide The|song_name} with video -Play video {Babe I'm Gonna Leave You|song_name} -play {Babe I'm Gonna Leave You|song_name} with video -Play video {Baby Face|song_name} -play {Baby Face|song_name} with video -Play video {Baby Got Back|song_name} -play {Baby Got Back|song_name} with video -Play video {Baby I Need Your Loving|song_name} -play {Baby I Need Your Loving|song_name} with video -Play video {Baby I'm Yours|song_name} -play {Baby I'm Yours|song_name} with video -Play video {Baby Love|song_name} -play {Baby Love|song_name} with video -Play video {Baby Luv|song_name} -play {Baby Luv|song_name} with video -Play video {Baby Please Don't Go|song_name} -play {Baby Please Don't Go|song_name} with video -Play video {Baby Wants To Ride|song_name} -play {Baby Wants To Ride|song_name} with video -Play video {Baby What You Want Me To Do|song_name} -play {Baby What You Want Me To Do|song_name} with video -Play video {Baby It's Cold Outside|song_name} -play {Baby It's Cold Outside|song_name} with video -Play video {Baby Let Me Follow You Down|song_name} -play {Baby Let Me Follow You Down|song_name} with video -Play video {Baby Scratch My Back|song_name} -play {Baby Scratch My Back|song_name} with video -Play video {Babylon|song_name} -play {Babylon|song_name} with video -Play video {Babylon Burning|song_name} -play {Babylon Burning|song_name} with video -Play video {Babylon Falling|song_name} -play {Babylon Falling|song_name} with video -Play video {Back At The Chicken Shack|song_name} -play {Back At The Chicken Shack|song_name} with video -Play video {Back Door Man|song_name} -play {Back Door Man|song_name} with video -Play video {Back For Good|song_name} -play {Back For Good|song_name} with video -Play video {Back Home Again In Indiana|song_name} -play {Back Home Again In Indiana|song_name} with video -Play video {Back In Black|song_name} -play {Back In Black|song_name} with video -Play video {Back In The Saddle Again|song_name} -play {Back In The Saddle Again|song_name} with video -Play video {Back In The U. S. S. R.|song_name} -play {Back In The U. S. S. R.|song_name} with video -Play video {Back On The Chain Gang|song_name} -play {Back On The Chain Gang|song_name} with video -Play video {Back Stabbers The|song_name} -play {Back Stabbers The|song_name} with video -Play video {Back That Azz Up|song_name} -play {Back That Azz Up|song_name} with video -Play video {Back To Life|song_name} -play {Back To Life|song_name} with video -Play video {Backwater Blues|song_name} -play {Backwater Blues|song_name} with video -Play video {Bad Boys|song_name} -play {Bad Boys|song_name} with video -Play video {Bad Girls|song_name} -play {Bad Girls|song_name} with video -Play video {Bad Luck Blues|song_name} -play {Bad Luck Blues|song_name} with video -Play video {Bad Moon Rising|song_name} -play {Bad Moon Rising|song_name} with video -Play video {Bad To The Bone|song_name} -play {Bad To The Bone|song_name} with video -Play video {Bad Bad Leroy Brown|song_name} -play {Bad Bad Leroy Brown|song_name} with video -Play video {Bali Ha'i|song_name} -play {Bali Ha'i|song_name} with video -Play video {Ball And Chain|song_name} -play {Ball And Chain|song_name} with video -Play video {Ballad Of A Teenage Queen|song_name} -play {Ballad Of A Teenage Queen|song_name} with video -Play video {Ballad Of A Thin Man|song_name} -play {Ballad Of A Thin Man|song_name} with video -Play video {Ballad Of Bonnie And Clyde The|song_name} -play {Ballad Of Bonnie And Clyde The|song_name} with video -Play video {Ballad Of Davy Crockett The|song_name} -play {Ballad Of Davy Crockett The|song_name} with video -Play video {Ballad Of El Goodo The|song_name} -play {Ballad Of El Goodo The|song_name} with video -Play video {Ballad Of Hollis Brown The|song_name} -play {Ballad Of Hollis Brown The|song_name} with video -Play video {Ballad Of Ira Hayes The|song_name} -play {Ballad Of Ira Hayes The|song_name} with video \ No newline at end of file diff --git a/journey_core_nlp/domains/media/stop_song/train.txt b/journey_core_nlp/domains/media/stop_song/train.txt deleted file mode 100644 index 4583b5b..0000000 --- a/journey_core_nlp/domains/media/stop_song/train.txt +++ /dev/null @@ -1,2 +0,0 @@ -Stop song -stop playing diff --git a/journey_core_nlp/domains/programming/create_new_project/train.txt b/journey_core_nlp/domains/programming/create_new_project/train.txt deleted file mode 100644 index d5d47b6..0000000 --- a/journey_core_nlp/domains/programming/create_new_project/train.txt +++ /dev/null @@ -1,6 +0,0 @@ -Create a new project -Start a new project -Create a project with {express|programming_language} and {React|programming_language} -Start a project -New project -Create a new project in {Java|programming_language} diff --git a/journey_core_nlp/entities/programming_language/gazetteer.txt b/journey_core_nlp/entities/programming_language/gazetteer.txt deleted file mode 100644 index e69de29..0000000 diff --git a/journey_core_nlp/entities/song_name/gazetteer.txt b/journey_core_nlp/entities/song_name/gazetteer.txt deleted file mode 100644 index e69de29..0000000 diff --git a/journey_core_nlp/handlers.py b/journey_core_nlp/handlers.py deleted file mode 100644 index a3cff81..0000000 --- a/journey_core_nlp/handlers.py +++ /dev/null @@ -1,62 +0,0 @@ -from root import app - - -@app.handle(intent='greet') -def welcome(request, responder): - try: - responder.slots['name'] = request.context['name'] - prefix = 'Hello, {name}. ' - except KeyError: - prefix = 'Hello. ' - responder.reply(f'{prefix}What can I help you with today?') - responder.listen() - - -@app.handle(intent='play_song') -def play_song(request, responder): - song_name = next((e for e in request.entities if e['type'] == 'song_name'), None) - print(song_name['text']) - responder.reply('Playing song...'+song_name['text']) - responder.listen() - - -@app.handle(default=True) -def default(request, responder): - """This is a default handler.""" - responder.reply('Hello there!') - - -@app.handle(intent='create_new_project') -def create_new_project(request, responder): - active_programming_language = None - programming_language_entity = next((e for e in request.entities if e['type'] == 'programming_language'), None) - if programming_language_entity: - try: - programming_languages = app.question_answerer.get(index='programming_languages', - id=programming_language_entity['value']['id']) - except TypeError: - # failed to resolve entity - programming_languages = app.question_answerer.get(index='programming_languages', - store_name=programming_language_entity['text']) - try: - active_programming_language = programming_languages[0] - responder.frame['target_language'] = active_programming_language - except IndexError: - # No active store... continue - pass - elif 'target_language' in request.frame: - active_store = request.frame['target_language'] - - if active_programming_language: - responder.slots['language_name'] = active_programming_language['language_name'] - responder.slots['context'] = active_programming_language['context'] - responder.reply('Creating new {language_name} project...') - return - - responder.reply('In what language/framework would you like to create your project?') - responder.listen() - - -@app.handle(intent='exit') -def say_goodbye(request, responder): - responder.reply(['Bye', 'Goodbye', 'Have a nice day.']) diff --git a/journey_core_nlp/main.py b/journey_core_nlp/main.py new file mode 100644 index 0000000..baf9804 --- /dev/null +++ b/journey_core_nlp/main.py @@ -0,0 +1,67 @@ +import json +import logging +import threading + +from kafka import KafkaConsumer, KafkaProducer + + +class NLPResponse: + def __init__(self, intent, entities): + self.intent = intent + self.entities = entities + + +producer = KafkaProducer(bootstrap_servers='kafka:9092', value_serializer=lambda v: json.dumps(v).encode('utf-8')) + + +def add_knowledge_base(intent, entities): + if intent == "telegram_message": + for entity in entities: + if entity['name'] == "Sweta": + entity['chat_id'] = "5223390622" + return entities + + +def nlp_parser(message): + if message.value: + value = json.loads(message.value) + msg = value['msg'] + if msg == 'message telegram sweta': + # send kafka thing to journey_central + entities = [{"name": "Sweta", "type": "person"}] + intent = "telegram_message" + entities = add_knowledge_base(intent, entities) + producer.send('journey_central.incoming_messages', {"msg": msg, "intent": intent, "entities": entities}) + print("sent message to journey_central") + + +class Consumer(threading.Thread): + def __init__(self): + threading.Thread.__init__(self) + self.stop_event = threading.Event() + + def stop(self): + self.stop_event.set() + + def run(self): + consumer = KafkaConsumer(bootstrap_servers='kafka:9092', + auto_offset_reset='earliest', + consumer_timeout_ms=1000) + consumer.subscribe(['journey_nlp.incoming_messages']) + print("Starting to consume messages") + while not self.stop_event.is_set(): + for message in consumer: + nlp_parser(message) + if self.stop_event.is_set(): + break + + consumer.close() + + +logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', + level=logging.INFO) +print("creating consumer") +consumer = Consumer() +consumer.start() +consumer.join() +print("stopping consuming.") diff --git a/journey_core_nlp/requirements.txt b/journey_core_nlp/requirements.txt index fca1a01..34aa892 100644 --- a/journey_core_nlp/requirements.txt +++ b/journey_core_nlp/requirements.txt @@ -1,2 +1 @@ -scipy -mindmeld==4.2.9 \ No newline at end of file +kafka-python \ No newline at end of file diff --git a/journey_core_nlp/root.py b/journey_core_nlp/root.py deleted file mode 100644 index 627adeb..0000000 --- a/journey_core_nlp/root.py +++ /dev/null @@ -1,4 +0,0 @@ -from mindmeld import Application - -app = Application(__name__) -__all__ = ['app'] diff --git a/journey_core_nlp/start_mindmeld.sh b/journey_core_nlp/start_mindmeld.sh deleted file mode 100644 index 678c58b..0000000 --- a/journey_core_nlp/start_mindmeld.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -python . build && python . run \ No newline at end of file diff --git a/journey_speech/hey-journey.ppn b/journey_speech/hey-journey.ppn deleted file mode 100644 index ed033052e26a28b1c2ad2f187e423747a216add4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2812 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 eMiOmyE=m;{eaM&g$ZR8p diff --git a/init.sql b/mysql-init-files/init.sql similarity index 76% rename from init.sql rename to mysql-init-files/init.sql index a70e8c5..169daab 100644 --- a/init.sql +++ b/mysql-init-files/init.sql @@ -1,5 +1,5 @@ CREATE DATABASE IF NOT EXISTS dev_journey; CREATE DATABASE IF NOT EXISTS prod_journey; create user IF NOT EXISTS 'Journey'@'%' identified by 'test_password123'; -grant all on dev_journey.* to 'Journey'@'localhost'; -grant select, insert, delete, update on prod_journey.* to 'Journey'@'localhost'; \ No newline at end of file +grant all on dev_journey.* to 'Journey'@'%'; +grant select, insert, delete, update on prod_journey.* to 'Journey'@'%'; \ No newline at end of file