#!/opt/cloudlinux/venv/bin/python3
"""
lvestats-gov-helper — Bridge to clcommon.lib.MySQLGovernor for DB Governor.

Imports: clcommon.lib (MySQLGovernor, MySQLGovException, MySQLGovernorAbsent)

Returns JSON to stdout.

Usage:
    lvestats-gov-helper limits <username> [<username>...]
    lvestats-gov-helper governor-mode
"""

import json
import sys


def cmd_limits(usernames):
    results = {}
    try:
        from clcommon.lib import MySQLGovernor, MySQLGovException, MySQLGovernorAbsent
        governor = MySQLGovernor()
    except ImportError as e:
        for u in usernames:
            results[u] = {"error": "clcommon.lib.MySQLGovernor not available: %s" % e, "absent": True}
        return results

    for username in usernames:
        try:
            status = governor.get_governor_status_by_username(username)
            if status != 'watched':
                results[username] = {"cpu": 0, "io": 0}
                continue
            cpu, io = governor.get_limits_by_user(username)
            results[username] = {"cpu": cpu, "io": io}
        except MySQLGovernorAbsent as e:
            results[username] = {"error": str(e), "absent": True}
        except MySQLGovException as e:
            results[username] = {"error": str(e), "absent": False}
        except Exception as e:
            results[username] = {"error": "%s: %s" % (type(e).__name__, e), "absent": False}

    return results


def cmd_governor_mode():
    """Get MySQL Governor mode using clcommon.lib.MySQLGovernor.

    Returns the mode string: "abusers", "all", "single", "on", or "none".
    """
    try:
        from clcommon.lib import MySQLGovernor
        g = MySQLGovernor()
        mode = g.get_governor_mode()
        return mode or "none"
    except Exception:
        return "none"


def main():
    if len(sys.argv) < 2:
        print("Usage: lvestats-gov-helper <command> [args...]", file=sys.stderr)
        print("Commands: limits, governor-mode", file=sys.stderr)
        sys.exit(1)

    command = sys.argv[1]

    try:
        if command == "limits":
            if len(sys.argv) < 3:
                print("Usage: lvestats-gov-helper limits <username> [<username>...]", file=sys.stderr)
                sys.exit(1)
            result = cmd_limits(sys.argv[2:])

        elif command == "governor-mode":
            result = cmd_governor_mode()

        else:
            print("Unknown command: %s" % command, file=sys.stderr)
            sys.exit(1)

        json.dump(result, sys.stdout)
        sys.stdout.write("\n")

    except Exception as e:
        print("lvestats-gov-helper: unexpected error: %s: %s" % (type(e).__name__, e), file=sys.stderr)
        sys.exit(1)


if __name__ == "__main__":
    main()
