This commit is contained in:
2020-07-28 17:25:45 +00:00
parent 27ecaba423
commit 5e8cf84806
4 changed files with 22 additions and 16 deletions

View File

@@ -181,11 +181,13 @@ namespace AyaNova.Api.Controllers
if (!ModelState.IsValid) if (!ModelState.IsValid)
return BadRequest(new ApiErrorResponse(ModelState)); return BadRequest(new ApiErrorResponse(ModelState));
var message = $"{UserNameFromContext.Name(HttpContext.Items)}: \"{notifyDirectMessage.Message}\"";
foreach (long l in notifyDirectMessage.Users) foreach (long l in notifyDirectMessage.Users)
{ {
if (l != 0) if (l != 0)
await NotifyEventProcessor.AddGeneralNotifyEvent(NotifyEventType.GeneralNotification, message, null, l); await NotifyEventProcessor.AddGeneralNotifyEvent(
NotifyEventType.GeneralNotification, notifyDirectMessage.Message, UserNameFromContext.Name(HttpContext.Items), null, l
);
} }
return NoContent(); return NoContent();

View File

@@ -13,8 +13,7 @@ using AyaNova.Models;
namespace AyaNova.Biz namespace AyaNova.Biz
{ {
//This class handles word breaking, processing keywords and searching for results
internal static class NotifyEventProcessor internal static class NotifyEventProcessor
{ {
private static ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger("NotifyEventProcessor"); private static ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger("NotifyEventProcessor");
@@ -34,14 +33,14 @@ namespace AyaNova.Biz
else else
log.LogWarning($"Ops problem notification: \"{message}\""); log.LogWarning($"Ops problem notification: \"{message}\"");
await AddGeneralNotifyEvent(NotifyEventType.ServerOperationsProblem, message); await AddGeneralNotifyEvent(NotifyEventType.ServerOperationsProblem, message,"OPS");
} }
//This handles general notification events not requiring a decision or tied to an object that are basically just a immediate message to the user //This handles general notification events not requiring a decision or tied to an object that are basically just a immediate message to the user
//e.g. ops problems, GeneralNotification, NotifyHealthCheck etc //e.g. ops problems, GeneralNotification, NotifyHealthCheck etc
//optional user id to send directly to them //optional user id to send directly to them
internal static async Task AddGeneralNotifyEvent(NotifyEventType eventType, string message, Exception except = null, long userId = 0) internal static async Task AddGeneralNotifyEvent(NotifyEventType eventType, string message, string name, Exception except = null, long userId = 0)
{ {
log.LogTrace($"AddGeneralNotifyEvent processing: [type:{eventType}, userId:{userId}, message:{message}]"); log.LogTrace($"AddGeneralNotifyEvent processing: [type:{eventType}, userId:{userId}, message:{message}]");
#if (DEBUG) #if (DEBUG)
@@ -88,7 +87,12 @@ namespace AyaNova.Biz
await ct.SaveChangesAsync(); await ct.SaveChangesAsync();
} }
NotifyEvent n = new NotifyEvent() { EventType = eventType, UserId = userId, Message = message, NotifySubscriptionId = defaultsub.Id, Name = UserName }; if (string.IsNullOrWhiteSpace(name))
{
name = UserName;
}
NotifyEvent n = new NotifyEvent() { EventType = eventType, UserId = userId, Message = message, NotifySubscriptionId = defaultsub.Id, Name = name };
await ct.NotifyEvent.AddAsync(n); await ct.NotifyEvent.AddAsync(n);
await ct.SaveChangesAsync(); await ct.SaveChangesAsync();
return; return;
@@ -101,9 +105,9 @@ namespace AyaNova.Biz
//append exception message if not null //append exception message if not null
if (except != null) if (except != null)
message += $"\nException error: {ExceptionUtil.ExtractAllExceptionMessages(except)}"; message += $"\nException error: {ExceptionUtil.ExtractAllExceptionMessages(except)}";
foreach (var sub in subs) foreach (var sub in subs)
{ {
//note flag ~SERVER~ means to client to substitute "Server" translation key text instead //note flag ~SERVER~ means to client to substitute "Server" translation key text instead
NotifyEvent n = new NotifyEvent() { EventType = eventType, UserId = sub.UserId, Message = message, NotifySubscriptionId = sub.Id, Name = "~SERVER~" }; NotifyEvent n = new NotifyEvent() { EventType = eventType, UserId = sub.UserId, Message = message, NotifySubscriptionId = sub.Id, Name = "~SERVER~" };
await ct.NotifyEvent.AddAsync(n); await ct.NotifyEvent.AddAsync(n);

View File

@@ -88,7 +88,7 @@ namespace AyaNova.Biz
var msg = $"Error during data backup \"{Result}\""; var msg = $"Error during data backup \"{Result}\"";
await JobsBiz.LogJobAsync(Guid.Empty, msg); await JobsBiz.LogJobAsync(Guid.Empty, msg);
log.LogError($"BACKUP ERROR: {Result}"); log.LogError($"BACKUP ERROR: {Result}");
await NotifyEventProcessor.AddGeneralNotifyEvent(NotifyEventType.BackupStatus, msg); await NotifyEventProcessor.AddGeneralNotifyEvent(NotifyEventType.BackupStatus, msg,"Backup");
} }
//DO FILE BACKUP IF ATTACHMENTS BACKED UP //DO FILE BACKUP IF ATTACHMENTS BACKED UP
@@ -110,14 +110,14 @@ namespace AyaNova.Biz
log.LogDebug("Backup completed"); log.LogDebug("Backup completed");
var duration=DateTime.Now - dtStartBackup; var duration=DateTime.Now - dtStartBackup;
await NotifyEventProcessor.AddGeneralNotifyEvent(NotifyEventType.BackupStatus, $"Backup ({(OnDemand ? "manual / on demand" : "scheduled")}) completed successfully, duration (h:m:s.ms): {duration.ToString()}, server re-opened"); await NotifyEventProcessor.AddGeneralNotifyEvent(NotifyEventType.BackupStatus, $"Backup ({(OnDemand ? "manual / on demand" : "scheduled")}) completed successfully, duration (h:m:s.ms): {duration.ToString()}, server re-opened","Backup");
} }
catch (Exception ex) catch (Exception ex)
{ {
await JobsBiz.LogJobAsync(Guid.Empty, "Backup failed with errors:"); await JobsBiz.LogJobAsync(Guid.Empty, "Backup failed with errors:");
await JobsBiz.LogJobAsync(Guid.Empty, ExceptionUtil.ExtractAllExceptionMessages(ex)); await JobsBiz.LogJobAsync(Guid.Empty, ExceptionUtil.ExtractAllExceptionMessages(ex));
log.LogError(ex, "Backup failed"); log.LogError(ex, "Backup failed");
await NotifyEventProcessor.AddGeneralNotifyEvent(NotifyEventType.BackupStatus, "Backup failed", ex); await NotifyEventProcessor.AddGeneralNotifyEvent(NotifyEventType.BackupStatus, "Backup failed","Backup", ex);
throw ex; throw ex;
} }
finally finally

