????

Your IP : 3.137.219.117


Current Path : /proc/329612/root/usr/sbin/
Upload File :
Current File : //proc/329612/root/usr/sbin/cloudlinux-server-flags

#!/opt/cloudlinux/venv/bin/python3 -bb
#
# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2019 All Rights Reserved
#
# Licensed under CLOUD LINUX LICENSE AGREEMENT
# http://cloudlinux.com/docs/LICENSE.TXT

"""
Set of useful command line options to quickly get
information about available flags, their status and path
"""

import argparse
import json
import os

from clflags.gather import (
    list_flags_info
)
from clflags.config import DEFAULT_FLAGS_STORAGE_PATH, DEFAULT_META_STORAGE_PATH
from prettytable import PrettyTable


def list_flags(args):
    """
    Lists information about all available flags on server.

    Supports both human-readable and json formats.

    E.g.
    +--------------------------------------------------------------------+
    | Name       | Description          | Path                 | Enabled |
    +------------+----------------------+----------------------+---------+
    | first-test | My first and super   | /var/cloudlinux/flag | False   |
    |            | cool flag that I can | s/enabled-           |         |
    |            | use everywhere       | flags.d/first-       |         |
    |            |                      | test.flag            |         |
    | super-test | My second and super  | /var/cloudlinux/flag | False   |
    |            | cool flag that I can | s/enabled-           |         |
    |            | use everywhere. Used | flags.d/super-       |         |
    |            | in AccelerateWP and  | test.flag            |         |
    |            | Immunify teams.      |                      |         |
    +------------+----------------------+----------------------+---------+
    """
    flags = list_flags_info()

    results = []
    for flag in flags:
        results.append(dict(
            name=flag.name,
            description=flag.description,
            path=flag.path,
            enabled=flag.enabled
        ))

    if args.json:
        print(json.dumps(results, indent=2))
        return
    else:
        if not results:
            print('No flags available on this server')
            return

        t = PrettyTable(
            [i.capitalize() for i in results[0]],
            align='l',
            max_table_width=os.get_terminal_size().columns - 10,
            max_width=60
        )
        t.add_rows([
            list(value.values())
            for value in results
        ])
        print(t)


def system_info(args):
    """
    Useful information about system itself:
    - data paths for flags and metadata
    """
    results = {
        'Flags default path': DEFAULT_FLAGS_STORAGE_PATH,
        'Flags metadata path': DEFAULT_META_STORAGE_PATH
    }

    t = PrettyTable(
        ['Name', 'Value'],
        align='l',
        title='Generic system information',
        max_width=80)
    t.add_rows([
        (name, value)
        for name, value in results.items()
    ])
    print(t)


if __name__ == '__main__':
    parser = argparse.ArgumentParser()

    subparsers = parser.add_subparsers(
        title='Actions with flags',
        description='Available manipulations that you can do with flags.',
        dest='action')
    info_subparser = subparsers.add_parser(
        'info', help='Prints useful information about the system.')

    list_subparser = subparsers.add_parser(
        'list', help='List all available flags on this server, '
                     'their paths and current reported status.')
    list_subparser.add_argument(
        '--json', action='store_true',
        default=False, help='Return response in json format')

    args = parser.parse_args()

    if args.action == 'info':
        system_info(args)
    elif args.action == 'list':
        list_flags(args)
    else:
        parser.print_help()
        exit(1)