From 257a3419dd3eff496b15d651dfa3e61d5ffbd8dc Mon Sep 17 00:00:00 2001 From: gsd Date: Sat, 17 Jan 2026 21:46:20 +0300 Subject: [PATCH] haifa --- src/app/entities/servers/Countries.ts | 27 ++++++ .../pages/main-page/AnnoncesListCarules.ts | 2 +- .../pages/main-page/main-page.component.html | 2 +- .../servers-page/servers-page.component.html | 48 +++++++++++ .../servers-page/servers-page.component.ts | 86 ++++++++++++++++++- .../statistic-page.component.html | 75 +++++++--------- .../statistic-page.component.ts | 85 +++--------------- src/assets/flags/Flag_of_Belarus.svg | 19 ++++ src/assets/flags/Flag_of_Israel.svg | 1 + src/assets/flags/Flag_of_Kazakhstan.svg | 1 + src/assets/flags/Flag_of_Nazi.svg | 4 + src/assets/flags/Flag_of_Russia.svg | 1 + .../flags/Flag_of_the_United_Nations.svg | 18 ++++ .../flags/Flag_of_the_United_States.svg | 25 ++++++ 14 files changed, 275 insertions(+), 119 deletions(-) create mode 100644 src/app/entities/servers/Countries.ts create mode 100644 src/assets/flags/Flag_of_Belarus.svg create mode 100644 src/assets/flags/Flag_of_Israel.svg create mode 100644 src/assets/flags/Flag_of_Kazakhstan.svg create mode 100644 src/assets/flags/Flag_of_Nazi.svg create mode 100644 src/assets/flags/Flag_of_Russia.svg create mode 100644 src/assets/flags/Flag_of_the_United_Nations.svg create mode 100644 src/assets/flags/Flag_of_the_United_States.svg diff --git a/src/app/entities/servers/Countries.ts b/src/app/entities/servers/Countries.ts new file mode 100644 index 0000000..66b2384 --- /dev/null +++ b/src/app/entities/servers/Countries.ts @@ -0,0 +1,27 @@ +import {StatExporter} from "./StatExporter"; + +export class Countries { + otherWorld: number = 0; + unitedStates: number = 0; + hohli: number = 0; + israel: number = 0; + kazakhstan: number = 0; + belarus: number = 0; + russian: number = 0; + + static fromExporter(data: any): Countries { + const c: Countries = new Countries(); + c.otherWorld += this.safeGetter(data, "Other world", 0); + c.unitedStates += this.safeGetter(data, "United States", 0); + c.hohli += this.safeGetter(data, "Ukraine", 0); + c.israel += this.safeGetter(data, "Israel", 0); + c.kazakhstan += this.safeGetter(data, "Kazakhstan", 0); + c.belarus += this.safeGetter(data, "Belarus", 0); + c.russian += this.safeGetter(data, "Russia", 0); + return c; + } + + static safeGetter(from: any, what: string, def: any): any { + return what in from ? from[what] : def; + } +} diff --git a/src/app/pages/main-page/AnnoncesListCarules.ts b/src/app/pages/main-page/AnnoncesListCarules.ts index c216ee6..89d64e7 100644 --- a/src/app/pages/main-page/AnnoncesListCarules.ts +++ b/src/app/pages/main-page/AnnoncesListCarules.ts @@ -96,7 +96,7 @@ export class AnnoncesListCarules extends AbstractSearchTable { getHeader():string { switch (this.type) { - case "news": return "Интереснные приколы"; + case "news": return "Интересные приколы"; case "reason4play": return "Почему стоит начать играть?"; default: return "Всякое говно"; } diff --git a/src/app/pages/main-page/main-page.component.html b/src/app/pages/main-page/main-page.component.html index 98762ce..602a81f 100644 --- a/src/app/pages/main-page/main-page.component.html +++ b/src/app/pages/main-page/main-page.component.html @@ -59,7 +59,7 @@
- + {{h}}
diff --git a/src/app/pages/servers-page/servers-page.component.html b/src/app/pages/servers-page/servers-page.component.html index 86e9fc0..41f9c27 100644 --- a/src/app/pages/servers-page/servers-page.component.html +++ b/src/app/pages/servers-page/servers-page.component.html @@ -108,3 +108,51 @@ + +
+
+

График онлайна

+
+
+ + Статистика по + + + {{s.name}} + + + + + Количество минут + + + Разница в {{s}} минут + + + + + Количество дней + + + За {{s}} дней + + + + + Сервер + + + {{s.name}} + + + +
+
+ {{ chart }} +
+ + +
+ +
+
diff --git a/src/app/pages/servers-page/servers-page.component.ts b/src/app/pages/servers-page/servers-page.component.ts index 5028582..547332f 100644 --- a/src/app/pages/servers-page/servers-page.component.ts +++ b/src/app/pages/servers-page/servers-page.component.ts @@ -8,6 +8,11 @@ import {AuthService} from "../../services/auth.service"; import {Player} from "../../entities/servers/Player"; import {MatDialog} from "@angular/material/dialog"; import {SimpleActionDialog} from "../internal-components/dialogs/simple-action-dialog.component"; +import {GraphData} from "../../entities/graph/GraphData"; +import {Chart} from "chart.js/auto"; +import {Period} from "../statistic-page/statistic-page.component"; +import {GraphService} from "../../services/graph.service"; +import {ServerService} from "../../services/server.service"; @Component({ selector: 'app-servers-page', @@ -18,12 +23,40 @@ export class ServersPageComponent implements OnInit { servers:{[srv_name: string]:Server|any} = {}; - constructor(private servers_ws:WebsocketServersListenerService, + //хуйня для графиков + serverList: {name: string, server_id: string }[] = [ + {name: 'Выбрать все', server_id: '%'} + ]; + + loading: boolean = false; + + init: boolean = true; + + periods:Period[] = [ + {name: 'По дням', value: 'days'}, + {name: 'По минутам', value: 'minutes'} + ]; + selectedPeriod:Period = this.periods[0]; + + days:number[] = [1,7,14,21,30,60,90,180]; + selectedDays:number = 30; + + minutes:number[] = [1, 5, 10, 15, 30] + selectedMinute:number = 5; + + selectedServer: {name: string, server_id: string } = this.serverList[0]; + + chart!:Chart; + + constructor(private graphService: GraphService, + private serverService: ServerService, + private servers_ws:WebsocketServersListenerService, public actionService: ActionService, public tf2data: Tf2dataService, public authService: AuthService) { } ngOnInit(): void { + this.getServers(); this.servers_ws.getServers().subscribe((r) => { this.setServers(r.servers); }); @@ -68,4 +101,55 @@ export class ServersPageComponent implements OnInit { serversExists():boolean { return Object.keys(this.servers).length > 0; } + + + getServers() { + this.serverService.getServers().subscribe( + (res) => { + const keys = Object.keys(res.data); + for (const key of keys) { + this.serverList.push({name: res.data[key].name, server_id: key}); + } + } + ) + } + + getGraph() { + if (this.loading) { + return; + } + + this.init = false; + this.loading = true; + console.log(this.selectedPeriod, this.selectedMinute, this.selectedDays, this.selectedServer); + switch (this.selectedPeriod.value) { + case 'days': { + this.graphService.getOnlineStatsOfDays(this.selectedDays, this.selectedServer?this.selectedServer.server_id:'%').subscribe( + (d) => this.processingData(GraphData.fromStatsOfPeakOfDay(d.reverse(), "red")), + (err) => this.actionService.showSnack('Произошла ошибка во время загрузки данных, попробуй позже'), + () => this.loading = false + ); break; + } + case 'minutes': { + this.graphService.getOnlineStatsOfMinutes(this.selectedMinute, this.selectedDays, this.selectedServer?this.selectedServer.server_id:'%').subscribe( + (d) => this.processingData(GraphData.fromStatsOfPeakOfPerFiveMinutes(d.reverse(), "red")), + (err) => this.actionService.showSnack('Произошла ошибка во время загрузки данных, попробуй позже'), + () => this.loading = false + ); break; + } + } + } + + processingData(data:GraphData, reversed: boolean = true) { + if (this.chart) + this.chart.destroy(); + + this.chart = new Chart("MyChart", { + type: "line", + data: { + labels: data.labels, + datasets: data.data + } + }); + } } diff --git a/src/app/pages/statistic-page/statistic-page.component.html b/src/app/pages/statistic-page/statistic-page.component.html index a1be241..7c175a1 100644 --- a/src/app/pages/statistic-page/statistic-page.component.html +++ b/src/app/pages/statistic-page/statistic-page.component.html @@ -20,50 +20,37 @@ игроков за всё время - -
-

График онлайна

-
-
- - Статистика по - - - {{s.name}} - - - - - Количество минут - - - Разница в {{s}} минут - - - - - Количество дней - - - За {{s}} дней - - - - - Сервер - - - {{s.name}} - - - -
-
- {{ chart }} -
- - +

Мы патриоты, но уважаем и другие народы, смотрите сколько их понабежало к нам с начала года, но не все выдержали РУССКОЙ БАЗЫ в течении 5 минут. Ну или кто-то умеет пользоваться сервисами обходов блокировок

+
+ + {{countries.russian}} + Русских + + + {{countries.belarus}} + Белоруссов + + + {{countries.kazakhstan}} + Казахов + + + {{countries.hohli}} + Хохлов + + + {{countries.israel}} + Евреев + + + {{countries.unitedStates}} + Пендосов + + + {{countries.otherWorld}} + Прочий мир + +
-
diff --git a/src/app/pages/statistic-page/statistic-page.component.ts b/src/app/pages/statistic-page/statistic-page.component.ts index 755c1ff..9282a1b 100644 --- a/src/app/pages/statistic-page/statistic-page.component.ts +++ b/src/app/pages/statistic-page/statistic-page.component.ts @@ -1,11 +1,10 @@ import { Component, OnInit } from '@angular/core'; -import {GraphService} from "../../services/graph.service"; -import {Chart} from "chart.js/auto"; -import {GraphData} from "../../entities/graph/GraphData"; import {ActionService} from "../../services/action.service"; import {Uniq} from "../../entities/servers/Uniq"; import {ServerService} from "../../services/server.service"; import {AuthService} from "../../services/auth.service"; +import {StatExporter} from "../../entities/servers/StatExporter"; +import {Countries} from "../../entities/servers/Countries"; export interface Period { name: string @@ -19,39 +18,18 @@ export interface Period { }) export class StatisticPageComponent implements OnInit { - init: boolean = true; - loading: boolean = false; - - periods:Period[] = [ - {name: 'По дням', value: 'days'}, - {name: 'По минутам', value: 'minutes'} - ]; - selectedPeriod:Period = this.periods[0]; - - days:number[] = [1,7,14,21,30,60,90,180]; - selectedDays:number = 30; - - minutes:number[] = [1, 5, 10, 15, 30] - selectedMinute:number = 5; - - serverList: {name: string, server_id: string }[] = [ - {name: 'Выбрать все', server_id: '%'} - ]; - selectedServer: {name: string, server_id: string } = this.serverList[0]; - - chart!:Chart; - uniq!: Uniq; - constructor(private graphService: GraphService, - private actionService: ActionService, + countries: Countries = new Countries(); + + constructor(private actionService: ActionService, private serverService: ServerService, public authService: AuthService) { } ngOnInit(): void { - this.getServers(); this.getUniq(); + this.getCountries(); } getUniq() { @@ -60,53 +38,16 @@ export class StatisticPageComponent implements OnInit { ); } - getServers() { - this.serverService.getServers().subscribe( - (res) => { - const keys = Object.keys(res.data); - for (const key of keys) { - this.serverList.push({name: res.data[key].name, server_id: key}); - } - } + getCountries() { + this.serverService.getStats("countries").subscribe( + (res: StatExporter) => this.countries = Countries.fromExporter(res.export()) ) } - getGraph() { - if (this.loading) { - return; - } - - this.init = false; - this.loading = true; - console.log(this.selectedPeriod, this.selectedMinute, this.selectedDays, this.selectedServer); - switch (this.selectedPeriod.value) { - case 'days': { - this.graphService.getOnlineStatsOfDays(this.selectedDays, this.selectedServer?this.selectedServer.server_id:'%').subscribe( - (d) => this.processingData(GraphData.fromStatsOfPeakOfDay(d.reverse(), "red")), - (err) => this.actionService.showSnack('Произошла ошибка во время загрузки данных, попробуй позже'), - () => this.loading = false - ); break; - } - case 'minutes': { - this.graphService.getOnlineStatsOfMinutes(this.selectedMinute, this.selectedDays, this.selectedServer?this.selectedServer.server_id:'%').subscribe( - (d) => this.processingData(GraphData.fromStatsOfPeakOfPerFiveMinutes(d.reverse(), "red")), - (err) => this.actionService.showSnack('Произошла ошибка во время загрузки данных, попробуй позже'), - () => this.loading = false - ); break; - } + generateStyle4Country(countryName: string) { + return { + 'background': 'linear-gradient(to right, black, transparent), url(\'../../../assets/flags/'+countryName+'\')', + 'background-size': 'cover' } } - - processingData(data:GraphData, reversed: boolean = true) { - if (this.chart) - this.chart.destroy(); - - this.chart = new Chart("MyChart", { - type: "line", - data: { - labels: data.labels, - datasets: data.data - } - }); - } } diff --git a/src/assets/flags/Flag_of_Belarus.svg b/src/assets/flags/Flag_of_Belarus.svg new file mode 100644 index 0000000..9ed3235 --- /dev/null +++ b/src/assets/flags/Flag_of_Belarus.svg @@ -0,0 +1,19 @@ + + Flag of Belarus + + + + + + + + + + + + + + + + + diff --git a/src/assets/flags/Flag_of_Israel.svg b/src/assets/flags/Flag_of_Israel.svg new file mode 100644 index 0000000..e454d14 --- /dev/null +++ b/src/assets/flags/Flag_of_Israel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/flags/Flag_of_Kazakhstan.svg b/src/assets/flags/Flag_of_Kazakhstan.svg new file mode 100644 index 0000000..97597ad --- /dev/null +++ b/src/assets/flags/Flag_of_Kazakhstan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/flags/Flag_of_Nazi.svg b/src/assets/flags/Flag_of_Nazi.svg new file mode 100644 index 0000000..b0c2f82 --- /dev/null +++ b/src/assets/flags/Flag_of_Nazi.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/assets/flags/Flag_of_Russia.svg b/src/assets/flags/Flag_of_Russia.svg new file mode 100644 index 0000000..9c0cc49 --- /dev/null +++ b/src/assets/flags/Flag_of_Russia.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/flags/Flag_of_the_United_Nations.svg b/src/assets/flags/Flag_of_the_United_Nations.svg new file mode 100644 index 0000000..0b21f13 --- /dev/null +++ b/src/assets/flags/Flag_of_the_United_Nations.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/assets/flags/Flag_of_the_United_States.svg b/src/assets/flags/Flag_of_the_United_States.svg new file mode 100644 index 0000000..70f4764 --- /dev/null +++ b/src/assets/flags/Flag_of_the_United_States.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file