This is an old revision of the document!


Log Status Values to the Systemlog

For various purposes you can use the status data from our system and log it directly into the system log. This Way you don't have to worry about file transwers and file rotating as this is all done by the system log deamon. The log data can be downloaded easily via the techsupport function.

Script Summary

The script will take a mode parameter as the first argument. You can define to log in a single mode, and trigger the log externaly via a SDK trigger (Parameter: single). Instead of “single” you can define a periodicly logging by setting a intervall in seconds.

All the further Parameters which will be logged. This could be something like:

SYSTEM_TIME GNSS1_LONGITUDE GNSS1_LATITUDE  MOBILE1_NETWORK MOBILE1_SIGNAL  WAN_HOTLINK

Example:

Single Log with 5 Parameter:

single SYSTEM_TIME GNSS1_LONGITUDE GNSS1_LATITUDE  MOBILE1_NETWORK MOBILE1_SIGNAL

Log every 15 seconds with 5 Parameters

15 SYSTEM_TIME GNSS1_LONGITUDE GNSS1_LATITUDE  MOBILE1_NETWORK MOBILE1_SIGNAL

Installation of the Script

Detailed step by step instructions how to install a sdk script can be found on this wiki page

Please use the script with these parameters:

Scriptparameter: First parameter is the logging mode. all other Parameters are the status fields you like to log.

Trigger: in single mode use a event you want to log, or a perdiocle event every XXmin.

Trigger: in periodicle mode please use the event-based trigger“ sdk-startup and the script will starting everytime the system boots up.

Check if the script is running

In the Systemlog under System->Troubleshooting->Network Debugging-> System Debugging you will find the log output:

00 user.info sdkhost[2785]: testrun: SYSTEM_TIME:2016-09-14 04:29:54## GNSS1_LONGITUDE:8.572432## GNSS1_LATITUDE:50.134584## MOBILE1_NETWORK:n/a## MOBILE1_SIGNAL:MOBILE1_SIGNAL unknown## WAN_HOTLINK:n/a## 
Sep 14 04:30:04 NB1600 user.info sdkhost[2785]: testrun: SYSTEM_TIME:2016-09-14 04:30:01## GNSS1_LONGITUDE:n/a## GNSS1_LATITUDE:n/a## MOBILE1_NETWORK:n/a## MOBILE1_SIGNAL:MOBILE1_SIGNAL unknown## WAN_HOTLINK:n/a## 
Sep 14 04:30:10 NB1600 user.info sdkhost[2785]: testrun: SYSTEM_TIME:2016-09-14 04:30:09## GNSS1_LONGITUDE:n/a## GNSS1_LATITUDE:n/a## MOBILE1_NETWORK:n/a## MOBILE1_SIGNAL:MOBILE1_SIGNAL unknown## WAN_HOTLINK:n/a## 
Sep 14 04:30:16 NB1600 user.info sdkhost[2785]: testrun: SYSTEM_TIME:2016-09-14 04:30:15## GNSS1_LONGITUDE:n/a## GNSS1_LATITUDE:n/a## MOBILE1_NETWORK:n/a## MOBILE1_SIGNAL:MOBILE1_SIGNAL unknown## WAN_HOTLINK:n/a## 
Sep 14 04:30:22 NB1600 user.info sdkhost[2785]: testrun: SYSTEM_TIME:2016-09-14 04:30:21## GNSS1_LONGITUDE:n/a## GNSS1_LATITUDE:n/a## MOBILE1_NETWORK:n/a## MOBILE1_SIGNAL:MOBILE1_SIGNAL unknown## WAN_HOTLINK:n/a## 
Sep 14 04:30:29 NB1600 user.info sdkhost[2785]: testrun: SYSTEM_TIME:2016-09-14 04:30:28## GNSS1_LONGITUDE:n/a## GNSS1_LATITUDE:n/a## MOBILE1_NETWORK:n/a## MOBILE1_SIGNAL:MOBILE1_SIGNAL unknown## WAN_HOTLINK:n/a## 
Sep 14 04:30:37 NB1600 user.info sdkhost[2785]: testrun: SYSTEM_TIME:2016-09-14 04:30:35## GNSS1_LONGITUDE:n/a## GNSS1_LATITUDE:n/a## MOBILE1_NETWORK:n/a## MOBILE1_SIGNAL:MOBILE1_SIGNAL unknown## WAN_HOTLINK:n/a## 
Sep 14 04:30:44 NB1600 user.info sdkhost[2785]: testrun: SYSTEM_TIME:2016-09-14 04:30:42## GNSS1_LONGITUDE:n/a## GNSS1_LATITUDE:n/a## MOBILE1_NETWORK:n/a## MOBILE1_SIGNAL:MOBILE1_SIGNAL unknown## WAN_HOTLINK:n/a## 
Sep 14 04:30:49 NB1600 user.info sdkhost[2785]: testrun: SYSTEM_TIME:2016-09-14 04:30:49## GNSS1_LONGITUDE:n/a## GNSS1_LATITUDE:n/a## MOBILE1_NETWORK:n/a## MOBILE1_SIGNAL:MOBILE1_SIGNAL unknown## WAN_HOTLINK:n/a## 
Sep 14 04:30:56 NB1600 user.info sdkhost[2785]: testrun: SYSTEM_TIME:2016-09-14 04:30:55## GNSS1_LONGITUDE:n/a## GNSS1_LATITUDE:n/a## MOBILE1_NETWORK:n/a## MOBILE1_SIGNAL:MOBILE1_SIGNAL unknown## WAN_HOTLINK:n/a## 

The Script

status-to-syslog.are
/* DESC: A Script that can be used for a longtime logging of a NetModule Wireless Router. 
 * The upper part of the script is the logger template. The lower part is the real programm, where you describe the settings and workflow.
 * Copyright (C) 2016 NetModule AG, Switzerland
 */
 
 
template logger
{
 
    # give the constructor the array of fields to log
    void logger(array logfields) {
        this.fields = logfields;
    }
 
    int logNow(){    
        //get current status output
        sections = mkarray("system", "wan", "wwan", "wlan", "gnss", "lan", "openvpn", "ipsec", "dio", "license");
        status = mkstruct();
        for(i = 0; i < length(sections); i++) {
            status=struct_merge(status, nb_status(sections[i]));
        }
 
        line = "";
        for(i = 0; i < length(this.fields); i++) {
            if(strlen(this.fields[i]) > 0 ) {
                value = struct_get(status, this.fields[i]);
                if(strlen(value) == 0) {   
                    value = sprintf("%s unknown", this.fields[i]);
                }
                //line = sprintf('%s%s;', line,value);   
                line = sprintf("%s%s:%s## ", line, this.fields[i], value);
            }
        }
        MAX_LINE_LEN=180;
        for(i=0; i<strlen(line);i=i+MAX_LINE_LEN) {
                subline=substr(line,i,MAX_LINE_LEN);
                nb_syslog("%s", subline);
        }
 
        return 0;
    }
 
 
} // of template logger
 
if (argc < 3){
    printf("usage: status_to_syslog.are [single|<1-n seconds>] <list of parameter>");
    exit(1);
}
 
if (argv[1] == "single")
    mode = 0;
else
    mode = (int) argv[1];
 
elements = mkarray();
for (i = 2; i <= argc; i++) {
    elements = array_merge(elements, argv[i]);
}
l = new logger(elements);
 
do {
    l.logNow();
    sleep(mode);
} while(mode);
exit(0);