13 changed files with 186 additions and 23 deletions
@ -0,0 +1,25 @@ |
|||||
|
import {StatsOfPeakOfDay} from "./StatsOfPeakOfDay"; |
||||
|
import {StatsOfPeakOfPerFiveMinutes} from "./StatsOfPeakOfPerFiveMinutes"; |
||||
|
|
||||
|
export class GraphData { |
||||
|
labels: any[] = []; |
||||
|
data: {data:any[], label: string, backgroundColor: string}[] = []; |
||||
|
|
||||
|
static fromStatsOfPeakOfDay(d: StatsOfPeakOfDay[], color: string) { |
||||
|
const g = new GraphData(); |
||||
|
g.labels = d.map((gg) => gg.date); |
||||
|
g.data.push( |
||||
|
{label: "Игроков", data: d.map((gg) => gg.avg), backgroundColor: color} |
||||
|
) |
||||
|
return g; |
||||
|
} |
||||
|
|
||||
|
static fromStatsOfPeakOfPerFiveMinutes(d: StatsOfPeakOfPerFiveMinutes[], color: string) { |
||||
|
const g = new GraphData(); |
||||
|
g.labels = d.map((gg) => gg.timestamp.toLocaleString()); |
||||
|
g.data.push( |
||||
|
{label: "Игроков", data: d.map((gg) => gg.max), backgroundColor: color} |
||||
|
) |
||||
|
return g; |
||||
|
} |
||||
|
} |
@ -1,15 +1,60 @@ |
|||||
<div class="content-in-center-header" style="flex-direction: column;"> |
<div class="content-in-center-header" style="flex-direction: column;"> |
||||
<h1>Статистика</h1> |
<h1>Статистика</h1> |
||||
<h3>Скоро и ты сюда попадешь браток</h3> |
<h3>Разнообразная статистика с наших серверов</h3> |
||||
</div> |
</div> |
||||
|
|
||||
<div class="content-in-center"> |
<div class="content-in-center"> |
||||
<div class="content-in-border"> |
<div class="content-in-border"> |
||||
<h2>График онлайна</h2> |
<h2>График онлайна</h2> |
||||
|
<div *ngIf="!init"> |
||||
|
<div style="display: flex; justify-content: space-between"> |
||||
|
<mat-form-field appearance="fill"> |
||||
|
<mat-label>Статистика по</mat-label> |
||||
|
<mat-select [(ngModel)]="selectedPeriod"> |
||||
|
<mat-option *ngFor="let s of periods" [value]="s"> |
||||
|
{{s.name}} |
||||
|
</mat-option> |
||||
|
</mat-select> |
||||
|
</mat-form-field> |
||||
|
<mat-form-field appearance="fill" *ngIf="selectedPeriod.value=='minutes'"> |
||||
|
<mat-label>Количество минут</mat-label> |
||||
|
<mat-select [(ngModel)]="selectedMinute"> |
||||
|
<mat-option *ngFor="let s of minutes" [value]="s"> |
||||
|
Разница в {{s}} минут |
||||
|
</mat-option> |
||||
|
</mat-select> |
||||
|
</mat-form-field> |
||||
|
<mat-form-field appearance="fill"> |
||||
|
<mat-label>Количество дней</mat-label> |
||||
|
<mat-select [(ngModel)]="selectedDays"> |
||||
|
<mat-option *ngFor="let s of days" [value]="s"> |
||||
|
За {{s}} дней |
||||
|
</mat-option> |
||||
|
</mat-select> |
||||
|
</mat-form-field> |
||||
|
<mat-form-field appearance="fill"> |
||||
|
<mat-label>Сервер</mat-label> |
||||
|
<mat-select [(ngModel)]="selectedServer"> |
||||
|
<mat-option *ngFor="let s of serverList" [value]="s"> |
||||
|
{{s.name}} |
||||
|
</mat-option> |
||||
|
</mat-select> |
||||
|
</mat-form-field> |
||||
|
</div> |
||||
|
<div class="chart-container"> |
||||
|
<canvas id="MyChart" >{{ chart }}</canvas> |
||||
|
</div> |
||||
|
<mat-progress-bar *ngIf="loading" mode="indeterminate"></mat-progress-bar> |
||||
|
<button mat-button mat-raised-button (click)="getGraph()" style="width: 100%">Обновить</button> |
||||
|
</div> |
||||
|
<button mat-button mat-raised-button *ngIf="init" (click)="getGraph()">Загрузить график</button> |
||||
|
</div> |
||||
|
<div class="content-in-border"> |
||||
|
<h2>Уникальные игроки</h2> |
||||
<div></div> |
<div></div> |
||||
</div> |
</div> |
||||
<div class="content-in-border"> |
<div class="content-in-border"> |
||||
<h2>Страны</h2> |
<h2>Последние выданые випки</h2> |
||||
<div></div> |
<div></div> |
||||
</div> |
</div> |
||||
</div> |
</div> |
||||
|
Loading…
Reference in new issue