bug fix: show real data for non-admins

This commit is contained in:
usmannasir
2025-08-07 18:59:53 +05:00
parent 0704e97ff8
commit fba316181c
2 changed files with 103 additions and 18 deletions

View File

@@ -403,34 +403,34 @@
<div class="stat-card">
<div class="stat-card-header">
<span class="stat-card-title">CPU USAGE</span>
<span class="stat-card-value">({$ cpuUsage || 40 $}%)</span>
<span class="stat-card-value">({$ cpuUsage $}%)</span>
</div>
<div class="progress-bar-container">
<div class="progress-bar" style="width: {$ cpuUsage || 40 $}%;"></div>
<div class="progress-bar" style="width: {$ cpuUsage $}%;"></div>
</div>
<div class="stat-card-info">You've {$ cpuCores || 2 $} Core(s) CPU.</div>
<div class="stat-card-info">You've {$ cpuCores $} Core(s) CPU.</div>
</div>
<div class="stat-card">
<div class="stat-card-header">
<span class="stat-card-title">MEMORY USAGE</span>
<span class="stat-card-value">({$ ramUsage || 10 $}%)</span>
<span class="stat-card-value">({$ ramUsage $}%)</span>
</div>
<div class="progress-bar-container">
<div class="progress-bar" style="width: {$ ramUsage || 10 $}%;"></div>
<div class="progress-bar" style="width: {$ ramUsage $}%;"></div>
</div>
<div class="stat-card-info">You've {$ ramTotalMB || 6192 $} MB Memory.</div>
<div class="stat-card-info">You've {$ ramTotalMB $} MB Memory.</div>
</div>
<div class="stat-card">
<div class="stat-card-header">
<span class="stat-card-title">DISK USAGE</span>
<span class="stat-card-value">({$ diskUsage || 80 $}%)</span>
<span class="stat-card-value">({$ diskUsage $}%)</span>
</div>
<div class="progress-bar-container">
<div class="progress-bar" style="width: {$ diskUsage || 80 $}%;"></div>
<div class="progress-bar" style="width: {$ diskUsage $}%;"></div>
</div>
<div class="stat-card-info">You've {$ diskFreeGB || 80 $} GB remaining out of {$ diskTotalGB || 400 $} GB.</div>
<div class="stat-card-info">You've {$ diskFreeGB $} GB remaining out of {$ diskTotalGB $} GB.</div>
</div>
</div>
</div>

View File

@@ -22,6 +22,7 @@ from databases.models import Databases
from mailServer.models import EUsers
from ftp.models import Users as FTPUsers
from loginSystem.models import Administrator
from packages.models import Package
from django.views.decorators.http import require_GET, require_POST
import pwd
@@ -131,16 +132,100 @@ def getSystemStatus(request):
try:
val = request.session['userID']
currentACL = ACLManager.loadedACL(val)
admin = Administrator.objects.get(pk=val)
# Only admins should see system-wide information
if not currentACL.get('admin', 0):
return HttpResponse(json.dumps({'status': 0, 'error_message': 'Admin access required'}), content_type='application/json', status=403)
HTTPData = SystemInformation.getSystemInformation()
json_data = json.dumps(HTTPData)
return HttpResponse(json_data)
except KeyError:
return HttpResponse("Can not get admin Status")
# Admin users get full system information
if currentACL.get('admin', 0):
HTTPData = SystemInformation.getSystemInformation()
json_data = json.dumps(HTTPData)
return HttpResponse(json_data)
else:
# Non-admin users get user-specific resource information
import subprocess
import os
# Calculate user's disk usage
total_disk_used = 0
total_disk_limit = 0
# Get websites owned by this user
user_websites = admin.websites_set.all()
# Also get websites owned by admins created by this user (reseller pattern)
child_admins = Administrator.objects.filter(owner=admin.pk)
for child_admin in child_admins:
user_websites = user_websites | child_admin.websites_set.all()
# Calculate disk usage for all user's websites
for website in user_websites:
website_path = f"/home/{website.domain}"
if os.path.exists(website_path):
try:
# Get disk usage in MB
result = subprocess.check_output(['du', '-sm', website_path], stderr=subprocess.DEVNULL)
disk_used = int(result.decode().split()[0])
total_disk_used += disk_used
except:
pass
# Get disk limit from package
if website.package:
total_disk_limit += website.package.diskSpace
# Convert MB to GB for display
total_disk_used_gb = round(total_disk_used / 1024, 2)
total_disk_limit_gb = total_disk_limit if total_disk_limit > 0 else 100 # Default 100GB if no limit
disk_free_gb = max(0, total_disk_limit_gb - total_disk_used_gb)
disk_usage_percent = min(100, int((total_disk_used_gb / total_disk_limit_gb) * 100)) if total_disk_limit_gb > 0 else 0
# Calculate bandwidth usage (simplified - you may want to implement actual bandwidth tracking)
bandwidth_used = 0
bandwidth_limit = 0
for website in user_websites:
if website.package:
bandwidth_limit += website.package.bandwidth
bandwidth_limit_gb = bandwidth_limit if bandwidth_limit > 0 else 1000 # Default 1000GB if no limit
bandwidth_usage_percent = 0 # You can implement actual bandwidth tracking here
# Count resources
total_websites = user_websites.count()
total_databases = 0
total_emails = 0
website_names = list(user_websites.values_list('domain', flat=True))
if website_names:
total_databases = Databases.objects.filter(website__domain__in=website_names).count()
total_emails = EUsers.objects.filter(emailOwner__domainOwner__domain__in=website_names).count()
# Prepare response data matching the expected format
user_data = {
'cpuUsage': min(100, int((total_websites * 5))), # Estimate based on website count
'ramUsage': min(100, int((total_databases * 10) + (total_emails * 2))), # Estimate based on resources
'diskUsage': disk_usage_percent,
'cpuCores': 2, # Default for display
'ramTotalMB': 4096, # Default for display
'diskTotalGB': int(total_disk_limit_gb),
'diskFreeGB': int(disk_free_gb),
'uptime': 'User Account Active'
}
json_data = json.dumps(user_data)
return HttpResponse(json_data)
except Exception as e:
# Return default values on error
default_data = {
'cpuUsage': 0,
'ramUsage': 0,
'diskUsage': 0,
'cpuCores': 2,
'ramTotalMB': 4096,
'diskTotalGB': 100,
'diskFreeGB': 100,
'uptime': 'N/A'
}
return HttpResponse(json.dumps(default_data))
def getLoadAverage(request):