Логи и конфиги переработаны, добавлен модуль ZFS и ведется работа с телеграм-ботом

This commit is contained in:
2026-02-14 19:20:55 +03:00
parent 40bf9f9887
commit f227824070
21 changed files with 1135 additions and 689 deletions

View File

@@ -1,12 +1,11 @@
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
Примеры использования модуля postgresql.py новым способом
Демонстрирует прямое использование PostgreSQLOperations без основного класса ssh
Примеры использования модуля postgresql через единый SSHClient.
Паттерн: SSHClient + connect() + операции + close()
"""
import config
from modules.ssh_base import SSHBase
from modules.postgresql import PostgreSQLOperations
from modules import SSHClient
def example_basic_usage():
@@ -17,35 +16,25 @@ def example_basic_usage():
print("Пример 1: Базовое использование модуля postgresql")
print("=" * 60)
# Загружаем конфигурацию
cfg = config.get_config()
# Создаем SSH подключение
ssh_client = SSHBase(
client = SSHClient(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file'],
host_keys=cfg['ssh']['host_keys']
host_keys=cfg['ssh']['host_keys'],
)
# Подключаемся
ssh_client.connect()
# Создаем экземпляр модуля PostgreSQL
pg = PostgreSQLOperations(ssh_client)
# Получаем список баз данных
client.connect()
srv_pgsql = cfg['postgresql']['archive_server']
bases = pg.bases_list(srv_pgsql)
bases = client.bases_list(srv_pgsql)
print(f"Сервер PostgreSQL: {srv_pgsql}")
print(f"Найдено баз данных: {len(bases)}")
for base in bases[:5]: # Показываем первые 5
print(f" - {base}")
# Закрываем соединение
ssh_client.close()
client.close()
print("\n")
@@ -58,28 +47,23 @@ def example_get_bases_list():
print("=" * 60)
cfg = config.get_config()
ssh_client = SSHBase(
client = SSHClient(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file']
pkey_file=cfg['ssh']['pkey_file'],
host_keys=cfg['ssh'].get('host_keys', '~/.ssh/known_hosts'),
)
ssh_client.connect()
pg = PostgreSQLOperations(ssh_client)
client.connect()
srv_pgsql = cfg['postgresql']['archive_server']
# Получаем список баз данных
bases = pg.bases_list(srv_pgsql)
bases = client.bases_list(srv_pgsql)
print(f"Сервер: {srv_pgsql}")
print(f"Всего баз данных: {len(bases)}")
print("\nСписок баз данных:")
pg.bases_list_print(srv_pgsql)
ssh_client.close()
client.bases_list_print(srv_pgsql)
client.close()
print("\n")
@@ -92,27 +76,24 @@ def example_get_bases_size():
print("=" * 60)
cfg = config.get_config()
ssh_client = SSHBase(
client = SSHClient(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file']
pkey_file=cfg['ssh']['pkey_file'],
host_keys=cfg['ssh'].get('host_keys', '~/.ssh/known_hosts'),
)
ssh_client.connect()
pg = PostgreSQLOperations(ssh_client)
client.connect()
srv_pgsql = cfg['postgresql']['archive_server']
print(f"Сервер: {srv_pgsql}")
print("\nРазмеры баз данных:")
print("-" * 60)
print(f"{'База данных':<30} | Размер")
print("-" * 60)
pg.bases_size_print(srv_pgsql)
ssh_client.close()
client.bases_size_print(srv_pgsql)
client.close()
print("\n")
@@ -125,28 +106,24 @@ def example_backup_single_base():
print("=" * 60)
cfg = config.get_config()
ssh_client = SSHBase(
client = SSHClient(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file']
pkey_file=cfg['ssh']['pkey_file'],
host_keys=cfg['ssh'].get('host_keys', '~/.ssh/known_hosts'),
)
ssh_client.connect()
pg = PostgreSQLOperations(ssh_client)
client.connect()
srv_pgsql = cfg['postgresql']['archive_server']
# Получаем список баз и берем первую для примера
bases = pg.bases_list(srv_pgsql)
bases = client.bases_list(srv_pgsql)
if bases:
base_name = bases[0]
print(f"Создание бэкапа базы данных: {base_name}")
print(f"Сервер: {srv_pgsql}")
try:
results = pg.bases_backup(srv_pgsql, base_name)
results = client.bases_backup(srv_pgsql, base_name)
for result in results:
if result['success']:
print(f"✓ Бэкап базы '{result['base']}' создан успешно")
@@ -156,8 +133,8 @@ def example_backup_single_base():
print(f"Ошибка: {e}")
else:
print("Базы данных не найдены")
ssh_client.close()
client.close()
print("\n")
@@ -171,18 +148,16 @@ def example_backup_multiple_bases():
cfg = config.get_config()
ssh_client = SSHBase(
client = SSHClient(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file']
pkey_file=cfg['ssh']['pkey_file'],
host_keys=cfg['ssh'].get('host_keys', '~/.ssh/known_hosts'),
)
ssh_client.connect()
pg = PostgreSQLOperations(ssh_client)
client.connect()
srv_pgsql = cfg['postgresql']['archive_server']
# Получаем список баз из конфигурации для примеров
bases_to_backup = cfg['migration'].get('bases', [])
@@ -202,7 +177,7 @@ def example_backup_multiple_bases():
if bases_to_backup:
for base_name in bases_to_backup:
print(f"\nСоздание бэкапа базы: {base_name}")
results = pg.bases_backup(srv_pgsql, base_name)
results = client.bases_backup(srv_pgsql, base_name)
for result in results:
if result['success']:
print(f" ✓ Бэкап базы '{result['base']}' создан успешно")
@@ -210,7 +185,7 @@ def example_backup_multiple_bases():
print(f" ✗ Ошибка: {result['stderr']}")
else:
# Бэкап всех баз
results = pg.bases_backup(srv_pgsql, None)
results = client.bases_backup(srv_pgsql, None)
print(f"\nОбработано баз: {len(results)}")
successful = sum(1 for r in results if r['success'])
failed = len(results) - successful
@@ -222,7 +197,7 @@ def example_backup_multiple_bases():
except Exception as e:
print(f"Ошибка: {e}")
ssh_client.close()
client.close()
print("\n")
@@ -236,28 +211,26 @@ def example_backup_all_bases():
cfg = config.get_config()
ssh_client = SSHBase(
client = SSHClient(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file']
pkey_file=cfg['ssh']['pkey_file'],
host_keys=cfg['ssh'].get('host_keys', '~/.ssh/known_hosts'),
)
ssh_client.connect()
pg = PostgreSQLOperations(ssh_client)
client.connect()
srv_pgsql = cfg['postgresql']['archive_server']
print(f"Сервер: {srv_pgsql}")
print("Создание бэкапа всех баз данных...")
try:
result = pg.bases_backup_all(srv_pgsql)
result = client.bases_backup_all(srv_pgsql)
print("✓ Бэкап всех баз данных завершен успешно")
except Exception as e:
print(f"✗ Ошибка при создании бэкапа: {e}")
ssh_client.close()
client.close()
print("\n")
@@ -271,16 +244,15 @@ def example_create_and_drop_base():
cfg = config.get_config()
ssh_client = SSHBase(
client = SSHClient(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file']
pkey_file=cfg['ssh']['pkey_file'],
host_keys=cfg['ssh'].get('host_keys', '~/.ssh/known_hosts'),
)
ssh_client.connect()
pg = PostgreSQLOperations(ssh_client)
client.connect()
srv_pgsql = cfg['postgresql']['restore_server']
test_base_name = "test_base_example"
@@ -290,28 +262,28 @@ def example_create_and_drop_base():
try:
# Создаем базу данных
print("\n1. Создание базы данных...")
pg.base_create(srv_pgsql, test_base_name)
client.base_create(srv_pgsql, test_base_name)
print(f"✓ База данных '{test_base_name}' создана")
# Проверяем, что база создана
bases = pg.bases_list(srv_pgsql)
bases = client.bases_list(srv_pgsql)
if test_base_name in bases:
print(f"✓ База '{test_base_name}' найдена в списке баз")
# Удаляем базу данных
print("\n2. Удаление базы данных...")
pg.base_drop(srv_pgsql, test_base_name)
client.base_drop(srv_pgsql, test_base_name)
print(f"✓ База данных '{test_base_name}' удалена")
# Проверяем, что база удалена
bases = pg.bases_list(srv_pgsql)
bases = client.bases_list(srv_pgsql)
if test_base_name not in bases:
print(f"✓ База '{test_base_name}' отсутствует в списке баз")
except Exception as e:
print(f"✗ Ошибка: {e}")
ssh_client.close()
client.close()
print("\n")
@@ -325,16 +297,15 @@ def example_restore_base():
cfg = config.get_config()
ssh_client = SSHBase(
client = SSHClient(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file']
pkey_file=cfg['ssh']['pkey_file'],
host_keys=cfg['ssh'].get('host_keys', '~/.ssh/known_hosts'),
)
ssh_client.connect()
pg = PostgreSQLOperations(ssh_client)
client.connect()
archive_server = cfg['postgresql']['archive_server']
restore_server = cfg['postgresql']['restore_server']
backup_date = cfg['postgresql']['backup_date']
@@ -358,19 +329,19 @@ def example_restore_base():
# Сначала удаляем старую базу, если существует
print(f"\n1. Удаление старой базы '{restore_base}' (если существует)...")
try:
pg.base_drop(restore_server, restore_base)
client.base_drop(restore_server, restore_base)
print(f" ✓ Старая база удалена")
except Exception:
print(f" База не существует или уже удалена")
# Создаем новую базу
print(f"\n2. Создание новой базы '{restore_base}'...")
pg.base_create(restore_server, restore_base)
client.base_create(restore_server, restore_base)
print(f" ✓ База создана")
# Восстанавливаем из бэкапа
print(f"\n3. Восстановление из бэкапа...")
pg.base_restore(
client.base_restore(
archive_server, restore_server, backup_date,
archive_base, restore_base, extra
)
@@ -379,7 +350,7 @@ def example_restore_base():
except Exception as e:
print(f" ✗ Ошибка при восстановлении: {e}")
ssh_client.close()
client.close()
print("\n")
@@ -393,16 +364,15 @@ def example_manage_backups():
cfg = config.get_config()
ssh_client = SSHBase(
client = SSHClient(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file']
pkey_file=cfg['ssh']['pkey_file'],
host_keys=cfg['ssh'].get('host_keys', '~/.ssh/known_hosts'),
)
ssh_client.connect()
pg = PostgreSQLOperations(ssh_client)
client.connect()
srv_pgsql = cfg['postgresql']['archive_server']
backup_path = f'/backup/pgsql/{srv_pgsql}'
days_old = 30 # Удалять бэкапы старше 30 дней
@@ -413,7 +383,7 @@ def example_manage_backups():
try:
# Получаем список старых директорий
print("\n1. Поиск старых бэкапов...")
old_dirs = pg.file_list(backup_path, days_old)
old_dirs = client.file_list(backup_path, days_old)
if old_dirs.strip():
dirs_list = [d.strip() for d in old_dirs.split('\n') if d.strip()]
print(f"Найдено директорий для удаления: {len(dirs_list)}")
@@ -424,13 +394,13 @@ def example_manage_backups():
# Удаляем старые бэкапы
print(f"\n2. Удаление бэкапов старше {days_old} дней...")
pg.delete_old_backups(backup_path, days_old)
client.delete_old_backups(backup_path, days_old)
print("✓ Удаление завершено")
except Exception as e:
print(f"✗ Ошибка: {e}")
ssh_client.close()
client.close()
print("\n")
@@ -444,27 +414,25 @@ def example_full_workflow():
cfg = config.get_config()
ssh_client = SSHBase(
client = SSHClient(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file']
pkey_file=cfg['ssh']['pkey_file'],
host_keys=cfg['ssh'].get('host_keys', '~/.ssh/known_hosts'),
)
ssh_client.connect()
pg = PostgreSQLOperations(ssh_client)
client.connect()
srv_pgsql = cfg['postgresql']['archive_server']
try:
# Шаг 1: Получаем список баз
print("Шаг 1: Получение списка баз данных...")
bases = pg.bases_list(srv_pgsql)
bases = client.bases_list(srv_pgsql)
print(f" Найдено баз: {len(bases)}")
# Шаг 2: Получаем размеры баз
print("\nШаг 2: Получение размеров баз данных...")
sizes = pg.bases_size(srv_pgsql)
sizes = client.bases_size(srv_pgsql)
print(f" Получены размеры для {len(sizes)} баз")
for size_info in sizes[:3]: # Показываем первые 3
base_name = size_info[0]
@@ -474,7 +442,7 @@ def example_full_workflow():
# Шаг 3: Создаем бэкап первой базы (если есть)
if bases:
print(f"\nШаг 3: Создание бэкапа базы '{bases[0]}'...")
results = pg.bases_backup(srv_pgsql, bases[0])
results = client.bases_backup(srv_pgsql, bases[0])
for result in results:
if result['success']:
print(f" ✓ Бэкап создан успешно")
@@ -484,7 +452,7 @@ def example_full_workflow():
except Exception as e:
print(f"Ошибка: {e}")
finally:
ssh_client.close()
client.close()
print("\n")
@@ -498,23 +466,21 @@ def example_context_manager_style():
print("=" * 60)
cfg = config.get_config()
ssh_client = None
client = None
try:
ssh_client = SSHBase(
client = SSHClient(
hostname=cfg['ssh']['hostname'],
port=cfg['ssh']['port'],
username=cfg['ssh']['username'],
pkey_file=cfg['ssh']['pkey_file']
)
ssh_client.connect()
pg = PostgreSQLOperations(ssh_client)
client.connect()
srv_pgsql = cfg['postgresql']['archive_server']
# Получаем список баз и их размеры
bases = pg.bases_list(srv_pgsql)
bases = client.bases_list(srv_pgsql)
print(f"Сервер: {srv_pgsql}")
print(f"Найдено баз данных: {len(bases)}")
@@ -526,8 +492,8 @@ def example_context_manager_style():
except Exception as e:
print(f"Произошла ошибка: {e}")
finally:
if ssh_client:
ssh_client.close()
if client:
client.close()
print("\nСоединение закрыто")
print("\n")