20180910_jeffrey - silenceuncrio/diary GitHub Wiki

0910

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

image

原來是 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(-)

0950

盤一下還有什麼沒作的

該作的項目都做完了

mantis issue 也解了

試著來化簡 Status page 的 CGI 存取數目吧

目前的情況

image

對應的 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(-)

1010

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>

1015

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_ltebackup_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

1030

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 image

status.html.src

  <tr>
    <td>{{ 'STATUS_MODEM_FREQUECE' | translate }}</td>
    <td>{{ vm.current_sim.modem_channel }}</td>
  </tr>

Engineer - Serving Cell - Frequency image

engineer.html

      <tr>
        <td>{{ 'ENGINEER_FREQUENCE' | translate }}</td>
        <td>{{ vm.query_eng.frequence }}</td>
      </tr>

Engineer - Lock PCI - Frequency image

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(-)

1050

繼續 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(-)

1100

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(-)

1105

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(-)

1110

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>

1120

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 了

1150

下面這一段 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(-)

1305

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(-)

1345

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_apn1usage_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(-)

1405

繼續 status.cgi

特別作的 status.cgi 目前回應的內容如下

image

lte_dpip0lte_dpip1

image

上 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(-)

1440

web 跟著作出相對應的修改

實際 build 一份 image 來測

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(-)

1500

來簡化 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 不需要該值

1520

先寫 CGI - status.cgi?act=top

response 如下

image

順手整一下 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(-)
⚠️ **GitHub.com Fallback** ⚠️