From f8653176006c4bf92d9114ef11b22206019ac927 Mon Sep 17 00:00:00 2001 From: Donald Zou Date: Tue, 26 Aug 2025 00:41:37 +0800 Subject: [PATCH] Finished most of the webhook UI --- src/dashboard.py | 12 ++ src/modules/DashboardWebHooks.py | 34 ++++- .../settingsComponent/dashboardWebHooks.vue | 37 ++++- .../webHookSessions.vue | 143 ++++++++++++++++++ 4 files changed, 217 insertions(+), 9 deletions(-) create mode 100644 src/static/app/src/components/settingsComponent/dashboardWebHooksComponents/webHookSessions.vue diff --git a/src/dashboard.py b/src/dashboard.py index b59dc86b..5675bd41 100644 --- a/src/dashboard.py +++ b/src/dashboard.py @@ -1401,6 +1401,18 @@ def API_WebHooks_DeleteWebHook(): status, msg = DashboardWebHooks.DeleteWebHook(data) return ResponseObject(status, msg) +@app.get(f'{APP_PREFIX}/api/webHooks/getWebHookSessions') +def API_WebHooks_GetWebHookSessions(): + webhookID = request.args.get('WebHookID') + if not webhookID: + return ResponseObject(False, "Please provide WebHookID") + + webHook = DashboardWebHooks.SearchWebHookByID(webhookID) + if not webHook: + return ResponseObject(False, "Webhook does not exist") + + return ResponseObject(data=DashboardWebHooks.GetWebHookSessions(webHook)) + ''' Index Page diff --git a/src/modules/DashboardWebHooks.py b/src/modules/DashboardWebHooks.py index 286c137b..7bba8a71 100644 --- a/src/modules/DashboardWebHooks.py +++ b/src/modules/DashboardWebHooks.py @@ -69,6 +69,7 @@ class DashboardWebHooks: db.Column('EndDate', (db.DATETIME if DashboardConfig.GetConfig("Database", "type")[1] == 'sqlite' else db.TIMESTAMP), ), + db.Column('Data', db.JSON), db.Column('Status', db.INTEGER), db.Column('Logs', db.JSON) ) @@ -91,6 +92,17 @@ class DashboardWebHooks: self.__getWebHooks() return list(map(lambda x : x.model_dump(), self.WebHooks)) + def GetWebHookSessions(self, webHook: WebHook): + with self.engine.connect() as conn: + sessions = conn.execute( + self.webHookSessionsTable.select().where( + self.webHookSessionsTable.c.WebHookID == webHook.WebHookID + ).order_by( + db.desc(self.webHookSessionsTable.c.StartDate) + ) + ).mappings().fetchall() + return sessions + def CreateWebHook(self) -> WebHook: return WebHook(WebHookID=str(uuid.uuid4())) @@ -101,6 +113,13 @@ class DashboardWebHooks: return None return first + def SearchWebHookByID(self, webHookID: str) -> WebHook | None: + try: + first = next(filter(lambda x : x.WebHookID == webHookID, self.WebHooks)) + except StopIteration: + return None + return first + def UpdateWebHook(self, webHook: dict[str, str]) -> tuple[bool, str] | tuple[bool, None]: try: webHook = WebHook(**webHook) @@ -154,6 +173,7 @@ class DashboardWebHooks: return False self.__getWebHooks() subscribedWebHooks = filter(lambda webhook: action in webhook.SubscribedActions, self.WebHooks) + data['action'] = action for i in subscribedWebHooks: try: t = threading.Thread(target=WebHookSession, args=(i,data), daemon=True) @@ -171,11 +191,11 @@ class WebHookSession: self.webHook = webHook self.sessionID = str(uuid.uuid4()) self.webHookSessionLogs: WebHookSessionLogs = WebHookSessionLogs() - - data['time'] = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + self.time = datetime.now() + data['time'] = self.time.strftime("%Y-%m-%d %H:%M:%S") data['webhook_id'] = webHook.WebHookID data['webhook_session'] = self.sessionID - data['content'] = 'hi!' + self.data = data self.Prepare() self.Execute(data) @@ -185,6 +205,8 @@ class WebHookSession: self.webHookSessionsTable.insert().values({ "WebHookSessionID": self.sessionID, "WebHookID": self.webHook.WebHookID, + "Data": self.data, + "StartDate": self.time, "Status": -1, "Logs": self.webHookSessionLogs.model_dump() }) @@ -243,10 +265,8 @@ class WebHookSession: break except requests.exceptions.RequestException as e: self.UpdateSessionLog(1, f"Attempt #{i + 1}/5. Request errored. Reason: " + str(e)) - time.sleep(5) + time.sleep(10) if not success: self.UpdateSessionLog(1, "Webhook request failed & terminated.") - self.UpdateStatus(1) - - \ No newline at end of file + self.UpdateStatus(1) \ No newline at end of file diff --git a/src/static/app/src/components/settingsComponent/dashboardWebHooks.vue b/src/static/app/src/components/settingsComponent/dashboardWebHooks.vue index 95c84fc6..51d04d0e 100644 --- a/src/static/app/src/components/settingsComponent/dashboardWebHooks.vue +++ b/src/static/app/src/components/settingsComponent/dashboardWebHooks.vue @@ -3,6 +3,7 @@ import LocaleText from "@/components/text/localeText.vue"; import { fetchGet } from "@/utilities/fetch.js" import {onMounted, ref} from "vue"; import AddWebHook from "@/components/settingsComponent/dashboardWebHooksComponents/addWebHook.vue"; +import WebHookSessions from "@/components/settingsComponent/dashboardWebHooksComponents/webHookSessions.vue"; const webHooks = ref([]) const webHooksLoaded = ref(false) @@ -19,6 +20,7 @@ const getWebHooks = async () => { const addWebHook = ref(false) const selectedWebHook = ref(undefined) +const view = ref("edit")