From 912f97490cab1a0300a12df3f808f53e06048189 Mon Sep 17 00:00:00 2001 From: Kobe Date: Tue, 24 Jun 2025 13:54:43 +0200 Subject: [PATCH] oayment plan visuals in the instances page --- routes/__pycache__/admin.cpython-313.pyc | Bin 34619 -> 34619 bytes routes/__pycache__/main.cpython-313.pyc | Bin 109782 -> 109782 bytes routes/admin_api.py | 6 ++- templates/main/instance_detail.html | 53 +++++++++++++++++++++++ templates/main/instances.html | 34 ++++++++++++++- 5 files changed, 90 insertions(+), 3 deletions(-) diff --git a/routes/__pycache__/admin.cpython-313.pyc b/routes/__pycache__/admin.cpython-313.pyc index 4af0b3c07545c0149c0c5e4894c0b2e2a673af20..8a2bdfa5a3c6ea2216f825cd3340534e11e4424d 100644 GIT binary patch delta 21 bcmdnp$F#eTiR&{jFBbz42vu(6GHeF`M}-Bp delta 21 bcmdnp$F#eTiR&{jFBbz4Y%br(W!Me?OF;%z diff --git a/routes/__pycache__/main.cpython-313.pyc b/routes/__pycache__/main.cpython-313.pyc index 0aa31105d0d58c116f68c30e8d9d30a7462947f8..fd6bfcc59431789b60107415bc60cd2975e46f07 100644 GIT binary patch delta 24 ecmcb1lkM6~Hm=XSyj%=GP+Hl@wUvwU%o+f1wFo@` delta 24 ecmcb1lkM6~Hm=XSyj%=Ga4MsbYbzJynKb}%DhPo9 diff --git a/routes/admin_api.py b/routes/admin_api.py index aa23fc9..301d948 100644 --- a/routes/admin_api.py +++ b/routes/admin_api.py @@ -580,7 +580,8 @@ def get_version_info(current_user): 'git_branch': os.environ.get('GIT_BRANCH', 'unknown'), 'deployed_at': os.environ.get('DEPLOYED_AT', 'unknown'), 'ismaster': os.environ.get('ISMASTER', 'false'), - 'port': os.environ.get('PORT', 'unknown') + 'port': os.environ.get('PORT', 'unknown'), + 'pricing_tier_name': os.environ.get('PRICING_TIER_NAME', 'unknown') } return jsonify(version_info) @@ -591,6 +592,7 @@ def get_version_info(current_user): 'app_version': 'unknown', 'git_commit': 'unknown', 'git_branch': 'unknown', - 'deployed_at': 'unknown' + 'deployed_at': 'unknown', + 'pricing_tier_name': 'unknown' }), 500 diff --git a/templates/main/instance_detail.html b/templates/main/instance_detail.html index ab733e6..c29d307 100644 --- a/templates/main/instance_detail.html +++ b/templates/main/instance_detail.html @@ -130,6 +130,18 @@
Loading...
+
+
+
Version:
+
Loading...
+
+
+
+
+
Payment Plan:
+
Loading...
+
+
Contact Information
@@ -1569,5 +1581,46 @@ document.addEventListener('DOMContentLoaded', function() { }); } }); + +// Function to fetch version and payment plan info +async function fetchInstanceVersionAndPlan() { + const versionEl = document.getElementById('instance-version-value'); + const planEl = document.getElementById('instance-payment-plan-value'); + versionEl.textContent = 'Loading...'; + planEl.textContent = 'Loading...'; + try { + // Get JWT token + const tokenResponse = await fetch(`{{ instance.main_url }}/api/admin/management-token`, { + method: 'POST', + headers: { + 'X-API-Key': '{{ instance.connection_token }}', + 'Accept': 'application/json' + } + }); + if (!tokenResponse.ok) throw new Error('Failed to get management token'); + const tokenData = await tokenResponse.json(); + if (!tokenData.token) throw new Error('No token received'); + // Fetch version info + const response = await fetch(`{{ instance.main_url }}/api/admin/version-info`, { + headers: { + 'Accept': 'application/json', + 'Authorization': `Bearer ${tokenData.token}` + } + }); + if (!response.ok) throw new Error('Failed to fetch version info'); + const data = await response.json(); + versionEl.textContent = data.app_version || 'Unknown'; + planEl.textContent = data.pricing_tier_name || 'Unknown'; + } catch (error) { + versionEl.textContent = 'Error'; + planEl.textContent = 'Error'; + console.error('Error fetching version/plan info:', error); + } +} + +document.addEventListener('DOMContentLoaded', function() { + // ... existing code ... + fetchInstanceVersionAndPlan(); +}); {% endblock %} \ No newline at end of file diff --git a/templates/main/instances.html b/templates/main/instances.html index c27d685..a222285 100644 --- a/templates/main/instances.html +++ b/templates/main/instances.html @@ -1077,6 +1077,7 @@ function compareSemanticVersions(currentVersion, latestVersion) { async function fetchVersionInfo(instanceUrl, instanceId) { const row = document.querySelector(`[data-instance-id="${instanceId}"]`).closest('tr'); const versionCell = row.querySelector('td:nth-child(9)'); // Version column (adjusted after removing branch) + const paymentPlanCell = row.querySelector('td:nth-child(6)'); // Payment Plan column // Show loading state if (versionCell) { @@ -1112,6 +1113,25 @@ async function fetchVersionInfo(instanceUrl, instanceId) { const data = await response.json(); console.log('Received version data:', data); + // Update payment plan cell with pricing tier name + if (paymentPlanCell) { + const pricingTierName = data.pricing_tier_name || 'unknown'; + if (pricingTierName !== 'unknown') { + paymentPlanCell.innerHTML = ` + + ${pricingTierName} + `; + + // Add tooltip for payment plan + const paymentPlanBadge = paymentPlanCell.querySelector('[data-bs-toggle="tooltip"]'); + if (paymentPlanBadge) { + new bootstrap.Tooltip(paymentPlanBadge); + } + } else { + paymentPlanCell.innerHTML = 'unknown'; + } + } + // Update version cell if (versionCell) { const appVersion = data.app_version || 'unknown'; @@ -1209,11 +1229,23 @@ async function fetchVersionInfo(instanceUrl, instanceId) { `; } + if (paymentPlanCell) { + paymentPlanCell.innerHTML = ` + + Error + `; + } + // Add tooltips for error states const errorBadge = versionCell?.querySelector('[data-bs-toggle="tooltip"]'); if (errorBadge) { new bootstrap.Tooltip(errorBadge); } + + const paymentPlanErrorBadge = paymentPlanCell?.querySelector('[data-bs-toggle="tooltip"]'); + if (paymentPlanErrorBadge) { + new bootstrap.Tooltip(paymentPlanErrorBadge); + } } } @@ -2448,4 +2480,4 @@ function validateStep6() { return true; } -{% endblock %} \ No newline at end of file +{% endblock %}