View File

@@ -73,7 +73,7 @@ namespace AyaNova.Biz
if (dtNowLocal.Hour > 6 && dtNowLocal.Hour < 10) if (dtNowLocal.Hour > 6 && dtNowLocal.Hour < 10)
{ {
log.LogTrace("Notify health check submitted to subscribers"); log.LogTrace("Notify health check submitted to subscribers");
await NotifyEventProcessor.AddGeneralNotifyEvent(NotifyEventType.NotifyHealthCheck, "OK"); await NotifyEventProcessor.AddGeneralNotifyEvent(NotifyEventType.NotifyHealthCheck, "OK","");
lastNotifyHealthCheckSentLocal = dtNowLocal; lastNotifyHealthCheckSentLocal = dtNowLocal;
} }
} }
@@ -206,7 +206,7 @@ namespace AyaNova.Biz
log.LogTrace($"DeliverSMTP delivering notify event: {ne}"); log.LogTrace($"DeliverSMTP delivering notify event: {ne}");
if (string.IsNullOrWhiteSpace(ne.NotifySubscription.DeliveryAddress)) if (string.IsNullOrWhiteSpace(ne.NotifySubscription.DeliveryAddress))
{ {
await NotifyEventProcessor.AddGeneralNotifyEvent(NotifyEventType.GeneralNotification, $"Error: no email address is set in subscription to deliver email notification for this event:{ne}", null, ne.UserId); await NotifyEventProcessor.AddGeneralNotifyEvent(NotifyEventType.GeneralNotification, $"No email address is set in subscription to deliver email notification for this event:{ne}","Error", null, ne.UserId);
} }
@@ -233,7 +233,7 @@ namespace AyaNova.Biz
if (!ServerGlobalOpsSettingsCache.Notify.SmtpDeliveryActive) if (!ServerGlobalOpsSettingsCache.Notify.SmtpDeliveryActive)
{ {
await NotifyEventProcessor.AddGeneralNotifyEvent(NotifyEventType.GeneralNotification, $"Email notifications are set to OFF at server, unable to send email notification for this event:{ne}", null, ne.UserId); await NotifyEventProcessor.AddGeneralNotifyEvent(NotifyEventType.GeneralNotification, $"Email notifications are set to OFF at server, unable to send email notification for this event:{ne}","Error", null, ne.UserId);
log.LogInformation($"** WARNING: SMTP notification is currently set to Active=False; unable to deliver email notification, re-routed to in-app notification instead [UserId={ne.UserId}, Notify subscription={ne.NotifySubscriptionId}]. Change this setting or have users remove email delivery notifications if this is permanent **"); log.LogInformation($"** WARNING: SMTP notification is currently set to Active=False; unable to deliver email notification, re-routed to in-app notification instead [UserId={ne.UserId}, Notify subscription={ne.NotifySubscriptionId}]. Change this setting or have users remove email delivery notifications if this is permanent **");
} }
else else
@@ -244,7 +244,7 @@ namespace AyaNova.Biz
catch (Exception ex) catch (Exception ex)
{ {
await NotifyEventProcessor.AddOpsProblemEvent("SMTP Notification failed", ex); await NotifyEventProcessor.AddOpsProblemEvent("SMTP Notification failed", ex);
await NotifyEventProcessor.AddGeneralNotifyEvent(NotifyEventType.GeneralNotification, $"Error: an error prevented delivering the following notification via email. System operator users have been notified:{ne}", null, ne.UserId); await NotifyEventProcessor.AddGeneralNotifyEvent(NotifyEventType.GeneralNotification, $"An error prevented delivering the following notification via email. System operator users have been notified:{ne}","Error", null, ne.UserId);
} }
finally finally
{ {