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.
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
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.
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##
/* 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(){ MAX_LINE_LEN=180; //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]); } if(strlen(this.fields[i+1]) > 0 ) { nextvalue = struct_get(status, this.fields[i+1]); if(strlen(nextvalue) == 0) { nextvalue = sprintf("%s unknown", this.fields[i+1]); } } //line = sprintf('%s%s;', line,value); line = sprintf("%s%s:%s## ", line, this.fields[i], value); if (strlen(line)+strlen(sprintf("%s:%s##",this.fields[i+i],nextvalue))>MAX_LINE_LEN) { nb_syslog(line); line=""; } } } if (strlen(line) > 0) nb_syslog(line); 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);