panoptes/src/PanoptesFrontend/Pages/DynamicChart.razor

72 lines
2.1 KiB
Plaintext

@using ApexCharts
@using System.Collections.Generic
@using PanoptesFrontend.Data;
@using System
@using System.Timers
@implements IDisposable
@inject IHttpService httpService
@using PanoptesFrontend.Services
<ApexChart @ref=chart TItem="Stats" Title="@ChartTitle">
<ApexPointSeries TItem="Stats"
Items="@StatsList"
SeriesType="@SeriesTypes[@SelectedChartType]"
Name="Gross Value"
XValue="@(e => e.Label)"
YValue="@(e => e.Value)"
OrderByDescending="e=>e.Y" />
</ApexChart>
@code {
private ApexChart<Stats> chart;
private bool timerInitialized;
private Timer timer;
private Dictionary<string, SeriesType> SeriesTypes = new Dictionary<string, SeriesType>
{
{"line", SeriesType.Line},
{"area", SeriesType.Area},
{"bar", SeriesType.Bar},
{"pie", SeriesType.Pie},
{"donut", SeriesType.Donut},
{"radial-bar", SeriesType.RadialBar},
};
[Parameter]
public string ChartTitle {get; set;}
[Parameter]
public List<Stats> StatsList { get; set; }
[Parameter]
public string SelectedChartType {get; set;}
[Parameter]
public int ChartId {get; set;}
[Parameter]
public string module {get; set;}
protected override void OnAfterRender(bool firstRender)
{
if (firstRender && !timerInitialized)
{
timerInitialized = true;
timer = new Timer(5000);
timer.Elapsed += async delegate { await UpdateChartSeries(); };
timer.Enabled = true;
}
}
private async Task UpdateChartSeries()
{
var panoptesHost = Environment.GetEnvironmentVariable("PANOPTESHOST");
var response = await httpService.GetAsync<GraphComponent>($"http://{panoptesHost}/component/{module}/{ChartId}");
StatsList = response.Stats;
await chart.UpdateSeriesAsync(true);
await InvokeAsync(() => StateHasChanged());
}
public void Dispose()
{
timer?.Stop();
timer = null;
}
}