Skip to content

Commit

Permalink
Server solution
Browse files Browse the repository at this point in the history
  • Loading branch information
dhindrik committed Sep 4, 2024
1 parent fbfca8c commit 80d8c80
Show file tree
Hide file tree
Showing 30 changed files with 320 additions and 100 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -403,4 +403,5 @@ ASALocalRun/
.mfractor/

# Local History for Visual Studio
.localhistory/
.localhistory/
/TinyInsights.WebServer/appsettings.local.json
13 changes: 13 additions & 0 deletions TinyInsights.Web/Components/LoggedInMenuItems.razor
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<div>
<RadzenPanelMenuItem Text="Dashboard" Icon="dashboard" Path="/dashboard" />
<RadzenPanelMenuItem Text="Crashes" Icon="dangerous" Path="/diagnostics/crashes" />
<RadzenPanelMenuItem Text="Errors" Icon="error" Path="/diagnostics/errors" />
<RadzenPanelMenuItem Text="Dependencies" Icon="file_download" Path="/diagnostics/dependencies" />
<RadzenPanelMenuItem Text="Page views" Icon="visibility" Path="/analytics/page" />
<RadzenPanelMenuItem Text="Events" Icon="touch_app" Path="/analytics/events" />
<RadzenPanelMenuItem Text="Users" Icon="people" Path="/analytics/users" />
<RadzenPanelMenuItem Text="Devices" Icon="smartphone" Path="/analytics/devices" />
</div>
@code {

}
18 changes: 9 additions & 9 deletions TinyInsights.Web/Components/Menu.razor
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@

@inherits TinyInsightsComponentBase

<RadzenPanelMenu>


@if (IsLoggedIn)
@if (OperatingSystem.IsBrowser() && IsLoggedIn)
{
<LoggedInMenuItems />
}
else if(!OperatingSystem.IsBrowser())
{
<RadzenPanelMenuItem Text="Dashboard" Icon="dashboard" Path="/dashboard" />
<RadzenPanelMenuItem Text="Crashes" Icon="dangerous" Path="/diagnostics/crashes" />
<RadzenPanelMenuItem Text="Errors" Icon="error" Path="/diagnostics/errors" />
<RadzenPanelMenuItem Text="Dependencies" Icon="file_download" Path="/diagnostics/dependencies" />
<RadzenPanelMenuItem Text="Page views" Icon="visibility" Path="/analytics/page" />
<RadzenPanelMenuItem Text="Events" Icon="touch_app" Path="/analytics/events" />
<RadzenPanelMenuItem Text="Users" Icon="people" Path="/analytics/users" />
<RadzenPanelMenuItem Text="Devices" Icon="smartphone" Path="/analytics/devices" />
<AuthorizeView>
<LoggedInMenuItems />
</AuthorizeView>
}

<RadzenPanelMenuItem Text="Source code" Icon="data_object" Path="https://github.com/dhindrik/TinyInsights.Maui" Target="_blank" />
Expand Down
1 change: 1 addition & 0 deletions TinyInsights.Web/Layout/MainLayout.razor
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
@using System.ComponentModel.DataAnnotations
@inject NavigationManager NavigationManager
@inherits LayoutComponentBase

