Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
sdk:connection-statistics [2015/06/26 13:20]
fachet
sdk:connection-statistics [2021/08/04 09:20] (current)
Line 1: Line 1:
 ====== Connection Statistics ====== ====== Connection Statistics ======
 {{ :​sdk:​sweg.png |}} {{ :​sdk:​sweg.png |}}
 +{{ :​sdk:​statistics.jpg |}}
 In many mobile use cases customers want to have additional information on network coverage, signal and connections quality, roaming and so on.  In many mobile use cases customers want to have additional information on network coverage, signal and connections quality, roaming and so on. 
 This data can be generated using a SDK script such as ''​logger.are''​. It queries ''​cli status''​ periodically and logs the items you are interested in into a comma separated values file e.g.''/​home/​sdk/​sandbox/​logger/​current.csv''​. When the script restarts or when a configurable timeout is reached, a new file is written. This data can be generated using a SDK script such as ''​logger.are''​. It queries ''​cli status''​ periodically and logs the items you are interested in into a comma separated values file e.g.''/​home/​sdk/​sandbox/​logger/​current.csv''​. When the script restarts or when a configurable timeout is reached, a new file is written.
 A second script will upload the log files in the working directory from time to time to a FTP server. A second script will upload the log files in the working directory from time to time to a FTP server.
 Once having the data on the server, it can be evaluated, e.g. by drawing it onto a map or analyse it with Excel or NI DIAdem. Once having the data on the server, it can be evaluated, e.g. by drawing it onto a map or analyse it with Excel or NI DIAdem.
 +
 +
 +===== Logging Skript =====
 +
 <code c logger.are>​ <code c logger.are>​
 /* DESC: A script that can be used for a longtime logging of a NetModule Router. ​ /* DESC: A script that can be used for a longtime logging of a NetModule Router. ​
Line 130: Line 135:
     int logNow() ​ {     int logNow() ​ {
         //get current status output         //get current status output
-        sections=mkarray("​system","​wan","​wwan","​wlan","​gnss","​lan","​openvpn","​ipsec","​dio","​license"​);​+        sections=mkarray("​system","​wan","​wwan","​wlan","​gnss","​lan","​openvpn","​ipsec","​dio","​license", "​hotspot");
         status=mkstruct();​         status=mkstruct();​
         for (i=0;​i<​length(sections);​i++) {         for (i=0;​i<​length(sections);​i++) {
Line 181: Line 186:
         nb_syslog("​Current Logsize: %i byte",​this.currentLogSize);​         nb_syslog("​Current Logsize: %i byte",​this.currentLogSize);​
         //if we don't have enough space delete enough old ones to have enough space         //if we don't have enough space delete enough old ones to have enough space
-        for(i=0;​i<​length(files);​i++) { 
-        if (this.currentLogSize < (this.maxLogSize-this.freespace)) break; 
-            if(remove(sprintf("​%s%s",​this.path,​files[i]))) { 
-                this.currentLogSize=this.currentLogSize-size[i];​ 
-                nb_syslog("​Removed %s%s",​this.path,​files[i]);​ 
-            } else { 
-                nb_syslog("​could not remove %s%s",​this.path,​files[i]);​ 
-            } 
-        } 
-       ​nb_syslog("​new logsize: %i", this.currentLogSize);​ 
     return 0;     return 0;
     }     }
  
 +// ######################################################​
 +// ######################################################​
 +// ######################################################​
  
 l = new logger("/​logger/"​);​ l = new logger("/​logger/"​);​
 +// Timestamp of the Logentry
 l.addField("​SYSTEM_TIME"​);​ l.addField("​SYSTEM_TIME"​);​
 +
 +
 +// GPS Fields
 l.addField("​GNSS1_LONGITUDE"​);​ l.addField("​GNSS1_LONGITUDE"​);​
 l.addField("​GNSS1_LATITUDE"​);​ l.addField("​GNSS1_LATITUDE"​);​
 l.addField("​GNSS1_SATELLITES_INVIEW"​);​ l.addField("​GNSS1_SATELLITES_INVIEW"​);​
-l.addField("​MOBILE1_SIGNAL");+ 
 + 
 +// LTE Connection Fields 
 +// Can be cloneed with MOBILE2 in case more LTE Connections are used 
 +// Arbitrary Strength Unit (ASU) https://​en.wikipedia.org/​wiki/​Mobile_phone_signal#​ASU 
 +l.addField("​MOBILE1_SIGNAL_LEVEL"​);​ 
 +// received signal code power  https://​en.wikipedia.org/​wiki/​Received_signal_code_power 
 +l.addField("​MOBILE1_SIGNAL_RSCP"​);​ 
 +// Received signal strength indication https://​en.wikipedia.org/​wiki/​Received_signal_strength_indication ​           
 +l.addField("​MOBILE1_SIGNAL_RSSI"​); ​          
 +// Service Type: LTE/​HSPA/​3G/​2G/​EDGE ​       ​
 l.addField("​MOBILE1_SERVICE_TYPE"​);​ l.addField("​MOBILE1_SERVICE_TYPE"​);​
 +// NETWORK ID of the LTE Network we are connected to
 l.addField("​MOBILE1_LAI"​);​ l.addField("​MOBILE1_LAI"​);​
 +// Area Code in  LTE Network
 l.addField("​MOBILE1_LAC"​);​ l.addField("​MOBILE1_LAC"​);​
 +// Cell ID we are connected to
 l.addField("​MOBILE1_CID"​);​ l.addField("​MOBILE1_CID"​);​
 +// Is the SIM registered in Home or Roaming
 +l.addField("​MOBILE1_REGISTRATION_STATE"​);​
 +
 +
 +// WAN Data Connection field
 +// Connection that is current default Gateway
 l.addField("​WAN_HOTLINK"​);​ l.addField("​WAN_HOTLINK"​);​
 +// Per WANLINK/LTE Connection:
 +// Current State: up/​down/​dialin
 l.addField("​WANLINK1_STATE"​);​ l.addField("​WANLINK1_STATE"​);​
 +// Current upload and download rates 
 l.addField("​WANLINK1_DOWNLOAD_RATE"​);​ l.addField("​WANLINK1_DOWNLOAD_RATE"​);​
 l.addField("​WANLINK1_UPLOAD_RATE"​);​ l.addField("​WANLINK1_UPLOAD_RATE"​);​
 +// Bytes that are already down- or uploaded.
 l.addField("​WANLINK1_DATA_DOWNLOADED"​);​ l.addField("​WANLINK1_DATA_DOWNLOADED"​);​
 l.addField("​WANLINK1_DATA_UPLOADED"​);​ l.addField("​WANLINK1_DATA_UPLOADED"​);​
 +
 +// WLAN Fields
 +// WLAN Clients Attached to the Accesspoint
 l.addField("​WLAN1_STATION_COUNT"​);​ l.addField("​WLAN1_STATION_COUNT"​);​
  
Line 216: Line 244:
 l.intervall=5;​ // log every 5sec l.intervall=5;​ // log every 5sec
 l.logfileIntervall=3600;​ // create a new file every 5 min l.logfileIntervall=3600;​ // create a new file every 5 min
 +
 +// ######################################################​
 +// ######################################################​
 +// ######################################################​
 +// ######################################################​
  
  
Line 254: Line 287:
  
  
 +===== Skript to periodcly upload the csv Files =====
  
 <code c uploader.are>​ <code c uploader.are>​
Line 324: Line 358:
  
 u = new uploader("/​logger/"​);​ u = new uploader("/​logger/"​);​
-u.server="​ftp://​share.netmodule.com/​router/​public";​+u.server="​https://​share.netmodule.com/​router/​public";​
 u.serverpath="/​logger/";​ u.serverpath="/​logger/";​
 u.user="​*******";​ u.user="​*******";​
Line 331: Line 365:
 u.uploadfiles();​ u.uploadfiles();​
 </​code>​ </​code>​
 +
 +
 +
 +Example Python script to visualize the Data:
 +
 +
  
 <code python scatter.py>​ <code python scatter.py>​