From 2d42be9e7099a49a52868abcd71f313ca999ea06 Mon Sep 17 00:00:00 2001
From: Rob Swindell <rob@synchro.net>
Date: Sun, 3 Apr 2022 15:51:09 -0700
Subject: [PATCH] Updated to read csts.tab instead of csts.dab

Also changed output to reflect slog.c more closely. I suppose only one of
of these 2 "utilities" to read csts.tab should exist at some point. :-)

Also added suport for "-r" and "-t" to be more modern and *nixy.
---
 exec/slog.js | 71 ++++++++++++++++++++++++++++++++--------------------
 1 file changed, 44 insertions(+), 27 deletions(-)

diff --git a/exec/slog.js b/exec/slog.js
index 7771006712..56cae48808 100644
--- a/exec/slog.js
+++ b/exec/slog.js
@@ -1,7 +1,16 @@
+load("file_size.js");
+
+function isoTime(val)
+{
+	var str = format("%.4s-%.2s-%.2sT00:00", val.substring(0,4), val.substring(4,6), val.substring(6));
+	var d = new Date(str);
+	return d.valueOf() / 1000;
+}
+
 (function() {
 	writeln("\r\nSynchronet System/Node Statistics Log Viewer\n");
 
-	var sfile = new File(system.ctrl_dir + "csts.dab");
+	var sfile = new File(system.ctrl_dir + "csts.tab");
 	var list = [];
 	var reverse = false;
 	var show_totals = false;
@@ -15,15 +24,18 @@
 	var total_posts = 0;
 	var total_emails = 0;
 	var total_fbacks = 0;
+	var total_nusers = 0;
 
 	while(argv.length > 0) {
 		switch(argv.shift().toUpperCase()) {
 		case "/REVERSE":
 		case "/R":
+		case "-R":
 			reverse = true;
 			break;
 		case "/TOTALS":
 		case "/T":
+		case "-T":
 			show_totals = true;
 			break;
 		}
@@ -33,60 +45,65 @@
 		writeln("* " + sfile.name + " does not exist");
 		return false;
 	}
-	if(!sfile.open('r+b')) {
+	if(!sfile.open('r')) {
 		writeln("* error opening " + sfile.name);
 		return false;
 	}
 
-	while(sfile.position <= file_size(sfile.name) - 40) {
-		
-		var timestamp = sfile.readBin();
-		var logons = sfile.readBin();
-		var timeon = sfile.readBin();
-		var uls = sfile.readBin();
-		var ulb = sfile.readBin();
-		var dls = sfile.readBin();
-		var dlb = sfile.readBin();
-		var posts = sfile.readBin();
-		var emails = sfile.readBin();
-		var fbacks = sfile.readBin();
+	var lines = sfile.readAll();
+	sfile.close();
+
+	for(var l = 1; l < lines.length; l++) {
+		var line = lines[l];
+		var field = line.split('\t');
+		var timestamp = isoTime(field[0]);
+		var logons = parseInt(field[1], 10);
+		var timeon = parseInt(field[2], 10);
+		var uls = parseInt(field[3], 10);
+		var ulb = parseInt(field[4], 10);
+		var dls = parseInt(field[5], 10);
+		var dlb = parseInt(field[6], 10);
+		var posts = parseInt(field[7], 10);
+		var emails = parseInt(field[8], 10);
+		var fbacks = parseInt(field[9], 10);
+		var nusers = parseInt(field[10], 10);
 
 		if(show_totals) {
 			total_logons += logons;
 			total_timeon += timeon;
 			total_uls += uls;
-			total_ulb += uls;
-			total_dls += uls;
-			total_dlb += uls;
+			total_ulb += ulb;
+			total_dls += dls;
+			total_dlb += dlb;
 			total_posts += posts;
 			total_emails += emails;
 			total_fbacks += fbacks;
+			total_nusers += nusers;
 		}
 
 		list.unshift(
-			strftime("%x",timestamp-(24*60*60)) + 
-			format(" T:%5lu  L:%3lu  P:%3lu  E:%3lu  F:%3lu  U:%6luk %3lu  D:%6luk %3lu",
-			timeon,logons,posts,emails,fbacks,ulb/1024,uls,dlb/1024,dls)
+			strftime("%x",timestamp-(24*60*60)) +
+			format(" T:%4lu  L:%3lu  P:%3lu  E:%3lu  F:%3lu  U:%5s %5lu  D:%5s %5lu  N:%2u",
+				timeon,logons,posts,emails,fbacks,file_size_str(ulb, 1, 0),uls,file_size_str(dlb, 1, 0),dls,nusers)
 		);
 	}
 
-	sfile.close();
-
-	if(reverse) 
+	if(reverse)
 		list.reverse();
 
-	for each(var i in list) 
+	for each(var i in list)
 		writeln(i);
-		
+
 	if(show_totals) {
 		writeln("");
 		writeln(format("%-*s: %d",20,"Total Time",total_timeon));
 		writeln(format("%-*s: %d",20,"Total Logons",total_logons));
-		writeln(format("%-*s: %d - %dk",20,"Total U/L",total_uls, total_ulb));
-		writeln(format("%-*s: %d - %dk",20,"Total D/L",total_dls, total_dlb));
+		writeln(format("%-*s: %d - %s",20,"Total U/L",total_uls, file_size_str(total_ulb, 1, 0)));
+		writeln(format("%-*s: %d - %s",20,"Total D/L",total_dls, file_size_str(total_dlb, 1, 0)));
 		writeln(format("%-*s: %d",20,"Total Posts",total_posts));
 		writeln(format("%-*s: %d",20,"Total E-Mails",total_emails));
 		writeln(format("%-*s: %d",20,"Total Feedback",total_fbacks));
+		writeln(format("%-*s: %u",20,"Total New users", total_nusers));
 	}
 
 	writeln("");
-- 
GitLab