/
akuzn.1
/
backupper
Обзор
Документация
Войти
/
akuzn.1
/
backupper
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Backupper/Notifications/NotificationManager.cs
101 строка
4 KB
aleksandr kuznetsov
Начальный коммит. До этого приложение создавалось на gitlab, перенёс заготовку оттуда.
05 янв 2025, 19:14
05 янв 2025, 19:14
824f648
Код
Авторство
О чём код?
using Microsoft.Extensions.Configuration; using NotificationPluginBase; using Serilog; using System.Reflection; namespace Backupper.Notifications; public class NotificationManager { private readonly List<INotificationPlugin> _services = new(); public NotificationManager(IConfiguration configuration) { LoadNotificationServices(configuration); } private void LoadNotificationServices(IConfiguration configuration) { var pluginsPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugins"); if (!Directory.Exists(pluginsPath)) { Directory.CreateDirectory(pluginsPath); return; } foreach (var dllPath in Directory.GetFiles(pluginsPath, "*.dll", SearchOption.AllDirectories)) { try { var assembly = Assembly.LoadFrom(dllPath); var serviceTypes = assembly.GetTypes() .Where(t => !t.IsInterface && !t.IsAbstract && typeof(INotificationPlugin).IsAssignableFrom(t)); foreach (var serviceType in serviceTypes) { try { if (Activator.CreateInstance(serviceType, configuration) is INotificationPlugin service) { _services.Add(service); Log.Information("Загружен плагин уведомлений: {Plugin}", serviceType.Name); } } catch (Exception ex) { Log.Error(ex, "Ошибка при создании экземпляра плагина {Plugin}", serviceType.Name); } } } catch (Exception ex) { Log.Error(ex, "Ошибка при загрузке плагина {Plugin}", Path.GetFileName(dllPath)); } } } public async Task NotifySuccessAsync(string profileName, string backupPath, int filesCount, bool isFullBackup) { foreach (var service in _services) { try { await service.SendSuccessNotificationAsync(profileName, backupPath, filesCount, isFullBackup); } catch (Exception ex) { Log.Error(ex, "Ошибка при отправке уведомления об успехе через {Service}", service.GetType().Name); } } } public async Task NotifyErrorAsync(string profileName, string error) { foreach (var service in _services) { try { await service.SendErrorNotificationAsync(profileName, error); } catch (Exception ex) { Log.Error(ex, "Ошибка при отправке уведомления об ошибке через {Service}", service.GetType().Name); } } } public async Task NotifyRotationAsync(string profileName, int fullBackupsDeleted, int incrementalBackupsDeleted) { foreach (var service in _services) { try { await service.SendRotationNotificationAsync(profileName, fullBackupsDeleted, incrementalBackupsDeleted); } catch (Exception ex) { Log.Error(ex, "Ошибка при отправке уведомления о ротации через {Service}", service.GetType().Name); } } } }