66 lines
1.8 KiB
Python
66 lines
1.8 KiB
Python
from __future__ import annotations
|
|
|
|
|
|
def find_db_disk_info(df_output: str) -> tuple[int, int] | None:
|
|
"""
|
|
> df --output=source,size,used,target | tail -n +2
|
|
/dev/root 9982728 6428268 /
|
|
/dev/nvme1n1p1 30297152 19780948 /opt/volumes/mariadb
|
|
"""
|
|
data_disk_available = False
|
|
if "/opt/volumes/mariadb" in df_output:
|
|
data_disk_available = True
|
|
|
|
for line in df_output.strip().split("\n"):
|
|
if not data_disk_available and not (
|
|
"/dev/root" in line or "/dev/sda1" in line or "/dev/vda1" in line or "/dev/xvda1" in line
|
|
):
|
|
continue
|
|
if data_disk_available and "/opt/volumes/mariadb" not in line:
|
|
continue
|
|
parts = line.split()
|
|
if len(parts) < 3:
|
|
continue
|
|
return int(parts[1]), int(parts[2])
|
|
return None
|
|
|
|
|
|
def parse_du_output_of_mysql_directory(du_output: str) -> dict[str, int]: # noqa: C901
|
|
"""
|
|
161392 /var/lib/mysql/_cc7c51c2a5c9f230
|
|
12M /var/lib/mysql/ibtmp1
|
|
140M /var/lib/mysql/mysql
|
|
101M /var/lib/mysql/mysql-bin.000452
|
|
"""
|
|
size_info = {}
|
|
for line in du_output.strip().split("\n"):
|
|
size_str, path = line.split(maxsplit=1)
|
|
size_info[path] = int(size_str)
|
|
|
|
data = {
|
|
"schema": {},
|
|
"bin_log": 0,
|
|
"slow_log": 0,
|
|
"error_log": 0,
|
|
"core": 0,
|
|
"other": 0,
|
|
}
|
|
|
|
for path, size in size_info.items():
|
|
if not path.startswith("/var/lib/mysql"):
|
|
continue
|
|
file = path[len("/var/lib/mysql/") :] # Remove the base path
|
|
if file.startswith("mysql-bin"):
|
|
data["bin_log"] += size
|
|
elif file.startswith("mysql-slow.log"):
|
|
data["slow_log"] += size
|
|
elif file.startswith("mysql-error.log"):
|
|
data["error_log"] += size
|
|
elif file in ["ibdata1", "ib_logfile0", "ibtmp1", "aria_log_control"] or file.startswith("aria_log."):
|
|
data["core"] += size
|
|
elif file.startswith("_") or file in ["mysql", "performance_schema", "sys", "percona"]:
|
|
data["schema"][file] = size
|
|
else:
|
|
data["other"] += size
|
|
return data
|