20180910_jeffrey - silenceuncrio/diary GitHub Wiki
APN Usage 的 Real Time Usage Rate 這個從原始資料導出的圖表放棄不用
先從 APN1 Usage 下手
盤一下
html
原本
<div id="real_time" class="tab-pane fade in active">
<canvas
id="line"
class="chart chart-line"
chart-data="vm.real_time_difference.data"
chart-labels="vm.real_time_difference.labels"
chart-options="vm.real_time_difference.options"
chart-colors="vm.real_time_difference.colors"
chart-dataset-override="vm.real_time_difference.datasetOverride" ></canvas>
<br />
<canvas
id="line"
class="chart chart-line"
chart-data="vm.real_time.data"
chart-labels="vm.real_time.labels"
chart-options="vm.real_time.options"
chart-colors="vm.real_time.colors"
chart-dataset-override="vm.real_time.datasetOverride" ></canvas>
</div>
修改
@@ -65,17 +65,6 @@
<canvas
id="line"
class="chart chart-line"
- chart-data="vm.real_time_difference.data"
- chart-labels="vm.real_time_difference.labels"
- chart-options="vm.real_time_difference.options"
- chart-colors="vm.real_time_difference.colors"
- chart-dataset-override="vm.real_time_difference.datasetOverride" ></canvas>
-
- <br />
-
- <canvas
- id="line"
- class="chart chart-line"
chart-data="vm.real_time.data"
chart-labels="vm.real_time.labels"
chart-options="vm.real_time.options"
javascript
原本
vm.real_time = {};
vm.real_time_difference = {};
vm.real_time.data = [
[vm._real_time.apn0_month_rx], [vm._real_time.apn0_month_tx], [vm._real_time.apn0_DisplayTotal],
];
vm.real_time_difference.data = [ [0], [0], [0], ];
vm.real_time.labels = [
60, 58, 56, 54, 52, 50, 48, 46, 44, 42,
40, 38, 36, 34, 32, 30, 28, 26, 24, 22,
20, 18, 16, 14, 12, 10, 8, 6, 4, 2
];
vm.real_time_difference.labels = angular.copy(vm.real_time.labels);
vm.real_time.options = angular.copy(vm.chart_template.options);
vm.real_time.options.title.text = 'Real Time Usage';
vm.real_time.options.scales.xAxes[0].scaleLabel.labelString = 'Window Size (60 Seconds)';
vm.real_time.options.scales.yAxes[0].scaleLabel.labelString = 'MB';
vm.real_time_difference.options = angular.copy(vm.chart_template.options);
vm.real_time_difference.options.title.text = 'Real Time Usage Rate';
vm.real_time_difference.options.scales.xAxes[0].scaleLabel.labelString = 'Window Size (60 Seconds)';
vm.real_time_difference.options.scales.yAxes[0].scaleLabel.labelString = 'MB';
vm.real_time.colors = angular.copy(vm.chart_template.colors);
vm.real_time_difference.colors = angular.copy(vm.chart_template.colors);
vm.real_time.datasetOverride = angular.copy(vm.chart_template.datasetOverride);
vm.real_time_difference.datasetOverride = angular.copy(vm.chart_template.datasetOverride);
function updateTime() {
icos.usage_display.real_time().then(function(result) {
vm.real_time.data[0].push(result.data.real_time.apn0_month_rx);
vm.real_time.data[1].push(result.data.real_time.apn0_month_tx);
vm.real_time.data[2].push(result.data.real_time.apn0_DisplayTotal);
for (var i = 0; i < vm.real_time.data.length; i ++) {
if (vm.real_time.data[i].length > 30) {
vm.real_time.data[i].shift();
}
}
vm.real_time_difference.data[0].push(
( vm.real_time.data[0][vm.real_time.data[0].length - 1] -
vm.real_time.data[0][vm.real_time.data[0].length - 2]) / 2
);
vm.real_time_difference.data[1].push(
( vm.real_time.data[1][vm.real_time.data[1].length - 1] -
vm.real_time.data[1][vm.real_time.data[1].length - 2]) / 2
);
vm.real_time_difference.data[2].push(
( vm.real_time.data[2][vm.real_time.data[2].length - 1] -
vm.real_time.data[2][vm.real_time.data[2].length - 2]) / 2
);
for (var i = 0; i < vm.real_time_difference.data.length; i ++) {
if (vm.real_time_difference.data[i].length > 30) {
vm.real_time_difference.data[i].shift();
}
}
});
}
修改
@@ -89,39 +89,28 @@ function controller($scope, $interval, icos, real_time, info) {
vm.real_time = {};
- vm.real_time_difference = {};
vm.real_time.data = [
[vm._real_time.apn0_month_rx], [vm._real_time.apn0_month_tx], [vm._real_time.apn0_DisplayTotal],
];
- vm.real_time_difference.data = [ [0], [0], [0], ];
vm.real_time.labels = [
60, 58, 56, 54, 52, 50, 48, 46, 44, 42,
40, 38, 36, 34, 32, 30, 28, 26, 24, 22,
20, 18, 16, 14, 12, 10, 8, 6, 4, 2
];
- vm.real_time_difference.labels = angular.copy(vm.real_time.labels);
vm.real_time.options = angular.copy(vm.chart_template.options);
vm.real_time.options.title.text = 'Real Time Usage';
vm.real_time.options.scales.xAxes[0].scaleLabel.labelString = 'Window Size (60 Seconds)';
vm.real_time.options.scales.yAxes[0].scaleLabel.labelString = 'MB';
- vm.real_time_difference.options = angular.copy(vm.chart_template.options);
- vm.real_time_difference.options.title.text = 'Real Time Usage Rate';
- vm.real_time_difference.options.scales.xAxes[0].scaleLabel.labelString = 'Window Size (60 Seconds)';
- vm.real_time_difference.options.scales.yAxes[0].scaleLabel.labelString = 'MB';
-
vm.real_time.colors = angular.copy(vm.chart_template.colors);
- vm.real_time_difference.colors = angular.copy(vm.chart_template.colors);
vm.real_time.datasetOverride = angular.copy(vm.chart_template.datasetOverride);
- vm.real_time_difference.datasetOverride = angular.copy(vm.chart_template.datasetOverride);
function updateTime() {
icos.usage_display.real_time().then(function(result) {
-
vm.real_time.data[0].push(result.data.real_time.apn0_month_rx);
vm.real_time.data[1].push(result.data.real_time.apn0_month_tx);
vm.real_time.data[2].push(result.data.real_time.apn0_DisplayTotal);
@@ -130,24 +119,6 @@ function controller($scope, $interval, icos, real_time, info) {
vm.real_time.data[i].shift();
}
}
-
- vm.real_time_difference.data[0].push(
- ( vm.real_time.data[0][vm.real_time.data[0].length - 1] -
- vm.real_time.data[0][vm.real_time.data[0].length - 2]) / 2
- );
- vm.real_time_difference.data[1].push(
- ( vm.real_time.data[1][vm.real_time.data[1].length - 1] -
- vm.real_time.data[1][vm.real_time.data[1].length - 2]) / 2
- );
- vm.real_time_difference.data[2].push(
- ( vm.real_time.data[2][vm.real_time.data[2].length - 1] -
- vm.real_time.data[2][vm.real_time.data[2].length - 2]) / 2
- );
- for (var i = 0; i < vm.real_time_difference.data.length; i ++) {
- if (vm.real_time_difference.data[i].length > 30) {
- vm.real_time_difference.data[i].shift();
- }
- }
});
}
APN2 Usage 也套用相同的改變
發現一開始 init 的值為 0
原來是 init 的值拿錯了
上 code 吧
目前已經為了 release 需要切到 release
commit 980a12b24d283cf64c3ed5d71c2d372b4931fca3
Refs: [release/v0.07], {origin/release/v0.07}
Author: jeffrey <[email protected]>
Date: Mon Sep 10 09:31:45 2018 +0800
remove the 'Real Time Usage Rate' from tab 'Real Time' at 'LTE / APN1 Usage' and 'LTE / APN2 Usage' web page
proscend/prosrc/www/app/feature/usage_apn.html | 11 ---------
proscend/prosrc/www/app/feature/usage_apn1.js | 29 ------------------------
proscend/prosrc/www/app/feature/usage_apn2.js | 31 +-------------------------
3 files changed, 1 insertion(+), 70 deletions(-)
盤一下還有什麼沒作的
該作的項目都做完了
mantis issue 也解了
試著來化簡 Status
page 的 CGI 存取數目吧
目前的情況
對應的 javascript 的 resolve
function config($routeProvider) {
$routeProvider
.when("/", {
templateUrl: 'app/feature/status.html',
controller: 'status_controller',
controllerAs: 'vm',
resolve: {
lte: function(icos) {
return icos.lte.shm().then(function(result) {
return result.data.shm;
});
},
modem0: function(icos) {
return icos.modem0.shm().then(function(result) {
return result.data.shm;
});
},
modem1: function(icos) {
return icos.modem1.shm().then(function(result) {
return result.data.shm;
});
},
lte_dpip0: function(icos) {
return icos.lte_dpip0.shm().then(function(result) {
return result.data.shm;
});
},
lte_dpip1: function(icos) {
return icos.lte_dpip1.shm().then(function(result) {
return result.data.shm;
});
},
lan_status: function(icos) {
return icos.lan_status.shm().then(function(result) {
return result.data.shm;
});
},
eth_proto4: function(icos) {
return icos.eth_proto4.shm().then(function(result) {
return result.data.shm;
});
},
eth_proto6: function(icos) {
return icos.eth_proto6.shm().then(function(result) {
return result.data.shm;
});
},
vpn: function(icos) {
return icos.shm.vpn().then(function(result) {
return result.data.shm;
});
},
gnss: function(icos) {
return icos.gnss.shm().then(function(result) {
return result.data.shm;
});
},
wan_dns: function(icos) {
return icos.shm.wan_dns().then(function(result) {
return result.data.shm;
});
},
lte_cur_roaming: function(icos) {
return icos.shm.lte_cur_roaming().then(function(result) {
return result.data.shm;
});
},
lte0_proto6: function(icos) {
return icos.shm.lte0_proto6().then(function(result) {
return result.data.shm;
});
},
lte1_proto6: function(icos) {
return icos.shm.lte1_proto6().then(function(result) {
return result.data.shm;
});
},
lte_net_mode: function(icos) {
return icos.shm.lte_net_mode().then(function(result) {
return result.data.shm;
});
},
}
})
}
一個一個盤
icos.lte.shm()
icos_shm.cgi?act=shm&name=lte
function status_controller(..., lte, ...) {
var vm = this;
vm.lte = lte;
...
}
在 status.html.src 裡沒有用途
拿掉吧
proscend/prosrc/www/app/feature/status.js
@@ -15,11 +15,6 @@ function config($routeProvider) {
controller: 'status_controller',
controllerAs: 'vm',
resolve: {
- lte: function(icos) {
- return icos.lte.shm().then(function(result) {
- return result.data.shm;
- });
- },
modem0: function(icos) {
return icos.modem0.shm().then(function(result) {
return result.data.shm;
@@ -107,7 +102,7 @@ angular
function status_controller(
$scope, $timeout, $route, $templateCache,
- share, lte, modem0, modem1, lte_dpip0, lte_dpip1, lan_status, eth_proto4, eth_proto6, lte0_proto6, lte1_proto6,
+ share, modem0, modem1, lte_dpip0, lte_dpip1, lan_status, eth_proto4, eth_proto6, lte0_proto6, lte1_proto6, ^M
vpn, gnss, wan_dns, lte_cur_roaming, lte_net_mode) {
// clear out $templateCache in AngularJS
@@ -115,8 +110,6 @@ function status_controller(
var vm = this;
- vm.lte = lte;
-
vm.lte_net_mode = lte_net_mode;
if (vm.lte_net_mode.lte_net_mode != 0) { // LTE Net Mode: Bridge Only / Router Only
vm.current_sim = modem0;
commit 但不 push
commit 60397b742dd63f2394b2949f72671da2f8f30b1c
Refs: [release/v0.07]
Author: jeffrey <[email protected]>
Date: Mon Sep 10 10:06:39 2018 +0800
refactoring 'Status' web page:
- remove 'icos_shm.cgi?act=shm&name=lte'
proscend/prosrc/www/app/feature/status.js | 9 +--------
1 file changed, 1 insertion(+), 8 deletions(-)
icos.modem0.shm()
icos_shm.cgi?act=shm&name=modem0
icos.modem1.shm()
icos_shm.cgi?act=shm&name=modem1
function status_controller(..., share, modem0, modem1, ..., lte_net_mode) {
var vm = this;
vm.lte_net_mode = lte_net_mode;
if (vm.lte_net_mode.lte_net_mode != 0) { // LTE Net Mode: Bridge Only / Router Only
vm.current_sim = modem0;
vm.backup_sim = modem1;
} else { // LTE Net Mode: Bridge + Router
vm.current_sim = modem1;
vm.backup_sim = modem0;
}
// update to share service data
share.data.signal = vm.current_sim.signal;
}
<table class="table table-striped table-condensed">
<thead>
<tr>
<th>{{ 'STATUS_ATTR' | translate }}</th>
<th>{{ 'STATUS_VALUE' | translate }}</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ 'STATUS_MODEM_SIM_STATUS' | translate }}</td>
<td>{{ vm.current_sim.modem_sim_status | translate }}
<span class="text-danger" ng-show="vm.lte_cur_roaming.lte_cur_roaming == 1">(Roaming)</span></td>
</tr>
<tr>
<td>{{ 'STATUS_MODEM_OPERATOR_NAME' | translate }}</td>
<td>{{ vm.current_sim.modem_operator_name }}</td>
</tr>
<tr>
<td>{{ 'STATUS_MODEM_ACCESS' | translate }}</td>
<td>{{ vm.current_sim.modem_access | translate }}</td>
</tr>
<tr>
<td>{{ 'STATUS_MODEM_SIM_IMSI' | translate }}</td>
<td>{{ vm.current_sim.modem_sim_imsi }}</td>
</tr>
<tr>
<td>{{ 'STATUS_PHONE_NUMBER' | translate }}</td>
<td>{{ vm.current_sim.phone_number }}</td>
</tr>
<tr>
<td>{{ 'STATUS_MODEM_BAND' | translate }}</td>
<td>{{ vm.current_sim.modem_band }}</td>
</tr>
<tr>
<td>{{ 'STATUS_MODEM_FREQUECE' | translate }}</td>
<td>{{ vm.current_sim.modem_channel }}</td>
</tr>
</tbody>
</table>
icos.lte_dpip0.shm()
icos_shm.cgi?act=shm&name=lte_dpip0
icos.lte_dpip1.shm()
icos_shm.cgi?act=shm&name=lte_dpip1
function status_controller(..., modem0, modem1, ..., lte_net_mode) {
vm.lte_net_mode = lte_net_mode;
if (vm.lte_net_mode.lte_net_mode != 0) { // LTE Net Mode: Bridge Only / Router Only
vm.current_lte = lte_dpip0;
vm.backup_lte = lte_dpip1;
} else { // LTE Net Mode: Bridge + Router
vm.current_lte = lte_dpip1;
vm.backup_lte = lte_dpip0;
}
vm.lte_dpip0 = lte_dpip0;
vm.lte_dpip1 = lte_dpip1;
}
<table class="table table-striped table-condensed">
<thead>
<tr>
<th>{{ 'STATUS_ATTR' | translate }}</th>
<th>{{ 'STATUS_VALUE' | translate }}</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ 'STATUS_IPV4_ADDR' | translate }}</td>
<td>{{ vm.lte_dpip0.ipinfo.ipRmt }}</td>
</tr>
<tr>
<td>{{ 'STATUS_IPV4_MASK' | translate }}</td>
<td>{{ vm.lte_dpip0.ipinfo.ipMask }}</td>
</tr>
<tr>
<td>{{ 'STATUS_DEFAULT_GATEWAY' | translate }}</td>
<td>{{ vm.lte_dpip0.ipinfo.default_gw }}</td>
</tr>
</tbody>
</table>
...
<table class="table table-striped table-condensed">
<thead>
<tr>
<th>{{ 'STATUS_ATTR' | translate }}</th>
<th>{{ 'STATUS_VALUE' | translate }}</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ 'STATUS_IPV4_ADDR' | translate }}</td>
<td>{{ vm.lte_dpip1.ipinfo.ipRmt }}</td>
</tr>
<tr>
<td>{{ 'STATUS_IPV4_MASK' | translate }}</td>
<td>{{ vm.lte_dpip1.ipinfo.ipMask }}</td>
</tr>
<tr>
<td>{{ 'STATUS_DEFAULT_GATEWAY' | translate }}</td>
<td>{{ vm.lte_dpip1.ipinfo.default_gw }}</td>
</tr>
</tbody>
</table>
導出的 current_lte
和 backup_lte
沒用到 拿掉
proscend/prosrc/www/app/feature/status.js
@@ -114,8 +114,6 @@ function status_controller(
if (vm.lte_net_mode.lte_net_mode != 0) { // LTE Net Mode: Bridge Only / Router Only
vm.current_sim = modem0;
vm.backup_sim = modem1;
- vm.current_lte = lte_dpip0;
- vm.backup_lte = lte_dpip1;
vm.current_sim_name = "SIM1";
vm.backup_sim_name = "SIM2";
vm.current_lte_proto6 = lte0_proto6;
@@ -123,8 +121,6 @@ function status_controller(
} else { // LTE Net Mode: Bridge + Router
vm.current_sim = modem1;
vm.backup_sim = modem0;
- vm.current_lte = lte_dpip1;
- vm.backup_lte = lte_dpip0;
vm.current_sim_name = "SIM2";
vm.backup_sim_name = "SIM1";
vm.current_lte_proto6 = lte1_proto6;
commit
Dear Jeffrey and Aaron,
CC: Jessy
Shin 找我反應, 網頁上Show 的Frequency 應該是叫 "EARFCN"
經確認他是對的, 麻煩幫我將Status, LTE->Engineer 的Frequency 都改成EARFCN. Web UI/CLI 都要. 到時後也要Sync 到M300.
Many Thanks!
順手修一下
盤一下有幾個地方
Status - WAN LTE - Frequency
status.html.src
<tr>
<td>{{ 'STATUS_MODEM_FREQUECE' | translate }}</td>
<td>{{ vm.current_sim.modem_channel }}</td>
</tr>
Engineer - Serving Cell - Frequency
engineer.html
<tr>
<td>{{ 'ENGINEER_FREQUENCE' | translate }}</td>
<td>{{ vm.query_eng.frequence }}</td>
</tr>
Engineer - Lock PCI - Frequency
engineer.html
<tr>
<th>{{ 'ENGINEER_TH_FREQUECE' | translate }}</th>
<th>{{ 'ENGINEER_TH_PCI' | translate }}</th>
<th></th>
</tr>
對應到的都是 多國語言的 key
- "STATUS_MODEM_FREQUECE": "Frequency",
- "ENGINEER_FREQUENCE": "Frequency",
- "ENGINEER_TH_FREQUECE": "Frequency",
我就不去動原本的 key 的 value 了
新增三組出來用吧
- "STATUS_MODEM_EARFCN": "EARFCN",
- "ENGINEER_EARFCN": "EARFCN",
- "ENGINEER_TH_EARFCN": "EARFCN",
build code 來 verify... PASS
上 code
commit fb66c1dcaa7b255cf19e22f0744b46899a88795f
Refs: [release/v0.07], {origin/release/v0.07}
Author: jeffrey <[email protected]>
Date: Mon Sep 10 10:49:21 2018 +0800
change the word "Frequency" to "EARFCN" at the following web page:
- 'Status': 'WAN LTE' panel
- 'LTE / Engineer': 'Serving Cell' and 'Lock PCI' tabs
proscend/prosrc/www/app/feature/engineer.html | 4 ++--
proscend/prosrc/www/app/locale-en.json | 3 +++
proscend/prosrc/www/app/locale-fr.json | 3 +++
proscend/prosrc/www/app/locale-zh-tw.json | 3 +++
proscend/prosrc/www/src/app/feature/status.html.src | 2 +-
5 files changed, 12 insertions(+), 3 deletions(-)
繼續 status web page 的 refactoring
icos.lan_status.shm()
icos_shm.cgi?act=shm&name=lan_status
function status_controller(..., lan_status, ...) {
vm.lan_status = lan_status;
}
<tbody>
<tr><td>{{ 'STATUS_IPV4_ADDR' | translate }}</td><td>{{ vm.lan_status.addr }}</td></tr>
<tr><td>{{ 'STATUS_IPV4_MASK' | translate }}</td><td>{{ vm.lan_status.mask }}</td></tr>
<tr><td>{{ 'STATUS_IPV6_ADDR' | translate }}</td><td>{{ vm.current_lte_proto6.addr6_lan }}</td></tr>
</tbody>
icos.eth_proto4.shm()
icos_shm.cgi?act=shm&name=eth_proto4
function status_controller(..., eth_proto4, ...) {
vm.eth_proto4 = eth_proto4;
}
html 裡沒有用到 拿掉吧
commit
commit d6f16033934a39993f2b565fe6c912f96744bac6
Refs: [release/v0.07]
Author: jeffrey <[email protected]>
Date: Mon Sep 10 11:00:08 2018 +0800
refactoring 'Status' web page:
- remove 'icos_shm.cgi?act=shm&name=eth_proto4'
proscend/prosrc/www/app/feature/status.js | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
icos.eth_proto6.shm()
icos_shm.cgi?act=shm&name=eth_proto6
html 裡沒有用到 拿掉吧
commit c44b5c334ea3b22f41038413efed9e0254e5fc89
Refs: [release/v0.07]
Author: jeffrey <[email protected]>
Date: Mon Sep 10 11:04:11 2018 +0800
refactoring 'Status' web page:
- remove 'icos_shm.cgi?act=shm&name=eth_proto6'
proscend/prosrc/www/app/feature/status.js | 9 +--------
1 file changed, 1 insertion(+), 8 deletions(-)
icos.shm.vpn()
icos_shm.cgi?act=shm&name=vpn
vm.vpn = vpn;
if (vm.vpn.default_gw_if == 'LTE') {
vm.mark_wan_lte = true;
}
<div class="panel-heading">
<h4 class="panel-title">
<span ng-show="vm.mark_wan_lte"><i class="fa fa-check fa-fw"></i></span>
{{ 'STATUS_PANEL_TITLE_WAN_LTE' | translate }}
</h4>
</div>
icos.gnss.shm()
icos_shm.cgi?act=shm&name=gnss
vm.gnss = gnss;
html 裡沒用到 拿掉
commit 584c82b90e95f08c0687c58c5a3d6d258f56d8d7
Refs: [release/v0.07]
Author: jeffrey <[email protected]>
Date: Mon Sep 10 11:08:42 2018 +0800
refactoring 'Status' web page:
- remove 'icos_shm.cgi?act=shm&name=gnss'
proscend/prosrc/www/app/feature/status.js | 10 +---------
1 file changed, 1 insertion(+), 9 deletions(-)
icos.shm.wan_dns()
icos_shm.cgi?act=shm&name=wan_dns
vm.wan_dns = wan_dns;
html 裡沒用到 拿掉
commit ec669cd1bd6920f06f5b6ce2ccecce802280b826
Refs: [release/v0.07]
Author: jeffrey <[email protected]>
Date: Mon Sep 10 11:11:13 2018 +0800
refactoring 'Status' web page:
-remove 'icos_shm.cgi?act=shm&name=wan_dns'
proscend/prosrc/www/app/feature/status.js | 9 +--------
1 file changed, 1 insertion(+), 8 deletions(-)
icos.shm.lte_cur_roaming()
icos_shm.cgi?act=shm&name=lte_cur_roaming
vm.lte_cur_roaming = lte_cur_roaming;
<tr>
<td>{{ 'STATUS_MODEM_SIM_STATUS' | translate }}</td>
<td>{{ vm.current_sim.modem_sim_status | translate }}
<span class="text-danger" ng-show="vm.lte_cur_roaming.lte_cur_roaming == 1">(Roaming)</span></td>
</tr>
icos.shm.lte0_proto6()
icos_shm.cgi?act=shm&name=lte0_proto6
icos.shm.lte1_proto6()
icos_shm.cgi?act=shm&name=lte1_proto6
if (vm.lte_net_mode.lte_net_mode != 0) { // LTE Net Mode: Bridge Only / Router Only
vm.current_lte_proto6 = lte0_proto6;
vm.backup_lte_proto6 = lte1_proto6;
} else { // LTE Net Mode: Bridge + Router
vm.current_lte_proto6 = lte1_proto6;
vm.backup_lte_proto6 = lte0_proto6;
}
<tbody>
<tr><td>{{ 'STATUS_IPV4_ADDR' | translate }}</td><td>{{ vm.lan_status.addr }}</td></tr>
<tr><td>{{ 'STATUS_IPV4_MASK' | translate }}</td><td>{{ vm.lan_status.mask }}</td></tr>
<tr><td>{{ 'STATUS_IPV6_ADDR' | translate }}</td><td>{{ vm.current_lte_proto6.addr6_lan }}</td></tr>
</tbody>
icos.shm.lte_net_mode()
icos_shm.cgi?act=shm&name=lte_net_mode
vm.lte_net_mode = lte_net_mode;
if (vm.lte_net_mode.lte_net_mode != 0) { // LTE Net Mode: Bridge Only / Router Only
...
} else { // LTE Net Mode: Bridge + Router
...
}
再 review 一次目前的 controller resolve
function config($routeProvider) {
$routeProvider
.when("/", {
templateUrl: 'app/feature/status.html',
controller: 'status_controller',
controllerAs: 'vm',
resolve: {
modem0: function(icos) {
return icos.modem0.shm().then(function(result) {
return result.data.shm;
});
},
modem1: function(icos) {
return icos.modem1.shm().then(function(result) {
return result.data.shm;
});
},
lte_dpip0: function(icos) {
return icos.lte_dpip0.shm().then(function(result) {
return result.data.shm;
});
},
lte_dpip1: function(icos) {
return icos.lte_dpip1.shm().then(function(result) {
return result.data.shm;
});
},
lan_status: function(icos) {
return icos.lan_status.shm().then(function(result) {
return result.data.shm;
});
},
vpn: function(icos) {
return icos.shm.vpn().then(function(result) {
return result.data.shm;
});
},
lte_cur_roaming: function(icos) {
return icos.shm.lte_cur_roaming().then(function(result) {
return result.data.shm;
});
},
lte0_proto6: function(icos) {
return icos.shm.lte0_proto6().then(function(result) {
return result.data.shm;
});
},
lte1_proto6: function(icos) {
return icos.shm.lte1_proto6().then(function(result) {
return result.data.shm;
});
},
lte_net_mode: function(icos) {
return icos.shm.lte_net_mode().then(function(result) {
return result.data.shm;
});
},
}
})
}
可以開始時作 Status
web page 專用的 status.cgi 了
下面這一段 code 需要修正
vm.lte_net_mode = lte_net_mode;
if (vm.lte_net_mode.lte_net_mode != 0) { // LTE Net Mode: Bridge Only / Router Only
vm.current_lte_proto6 = lte0_proto6;
vm.backup_lte_proto6 = lte1_proto6;
} else { // LTE Net Mode: Bridge + Router
vm.current_lte_proto6 = lte1_proto6;
vm.backup_lte_proto6 = lte0_proto6;
}
current_lte_proto6 不管何時都是 lte0_proto6
不需要從 lte_net_mode
來判斷
vm.current_sim
一樣也不需要
@@ -87,23 +87,8 @@ function status_controller(
var vm = this;
vm.lte_net_mode = lte_net_mode;
- if (vm.lte_net_mode.lte_net_mode != 0) { // LTE Net Mode: Bridge Only / Router Only
- vm.current_sim = modem0;
- vm.backup_sim = modem1;
- vm.current_sim_name = "SIM1";
- vm.backup_sim_name = "SIM2";
- vm.current_lte_proto6 = lte0_proto6;
- vm.backup_lte_proto6 = lte1_proto6;
- } else { // LTE Net Mode: Bridge + Router
- vm.current_sim = modem1;
- vm.backup_sim = modem0;
- vm.current_sim_name = "SIM2";
- vm.backup_sim_name = "SIM1";
- vm.current_lte_proto6 = lte1_proto6;
- vm.backup_lte_proto6 = lte0_proto6;
- }
-
-
+ vm.current_sim = modem0;^M
+ vm.current_lte_proto6 = lte0_proto6;^M
vm.lan_status = lan_status;
vm.lte_cur_roaming = lte_cur_roaming;
vm.lte_dpip0 = lte_dpip0;
commit
commit 7b9f03acfe9811b8bae64f2210f5c7747fb20095
Refs: [release/v0.07]
Author: jeffrey <[email protected]>
Date: Mon Sep 10 11:59:40 2018 +0800
refactoring 'Status' web page:
- current_sim and backup_sim do not need depend on lte_net_mode
- current_lte_proto6 and backup_lte_proto6 do not need depend on lte_net_mode
proscend/prosrc/www/app/feature/status.js | 19 ++-----------------
1 file changed, 2 insertions(+), 17 deletions(-)
ariel 再次確認 current_lte_proto6 的確會受 lte_net_mode 影響
再改一下
commit ed2266bc0ab1d02917874334efb32f3b5b415615
Refs: [release/v0.07]
Author: jeffrey <[email protected]>
Date: Mon Sep 10 13:07:11 2018 +0800
refactoring 'Status' web page:
- current_lte_proto6 and backup_lte_proto6 need depend on lte_net_mode
proscend/prosrc/www/app/feature/status.js | 278 +++++++++++++++---------------
1 file changed, 143 insertions(+), 135 deletions(-)
ariel 表示 APN Usage 要 show 出 APN Name
diff --git a/proscend/prosrc/www/app/feature/usage_apn.html b/proscend/prosrc/www/app/feature/usage_apn.html
index 47ad801..7247cf9 100644
--- a/proscend/prosrc/www/app/feature/usage_apn.html
+++ b/proscend/prosrc/www/app/feature/usage_apn.html
@@ -19,7 +19,7 @@
<p class="form-control-static">{{ 'USAGE_DISPLAY_OPERATOR_NAME' | translate }}: {{ vm.info.modem_operator_name }}</p>
</div>
<div class="col-sm-4">
- <p class="form-control-static">{{ 'USAGE_DISPLAY_IMSI' | translate }}: {{ vm.info.modem_sim_imsi }}</p>
+ <p class="form-control-static">{{ 'USAGE_DISPLAY_APN' | translate }}: {{ vm.info_apn() }}</p>
</div>
</div>
diff --git a/proscend/prosrc/www/app/feature/usage_apn1.js b/proscend/prosrc/www/app/feature/usage_apn1.js
index 8485f41..1bbeb96 100644
--- a/proscend/prosrc/www/app/feature/usage_apn1.js
+++ b/proscend/prosrc/www/app/feature/usage_apn1.js
@@ -38,6 +38,10 @@ function controller($scope, $interval, icos, real_time, info) {
return "USAGE_APN1_PANEL_TITLE";
}
+ vm.info_apn = function() {
+ return vm.info.apn1;
+ }
+
vm.lte_net_toLanKey = function(val) {
switch(val) {
case 0: return "DUAL_SIM_LTE_NET_MODE_DUAL_APN";
diff --git a/proscend/prosrc/www/app/feature/usage_apn2.js b/proscend/prosrc/www/app/feature/usage_apn2.js
index a606c97..fb9870a 100644
--- a/proscend/prosrc/www/app/feature/usage_apn2.js
+++ b/proscend/prosrc/www/app/feature/usage_apn2.js
@@ -38,6 +38,10 @@ function controller($scope, $interval, icos, real_time, info) {
return "USAGE_APN2_PANEL_TITLE";
}
+ vm.info_apn = function() {
+ return vm.info.apn2;
+ }
+
vm.lte_net_toLanKey = function(val) {
switch(val) {
case 0: return "DUAL_SIM_LTE_NET_MODE_DUAL_APN";
diff --git a/proscend/prosrc/www/app/locale-en.json b/proscend/prosrc/www/app/locale-en.json
index a2ef1af..eff1a19 100644
--- a/proscend/prosrc/www/app/locale-en.json
+++ b/proscend/prosrc/www/app/locale-en.json
@@ -1266,6 +1266,7 @@
"USAGE_DISPLAY_APN2": "APN2",
"USAGE_APN1_PANEL_TITLE": "APN1 Usage",
"USAGE_APN2_PANEL_TITLE": "APN2 Usage",
+ "USAGE_DISPLAY_APN": "APN",^M
diff --git a/proscend/prosrc/www/app/locale-fr.json b/proscend/prosrc/www/app/locale-fr.json
index 00afebc..ad00740 100644
--- a/proscend/prosrc/www/app/locale-fr.json
+++ b/proscend/prosrc/www/app/locale-fr.json
@@ -1266,6 +1266,7 @@
"USAGE_DISPLAY_APN2": "APN2",
"USAGE_APN1_PANEL_TITLE": "APN1 Usage",
"USAGE_APN2_PANEL_TITLE": "APN2 Usage",
+ "USAGE_DISPLAY_APN": "APN",^M
diff --git a/proscend/prosrc/www/app/locale-zh-tw.json b/proscend/prosrc/www/app/locale-zh-tw.json
index 1865c21..ca97476 100644
--- a/proscend/prosrc/www/app/locale-zh-tw.json
+++ b/proscend/prosrc/www/app/locale-zh-tw.json
@@ -1266,6 +1266,7 @@
"USAGE_DISPLAY_APN2": "APN2",
"USAGE_APN1_PANEL_TITLE": "APN1 Usage",
"USAGE_APN2_PANEL_TITLE": "APN2 Usage",
+ "USAGE_DISPLAY_APN": "APN",^M
要注意 usage_apn1
和 usage_apn2
都共用 usage_apn.html
這一個 template
不過 LTE 遲遲連不上線
壓一包 /home/log
給 ariel
重開機吧
一下子就連上線了
APN name 驗證無誤
上 code
commit 127affccc2389248ff03bca96383d9e6bf6c16ef
Refs: [release/v0.07], {origin/release/v0.07}
Author: jeffrey <[email protected]>
Date: Mon Sep 10 14:01:21 2018 +0800
dual APN have their own APN Usage web page:
- display the APN name
proscend/prosrc/www/app/feature/usage_apn.html | 2 +-
proscend/prosrc/www/app/feature/usage_apn1.js | 4 ++++
proscend/prosrc/www/app/feature/usage_apn2.js | 4 ++++
proscend/prosrc/www/app/locale-en.json | 1 +
proscend/prosrc/www/app/locale-fr.json | 1 +
proscend/prosrc/www/app/locale-zh-tw.json | 1 +
6 files changed, 12 insertions(+), 1 deletion(-)
繼續 status.cgi
特別作的 status.cgi
目前回應的內容如下
lte_dpip0
與 lte_dpip1
上 code
commit 1c4a4f1bb235fa0dda3e888ad2d8b97d69d4ea73
Refs: [release/v0.07], {origin/release/v0.07}
Author: jeffrey <[email protected]>
Date: Mon Sep 10 14:24:41 2018 +0800
refactoring 'Status' web page:
- single CGI status.cgi
proscend/prosrc/webcgi/status.c | 422 ++++++++++------------------------------
1 file changed, 104 insertions(+), 318 deletions(-)
web 跟著作出相對應的修改
實際 build 一份 image 來測
status.cgi?act=status
直接來一個 401
修一下 iweb 的 _register_endpoints
proscend/prosrc/icos/iweb/iweb.c
@@ -819,6 +819,7 @@ static void _register_endpoints(struct mg_connection *nc)
mg_register_http_endpoint(nc, "/cgi-bin/ipsec.cgi?act=status", _handler_noauth);
mg_register_http_endpoint(nc, "/cgi-bin/ipsec.cgi?act=conn_status", _handler_noauth);
mg_register_http_endpoint(nc, "/cgi-bin/lte.cgi?act=config", _handler_noauth);
+ mg_register_http_endpoint(nc, "/cgi-bin/status.cgi", _handler_noauth);
// some static page need auth because their controlloer has no resolve
mg_register_http_endpoint(nc, "/app/feature/configuration.html", _handler_auth);
再重新 build 一份 image 測... PASS
上 code
commit 740f850e83de2d42be4772c819c333af44690f79
Refs: [release/v0.07], {origin/release/v0.07}
Author: jeffrey <[email protected]>
Date: Mon Sep 10 14:57:47 2018 +0800
refactoring 'Status' web page:
- only use 'status.cgi?act=status' api
proscend/prosrc/icos/iweb/iweb.c | 1 +
proscend/prosrc/webcgi/status.c | 14 +
proscend/prosrc/www/app/feature/status.js | 86 +-
proscend/prosrc/www/app/services/icos.service.js | 1898 ++++++++++----------
.../prosrc/www/src/app/feature/status.html.src | 148 +-
5 files changed, 1048 insertions(+), 1099 deletions(-)
來簡化 top banner 用到的 CGI
從目前的開始盤
function loop_10sec() {
timer_10sec = $timeout(10000);
timer_10sec.then(function () {
var _operator;
var _lte_cur_proto_state;
icos.lte.shm().then(function(result) {
if (result.data.shm.cur_sim == 0) {
return icos.modem0.shm();
} else {
return icos.modem1.shm();
}
})
.then(function(result) {
// update to share service date
share.data.signal = result.data.shm.signal;
_operator = result.data.shm.modem_operator_name;
return icos.shm.lte_cur_proto_state();
})
.then(function(result) {
if (result.data.shm.lte_cur_proto_state == 2) {
share.data.operator = _operator;
} else {
share.data.operator = "";
}
return icos.system.status()
})
.then(function(result) {
vm.help.sysUpTime_text = time2text(result.data.status.sysUpTime);
return icos.connmgr.shm()
})
.then(function(result) {
//vm.help.wan_conn_type = result.data.shm.wan_conn_type;
vm.help.wan_conn_type_lanKey = wan_conn_type_toLanKey(result.data.shm.wan_conn_type);
});
icos.gnss.shm()
.then(function(result) {
vm.help.gnss_latitude = result.data.shm.latitude;
vm.help.gnss_longitude = result.data.shm.longitude;
if (vm.help.gnss_latitude != 0 || vm.help.gnss_longitude != 0) {
vm.help.gnss_link_to_google_maps = 1;
} else {
vm.help.gnss_link_to_google_maps = 0;
}
});
icos.shm.lte_cur_rssi()
.then(function(result) {
/*
* Display (RSSI:-xxx dBm) if there is a value
* Display (RSSI:N/A) if 0
*/
if (result.data.shm.lte_cur_rssi == 0) {
vm.help.rssi = "(RSSI: N/A)"
} else {
vm.help.rssi = "(RSSI: " + result.data.shm.lte_cur_rssi + " dBm)"
}
});
icos.shm.lte_cur_sim_no()
.then(function(result) {
/*
* Query SIM Slot: (0/1) but display (1/2)
*/
vm.help.sim_slot = result.data.shm.lte_cur_sim_no + 1;
});
loop_10sec();
});
}
icos.lte.shm()
icos_shm.cgi?act=shm&name=lte
這個 CGI 主要是為了它 cur_sim 來決定後續要呼叫下述兩者之一
icos.modem0.shm()
icos.modem1.shm()
icos.lte.shm().then(function(result) {
if (result.data.shm.cur_sim == 0) {
return icos.modem0.shm();
} else {
return icos.modem1.shm();
}
})
而不管是呼叫哪一個
.then(function(result) {
// update to share service date
share.data.signal = result.data.shm.signal;
_operator = result.data.shm.modem_operator_name;
return icos.shm.lte_cur_proto_state();
})
我們只需要
- signal
- modem_operator_name
icos.shm.lte_cur_proto_state()
icos_shm.cgi?act=shm&name=lte_cur_proto_state
這個 CGI 拿到的值 lte_cur_proto_state
if (result.data.shm.lte_cur_proto_state == 2) {
share.data.operator = _operator;
} else {
share.data.operator = "";
}
會再次決定 operator 的值
icos.system.status()
system.cgi?act=status
.then(function(result) {
vm.help.sysUpTime_text = time2text(result.data.status.sysUpTime);
return icos.connmgr.shm()
})
顯示系統時間
icos.connmgr.shm()
icos_shm.cgi?act=shm&name=wan_conn
.then(function(result) {
//vm.help.wan_conn_type = result.data.shm.wan_conn_type;
vm.help.wan_conn_type_lanKey = wan_conn_type_toLanKey(result.data.shm.wan_conn_type);
});
得到 vm.help.wan_conn_type_lanKey
不過 M360 沒有使用這個值
icos.gnss.shm()
icos_shm.cgi?act=shm&name=gnss
.then(function(result) {
vm.help.gnss_latitude = result.data.shm.latitude;
vm.help.gnss_longitude = result.data.shm.longitude;
if (vm.help.gnss_latitude != 0 || vm.help.gnss_longitude != 0) {
vm.help.gnss_link_to_google_maps = 1;
} else {
vm.help.gnss_link_to_google_maps = 0;
}
});
得到 vm.help.gnss_link_to_google_maps
M360 目前不使用
icos.shm.lte_cur_rssi
icos_shm.cgi?act=shm&name=lte_cur_rssi
.then(function(result) {
/*
* Display (RSSI:-xxx dBm) if there is a value
* Display (RSSI:N/A) if 0
*/
if (result.data.shm.lte_cur_rssi == 0) {
vm.help.rssi = "(RSSI: N/A)"
} else {
vm.help.rssi = "(RSSI: " + result.data.shm.lte_cur_rssi + " dBm)"
}
});
得到 vm.help.rssi
icos.shm.lte_cur_sim_no()
icos_shm.cgi?act=shm&name=lte_cur_sim_no
.then(function(result) {
/*
* Query SIM Slot: (0/1) but display (1/2)
*/
vm.help.sim_slot = result.data.shm.lte_cur_sim_no + 1;
});
得到 vm.help.sim_slot
M360 不需要該值
先寫 CGI - status.cgi?act=top
response 如下
順手整一下 ping 和 traceroute 和 M300 一樣
build image 測
proscend 外層先 make 一次
PASS
上 code
commit b66f0bd3b2c423981f67b65657b002a99b9e094e
Refs: [release/v0.07], {origin/release/v0.07}
Author: jeffrey <[email protected]>
Date: Mon Sep 10 16:29:13 2018 +0800
use sinble CGI with top banner
apply the same style with M300 about the following 2 pages:
- ping
- traceroute
proscend/prosrc/webcgi/popen.c | 10 +-
proscend/prosrc/webcgi/status.c | 63 ++++
proscend/prosrc/www/app/app.controller.js | 381 +++++++++--------------
proscend/prosrc/www/app/feature/ping.html | 15 +-
proscend/prosrc/www/app/feature/ping.js | 17 +-
proscend/prosrc/www/app/feature/traceroute.html | 15 +-
proscend/prosrc/www/app/feature/traceroute.js | 21 +-
proscend/prosrc/www/app/services/icos.service.js | 3 +
8 files changed, 239 insertions(+), 286 deletions(-)