From d593919fc08b2ec7e753abe8e52c4743f7cc18a7 Mon Sep 17 00:00:00 2001 From: sepehr Date: Sat, 20 Jul 2024 16:11:27 +0330 Subject: [PATCH] Add radio support --- .../views/device_detail/device.component.html | 111 ++++++++++++++---- .../views/device_detail/device.component.ts | 50 +++++++- src/app/views/device_detail/device.module.ts | 6 + .../widgets-dropdown.component.html | 22 ++-- .../widgets-dropdown.component.scss | 3 + .../widgets-dropdown.component.ts | 23 ++-- 6 files changed, 167 insertions(+), 48 deletions(-) diff --git a/src/app/views/device_detail/device.component.html b/src/app/views/device_detail/device.component.html index ad9b2d7..ad20cfd 100644 --- a/src/app/views/device_detail/device.component.html +++ b/src/app/views/device_detail/device.component.html @@ -9,17 +9,24 @@ - -

{{devdata['name'] }} ( {{devdata['ip'] }} )

+ +

{{devdata['name'] }} ( {{devdata['ip'] }} )

- - - - - + + + + + +
@@ -38,25 +45,14 @@ - {{item.key}} - {{ item.value }} - - @@ -71,7 +67,7 @@ + [autoResizeWidth]=true> @@ -134,7 +130,7 @@ {{value}} - + @@ -147,7 +143,82 @@ + + + +
Radio data
+ +
{{raddata.key}}
+ + + + + + + + + + + + +
{{d.key}}{{d.value}}
+
+ + + + + + + + + + +
{{d.key}}{{d.value}}
+
+ + + + + + + + + + +
{{d.key}}{{d.value}}
+
+ + + + + + + + + + +
{{d.key}}{{d.value}}
+
+
+ + + + + + + + + +
Strength at rates + {{st}} +
+
+
+
+
+
+
diff --git a/src/app/views/device_detail/device.component.ts b/src/app/views/device_detail/device.component.ts index 3767178..d77c1e4 100644 --- a/src/app/views/device_detail/device.component.ts +++ b/src/app/views/device_detail/device.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from "@angular/core"; +import { Component, OnDestroy, OnInit } from "@angular/core"; import { Router, ActivatedRoute } from "@angular/router"; import { dataProvider } from "../../providers/mikrowizard/data"; import { loginChecker } from "../../providers/login_checker"; @@ -27,14 +27,20 @@ interface IUser { color: string; } +type radiodata = { + [key: string]: any; +}; + @Component({ templateUrl: "device.component.html", styleUrls: ["device.component.scss"], }) -export class DeviceComponent implements OnInit { +export class DeviceComponent implements OnInit, OnDestroy { public uid: number; public uname: string; public tz: string; + public ispro: boolean = false; + constructor( private data_provider: dataProvider, private route: ActivatedRoute, @@ -51,6 +57,7 @@ export class DeviceComponent implements OnInit { _self.uid = res.uid; _self.uname = res.name; _self.tz = res.tz; + _self.ispro = res.ISPRO; const userId = _self.uid; if (res.role != "admin") { @@ -66,17 +73,20 @@ export class DeviceComponent implements OnInit { } public devdata: any; public devsensors: any; + public radio_devsensors: radiodata; public columns: Array = []; public loading: boolean = true; + public radio_loading: boolean = true; public InterfaceChartModalVisible: boolean = false; public rows: any = []; public Selectedrows: any; public devid: number = 0; public data_interval: any; - public delta: string = "5m"; + public delta: string = "live"; public total_type: string = "bps"; public interface_rate: any = {}; public options: any; + public is_radio: boolean = false; public sorting = { enabled: true, multiSorting: true, @@ -95,7 +105,12 @@ export class DeviceComponent implements OnInit { sort: true, columnsManager: true, }; - + objectlen(object:any){ + return Object.keys(object).length; + } + strangth_at_rate_extract(data:string){ + return data.split(','); + } public infoPanel: GuiInfoPanel = { enabled: true, infoDialog: false, @@ -365,17 +380,23 @@ export class DeviceComponent implements OnInit { logger(item: any) { console.dir(item); } + switch_total() { + this.total_type = this.total_type == "bps" ? "pps" : "bps"; + this.updateData(); + } updateData(): void { var _self = this; this.data_provider.get_dev_info(this.devid).then((res) => { _self.devdata = res; _self.interfaces = res.interfaces; + if ("is_radio" in res) _self.is_radio = res.is_radio; _self.data_provider .get_dev_sensors(_self.devid, _self.delta, _self.total_type) .then((res) => { _self.devsensors = res; _self.loading = false; }); + if (_self.is_radio) _self.get_radio_data(); }); } checkitem(item: any) { @@ -416,6 +437,18 @@ export class DeviceComponent implements OnInit { }); } + get_radio_data() { + if(!this.ispro) + return; + var _self = this; + _self.data_provider + .get_dev_radio_sensors(_self.devid, _self.delta) + .then((res) => { + _self.radio_devsensors = res; + _self.radio_loading = false; + }); + } + initDeviceInfo(): void { var _self = this; clearInterval(this.data_interval); @@ -423,15 +456,20 @@ export class DeviceComponent implements OnInit { this.data_interval = setInterval(() => { this.data_provider.get_dev_info(this.devid).then((res) => { _self.devdata = res; - + if ("is_radio" in res) _self.is_radio = res.is_radio; _self.interfaces = res.interfaces; _self.data_provider .get_dev_sensors(_self.devid, _self.delta, _self.total_type) .then((res) => { _self.devsensors = res; _self.loading = false; + if (_self.is_radio) _self.get_radio_data(); }); }); - }, 1000000); + }, 60000); + } + + ngOnDestroy() { + clearInterval(this.data_interval); } } diff --git a/src/app/views/device_detail/device.module.ts b/src/app/views/device_detail/device.module.ts index 2f372f5..a405dea 100644 --- a/src/app/views/device_detail/device.module.ts +++ b/src/app/views/device_detail/device.module.ts @@ -11,6 +11,9 @@ import { NavbarModule, AlertModule, ModalModule, + TableModule, + UtilitiesModule, + BadgeModule } from "@coreui/angular"; import { ChartjsModule } from "@coreui/angular-chartjs"; @@ -36,6 +39,9 @@ import { WidgetsModule } from "../widgets/widgets.module"; GuiGridModule, NavbarModule, ModalModule, + TableModule, + UtilitiesModule, + BadgeModule ], declarations: [DeviceComponent], }) diff --git a/src/app/views/widgets/widgets-dropdown/widgets-dropdown.component.html b/src/app/views/widgets/widgets-dropdown/widgets-dropdown.component.html index b810e41..b758101 100644 --- a/src/app/views/widgets/widgets-dropdown/widgets-dropdown.component.html +++ b/src/app/views/widgets/widgets-dropdown/widgets-dropdown.component.html @@ -1,18 +1,16 @@ - - - + + + {{show_number(sensor,devicedata)}} - + - -
+
+ ">
- +
\ No newline at end of file diff --git a/src/app/views/widgets/widgets-dropdown/widgets-dropdown.component.scss b/src/app/views/widgets/widgets-dropdown/widgets-dropdown.component.scss index e69de29..5bdba7a 100644 --- a/src/app/views/widgets/widgets-dropdown/widgets-dropdown.component.scss +++ b/src/app/views/widgets/widgets-dropdown/widgets-dropdown.component.scss @@ -0,0 +1,3 @@ +::ng-deep .fs-4.fw-semibold{ + font-size: 0.8rem!important; +} \ No newline at end of file diff --git a/src/app/views/widgets/widgets-dropdown/widgets-dropdown.component.ts b/src/app/views/widgets/widgets-dropdown/widgets-dropdown.component.ts index 9c11226..00f65c4 100644 --- a/src/app/views/widgets/widgets-dropdown/widgets-dropdown.component.ts +++ b/src/app/views/widgets/widgets-dropdown/widgets-dropdown.component.ts @@ -53,23 +53,18 @@ export class WidgetsDropdownComponent implements OnInit, AfterContentInit { 'danger', 'warning', 'info', - 'light', 'dark', 'primary', 'success', 'danger', 'warning', 'info', - 'light', 'dark', 'primary', 'success', 'danger', 'warning', 'info', - 'light', - 'dark', - 'light', 'dark', 'primary', 'success', @@ -177,7 +172,6 @@ export class WidgetsDropdownComponent implements OnInit, AfterContentInit { mynumber /= 1024; unitIndex++; } - console.dir(mynumber) switch (unit) { case 'rx': return mynumber.toFixed(3) + ' ' + units[unitIndex]; @@ -190,7 +184,12 @@ export class WidgetsDropdownComponent implements OnInit, AfterContentInit { break; } } - + check_options(sensor:string){ + if(sensor.indexOf('total')>-1) + return true; + else + return false; + } show_number(sensor:string,data:any){ if(sensor=='rxp/txp-total'){ let mynumber=data[sensor]["datasets"][0]["data"][data[sensor]["datasets"][0]["data"].length-1]; @@ -199,6 +198,13 @@ export class WidgetsDropdownComponent implements OnInit, AfterContentInit { let res2=this.convert_bw_human(mynumber1,data[sensor]["datasets"][1]['unit']); return res1 + " / " + res2; } + else if(sensor=='rx/tx-total'){ + let mynumber=data[sensor]["datasets"][0]["data"][data[sensor]["datasets"][0]["data"].length-1]; + let mynumber1=data[sensor]["datasets"][1]["data"][data[sensor]["datasets"][1]["data"].length-1]; + let res1=this.convert_bw_human(mynumber,data[sensor]["datasets"][0]['unit']); + let res2=this.convert_bw_human(mynumber1,data[sensor]["datasets"][1]['unit']); + return res1 + " / " + res2; + } else{ let mynumber=data[sensor]["datasets"][0]["data"][data[sensor]["datasets"][0]["data"].length-1]; return mynumber @@ -284,7 +290,6 @@ export class WidgetsDropdownComponent implements OnInit, AfterContentInit { res /= 1024; unitIndex++; } - console.dir(res) switch (context.dataset.unit) { case 'rx': return "rx/s :" + res.toFixed(3) + ' ' + units[unitIndex]; @@ -399,7 +404,6 @@ export class ChartSample implements AfterViewInit { let { datasets, labels } = { ...this.data }; // @ts-ignore const before = this.chartComponent?.chart?.data.datasets.length; - console.log('before', before); // console.log('datasets, labels', datasets, labels) // @ts-ignore // this.data = data() @@ -416,7 +420,6 @@ export class ChartSample implements AfterViewInit { // @ts-ignore setTimeout(() => { const after = this.chartComponent?.chart?.data.datasets.length; - console.log('after', after); }); }, 5000); }