Логи и конфиги переработаны, добавлен модуль ZFS и ведется работа с телеграм-ботом
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user