﻿£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
import os
from subprocess import PIPE, Popen


def get_users_count_from_cllib():
    """
    Get user count using the common CloudLinux library.
    This number is more accurate for systems
    with a control panel installed.
    """
    if not os.path.exists('/opt/cloudlinux/venv/bin'):
        raise ValueError("CloudLinux virtual environment not found")

    cmd = '/opt/cloudlinux/venv/bin/python3 -c "from clcommon.cpapi import cpusers; print(cpusers())"'
    process = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE)
    output, errors = [result.decode().strip() for result in process.communicate()]

    if errors:
        raise ValueError(f"Failed to get users from CloudLinux library: {errors}")

    return len(output[1:-1].split(', '))


def get_users_count_generic():
    """
    Fallback method to get the user count
    by looking into the /etc/passwd file.
    """
    from up2date_client.clpwd import ClPwd
    pwd = ClPwd()
    return len(pwd.get_uid_dict())


def count_server_users():
    """
    Get the total count of users on the server.
    Tries the CloudLinux library first, falls back to generic method if it fails.
    """
    try:
        users_count = get_users_count_from_cllib()
    except Exception:
        users_count = get_users_count_generic()
    return users_count
