optimization update, web scheduler test-integration
This commit is contained in:
parent
3c9ccaafeb
commit
1591618c2c
103 changed files with 4826 additions and 1502 deletions
|
|
@ -0,0 +1,177 @@
|
|||
using Insight.Infrastructure.Entities;
|
||||
using Insight.Web.Components.Containers;
|
||||
using Insight.Web.Constants;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Bson.Serialization;
|
||||
using MongoDB.Driver;
|
||||
using MudBlazor;
|
||||
using System.Text.RegularExpressions;
|
||||
using SortDirection = MudBlazor.SortDirection;
|
||||
|
||||
namespace Insight.Web.Pages.Management.Scheduler.Jobs;
|
||||
|
||||
[Route(Navigation.Management.Scheduler.Jobs.TriggersAssign)]
|
||||
public partial class TriggersAssign
|
||||
{
|
||||
[Parameter] public string? JobId { get; set; }
|
||||
|
||||
[Inject] private IMongoDatabase Database { get; init; } = default!;
|
||||
[Inject] private ISnackbar Snackbar { get; init; } = default!;
|
||||
[Inject] private NavigationManager NavigationManager { get; init; } = default!;
|
||||
|
||||
private TableContainer<TriggerEntity>? Container { get; set; }
|
||||
private string Title { get; set; } = Global.Name;
|
||||
private List<BreadcrumbItem> Breadcrumbs { get; } = new();
|
||||
private string? Search { get; set; }
|
||||
|
||||
private TriggerEntity? Model { get; set; }
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(JobId))
|
||||
{
|
||||
Notification.Error(Snackbar, "Not Found");
|
||||
NavigationManager.NavigateTo(Navigation.Management.Scheduler.Jobs.Index);
|
||||
return;
|
||||
}
|
||||
|
||||
var job = await Database.Job()
|
||||
.Aggregate()
|
||||
.Match(Builders<JobEntity>.Filter.Eq(p => p.Id, JobId))
|
||||
.FirstOrDefaultAsync(default);
|
||||
|
||||
if (job is null)
|
||||
{
|
||||
Notification.Error(Snackbar, "Not Found");
|
||||
NavigationManager.NavigateTo(Navigation.Management.Scheduler.Jobs.Index);
|
||||
return;
|
||||
}
|
||||
|
||||
Breadcrumbs.Add(new BreadcrumbItem("Home", href: Navigation.Home));
|
||||
Breadcrumbs.Add(new BreadcrumbItem("Scheduler", href: Navigation.Management.Scheduler.Index));
|
||||
Breadcrumbs.Add(new BreadcrumbItem("Jobs", href: Navigation.Management.Scheduler.Jobs.Index));
|
||||
|
||||
Title = $"Scheduler » Jobs » {job.Name} » Assign Triggers|Insight";
|
||||
Breadcrumbs.Add(new BreadcrumbItem(job.Name, href: Navigation.Management.Scheduler.Jobs.DetailsHref(JobId)));
|
||||
Breadcrumbs.Add(new BreadcrumbItem("Triggers", href: Navigation.Management.Scheduler.Jobs.TriggersHref(JobId)));
|
||||
Breadcrumbs.Add(new BreadcrumbItem("Assign", href: "#", true));
|
||||
}
|
||||
|
||||
private async Task<TableData<TriggerEntity>> LoadDataAsync(TableState state)
|
||||
{
|
||||
try
|
||||
{
|
||||
var filter = Builders<BsonDocument>.Filter.Empty;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(Search) is false)
|
||||
{
|
||||
var regex = new BsonRegularExpression(new Regex(Search, RegexOptions.IgnoreCase));
|
||||
filter &= Builders<BsonDocument>.Filter.Regex("name", regex) |
|
||||
Builders<BsonDocument>.Filter.Regex("description", regex);
|
||||
}
|
||||
|
||||
var query = Database.Trigger()
|
||||
.Aggregate()
|
||||
.AppendStage<BsonDocument>(new BsonDocument("$lookup", new BsonDocument
|
||||
{
|
||||
{ "from", "job_triggers" },
|
||||
{ "localField", "_id" },
|
||||
{ "foreignField", "_trigger" },
|
||||
{ "as", "map" }
|
||||
}))
|
||||
.AppendStage<BsonDocument>(new BsonDocument("$unwind", new BsonDocument
|
||||
{
|
||||
{ "path", "$map" },
|
||||
{ "preserveNullAndEmptyArrays", true }
|
||||
}))
|
||||
.AppendStage<BsonDocument>(
|
||||
new BsonDocument("$match",
|
||||
new BsonDocument("map._job", new BsonDocument("$ne", new ObjectId(JobId))))
|
||||
)
|
||||
.Sort(state.SortDirection switch
|
||||
{
|
||||
SortDirection.Ascending => state.SortLabel switch
|
||||
{
|
||||
"Name" => Builders<BsonDocument>.Sort.Ascending("name"),
|
||||
"Description" => Builders<BsonDocument>.Sort.Ascending("description"),
|
||||
_ => null
|
||||
},
|
||||
SortDirection.Descending => state.SortLabel switch
|
||||
{
|
||||
"Name" => Builders<BsonDocument>.Sort.Descending("name"),
|
||||
"Description" => Builders<BsonDocument>.Sort.Descending("description"),
|
||||
_ => null
|
||||
},
|
||||
_ => Builders<BsonDocument>.Sort.Ascending("name")
|
||||
});
|
||||
|
||||
var countResult = await query.Count().FirstOrDefaultAsync(default);
|
||||
var itemResult = await query.Skip(state.Page * state.PageSize).Limit(state.PageSize).ToListAsync(default);
|
||||
|
||||
return new TableData<TriggerEntity>()
|
||||
{
|
||||
TotalItems = countResult is null ? 0 : (int)countResult.Count,
|
||||
Items = itemResult.Select(x => BsonSerializer.Deserialize<TriggerEntity>(x))
|
||||
};
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
Notification.Error(Snackbar);
|
||||
return new TableData<TriggerEntity>();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private bool _assign;
|
||||
public bool Assign
|
||||
{
|
||||
get
|
||||
{
|
||||
return _assign;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value != _assign)
|
||||
{
|
||||
_assign = value;
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void OnAssign(TriggerEntity? model)
|
||||
{
|
||||
Model = model;
|
||||
Assign = true;
|
||||
}
|
||||
|
||||
private async Task OnAddSubmitAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
await Database.JobTrigger()
|
||||
.InsertOneAsync(new JobTriggerEntity
|
||||
{
|
||||
Job = JobId,
|
||||
Trigger = Model.Id
|
||||
}, cancellationToken: default);
|
||||
|
||||
if (Container is not null)
|
||||
{
|
||||
await Container.RefreshAsync();
|
||||
}
|
||||
|
||||
Notification.Success(Snackbar);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
Notification.Error(Snackbar);
|
||||
}
|
||||
finally
|
||||
{
|
||||
Assign = false;
|
||||
NavigationManager?.NavigateTo(Navigation.Management.Scheduler.Jobs.TriggersHref(JobId));
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue