diff --git a/routes/__pycache__/admin.cpython-313.pyc b/routes/__pycache__/admin.cpython-313.pyc
index 4af0b3c..8a2bdfa 100644
Binary files a/routes/__pycache__/admin.cpython-313.pyc and b/routes/__pycache__/admin.cpython-313.pyc differ
diff --git a/routes/__pycache__/main.cpython-313.pyc b/routes/__pycache__/main.cpython-313.pyc
index 0aa3110..fd6bfcc 100644
Binary files a/routes/__pycache__/main.cpython-313.pyc and b/routes/__pycache__/main.cpython-313.pyc differ
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 %}