From e44ec55edae18fdfa3da09787dcd6f887dd05226 Mon Sep 17 00:00:00 2001 From: hadestructhor <60148800+hadestructhor@users.noreply.github.com> Date: Tue, 18 Feb 2025 00:45:53 +0100 Subject: [PATCH] chore: cleanup and refactoring --- db/knex_init_db.js | 7 +-- .../2025-02-17-2142-generalize-analytics.js | 23 +++++++++ .../patch-add-umami-analytics-status-page.sql | 10 ---- server/database.js | 1 - server/model/status_page.js | 20 ++++---- .../status-page-socket-handler.js | 6 +-- src/lang/en.json | 3 ++ src/pages/StatusPage.vue | 47 +++++++++++++++---- test/e2e/specs/status-page.spec.js | 17 ++++--- 9 files changed, 91 insertions(+), 43 deletions(-) create mode 100644 db/knex_migrations/2025-02-17-2142-generalize-analytics.js delete mode 100644 db/old_migrations/patch-add-umami-analytics-status-page.sql diff --git a/db/knex_init_db.js b/db/knex_init_db.js index 42b076c45..de9997dd4 100644 --- a/db/knex_init_db.js +++ b/db/knex_init_db.js @@ -202,9 +202,10 @@ async function createTables() { table.text("footer_text"); table.text("custom_css"); table.boolean("show_powered_by").notNullable().defaultTo(true); - table.string("google_analytics_tag_id"); - table.string("umami_analytics_domain_url"); - table.string("umami_analytics_website_id"); + table.string("analytics_id"); + table.string("analytics_domain_url"); + table.enu("analytics_type", [ "google", "umami", "plausible" ]).defaultTo(null); + }); // maintenance_status_page diff --git a/db/knex_migrations/2025-02-17-2142-generalize-analytics.js b/db/knex_migrations/2025-02-17-2142-generalize-analytics.js new file mode 100644 index 000000000..34a52224f --- /dev/null +++ b/db/knex_migrations/2025-02-17-2142-generalize-analytics.js @@ -0,0 +1,23 @@ +// Udpate status_page table to generalize analytics fields +exports.up = function (knex) { + return knex.schema + .alterTable("status_page", function (table) { + table.renameColumn("google_analytics_tag_id", "analytics_id"); + table.string("analytics_domain_url"); + table.enu("analytics_type", [ "google", "umami", "plausible" ]).defaultTo(null); + + }).then(() => { + // After a succesful migration, add google as default for previous pages + knex("status_page").whereNotNull("analytics_id").update({ + "analytics_type": "google", + }); + }); +}; + +exports.down = function (knex) { + return knex.schema.alterTable("status_page", function (table) { + table.renameColumn("analytics_id", "google_analytics_tag_id"); + table.dropColumn("analytics_domain_url"); + table.dropColumn("analytics_type"); + }); +}; diff --git a/db/old_migrations/patch-add-umami-analytics-status-page.sql b/db/old_migrations/patch-add-umami-analytics-status-page.sql deleted file mode 100644 index e8b15f4d5..000000000 --- a/db/old_migrations/patch-add-umami-analytics-status-page.sql +++ /dev/null @@ -1,10 +0,0 @@ --- You should not modify if this have pushed to Github, unless it does serious wrong with the db. -BEGIN TRANSACTION; - -ALTER TABLE status_page - ADD umami_analytics_domain_url VARCHAR; - -ALTER TABLE status_page -ADD umami_analytics_website_id VARCHAR; - -COMMIT; diff --git a/server/database.js b/server/database.js index 6aa302745..0e6a7405d 100644 --- a/server/database.js +++ b/server/database.js @@ -95,7 +95,6 @@ class Database { "patch-maintenance-table2.sql": true, "patch-add-gamedig-monitor.sql": true, "patch-add-google-analytics-status-page-tag.sql": true, - "patch-add-umami-analytics-status-page.sql": true, "patch-http-body-encoding.sql": true, "patch-add-description-monitor.sql": true, "patch-api-key-table.sql": true, diff --git a/server/model/status_page.js b/server/model/status_page.js index 6548effc6..b3cf434cb 100644 --- a/server/model/status_page.js +++ b/server/model/status_page.js @@ -121,13 +121,13 @@ class StatusPage extends BeanModel { const head = $("head"); - if (statusPage.googleAnalyticsTagId) { - let escapedGoogleAnalyticsScript = googleAnalytics.getGoogleAnalyticsScript(statusPage.googleAnalyticsTagId); + if (statusPage.analyticsType === "google" && statusPage.analyticsId) { + let escapedGoogleAnalyticsScript = googleAnalytics.getGoogleAnalyticsScript(statusPage.analyticsId); head.append($(escapedGoogleAnalyticsScript)); } - if (statusPage.umamiAnalyticsDomainUrl && statusPage.umamiAnalyticsWebsiteId) { - let escapedUmamiAnalyticsScript = umamiAnalytics.getUmamiAnalyticsScript(statusPage.umamiAnalyticsDomainUrl, statusPage.umamiAnalyticsWebsiteId); + if (statusPage.analyticsType === "umami" && statusPage.analyticsDomainUrl && statusPage.analyticsId) { + let escapedUmamiAnalyticsScript = umamiAnalytics.getUmamiAnalyticsScript(statusPage.analyticsDomainUrl, statusPage.analyticsId); head.append($(escapedUmamiAnalyticsScript)); } @@ -413,9 +413,9 @@ class StatusPage extends BeanModel { customCSS: this.custom_css, footerText: this.footer_text, showPoweredBy: !!this.show_powered_by, - googleAnalyticsId: this.google_analytics_tag_id, - umamiAnalyticsDomainUrl: this.umami_analytics_domain_url, - umamiAnalyticsWebsiteId: this.umami_analytics_website_id, + analyticsId: this.analytics_id, + analyticsDomainUrl: this.analytics_domain_url, + analyticsType: this.analytics_type, showCertificateExpiry: !!this.show_certificate_expiry, }; } @@ -438,9 +438,9 @@ class StatusPage extends BeanModel { customCSS: this.custom_css, footerText: this.footer_text, showPoweredBy: !!this.show_powered_by, - googleAnalyticsId: this.google_analytics_tag_id, - umamiAnalyticsDomainUrl: this.umami_analytics_domain_url, - umamiAnalyticsWebsiteId: this.umami_analytics_website_id, + analyticsId: this.analytics_id, + analyticsDomainUrl: this.analytics_domain_url, + analyticsType: this.analytics_type, showCertificateExpiry: !!this.show_certificate_expiry, }; } diff --git a/server/socket-handlers/status-page-socket-handler.js b/server/socket-handlers/status-page-socket-handler.js index c6a474cac..60957d49d 100644 --- a/server/socket-handlers/status-page-socket-handler.js +++ b/server/socket-handlers/status-page-socket-handler.js @@ -166,9 +166,9 @@ module.exports.statusPageSocketHandler = (socket) => { statusPage.show_powered_by = config.showPoweredBy; statusPage.show_certificate_expiry = config.showCertificateExpiry; statusPage.modified_date = R.isoDateTime(); - statusPage.google_analytics_tag_id = config.googleAnalyticsId; - statusPage.umami_analytics_domain_url = config.umamiAnalyticsDomainUrl; - statusPage.umami_analytics_website_id = config.umamiAnalyticsWebsiteId; + statusPage.analytics_id = config.analyticsId; + statusPage.analytics_domain_url = config.analyticsDomainUrl; + statusPage.analytics_type = config.analyticsType; await R.store(statusPage); diff --git a/src/lang/en.json b/src/lang/en.json index c06547fc5..f21c7e6f1 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -782,6 +782,9 @@ "wayToGetClickSendSMSToken": "You can get API Username and API Key from {0} .", "Custom Monitor Type": "Custom Monitor Type", "Google Analytics ID": "Google Analytics ID", + "Analytics Type": "Analytics Type", + "Analytics ID": "Analytics ID", + "Analytics Domain URL": "Analytics Domain URL", "Umami Analytics Domain Url": "Umami Analytics Domain Url", "Umami Analytics Website ID": "Umami Analytics Website ID", "Edit Tag": "Edit Tag", diff --git a/src/pages/StatusPage.vue b/src/pages/StatusPage.vue index 8edb8f4e1..983336de3 100644 --- a/src/pages/StatusPage.vue +++ b/src/pages/StatusPage.vue @@ -1,3 +1,25 @@ + +