Mini Shell

Direktori : /sbin/
Upload File :
Current File : //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
import sys

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({
            '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(list(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()
        sys.exit(1)

Zerion Mini Shell 1.0