Skip to content

Commit

Permalink
Computer Page performance improvements
Browse files Browse the repository at this point in the history
Fix Search Results page clicking
  • Loading branch information
Chris Jacobsen Work committed Nov 20, 2023
1 parent 4a481c4 commit b0997f7
Show file tree
Hide file tree
Showing 10 changed files with 258 additions and 214 deletions.
2 changes: 1 addition & 1 deletion BLAZAM/BLAZAM.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<ImplicitUsings>enable</ImplicitUsings>
<ServerGarbageCollection>false</ServerGarbageCollection>
<AssemblyVersion>0.8.5</AssemblyVersion>
<Version>2023.11.20.0312</Version>
<Version>2023.11.20.1820</Version>

<RootNamespace>BLAZAM</RootNamespace>
<GenerateDocumentationFile>False</GenerateDocumentationFile>
Expand Down
84 changes: 29 additions & 55 deletions BLAZAM/Pages/Computers/ViewComputer.razor
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,16 @@
<SetSubHeader>

<DirectoryEntryViewHeader DirectoryEntry="@Computer"
OnAssignTo="@(()=>{AssignToModal?.Show();})"
OnChangeThumbnail="@(()=>{UploadThumbnailModal?.Show();})"
OnDelete="@DeleteComputer"
OnDisable="@(async()=>{Computer.Enabled=false; await RefreshEntryComponents();})"
OnEnable="@(async()=>{Computer.Enabled=true; await RefreshEntryComponents();})"
OnMove="@(()=>{MoveToModal?.Show();})"
OnRename="@(()=>{RenameModal?.Show();})"
OnResetPassword="@(()=>{ChangePasswordModal?.Show();})"
OnToggleEditMode="ToggleEditMode"
OnUnlock="@Unlock" />
OnAssignTo="@(()=>{AssignToModal?.Show();})"
OnChangeThumbnail="@(()=>{UploadThumbnailModal?.Show();})"
OnDelete="@DeleteComputer"
OnDisable="@(async()=>{Computer.Enabled=false; await RefreshEntryComponents();})"
OnEnable="@(async()=>{Computer.Enabled=true; await RefreshEntryComponents();})"
OnMove="@(()=>{MoveToModal?.Show();})"
OnRename="@(()=>{RenameModal?.Show();})"
OnResetPassword="@(()=>{ChangePasswordModal?.Show();})"
OnToggleEditMode="ToggleEditMode"
OnUnlock="@Unlock" />
<MudOverlay Visible="SavingChanges" DarkBackground="false" Absolute="true">

</MudOverlay>
Expand Down Expand Up @@ -64,43 +64,23 @@
</Section>

<Section Title=@AppLocalization["Live Stats"]>
<MudStack Row=true Class="@_fieldMudStackClasses">
<LiveChart Enabled=@(Computer.IsOnline==true) SeriesName="CPU Usage" Title="Live CPU Usage" History="30" PollFunc="@(()=>{return Computer.Processor;})" />
<LiveChart Enabled=@(Computer.IsOnline==true) SeriesName="Memory Usage" Title="Live RAM Usage" History="30" PollFunc="@(()=>{return Computer.MemoryUsedPercent;})" />
<ComputerServices Computer="Computer" />

</MudStack>


<MudStack Row=true Class="@_fieldMudStackClasses">
<ComputerResourceCharts Computer="Computer"/>
</MudStack>
</Section>

<Section Title=@AppLocalization["Services"]>

<MudStack Row=true Class="@_fieldMudStackClasses">
<ComputerServices Computer="Computer" />
</MudStack>
</Section>