<div>
<CascadingValue Value="IsLoggedIn">
<CascadingValue Value="IsLoggedInChanged">
Expand Down
48 changes: 27 additions & 21 deletions TinyInsights.Web/Pages/Dashboard.razor
Original file line number Diff line number Diff line change
Expand Up @@ -77,35 +77,41 @@
{
isLoadingGraph = true;

var crashTask = Service.GetCrashesPerDay(GlobalFilter);
var errorTask = Service.GetErrorsPerDay(GlobalFilter);
try
{
var crashTask = Service.GetCrashesPerDay(GlobalFilter);
var errorTask = Service.GetErrorsPerDay(GlobalFilter);

await Task.WhenAll(crashTask, errorTask);

await Task.WhenAll(crashTask, errorTask);

var date = DateOnly.FromDateTime(DateTime.Now).AddDays(-GlobalFilter.NumberOfDays);
var crashDays = new List<CountPerDay>();
var errorDays = new List<CountPerDay>();
var date = DateOnly.FromDateTime(DateTime.Now).AddDays(-GlobalFilter.NumberOfDays);
var crashDays = new List<CountPerDay>();
var errorDays = new List<CountPerDay>();

for (int i = 0; i <= GlobalFilter.NumberOfDays; i++)
{
var currentDate = date.AddDays(i);
var crashDay = crashTask.Result.SingleOrDefault(x => x.Date == currentDate);
var errorDay = errorTask.Result.SingleOrDefault(x => x.Date == currentDate);
for (int i = 0; i <= GlobalFilter.NumberOfDays; i++)
{
var currentDate = date.AddDays(i);
var crashDay = crashTask.Result.SingleOrDefault(x => x.Date == currentDate);
var errorDay = errorTask.Result.SingleOrDefault(x => x.Date == currentDate);

var crashCount = crashDay?.Count ?? 0;
var errorCount = errorDay?.Count ?? 0;
var crashCount = crashDay?.Count ?? 0;
var errorCount = errorDay?.Count ?? 0;

crashDays.Add(new CountPerDay(currentDate, crashCount));
errorDays.Add(new CountPerDay(currentDate, errorCount));
}
crashDays.Add(new CountPerDay(currentDate, crashCount));
errorDays.Add(new CountPerDay(currentDate, errorCount));
}

crashesPerDays = crashDays;
errorsPerDays = errorDays;
crashesPerDays = crashDays;
errorsPerDays = errorDays;

isLoadingGraph = false;
isLoadingGraph = false;

await InvokeAsync(StateHasChanged);
await InvokeAsync(StateHasChanged);
}
catch(Exception ex)
{
HandleException(ex);
}
}
private async Task LoadUserGraph()
{
Expand Down
17 changes: 12 additions & 5 deletions TinyInsights.Web/Pages/Dependencies.razor
Original file line number Diff line number Diff line change
Expand Up @@ -118,12 +118,19 @@

private async Task LoadData()
{
var topTask = LoadTopDependencies();
var avgTask = LoadDependencyDuration();
var failedTask = LoadFailedDependencies();
var failedPerDaysTask = LoadFailedDependenciesPerDays();
try
{
var topTask = LoadTopDependencies();
var avgTask = LoadDependencyDuration();
var failedTask = LoadFailedDependencies();
var failedPerDaysTask = LoadFailedDependenciesPerDays();

await Task.WhenAll(topTask, avgTask, failedTask, failedPerDaysTask);
await Task.WhenAll(topTask, avgTask, failedTask, failedPerDaysTask);
}
catch (Exception ex)
{
HandleException(ex);
}
}

private async Task LoadTopDependencies()
Expand Down
9 changes: 8 additions & 1 deletion TinyInsights.Web/Pages/DeviceAnalytics.razor
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,14 @@
{
await base.OnParametersSetAsync();

await Task.WhenAll(LoadUserIdioms(), LoadUserOperatingSystems(), LoadManufactures());
try
{
await Task.WhenAll(LoadUserIdioms(), LoadUserOperatingSystems(), LoadManufactures());
}
catch(Exception ex)
{
HandleException(ex);
}
}

private async Task LoadUserIdioms()
Expand Down
22 changes: 15 additions & 7 deletions TinyInsights.Web/Pages/ErrorDetails.razor
Original file line number Diff line number Diff line change
Expand Up @@ -147,17 +147,25 @@

private async Task LoadData()
{
isLoading = true;
// Replace ' with the \'
var escapedId = Id.Replace("'", "\\'");
isLoading = true;

if (isCrash)
try
{
data = await Service.GetCrashDetails(escapedId, GlobalFilter);
// Replace ' with the \'
var escapedId = Id.Replace("'", "\\'");

if (isCrash)
{
data = await Service.GetCrashDetails(escapedId, GlobalFilter);
}
else
{
data = await Service.GetErrorDetails(escapedId, GlobalFilter);
}
}
else
catch (Exception ex)
{
data = await Service.GetErrorDetails(escapedId, GlobalFilter);
HandleException(ex);
}

isLoading = false;
Expand Down
13 changes: 10 additions & 3 deletions TinyInsights.Web/Pages/Errors.razor
Original file line number Diff line number Diff line change
Expand Up @@ -94,10 +94,17 @@

private async Task LoadData()
{
var graphTask = LoadGraph();
var listTask = LoadList();
try
{
var graphTask = LoadGraph();
var listTask = LoadList();

await Task.WhenAll(graphTask, listTask);
await Task.WhenAll(graphTask, listTask);
}
catch (Exception ex)
{
HandleException(ex);
}
}

private async Task LoadGraph()
Expand Down
11 changes: 9 additions & 2 deletions TinyInsights.Web/Pages/EventDetails.razor
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,16 @@

private async Task LoadData()
{
var perDayTask = LoadEventsPerDay();
try
{
var perDayTask = LoadEventsPerDay();

await Task.WhenAll(perDayTask);
await Task.WhenAll(perDayTask);
}
catch(Exception ex)
{
HandleException(ex);
}
}

private async Task LoadEventsPerDay()
Expand Down
30 changes: 19 additions & 11 deletions TinyInsights.Web/Pages/Events.razor
Original file line number Diff line number Diff line change
@@ -1,26 +1,28 @@
@using TinyInsights.Web.Services

@inherits TinyInsightsComponentBase

@inject IInsightsService Service
@inject DialogService DialogService

@if (isLoading)
{
<RadzenProgressBarCircular Value="100" ShowValue="false" Mode="ProgressBarMode.Indeterminate"/>
<RadzenProgressBarCircular Value="100" ShowValue="false" Mode="ProgressBarMode.Indeterminate" />
}
else
{
<RadzenDataGrid Data="events">
<Columns>
<RadzenDataGridColumn TItem="EventItem" Width="100px" Title="Event type">
<Template>
<RadzenIcon Icon="@GetIcon(context.EventType)" title="@GetName(context.EventType)" />
<RadzenIcon Icon="@GetIcon(context.EventType)" title="@GetName(context.EventType)" />
</Template>
</RadzenDataGridColumn>
<RadzenDataGridColumn TItem="EventItem" Title="Timestamp" Width="200px" Property="@nameof(EventItem.Timestamp)" />
<RadzenDataGridColumn TItem="EventItem" Title="Name" Property="@nameof(EventItem.Name)" />
<RadzenDataGridColumn TItem="EventItem" Width="100px">
<RadzenDataGridColumn TItem="EventItem" Width="100px">
<Template>
<RadzenButton Icon="description" Click="@(async (args) => await ShowAllProperties(context))"/>
<RadzenButton Icon="description" Click="@(async (args) => await ShowAllProperties(context))" />
</Template>
</RadzenDataGridColumn>
</Columns>
Expand All @@ -44,24 +46,30 @@ else
{
await base.OnParametersSetAsync();

if(Timestamp.HasValue)
try
{
events = await Service.GetEventsByUser(UserId, Timestamp.Value);
if (Timestamp.HasValue)
{
events = await Service.GetEventsByUser(UserId, Timestamp.Value);
}
else
{
events = await Service.GetEventsByUser(UserId, GlobalFilter);
}
}
else
catch (Exception ex)
{
events = await Service.GetEventsByUser(UserId, GlobalFilter);
HandleException(ex);
}



isLoading = false;
}

private async Task ShowAllProperties(EventItem item)
{
await DialogService.OpenAsync<AllProperties>($"All properties",
new Dictionary<string, object>() { { "Properties", item.Data } },
new DialogOptions() { Width = "700px", Height = "512px", Resizable = true, Draggable = true});
new DialogOptions() { Width = "700px", Height = "512px", Resizable = true, Draggable = true });
}

private string GetIcon(EventType eventType) => eventType switch
Expand Down
15 changes: 11 additions & 4 deletions TinyInsights.Web/Pages/EventsAnalytics.razor
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@
</RadzenStack>

@code {

[CascadingParameter]
public GlobalFilter GlobalFilter {get;set;}

private bool isLoadingPageViews, isLoadingList = true;
private List<CountPerKey> events = new();

Expand All @@ -54,9 +54,16 @@

private async Task LoadData()
{
var listTask = LoadList();
try
{
var listTask = LoadList();

await Task.WhenAll(listTask);
await Task.WhenAll(listTask);
}
catch (Exception ex)
{
HandleException(ex);
}
}

private async Task LoadList()
Expand Down
13 changes: 10 additions & 3 deletions TinyInsights.Web/Pages/FailedDependencies.razor
Original file line number Diff line number Diff line change
Expand Up @@ -77,11 +77,18 @@

private async Task LoadData()
{
isLoading = true;
try
{
isLoading = true;

data = await Service.GetFailedDependencies(Key, GlobalFilter);
data = await Service.GetFailedDependencies(Key, GlobalFilter);

isLoading = false;
isLoading = false;
}
catch(Exception ex)
{
HandleException(ex);
}
}

private async Task ShowAllProperties(ErrorItem item)
Expand Down
12 changes: 11 additions & 1 deletion TinyInsights.Web/Pages/Home.razor
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,23 @@
[CascadingParameter] public EventCallback<bool> IsLoggedInChanged { get; set; }
private readonly AuthModel _model = new();

protected override void OnParametersSet()
{
base.OnParametersSet();

if (!OperatingSystem.IsBrowser())
{
NavigationManager.NavigateTo("/login");
}
}

public async Task Open()
{
try
{
if (_model.ApplicationId is not null && _model.ApiKey is not null)
{
var result = await Service.ValidateToken(_model.ApplicationId, _model.ApiKey);
var result = await Service.AddAndValidateApiKey(_model.ApplicationId, _model.ApiKey);

if (result)
{
Expand Down
Loading

0 comments on commit 80d8c80

Please sign in to comment.