|
|
@@ -1,8 +1,11 @@
|
|
|
using CronAlarm.Config;
|
|
|
+using CronAlarm.Models;
|
|
|
using Microsoft.AspNetCore.Components;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
+using System.Net.Http;
|
|
|
+using System.Threading.Tasks;
|
|
|
|
|
|
namespace CronAlarm.Pages
|
|
|
{
|
|
|
@@ -16,6 +19,8 @@ namespace CronAlarm.Pages
|
|
|
|
|
|
private IDictionary<string, int> SelectedOptions { get; set; } = new Dictionary<string, int>();
|
|
|
|
|
|
+ private IList<StatusMessage> Messages { get; set; } = new List<StatusMessage>();
|
|
|
+
|
|
|
public AlertSelection()
|
|
|
{
|
|
|
}
|
|
|
@@ -41,7 +46,7 @@ namespace CronAlarm.Pages
|
|
|
return SelectedOptions.ContainsKey(group) && SelectedOptions[group] == index ? "active" : string.Empty;
|
|
|
}
|
|
|
|
|
|
- private void Save()
|
|
|
+ private async void Save()
|
|
|
{
|
|
|
var alerts = new List<CronEntry>();
|
|
|
foreach (var group in Config.Groups)
|
|
|
@@ -58,12 +63,27 @@ namespace CronAlarm.Pages
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- ResetGroups(CronFragmentHandler.Update(alerts));
|
|
|
+ try
|
|
|
+ {
|
|
|
+ ResetGroups(CronFragmentHandler.Update(alerts));
|
|
|
+ }
|
|
|
+ catch (AggregateException e)
|
|
|
+ {
|
|
|
+ await ProcessAggregateException(e);
|
|
|
+ }
|
|
|
+ await AddMessage("success", "crontab successfully updated");
|
|
|
}
|
|
|
|
|
|
- private void Reset()
|
|
|
+ private async void Reset()
|
|
|
{
|
|
|
- ResetGroups(CronFragmentHandler.GetExpressions());
|
|
|
+ try
|
|
|
+ {
|
|
|
+ ResetGroups(CronFragmentHandler.GetExpressions());
|
|
|
+ }
|
|
|
+ catch (AggregateException e)
|
|
|
+ {
|
|
|
+ await ProcessAggregateException(e);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void ResetGroups(IEnumerable<string> cronLines)
|
|
|
@@ -75,5 +95,32 @@ namespace CronAlarm.Pages
|
|
|
SelectedOptions[group.Name] = group.IndexedOptions.Select(item => item.ToTuple()).FirstOrDefault(item => current.Contains(item.Item2.Pattern))?.Item1 ?? -1;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ private async Task AddMessage(string type, string message)
|
|
|
+ {
|
|
|
+ var item = new StatusMessage
|
|
|
+ {
|
|
|
+ Type = type,
|
|
|
+ Message = message,
|
|
|
+ };
|
|
|
+
|
|
|
+ Messages.Add(item);
|
|
|
+ await Task.Delay(5000);
|
|
|
+ Messages = Messages.Where(i => i.Id != item.Id).ToList();
|
|
|
+ StateHasChanged();
|
|
|
+ }
|
|
|
+
|
|
|
+ private async Task ProcessAggregateException(AggregateException exception)
|
|
|
+ {
|
|
|
+ var httpException = exception.InnerExceptions.OfType<HttpRequestException>().FirstOrDefault();
|
|
|
+ if (httpException != null)
|
|
|
+ {
|
|
|
+ await AddMessage("danger", $"Error from CronAPI: {httpException.Message}");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ await AddMessage("danger", "Unknown Error");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|