<Section Title=@AppLocalization["Drive Details"]>
<MudStack Row=true Class="@_fieldMudStackClasses">
@if (drives != null && drives.Count > 0)
{
<MudDataGrid Elevation=0 Items="drives.Where(d=>d.DriveType==DriveType.Fixed)">
<Columns>
<PropertyColumn Property="x=>x.DriveType" />
<PropertyColumn Property="x=>x.Letter" />
<TemplateColumn Title="Used">
<CellTemplate>
<MudProgressLinear Style="height:25px;" Value="@context.Item.PercentUsed.Round(0)"
Color="@(context.Item.PercentUsed<70?Color.Success:context.Item.PercentUsed<80?Color.Warning:Color.Error)">
@(context.Item.PercentUsed.Round(0).ToString() + "%")
</MudProgressLinear>
</CellTemplate>
</TemplateColumn>
<TemplateColumn Title="Capacity">
<CellTemplate>
@(context.Item.Capacity.Round(0).ToString() + "GB")
</CellTemplate>
</TemplateColumn>
<PropertyColumn Property="x=>x.FileSystem" />
<PropertyColumn Property="x=>x.Serial" />
</Columns>
</MudDataGrid>

}

<ComputerDriveDetails Computer="Computer" />
</MudStack>
</Section>

Expand All @@ -110,17 +90,18 @@


<Section Title=@AppLocalization["Sessions"]>
<MudStack Row=true Class="@_fieldMudStackClasses">
<ComputerSessions Computer="Computer" />

</MudStack>

<MudStack Row=true Class="@_fieldMudStackClasses">
<ComputerSessions Computer="Computer" />

</MudStack>

</Section>


