403Webshell
Server IP : 212.114.33.6  /  Your IP : 216.73.217.30
Web Server : Apache
System : Linux ger18 6.12.94+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.94-1 (2026-06-20) x86_64
User : immotrainerde ( 2287)
PHP Version : 8.2.32
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /sbin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /sbin/3ware-status_v3
#!/usr/bin/env python3

import os
import re
import sys
import subprocess

BINARY_PATH = "/usr/sbin/tw-cli"


def usage():
    print("Usage: 3ware-status [--nagios]")
    sys.exit(1)


def get_output(cmd):
    result = subprocess.run(
        cmd,
        shell=True,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        text=True,
        check=False,
    )

    return [
        line.strip()
        for line in result.stdout.splitlines()
        if line.strip()
    ]


def return_controller_list(output):
    lines = []
    for line in output:
        if re.match(r"^c[0-9]+\s.*$", line.strip()):
            lines.append(line.split()[0])
    return lines


def return_disk_list(output):
    lines = []
    for line in output:
        if re.match(r"^p[0-9]+\s.*$", line.strip()):
            parts = line.split()

            # Should contain something like 'u0'
            # '-' means the drive doesn't belong to any array
            # If NOT-PRESENT, it just means this is an empty port
            if parts[2].strip() != "-" and parts[1].strip() != "NOT-PRESENT":
                lines.append(parts)

    if fake_failure and lines:
        lines[0][1] = "NOT PRESENT"

    return lines


def return_array_list(output):
    lines = []
    for line in output:
        if re.match(r"^u[0-9]+\s.*$", line.strip()):
            lines.append(line.split())

    if fake_failure and lines:
        lines[0][2] = "DEGRADED"

    return lines


if len(sys.argv) > 2:
    usage()

nagios_mode = False
nagios_good_array = 0
nagios_bad_array = 0
nagios_good_disk = 0
nagios_bad_disk = 0

if len(sys.argv) > 1:
    if sys.argv[1] == "--nagios":
        nagios_mode = True
    else:
        usage()

if not (os.path.exists(BINARY_PATH) and os.access(BINARY_PATH, os.X_OK)):
    if nagios_mode:
        print(f"UNKNOWN - Cannot find {BINARY_PATH}")
    else:
        print(f"Cannot find {BINARY_PATH}. Please install it.")
    sys.exit(3)

fake_failure = os.path.exists("/root/fake_3ware_failure")

output = get_output(f"{BINARY_PATH} info")
controller_list = return_controller_list(output)

bad = False

if not nagios_mode:
    print("-- Controller informations --")
    print("-- ID | Model")

    for controller in controller_list:
        output = get_output(f"{BINARY_PATH} info {controller} model")
        model = output[0].split(" = ")[1].strip()
        print(f"{controller} | {model}")

    print("")

if not nagios_mode:
    print("-- Arrays informations --")
    print("-- ID\tType\tSize\tStatus")

for controller in controller_list:
    output = get_output(f"{BINARY_PATH} info {controller}")
    array_list = return_array_list(output)

    for array in array_list:
        array_type = array[1].replace("-", "")
        array_id = controller + array[0]
        size = array[6].split(".")[0] + "G"
        status = array[2]

        if status not in ["OK", "VERIFYING", "VERIFY-PAUSED"]:
            bad = True
            nagios_bad_array += 1
        else:
            nagios_good_array += 1

        if not nagios_mode:
            print(f"{array_id}\t{array_type}\t{size}\t{status}")

if not nagios_mode:
    print("")

if not nagios_mode:
    print("-- Disks informations")
    print("-- ID\tModel\t\t\tStatus")

for controller in controller_list:
    output = get_output(f"{BINARY_PATH} info {controller}")
    disk_list = return_disk_list(output)

    for disk in disk_list:
        disk_id = controller + disk[2] + disk[0]

        output = get_output(f"{BINARY_PATH} info {controller} {disk[0]} model")
        model = output[0].split(" = ")[1].strip()

        output = get_output(f"{BINARY_PATH} info {controller} {disk[0]} status")
        status = output[0].split(" = ")[1].strip()

        if status != "OK":
            bad = True
            nagios_bad_disk += 1
        else:
            nagios_good_disk += 1

        if not nagios_mode:
            print(f"{disk_id}\t{model}\t{status}")

if nagios_mode:
    if bad:
        print(
            f"RAID ERROR - Arrays: OK:{nagios_good_array} Bad:{nagios_bad_array} "
            f"- Disks: OK:{nagios_good_disk} Bad:{nagios_bad_disk}"
        )
        sys.exit(2)

    print(
        f"RAID OK - Arrays: OK:{nagios_good_array} Bad:{nagios_bad_array} "
        f"- Disks: OK:{nagios_good_disk} Bad:{nagios_bad_disk}"
    )
else:
    if bad:
        print("\nThere is at least one disk/array in a NOT OPTIMAL state.")
        sys.exit(1)

Youez - 2016 - github.com/yon3zu
LinuXploit