diff --git a/Dockerfile_standalone_channelRewards.Dockerfile b/Dockerfile_standalone_channelRewards.Dockerfile index 67dac01..b5d541e 100644 --- a/Dockerfile_standalone_channelRewards.Dockerfile +++ b/Dockerfile_standalone_channelRewards.Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.7.10-alpine3.12 +FROM python:3.10.0a7-alpine3.13 WORKDIR /Praxis diff --git a/event_logs/event_log_Module.py b/event_logs/event_log_Module.py index a661ff4..adf1f42 100644 --- a/event_logs/event_log_Module.py +++ b/event_logs/event_log_Module.py @@ -110,9 +110,18 @@ class Event_Log_Module(): def get_recent_logs(self, howFarBack): newList = [] - for x in range(howFarBack): - recentLog = [-x] - newList.append(recentLog) + try: + for x in range(howFarBack): + recentLog = self.Event_Log_List[-x] + newDic = {} + newDic['eventName'] = recentLog.eventName + newDic['eventTime'] = str(recentLog.eventTime) + newDic['eventType'] = str(recentLog.eventType) + newDic['eventSender'] = str(recentLog.eventSender) + newDic['eventData'] = str(recentLog.eventData) + newList.append(newDic) + except: + pass return newList def load_HistoricLogs(self): diff --git a/standalone_channelrewards.py b/standalone_channelrewards.py index 7b58718..3a554f1 100644 --- a/standalone_channelrewards.py +++ b/standalone_channelrewards.py @@ -1,9 +1,17 @@ import flask -from flask import request +from flask import Flask, request, after_this_request import channel_rewards.channelRewards_loader as rewards_loader from channel_rewards.channelRewards_base import AbstractChannelRewards +from json import loads +from urllib.parse import urlencode + +import requests + +import json +import base64 + import os import praxis_logging praxis_logger_obj = praxis_logging.praxis_logger() @@ -59,6 +67,38 @@ def handle_reward(source, username, reward_name, reward_type, rewardPrompt, user return flask.make_response("This is a magic test", 500) #praxis_logger_obj.log("Doing a reward") +def handle_get_list(): + tempDict = {} + returnedDict = {} + + for cmd in loadedRewards[AbstractChannelRewards.ChannelRewardsType.channelPoints]: + tempCmd:AbstractChannelRewards = loadedRewards[AbstractChannelRewards.ChannelRewardsType.channelPoints][cmd] + tempDict['channelRewardName'] = tempCmd.ChannelRewardName + tempDict['isRewardEnabled'] = str(tempCmd.isChannelRewardEnabled).lower() + returnedDict[tempCmd.ChannelRewardName] = tempDict + tempDict = {} + for cmd in loadedRewards[AbstractChannelRewards.ChannelRewardsType.twitch_bits]: + tempCmd:AbstractChannelRewards = loadedRewards[AbstractChannelRewards.ChannelRewardsType.twitch_bits][cmd] + tempDict['channelRewardName'] = tempCmd.ChannelRewardName + tempDict['isRewardEnabled'] = str(tempCmd.isChannelRewardEnabled).lower() + returnedDict[tempCmd.ChannelRewardName] = tempDict + tempDict = {} + for cmd in loadedRewards[AbstractChannelRewards.ChannelRewardsType.twitch_subs]: + tempCmd:AbstractChannelRewards = loadedRewards[AbstractChannelRewards.ChannelRewardsType.twitch_subs][cmd] + tempDict['channelRewardName'] = tempCmd.ChannelRewardName + tempDict['isRewardEnabled'] = str(tempCmd.isChannelRewardEnabled).lower() + returnedDict[tempCmd.ChannelRewardName] = tempDict + tempDict = {} + + payload = json.dumps(returnedDict) + praxis_logger_obj.log("dumped") + praxis_logger_obj.log(payload) + payload = base64.b64encode(str.encode(payload)) + print("encoded") + praxis_logger_obj.log("encoded") + praxis_logger_obj.log(payload) + return flask.make_response("{\"message\":\"%s\"}" % payload.decode(), 200, {"Content-Type": "application/json"}) + @api.route('/api/v1/reward', methods=['GET']) def reward_check(): @@ -107,6 +147,14 @@ def exec_reward(): request.args['user_input'], request.args['bonus_data']) +@api.route('/api/v1/get_list/all', methods=['GET']) +def get_list(): + @after_this_request + def add_header(response): + response.headers.add('Access-Control-Allow-Origin', '*') + return response + + return handle_get_list() if __name__ == '__main__': init() diff --git a/standalone_eventLog.py b/standalone_eventLog.py index df28780..97844a1 100644 --- a/standalone_eventLog.py +++ b/standalone_eventLog.py @@ -22,6 +22,9 @@ import timers_module import random +import json +import base64 + import event_logs.event_log_Module import os @@ -44,8 +47,15 @@ def add_event(eventName, eventTime, eventType, eventSender, eventData): return flask.make_response("{\"message\":\"%s\"}" % None, 200, {"Content-Type": "application/json"}) def get_events(eventCount=100): - logging_module.get_recent_logs(eventCount) - return flask.make_response('Event List', 200) + returnedData = logging_module.get_recent_logs(eventCount) + payload = json.dumps(returnedData) + payload = base64.b64encode(str.encode(payload)) + + return flask.make_response("{\"message\":\"%s\"}" % payload.decode(), 200, {"Content-Type": "application/json"}) + +def reRunEvent_handler(eventName, eventTime, eventType, eventSender, eventData): + return flask.make_response("{\"message\":\"%s\"}" % 'rerunning event....', 200, {"Content-Type": "application/json"}) + @api.route('/') @@ -90,7 +100,40 @@ def get_event_log(): def add_header(response): response.headers.add('Access-Control-Allow-Origin', '*') return response - return get_events() + if 'request_name' not in request.args: + return flask.make_response('{\"text\":"Argument \'request_name\' not in request"}', 400) + if 'request_type' not in request.args: + return flask.make_response('{\"text\":"Argument \'request_type\' not in request"}', 400) + if 'request_data' not in request.args: + requestData = 50 + else: + try: + requestData = request.args['request_data'] + except: + requestData = 50 + return get_events(requestData) + +@api.route('/api/v1/event_log/reRunEvent') +def reRunEvent(): + @after_this_request + def add_header(response): + response.headers.add('Access-Control-Allow-Origin', '*') + return response + if 'eventName' not in request.args: + return flask.make_response('{\"text\":"Argument \'eventName\' not in request"}', 400) + if 'eventTime' not in request.args: + sentTime = request.args('eventTime') + else: + sentTime = None + if 'eventType' not in request.args: + return flask.make_response('{\"text\":"Argument \'eventType\' not in request"}', 400) + if 'eventSender' not in request.args: + return flask.make_response('{\"text\":"Argument \'eventSender\' not in request"}', 400) + if 'eventData' not in request.args: + return flask.make_response('{\"text\":"Argument \'eventData\' not in request"}', 400) + + return reRunEvent_handler(request.args['eventName'], sentTime, request.args['eventType'], request.args['eventSender'], request.args['eventData']) + # @api.route('/api/v1/event_log/chyron/get') # def get_chyron(): diff --git a/standalone_user_client.py b/standalone_user_client.py index ba77678..bcd3488 100644 --- a/standalone_user_client.py +++ b/standalone_user_client.py @@ -68,7 +68,7 @@ def handle_request_get(requestName, requestType, requestData): response = request_get_eventlist(params) return flask.make_response("{\"message\": \"%s\"}" % response, 200, {"Content-Type": "application/json"}) else: - return flask.make_response("{\"message\": \"%s\"}" % "message123123", 200, {"Content-Type": "application/json"}) + return flask.make_response("{\"message\": \"%s\"}" % "Invalid Request Name", 400, {"Content-Type": "application/json"}) def request_get_list(serviceName, servicePort): try: @@ -80,13 +80,14 @@ def request_get_list(serviceName, servicePort): data = loads(resp.text) msg = data['message'] if msg is not None: + praxis_logger_obj.log(msg) return msg # todo send to logger and other relevent services else: # todo handle failed requests - return None + return flask.make_response("{\"message\": \"%s\"}" % "Minor Mess up on get list", 200, {"Content-Type": "application/json"}) except: - return None + return flask.make_response("{\"message\": \"%s\"}" % "Major Mess up on get list", 200, {"Content-Type": "application/json"}) def request_get_eventlist(params): try: @@ -102,9 +103,33 @@ def request_get_eventlist(params): # todo send to logger and other relevent services else: # todo handle failed requests - return None + return flask.make_response("{\"message\": \"%s\"}" % "Minor Mess up on get eventlist", 200, {"Content-Type": "application/json"}) except: - return None + return flask.make_response("{\"message\": \"%s\"}" % "Major Mess up on get eventlist", 200, {"Content-Type": "application/json"}) + +def request_reRunEvent(eventName, eventTime, eventType, eventSender, eventData): + try: + params = urlencode( + {'eventName': eventName, + 'eventTime': eventTime, + 'eventType': eventType, + 'eventSender': eventSender, + 'eventData': eventData}) + url = "http://standalone_eventlog:42008/api/v1/event_log/reRunEvent?%s" % params + resp = requests.get(url) + + if resp.status_code == 200: + print("Got the following message: %s" % resp.text) + data = loads(resp.text) + msg = data['message'] + if msg is not None: + return msg + # todo send to logger and other relevent services + else: + # todo handle failed requests + return flask.make_response('Something Went a little bit Wrong rerunning an event', 400) + except: + return flask.make_response('Something Went Wrong rerunning an event', 400) def handle_request_set(requestName, requestType, requestData): if requestType == "update": @@ -145,9 +170,35 @@ def get_data(): @api.route('/api/v1/user_client/set', methods=['GET']) def set_data(): + @after_this_request + def add_header(response): + response.headers.add('Access-Control-Allow-Origin', '*') + return response if 'request_type' not in request.args: return flask.make_response('{\"text\":"Argument \'request_type\' not in request"}', 400) +@api.route('/api/v1/user_client/event_log/reRunEvent', methods=['GET']) +def EventLog_reRunEvent(): + @after_this_request + def add_header(response): + response.headers.add('Access-Control-Allow-Origin', '*') + return response + if 'eventName' not in request.args: + return flask.make_response('{\"text\":"Argument \'eventName\' not in request"}', 400) + if 'eventTime' not in request.args: + sentTime = request.args('eventTime') + else: + sentTime = None + if 'eventType' not in request.args: + return flask.make_response('{\"text\":"Argument \'eventType\' not in request"}', 400) + if 'eventSender' not in request.args: + return flask.make_response('{\"text\":"Argument \'eventSender\' not in request"}', 400) + if 'eventData' not in request.args: + return flask.make_response('{\"text\":"Argument \'eventData\' not in request"}', 400) + + #return flask.make_response("test", 200) + return request_reRunEvent(request.args['eventName'], sentTime, request.args['eventType'], request.args['eventSender'], request.args['eventData']) + if __name__ == "__main__": init() diff --git a/user_client/v1/index.html b/user_client/v1/index.html index c1c29d2..496c6be 100644 --- a/user_client/v1/index.html +++ b/user_client/v1/index.html @@ -111,19 +111,14 @@ -
- +
-
-
-

Reward Name:

-
- - -
-
+
+ +
@@ -171,68 +166,13 @@
- + refresh

Event History:

-
-
-

Event:

-

User:

-

Message:

- - refresh - -
-
-

Event:

-

User:

-

Message:

- - refresh - -
-
-

Event:

-

User:

-

Message:

- - refresh - -
-
-

Event:

-

User:

-

Message:

- - refresh - -
-
-

Event:

-

User:

-

Message:

- - refresh - -
-
-

Event:

-

User:

-

Message:

- - refresh - -
-
-

Event:

-

User:

-

Message:

- - refresh - -
+
+

Services:

diff --git a/user_client/v1/webclient.js b/user_client/v1/webclient.js index 97695a5..7a7ccd2 100644 --- a/user_client/v1/webclient.js +++ b/user_client/v1/webclient.js @@ -28,7 +28,7 @@ async function setValue(request_type, command, isEnabled) { //console.log(targetURL) let a = await fetch_GetList(targetURL); //console.log("return: "+a); - updateCommandList(); + } fetch_GetList = (fetchURL) => response = fetch(fetchURL) @@ -56,8 +56,8 @@ GetList = async (listType) => { } } -async function GetListCommands() { - let returnedList = await GetList("Commands"); +async function GetList_OBJ(ListName) { + let returnedList = await GetList(ListName); let obj_main = JSON.parse(returnedList); //console.log(returnedList); //console.log(obj_main); @@ -67,31 +67,31 @@ async function GetListCommands() { //var obj_temp = JSON.parse(obj_main.message['!lights']); let data = atob(obj_main.message); - console.log(data); + console.log(ListName, data); let notDictionary = JSON.parse(data); - + //let notDictionary = true return notDictionary } async function updateCommandList() { $("#CommandRowWrapper").empty(); - let returnedCommands = await GetListCommands(); - for (x in returnedCommands){ + let returnedCommands = await GetList_OBJ("Commands"); + for (var x in returnedCommands){ //console.log(x) var commandName = returnedCommands[x].command var isCommandEnabled = "" if (returnedCommands[x].isCommandEnabled == "true") { isCommandEnabled = "checked" } - var commandTemplate = ""+ + var template = ""+ "
" + "
" + "

Command Name:

" + "
" + "

Command

" + - "" + + "" + "
" - $("#CommandRowWrapper").append(commandTemplate); + $("#CommandRowWrapper").append(template); } //var commandName = "!testerino" //var isCommandEnabled = "" // if == "checked" will start off with the isEnabled bool enabled @@ -102,23 +102,142 @@ updateCommandList(); -async function GetListRewards() { - returnedList = await GetList("Rewards"); - obj = JSON.parse(returnedList); - console.log(obj['message']) - return returnedList + +async function updateRewardList() { + $("#RewardRowWrapper").empty(); + console.log("about to tdo the things"); + let returnedRewards = await GetList_OBJ("Rewards"); + for (var x in returnedRewards){ + //console.log(x) + let rewardName = returnedRewards[x].channelRewardName + var isRewardEnabled = "" + if (returnedRewards[x].isRewardEnabled == "true") { + isRewardEnabled = "checked" + } + let template = ""+ + "
" + + "
" + + "

Reward Name:

" + + "
" + + "

Reward

" + + "" + + "
" + $("#RewardRowWrapper").append(template); + } + //var commandName = "!testerino" + //var isCommandEnabled = "" // if == "checked" will start off with the isEnabled bool enabled + +} +updateRewardList(); + + + +fetch_reRunEvent = (fetchURL) => response = fetch(fetchURL) +.then((response) => { + return response.text(); +}) + + +RerunEvent_OBJ = async (eventToRun) => { + if (true) { + let exampleEvent = { + 'eventName': "", + 'eventTime': "", + 'eventType': "", + 'eventSender': "", + 'eventData': "" + } + let params = "?eventName="+encodeURIComponent(eventToRun.eventName)+ + "&"+"eventTime="+encodeURIComponent(eventToRun.eventTime)+ + "&"+"eventType="+encodeURIComponent(eventToRun.eventType)+ + "&"+"eventSender="+encodeURIComponent(eventToRun.eventSender)+ + "&"+"eventData="+encodeURIComponent(eventToRun.eventData); + let targetURL = "http://127.0.0.1:42055/api/v1/user_client/event_log/reRunEvent"+params; + //console.log(targetURL) + let a = await fetch_reRunEvent(targetURL); + //console.log("return: "+a); + return a + } + else { + return None + } } -async function GetListTimers() { - returnedList = await GetList("Timers"); - obj = JSON.parse(returnedList); - console.log(obj['message']) - return returnedList + +GetEventList = async () => { + if (true) { + let ListRequestOBJ = { + 'request_name': "EventHistory", + 'request_type': "list", + 'request_data': "50" + } + let params = "?request_name="+encodeURIComponent(ListRequestOBJ.request_name)+"&"+"request_type="+encodeURIComponent(ListRequestOBJ.request_type); + let targetURL = "http://127.0.0.1:42055/api/v1/user_client/get"+params; + //console.log(targetURL) + let a = await fetch_GetList(targetURL); + //console.log("return: "+a); + return a + } + else { + return None + } } -async function GetListTextSources() { - returnedList = await GetList("TextSources"); - obj = JSON.parse(returnedList); - console.log(obj['message']) - return returnedList +async function GetEventList_OBJ() { + let returnedList = await GetEventList(); + let obj_main = JSON.parse(returnedList); + //console.log(returnedList); + console.log(obj_main); + //console.log(typeof obj_main['message']) + + //console.log(obj_main.message); + //var obj_temp = JSON.parse(obj_main.message['!lights']); + + let data = atob(obj_main.message); + console.log("Event List OBJ: ", data); + let notDictionary = JSON.parse(data); + //let notDictionary = true + return notDictionary +} + +async function updateEventList() { + $("#EventHistoryWrapper").empty(); + let returnedEvents = await GetEventList_OBJ(); + console.log(returnedEvents) + for (var x in returnedEvents){ + console.log(x) + let eventName = returnedEvents[x].eventName + let eventTime = returnedEvents[x].eventTime + let eventType = returnedEvents[x].eventType + let eventSender = returnedEvents[x].eventSender + let eventData = returnedEvents[x].eventData + + console.log(eventName) + console.log(eventTime) + console.log(eventType) + console.log(eventSender) + + let template = ""+ + "
"+ + "

Event:"+ eventName +"

"+ + "

User:"+ eventSender +"

"+ + "

Message:"+ eventData +"

"+ + ""+ + "refresh"+ + "
" + $("#EventHistoryWrapper").append(template); + } + +} + +async function reRunEvent(eventName, eventTime, eventType, eventSender, eventData) { + var newEvent = { + 'eventName': eventName, + 'eventTime': eventTime, + 'eventType': eventType, + 'eventSender': eventSender, + 'eventData': eventData + } + let response = await RerunEvent_OBJ(newEvent); + console.log(response); } \ No newline at end of file