@if (Computer.CanReadAnyCustomFields)
{
<Section Title="Additional Field">
<Section Title=@AppLocalization["Additional Fields"]>
@if (CustomFields != null)
{
@foreach (var field in CustomFields)
Expand Down Expand Up @@ -162,21 +143,14 @@


@code {
List<IADComputerDrive> drives = new();
IADComputer? Computer => DirectoryEntry as IADComputer;
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
await InvokeAsync(StateHasChanged);
if (Computer != null)
{
Task.Run(async () =>
{
drives = await Computer.GetDrivesAsync();

await RefreshEntryComponents();

});

Task.Run(() =>
{
var services = Computer.Services;
Expand Down
2 changes: 1 addition & 1 deletion BLAZAM/Pages/Search.razor
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
<ItemContent>
@if (u.CanRead)
{
<SearchResult Entry="u"/>
<SearchResult Entry="u" OnSelected=@(()=>{Searcher.Results.Clear();Searcher.Results.Add(u);}) />

@* <div Class="cursor-pointer" @onclick=@(()=>{Searcher.Results.Clear();Searcher.Results.Add(u);})>
<MudText Typo="Typo.h1">@u.ObjectType</MudText>
Expand Down
83 changes: 44 additions & 39 deletions BLAZAMActiveDirectory/Adapters/ADComputerSessions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,16 @@ public class ADComputerSessions : IDisposable
ITerminalServer server;
private bool Polling;
public List<IRemoteSession> ConnectedSessions = new List<IRemoteSession>();
IADComputer _host;
IADComputer Computer;

public AppEvent ConnectedSessionsChanged { get; set; }
public ADComputerSessions(IADComputer host)
{
_host = host;
RefreshSessions();
Computer = host;
if (Computer.IsOnline == true)
RefreshSessions();
else
Computer.OnOnlineChanged += (status) => { if (status == true) RefreshSessions(); };

}

Expand All @@ -39,59 +42,61 @@ private void RefreshSessions()
{
if (!Polling)
{

Loggers.ActiveDirectryLogger.Information("Getting sessions for " + _host);
Polling = true;
var impersonation = _host.Directory.Impersonation;
var success = impersonation.Run(() =>
{
try
if (Computer.IsOnline == true)
{
Loggers.ActiveDirectryLogger.Information("Getting sessions for " + Computer);
Polling = true;
var impersonation = Computer.Directory.Impersonation;
var success = impersonation.Run(() =>
{
server = manager.GetRemoteServer(_host.CanonicalName);
try
{
server.Open();
server = manager.GetRemoteServer(Computer.CanonicalName);
try
{
foreach (ITerminalServicesSession session in server.GetSessions())
server.Open();
try
{
if (session.UserAccount != null)
foreach (ITerminalServicesSession session in server.GetSessions())
{
if (!session.Server.IsOpen)
session.Server.Open();
IRemoteSession s = new RemoteSession(session,_host);
s.OnSessionDown += SessionDownEvent;
if (!ConnectedSessions.Contains(s))
if (session.UserAccount != null)
{
ConnectedSessions.Add(s);
ConnectedSessionsChanged?.Invoke();
if (!session.Server.IsOpen)
session.Server.Open();
IRemoteSession s = new RemoteSession(session, Computer);
s.OnSessionDown += SessionDownEvent;
if (!ConnectedSessions.Contains(s))
{
ConnectedSessions.Add(s);
ConnectedSessionsChanged?.Invoke();
}
}
}
}
}
catch (Win32Exception ex)
{
Loggers.ActiveDirectryLogger.Error("Error while collecting sessions for " + Computer, ex);
}
}
catch (Win32Exception ex)
catch
{
Loggers.ActiveDirectryLogger.Error("Error while collecting sessions for " + _host, ex);
}
Polling = false;
return true;
}
catch
catch (Exception ex)
{
Loggers.ActiveDirectryLogger.Error("Error while connecting to TerminalServices on " + Computer, ex);
return false;
}
Polling = false;
return true;
}
catch (Exception ex)
{
Loggers.ActiveDirectryLogger.Error("Error while connecting to TerminalServices on " + _host, ex);
return false;
}
});

});
}


}

Expand Down
60 changes: 60 additions & 0 deletions BLAZAMGui/UI/Computers/ComputerDriveDetails.razor
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
@if (Computer.IsOnline == true)
{
@if (Drives != null && Drives.Count > 0)
{
<MudDataGrid Elevation=0 Items="Drives.Where(d=>d.DriveType==DriveType.Fixed)">
<Columns>
<PropertyColumn Property="x=>x.DriveType" />
<PropertyColumn Property="x=>x.Letter" />
<TemplateColumn Title="Used">
<CellTemplate>
<MudProgressLinear Style="height:25px;" Value="@context.Item.PercentUsed.Round(0)"
Color="@(context.Item.PercentUsed<70?Color.Success:context.Item.PercentUsed<80?Color.Warning:Color.Error)">
@(
context.Item.PercentUsed.Round(0).ToString() + "%"
)
</MudProgressLinear>
</CellTemplate>
</TemplateColumn>
<TemplateColumn Title="Capacity">
<CellTemplate>
@(
context.Item.Capacity.Round(0).ToString() + "GB"
)
</CellTemplate>
</TemplateColumn>
<PropertyColumn Property="x=>x.FileSystem" />
<PropertyColumn Property="x=>x.Serial" />
</Columns>
</MudDataGrid>

}

}
else
{
<MudText>Computer is not reachable.</MudText>
}
@code {
[Parameter]
public IADComputer Computer { get; set; }

List<IADComputerDrive> Drives = new();


protected override void OnInitialized()
{

Task.Run(async () =>
{
Drives = await Computer.GetDrivesAsync();
await InvokeAsync(StateHasChanged);

});


base.OnInitialized();


}
}
17 changes: 17 additions & 0 deletions BLAZAMGui/UI/Computers/ComputerResourceCharts.razor
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@

@if (Computer.IsOnline == true)
{
<LiveChart Enabled=@(Computer.IsOnline==true) SeriesName="CPU Usage" Title="Live CPU Usage" History="30" PollFunc="@(()=>{return Computer.Processor;})" />
<LiveChart Enabled=@(Computer.IsOnline==true) SeriesName="Memory Usage" Title="Live RAM Usage" History="30" PollFunc="@(()=>{return Computer.MemoryUsedPercent;})" />

}
else
{
<MudText>Computer is not reachable.</MudText>
}


@code {
[Parameter]
public IADComputer Computer { get; set; }
}
Loading

0 comments on commit b0997f7

Please sign in to comment.