@@ -34,13 +52,21 @@ export class NetworkStatusComponent implements OnInit {
MODE: "ALL"|"NODE" = "ALL"
NUM:number = 0;
+ signalMode:"day"|"month"|"week"|string = "day"
+ signalCanvasId = "signalCanvasId";
+ signalChart = {
+ chart: null as unknown as Chart,
+ config: this.generateConfigTChart("Проходимость сигнала", true, "line") as any
+ };
+
nodesNames: KeyValueMap = {}
//общая статичтика по perPortNum за день\неделю\месяц / ?=
//top кто насрал пакетами всего за день\неделю\месяц / ?=packetsSumNode=true
graphs:any[] = this.generateGraps();
constructor(private http: HttpClient,
- private route: ActivatedRoute) {}
+ private route: ActivatedRoute,
+ private datepipe: DatePipe) {}
getNumName(num:number) {
if (`${num}` in this.nodesNames)
@@ -54,22 +80,23 @@ export class NetworkStatusComponent implements OnInit {
header: "Cтатистика пакетов в сети",
type: 'perPortNum',
requestMode: "ALL",
+ endpoint:"api/packet/stats",
cards:[{
- chart: Chart,
+ chart: null as unknown as Chart,
canvasId: "DayPerPB",
params: "?=",
before: new Date().getTime()/1000,
after: (new Date().getTime()/1000) - this.DAY,
config: this.generateConfigTChart("Cтатистика по пакетам в сети за день")
},{
- chart: Chart,
+ chart: null as unknown as Chart,
canvasId: "WeekPerPB",
params: "?=",
before: new Date().getTime()/1000,
after: (new Date().getTime()/1000) - this.WEEK,
config: this.generateConfigTChart("Cтатистика по пакетам в сети за неделю")
},{
- chart: Chart,
+ chart: null as unknown as Chart,
canvasId: "MonthPerPB",
params: "?=",
before: new Date().getTime()/1000,
@@ -81,22 +108,23 @@ export class NetworkStatusComponent implements OnInit {
header: "Общая статистика пакетов в сети",
type: 'perSumNode',
requestMode: "ALL",
+ endpoint:"api/packet/stats",
cards:[{
- chart: Chart,
+ chart: null as unknown as Chart,
canvasId: "DaySumPB",
params: "?packetsSumNode=true",
before: new Date().getTime()/1000,
after: (new Date().getTime()/1000) - this.DAY,
config: this.generateConfigTChart("Количество пакетов от пользоватей за день", false)
},{
- chart: Chart,
+ chart: null as unknown as Chart,
canvasId: "WeekSumPB",
params: "?packetsSumNode=true",
before: new Date().getTime()/1000,
after: (new Date().getTime()/1000) - this.WEEK,
config: this.generateConfigTChart("Количество пакетов от пользоватей за неделю", false)
},{
- chart: Chart,
+ chart: null as unknown as Chart,
canvasId: "MonthSumPB",
params: "?packetsSumNode=true",
before: new Date().getTime()/1000,
@@ -107,22 +135,23 @@ export class NetworkStatusComponent implements OnInit {
header: "Cтатистика пакетов в сети",
type: 'packetsPerNode',
requestMode: "NODE",
+ endpoint:"api/packet/stats",
cards:[{
- chart: Chart,
+ chart: null as unknown as Chart,
canvasId: "DayPerNodePB",
params: "?packetsPerNode=true",
before: new Date().getTime()/1000,
after: (new Date().getTime()/1000) - this.DAY,
config: this.generateConfigTChart("Cтатистика по пакетам в сети за день")
},{
- chart: Chart,
+ chart: null as unknown as Chart,
canvasId: "WeekPerNodePB",
params: "?packetsPerNode=true",
before: new Date().getTime()/1000,
after: (new Date().getTime()/1000) - this.WEEK,
config: this.generateConfigTChart("Cтатистика по пакетам в сети за неделю")
},{
- chart: Chart,
+ chart: null as unknown as Chart,
canvasId: "MonthPerNodePB",
params: "?packetsPerNode=true",
before: new Date().getTime()/1000,
@@ -133,10 +162,13 @@ export class NetworkStatusComponent implements OnInit {
]
}
- generateConfigTChart(name: string, legend: boolean = true) {
+ generateConfigTChart(name: string, legend: boolean = true, type: string = "pie") {
return {
- type: 'pie',
- data: {},
+ type: type,
+ data: {
+ labels: [] as any[],
+ datasets: [] as any[]
+ },
options: {
responsive: true,
plugins: {
@@ -157,7 +189,6 @@ export class NetworkStatusComponent implements OnInit {
this.route.params.subscribe(
(params) => {
const num: number = Number.parseInt(params["num"]);
- console.log(num);
switch (num) {
case 0: {
this.MODE = "ALL";
@@ -190,6 +221,7 @@ export class NetworkStatusComponent implements OnInit {
() => {
this.graphs = this.generateGraps();
this.updateGraphs();
+ this.updateSignalGraph();
}
)
break;
@@ -198,12 +230,48 @@ export class NetworkStatusComponent implements OnInit {
})
}
+ updateSignalGraph() {
+ const before = new Date().getTime() / 1000;
+ let after;
+ switch (this.signalMode) {
+ case "day": {
+ after = (new Date().getTime()/1000) - this.DAY;
+ break;
+ }
+ case "week": {
+ after = (new Date().getTime()/1000) - this.WEEK;
+ break;
+ }
+ case "month": {
+ after = (new Date().getTime()/1000) - this.MONTH;
+ break;
+ }
+ }
+ this.http.get(`api/packet/signal?before=${before}&after=${after}&nums=${this.NUM}`).subscribe(
+ (obj) => {
+ this.signalChart.config.data = {labels: [], datasets:[{label: "snr",data:[]},{label: "rssi",data:[]}]};
+ (obj as PacketSignalDTO[]).forEach(
+ (packet: PacketSignalDTO) => {
+ this.signalChart.config.data.labels.push(this.datepipe.transform(packet.ts*1000, 'HH:mm dd.MM.yyyy'))
+ this.signalChart.config.data.datasets[0].data.push(packet.rx_snr)
+ this.signalChart.config.data.datasets[1].data.push(packet.rx_rssi)
+ return;
+ }
+ )
+ if (this.signalChart.chart != null)
+ this.signalChart.chart.destroy()
+
+ this.signalChart.chart = new Chart(this.signalCanvasId, this.signalChart.config)
+ }
+ )
+ }
+
updateGraphs() {
this.graphs.forEach(
(graph) => {
graph.cards.forEach((settings:any) => {
if (this.MODE != graph.requestMode) return;
- this.http.get(`api/packet/stats${settings.params}&before=${settings.before}&after=${settings.after}&${this.NUM == 0?'':('&nums='+this.NUM)}`)
+ this.http.get(`${graph.endpoint}${settings.params}&before=${settings.before}&after=${settings.after}&${this.NUM == 0?'':('&nums='+this.NUM)}`)
.subscribe((data) => {
settings.config.data = {
labels: [],
@@ -239,9 +307,8 @@ export class NetworkStatusComponent implements OnInit {
}
}
)
- //if (settings.chart)
- // settings.chart.destroy()
-
+ if (settings.chart)
+ settings.chart.destroy()
settings.chart = new Chart(settings.canvasId, settings.config)
})
})
diff --git a/ui/src/app/entities/PacketSignalDTO.ts b/ui/src/app/entities/PacketSignalDTO.ts
new file mode 100644
index 0000000..27574ba
--- /dev/null
+++ b/ui/src/app/entities/PacketSignalDTO.ts
@@ -0,0 +1,8 @@
+export interface PacketSignalDTO {
+ from: number,
+ rx_snr: number,
+ rx_rssi: number,
+ ts: number,
+ hop_start: number,
+ hop_limit: number
+}