mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-08-11 22:12:11 +00:00
122 lines
8.3 KiB
Plaintext
122 lines
8.3 KiB
Plaintext
@attribute [Route(Routes.ASSISTANT_LOG_VIEWER)]
|
|
@inherits MSGComponentBase
|
|
|
|
<div class="inner-scrolling-context">
|
|
<MudText Typo="Typo.h3" Class="mb-2 mr-3">
|
|
@T("Log Viewer")
|
|
</MudText>
|
|
|
|
<InnerScrolling FillEntireHorizontalSpace="@true" Class="log-viewer-shell">
|
|
<HeaderContent>
|
|
<MudStack Row="@true" Wrap="@Wrap.Wrap" AlignItems="@AlignItems.Center" Spacing="2" Class="mb-2">
|
|
<MudSelect T="LogFileKind" Value="@this.selectedLogFile" ValueChanged="@this.SelectedLogFileChanged" Label="@T("Select a log file")" Variant="Variant.Outlined" Margin="Margin.Dense" Class="log-viewer-select">
|
|
<MudSelectItem T="LogFileKind" Value="@LogFileKind.APP">@T("Usage log")</MudSelectItem>
|
|
<MudSelectItem T="LogFileKind" Value="@LogFileKind.STARTUP">@T("Startup log")</MudSelectItem>
|
|
</MudSelect>
|
|
<MudTooltip Text="@this.AutoRefreshTooltip" Placement="Placement.Bottom">
|
|
<MudIconButton Icon="@Icons.Material.Filled.Update" Variant="@this.AutoRefreshButtonVariant" Color="@this.AutoRefreshButtonColor" OnClick="@this.ToggleAutoRefresh" />
|
|
</MudTooltip>
|
|
@if (!this.autoRefresh)
|
|
{
|
|
<MudTooltip Text="@T("Refresh")" Placement="Placement.Bottom">
|
|
<MudIconButton Icon="@Icons.Material.Filled.Refresh" Variant="Variant.Filled" Color="Color.Primary" OnClick="@this.RefreshLogAsync" Disabled="@this.isLoading" />
|
|
</MudTooltip>
|
|
}
|
|
<MudNumericField T="int" Value="@this.maxLines" ValueChanged="@this.MaxLinesChanged" Label="@T("Max lines")" Variant="Variant.Outlined" Margin="Margin.Dense" Min="@MIN_MAX_LINES" Max="@MAX_MAX_LINES" Step="500" Class="log-viewer-number" />
|
|
<MudTooltip Text="@T("Open in folder")" Placement="Placement.Bottom">
|
|
<MudIconButton Icon="@Icons.Material.Filled.FolderOpen" Variant="Variant.Outlined" Color="Color.Default" OnClick="@this.OpenCurrentLogInFileManager" Disabled="@(!this.CanOpenCurrentLogPath)" />
|
|
</MudTooltip>
|
|
<MudTooltip Text="@T("Copy visible lines")" Placement="Placement.Bottom">
|
|
<MudIconButton Icon="@Icons.Material.Filled.ContentCopy" Variant="Variant.Outlined" Color="Color.Default" Disabled="@(!this.CanCopyDisplayedLines)" OnClick="@this.CopyDisplayedLines" />
|
|
</MudTooltip>
|
|
</MudStack>
|
|
|
|
<MudStack Row="@true" Wrap="@Wrap.Wrap" AlignItems="@AlignItems.Center" Spacing="2" Class="mb-1">
|
|
<MudSelect T="string" Label="@T("Log level")" MultiSelection="@true" SelectedValues="@this.selectedLogLevels" SelectedValuesChanged="@this.SelectedLogLevelsChanged" MultiSelectionTextFunc="@this.GetMultiSelectionText" Variant="Variant.Outlined" Margin="Margin.Dense" Class="log-viewer-multiselect" Adornment="Adornment.Start" AdornmentIcon="@Icons.Material.Filled.Label">
|
|
@foreach (var option in this.logLevelOptions)
|
|
{
|
|
<MudSelectItem T="string" Value="@option">
|
|
@this.GetFilterOptionDisplay(option)
|
|
</MudSelectItem>
|
|
}
|
|
</MudSelect>
|
|
<MudSelect T="string" Label="@T("Logger")" MultiSelection="@true" SelectedValues="@this.selectedLoggers" SelectedValuesChanged="@this.SelectedLoggersChanged" MultiSelectionTextFunc="@this.GetMultiSelectionText" Variant="Variant.Outlined" Margin="Margin.Dense" Class="log-viewer-multiselect" Adornment="Adornment.Start" AdornmentIcon="@Icons.Material.Filled.Source">
|
|
@foreach (var option in this.loggerOptions)
|
|
{
|
|
<MudSelectItem T="string" Value="@option">
|
|
@this.GetFilterOptionDisplay(option)
|
|
</MudSelectItem>
|
|
}
|
|
</MudSelect>
|
|
<MudSelect T="string" Label="@T("Source details")" MultiSelection="@true" SelectedValues="@this.selectedSourceDetails" SelectedValuesChanged="@this.SelectedSourceDetailsChanged" MultiSelectionTextFunc="@this.GetMultiSelectionText" Variant="Variant.Outlined" Margin="Margin.Dense" Class="log-viewer-multiselect" Adornment="Adornment.Start" AdornmentIcon="@Icons.Material.Filled.Settings">
|
|
@foreach (var option in this.sourceDetailOptions)
|
|
{
|
|
<MudSelectItem T="string" Value="@option">
|
|
@this.GetFilterOptionDisplay(option)
|
|
</MudSelectItem>
|
|
}
|
|
</MudSelect>
|
|
<MudTooltip Text="@this.ShowTimestampsTooltip" Placement="Placement.Bottom">
|
|
<MudIconButton Icon="@Icons.Material.Filled.Schedule" Variant="@this.ShowTimestampsButtonVariant" Color="@this.ShowTimestampsButtonColor" OnClick="@this.ToggleShowTimestamps" />
|
|
</MudTooltip>
|
|
<MudTooltip Text="@this.InvertFiltersTooltip" Placement="Placement.Bottom">
|
|
<MudIconButton Icon="@Icons.Material.Filled.SearchOff" Variant="@this.InvertFiltersButtonVariant" Color="@this.InvertFiltersButtonColor" OnClick="@this.ToggleInvertFilters" />
|
|
</MudTooltip>
|
|
</MudStack>
|
|
|
|
<MudStack Row="@true" Wrap="@Wrap.Wrap" AlignItems="@AlignItems.Center" Spacing="2" Class="mb-1">
|
|
<MudTextField T="string" @bind-Text="@this.FilterText" Immediate="@true" Label="@T("Find")" Variant="Variant.Outlined" Margin="Margin.Dense" Adornment="Adornment.Start" AdornmentIcon="@Icons.Material.Filled.Search" Clearable="@true" ClearIcon="@Icons.Material.Filled.Clear" OnClearButtonClick="@(() => this.ClearFilterText())" Class="log-viewer-filter" />
|
|
<MudTooltip Text="@this.FilterOnlyTooltip" Placement="Placement.Bottom">
|
|
<MudIconButton Icon="@Icons.Material.Filled.Visibility" Variant="@this.FilterOnlyButtonVariant" Color="@this.FilterOnlyButtonColor" OnClick="@this.ToggleFilterOnly" />
|
|
</MudTooltip>
|
|
<MudTextField T="string" @bind-Text="@this.ExcludeText" Immediate="@true" Label="@T("Exclude")" Variant="Variant.Outlined" Margin="Margin.Dense" Adornment="Adornment.Start" AdornmentIcon="@Icons.Material.Filled.Block" Clearable="@true" ClearIcon="@Icons.Material.Filled.Clear" OnClearButtonClick="@(() => this.ClearExcludeText())" Class="log-viewer-filter" />
|
|
</MudStack>
|
|
|
|
<MudText Typo="Typo.body2" Class="log-viewer-path mb-1">
|
|
@this.CurrentLogPath
|
|
</MudText>
|
|
<MudText Typo="Typo.caption" Class="mb-2">
|
|
@this.StatusText
|
|
</MudText>
|
|
</HeaderContent>
|
|
|
|
<ChildContent>
|
|
@if (!string.IsNullOrWhiteSpace(this.loadError))
|
|
{
|
|
<MudAlert Severity="Severity.Error" Dense="@true" Variant="Variant.Outlined" Class="mb-2">
|
|
@this.loadError
|
|
</MudAlert>
|
|
}
|
|
|
|
<div class="log-viewer-pane">
|
|
@if (this.isLoading && this.loadedLines.Count == 0)
|
|
{
|
|
<div class="log-viewer-empty">
|
|
<MudProgressCircular Size="Size.Small" Indeterminate="@true" />
|
|
<MudText Typo="Typo.body2">@T("Loading log file...")</MudText>
|
|
</div>
|
|
}
|
|
else if (this.displayLines.Count == 0)
|
|
{
|
|
<div class="log-viewer-empty">
|
|
<MudIcon Icon="@Icons.Material.Filled.SearchOff" />
|
|
<MudText Typo="Typo.body2">@T("No matching log lines.")</MudText>
|
|
</div>
|
|
}
|
|
else
|
|
{
|
|
<div class="log-viewer-lines" role="textbox" aria-readonly="true">
|
|
@foreach (var line in this.displayLines)
|
|
{
|
|
<div class="@GetLineClass(line)">
|
|
<span class="log-viewer-line-number">@line.Number</span>
|
|
<span class="log-viewer-line-text">@((MarkupString)this.RenderLine(line))</span>
|
|
</div>
|
|
}
|
|
</div>
|
|
}
|
|
</div>
|
|
</ChildContent>
|
|
</InnerScrolling>
|
|
</div>
|