From 26c7a07735051f2e2137eb118e4dded3d4790f4a Mon Sep 17 00:00:00 2001
From: Mark Spencer <markster@digium.com>
Date: Fri, 11 Mar 2005 07:24:10 +0000
Subject: [PATCH] Add timestamping to console (bug #3653 with minor mods)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5163 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 asterisk.8.gz              | Bin 2340 -> 2458 bytes
 asterisk.c                 |  10 +++++++++-
 asterisk.sgml              |  20 +++++++++++++++++++-
 include/asterisk/options.h |   1 +
 logger.c                   |  24 ++++++++++++++++++++----
 5 files changed, 49 insertions(+), 6 deletions(-)

diff --git a/asterisk.8.gz b/asterisk.8.gz
index 916f4d137719abff002b8aa2cbf8360436998564..abbd0c45312bcbb54d0220a7c64661cf50b7f7b3 100755
GIT binary patch
literal 2458
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
Y@#7nnhbrFUddf-u3XJy}sIL|P01?>8FaQ7m

literal 2340
zcmV+<3ETD`iwFp%#`-`217UM?WpZhAYc4nd-B?X?8@Um^&#yq~kd;#uWm`FHxm>QL
zB$majC9z0a>r|WrI0MdLH3N(R3@PT2-=5cv`JiZR_L!|b*ct-pMx(pm>juVOPsFOw
zUR2W5GFPIIUaXZeLN>uxGU!y6<zD2<C?|u;#Ck6>o35>Wd<z+ojG<xUY$c?)w&^9t
zX}+nH31bm;2Wv}_V)0sujcrUOWO&Dd?~4%XcjxE6P-QvRwJo(#<J4B?|50V7TsX&f
zeco;O<@`h3a9%3umGFvmnY~yyxp1nsF8GnqRqgCnkp=h#1?^WYLs}?&unHB@F)S0y
zpted}70Tq|y{8{P<+(nCieFV4#@6K@#>sefBTgpE)pRji{(K@%e#E~wKZ?IMaLwD-
zum6Uh60%PFNAYI-8b42xWW2l)caz&`(ocOo6O*z$s~cBam>*QB>cYZ)uiRF-F^eq!
zad$so&X!5?b#vK?e%&m@KLrNPicPkC_*O6SR2v%oS37=%|7ROrD*QMc|4icwHaHsp
zNaMM)O?@=+L=)sSX|irAd1j0_bAvtG-<PFRom@|sSBu$vHM_q%NyhW}@#&B!QfwNy
zXQO0j98&GrKVnztv`8qrI#XWEo!%lR#if%bErj}#7SbSxPv@6kUX8@eK)XzXMtmQv
zPL)_FUt0supUxf@uSUrv<~X*xLY9kb?Ss?nCTMHK>E!AfN}`~p-Dh)g`e0}CS0abZ
zPVTkIkxW<CY?M<b<)4x=Qq-jig>_Qcjj*AB@NgDc*CkLzn-DaxdhM*t634bfU|5=|
zEq3=po3v~)=tmBxk1B{QTXnje&2h}hmyx*rc!kg9qc&zgN^Zs%Z!cc;;-_oaAb^$H
zY9N7agcF~%@;D&?zXST{Z*VfxWSA_)>iRY*q|0{FsRIL6Z$@H@f3xNFotQ6XBk^%@
zcJcaRBo>#;k@#e7?Spgy<Bp&ne<Zy8l9tov6=AlrPK`MeCS6`RB{NWw^@04LVQLEJ
z>b!C6E<x$-Bip<%k(4&&U}_`I0q^rJy}&~c+J%OhO!84{VB52^3;4WNtscAS!TQ6?
zn?Iv5Y((;2RtWg><q0om2Bg&vX-0pro{%4PA>|{ll3i=Hw@}IYQdks?(>@`VC2Eeo
z`UONKTw@FcW2X^U!d(gkjrfa^iGApMf$zlDoM|J`d)YUXfr{`}+nsU%ooF#Dh<`^1
z;cmwhqG9ATG>sw(5ks<BfLSui;>sEwtn(Z-1U)pwxKNIxW23EfT7`XrL&>bthL9#1
znFLTm0__g+H9|erB~pVu@f<4!e28pJ(#8RA0ZuCc91b`vV9)Jw$SU&a$vu<J5^S?#
zwmGKA<TE1Ck1PlP6-WPtz$e;ZMrK{gWNIUu5?TH%(T0p83jMwmon#(a3%<Zya8wa-
zD2u$YF^j0slFOk14wB_KSt3jIX3v9EM`I|dzH#_S^@a+E>vp=N8jElY<pxeM7Cr*6
zI7+@pN{mbeiSRLqc-v^r(bk>m8JRvcatb@u6JiE=6x*CuQ<P(s9oCaQ$u;d8Ufl72
z@0OGFLRFw!aDlgt1Iv}V(t(_mQdW5VZzO0a8c+I(bBDynd9$Xf6JFS2voWQ9R7e%d
zEv6NTYLb)LZFDJ)WTsrBeSrR)O@cXh_p9kUE=@*wTTz6(@-Y-`_5&yY1{A?R38Rtr
z<g$B!!;kd6DP?}(sN?dREE+=@$U_HnwEJP^C0&~EJox3%P&Un}Z;gicfb%s%WP%2p
z?+}Xw{(;TDVQ>LUlY#1#*=lDBxrJN6nquQUIS5iar-Mr9Xpy+uEiz^_0({S)hul%x
zoVqb)@v2I^rP4Kuxb8xh$spHo>xlcY-aEx1V%DIJ3d{x*xjnhzkgPxmIX9b;LE4-O
zYS5)yT~!^3tsEUlvsaKx+&!XpyM0ZSqi#EjN459JCD*1oYDYaNG@RqwGbko^%NYzR
ziTaqn$YX6{Q?;mh6^zcbuS?m2nK`OeM?p?z8>VGsU~I7u$`YBtv?flOBcD{-@F>FM
ztP1F3WWY3zhm)Z+#Ik@|S_X}*#hEPPw~xWXQK@y#I&MbiL{32a5ql$0vQgf%jut{a
zzR)wEoj^>HJ2U~NR@6;(O%8Qtxs#Re3zY2(qyl8pg1Y<u;NK$JvnK8Nbl}7$)J;IC
zIjDA;D8T&M7_Jy>VbZOyEE46kBimQQCXT&3K&VqDg;Bc~kJh^qx(eEagnP73?pUI0
zrUq_jdo=Z)8=0zvyne`fIt<2ffxc}(jzm&@{r>tF;Q9|{vzTOEYgq1q>P@#*OA*f!
zCFwQ-9hK<jo|))WE6E8dJr^kYd+{2~jJfQ9CXa3}9ZNEf`<dV5NSgk$Qsg!!c7!ua
zl;EF|T!72U8eJyixN9zAjN5*+;{FQc;CodRD$o6fR#~)wSGBq#Aw^JX|9@>wRtNi0
z83xbVz7u_cBYIdRWK0jc&W{f*n-e+HX*r<U#Fm}DBk7_A(N(1~jq*_LhcJA9<E0BB
zr}yt;FmidsU@U34ILM=Byp~8ZLI^5V8-Y-u_~!-fK<S&|nnqL1<AEr%D}#JV-~o1L
zRNGb%?x?t{=X=U5hOQ^gDA&1*(t~<BYR+}4(R(NDH6m-f?dg}v?flbp`QqjNOk67T
zjDr^>-99pjR?i%-7iZh;Hcz7%;hhToJ`=u|b5G*L7j`G;9l)s4pF|~Hbh}~F*u^Ej
zEW{&Re*V~+e>uD-aiH2K2}ZT@q3{0)>-3r>+IK9p#(tdXTsIZHVnwyf=~PTUE$^f1
zzg~TseIUOUs;r}ZH~1o(dhcM#^R;}c!^=<<T+(oR2RfW(;nt+xZa40)CD!E-TOD%s
z3U#(~+%JDiD6^@5N$|RT<%=kp$M>>hC0ncOGeQ$-IN#|<eby^D()SA{kHrU9o@4oN
zgQZS|iU&f|zfrXL=#F)uYkah+{9cP}=#AzFdj430pW0|mKCf=>7co}15EY<0^hi#;
zCq*Rt(_qyHUUp?0+(wyg`K^bumEMuSCL?5+5?71q^=!3_e3TtNGf{b{;(ev3oaDdM
K9BR0h6#xL2c#cZ|

diff --git a/asterisk.c b/asterisk.c
index 2390f65dc4..cb31376cf3 100755
--- a/asterisk.c
+++ b/asterisk.c
@@ -81,6 +81,7 @@ int option_initcrypto=0;
 int option_nocolor;
 int option_dumpcore = 0;
 int option_cache_record_files = 0;
+int option_timestamp = 0;
 int option_overrideconfig = 0;
 int option_reconnect = 0;
 int fully_booted = 0;
@@ -1539,6 +1540,7 @@ static int show_cli_help(void) {
 	printf("   -r              Connect to Asterisk on this machine\n");
 	printf("   -R              Connect to Asterisk, and attempt to reconnect if disconnected\n");
 	printf("   -t              Record soundfiles in /var/tmp and move them where they belong after they are done.\n");
+	printf("   -T              Display the time in [Mmm dd hh:mm:ss] format for each line of output to the CLI.\n");
 	printf("   -v              Increase verbosity (multiple v's = more verbose)\n");
 	printf("   -x <cmd>        Execute command <cmd> (only valid with -r)\n");
 	printf("\n");
@@ -1611,6 +1613,9 @@ static void ast_readconfig(void) {
 		/* verbose level (-v at startup) */
 		if (!strcasecmp(v->name, "verbose")) {
 			option_verbose= atoi(v->value);
+		/* whether or not to force timestamping. (-T at startup) */
+		} else if (!strcasecmp(v->name, "timestamp")) {
+			option_timestamp = ast_true(v->value);
 		/* whether or not to support #exec in config files */
 		} else if (!strcasecmp(v->name, "execincludes")) {
 			option_exec_includes = ast_true(v->value);
@@ -1700,7 +1705,7 @@ int main(int argc, char *argv[])
 	}
 	*/
 	/* Check for options */
-	while((c=getopt(argc, argv, "thfdvVqprRgcinx:U:G:C:")) != -1) {
+	while((c=getopt(argc, argv, "tThfdvVqprRgcinx:U:G:C:")) != -1) {
 		switch(c) {
 		case 'd':
 			option_debug++;
@@ -1738,6 +1743,9 @@ int main(int argc, char *argv[])
 		case 't':
 			option_cache_record_files++;
 			break;
+		case 'T':
+			option_timestamp++;
+			break;
 		case 'x':
 			option_exec++;
 			xarg = optarg;
diff --git a/asterisk.sgml b/asterisk.sgml
index fb569d533e..b84ad0020a 100755
--- a/asterisk.sgml
+++ b/asterisk.sgml
@@ -21,7 +21,7 @@
 <refsynopsisdiv>
 	<cmdsynopsis>
 	<command>asterisk</command>
-<arg><option>-hfdvVqpRgcin</option></arg>
+<arg><option>-tThfdvVqpRgcin</option></arg>
 <arg><option>-C </option><replaceable class="parameter">file</replaceable></arg>
 <arg><option>-U </option><replaceable class="parameter">user</replaceable></arg>
 <arg><option>-G </option><replaceable class="parameter">group</replaceable></arg>
@@ -190,6 +190,24 @@
 			</para>
 		</listitem>
 	</varlistentry>
+	<varlistentry>
+		<term>-t</term>
+		<listitem>
+			<para>
+			When recording files, write them first into a temporary holding directory, 
+			then move them into the final location when done.
+			</para>
+		</listitem>
+	</varlistentry>
+	<varlistentry>
+		<term>-T</term>
+		<listitem>
+			<para>
+			Add timestamp to all non-command related output going to the console
+			when running with verbose and/or logging to the console.
+			</para>
+		</listitem>
+	</varlistentry>
 	<varlistentry>
 		<term>-U <replaceable class="parameter">user</replaceable></term>
 		<listitem>
diff --git a/include/asterisk/options.h b/include/asterisk/options.h
index 5cbdeab0f6..2a3cf237cc 100755
--- a/include/asterisk/options.h
+++ b/include/asterisk/options.h
@@ -31,6 +31,7 @@ extern int option_nocolor;
 extern int fully_booted;
 extern int option_exec_includes;
 extern int option_cache_record_files;
+extern int option_timestamp;
 extern char defaultlanguage[];
 extern time_t ast_startuptime;
 extern time_t ast_lastreloadtime;
diff --git a/logger.c b/logger.c
index 502a9719fb..a8f7fe3fe1 100755
--- a/logger.c
+++ b/logger.c
@@ -601,14 +601,14 @@ void ast_log(int level, const char *file, int line, const char *function, const
 
 				if (level != __LOG_VERBOSE) {
 					sprintf(linestr, "%d", line);
-					snprintf(buf, sizeof(buf), "%s %s[%ld]: %s:%s %s: ",
+					snprintf(buf, sizeof(buf), option_timestamp ? "[%s] %s[%ld]: %s:%s %s: " : "%s %s[%ld]: %s:%s %s: ",
 						date,
 						term_color(tmp1, levels[level], colors[level], 0, sizeof(tmp1)),
 						(long)GETTID(),
 						term_color(tmp2, file, COLOR_BRWHITE, 0, sizeof(tmp2)),
 						term_color(tmp3, linestr, COLOR_BRWHITE, 0, sizeof(tmp3)),
 						term_color(tmp4, function, COLOR_BRWHITE, 0, sizeof(tmp4)));
-		    
+					
 					ast_console_puts(buf);
 					va_start(ap, fmt);
 					vsnprintf(buf, sizeof(buf), fmt, ap);
@@ -616,7 +616,7 @@ void ast_log(int level, const char *file, int line, const char *function, const
 					ast_console_puts(buf);
 				}
 			} else if ((chan->logmask & (1 << level)) && (chan->fileptr)) {
-				snprintf(buf, sizeof(buf), "%s %s[%ld]: ", date,
+				snprintf(buf, sizeof(buf), option_timestamp ? "[%s] %s[%ld]: " : "%s %s[%ld]: ", date,
 					levels[level], (long)GETTID());
 				fprintf(chan->fileptr, buf);
 				va_start(ap, fmt);
@@ -657,13 +657,30 @@ extern void ast_verbose(const char *fmt, ...)
 	static int replacelast = 0, complete;
 	struct msglist *m;
 	struct verb *v;
+	time_t t;
+	struct tm tm;
+	char date[40];
+	char *datefmt;
+	
 	va_list ap;
 	va_start(ap, fmt);
 	ast_mutex_lock(&msglist_lock);
+	time(&t);
+	localtime_r(&t, &tm);
+	strftime(date, sizeof(date), dateformat, &tm);
+
+	if (option_timestamp) {
+		datefmt = alloca(strlen(date) + 3 + strlen(fmt) + 1);
+		if (datefmt) {
+			sprintf(datefmt, "[%s] %s", date, fmt);
+			fmt = datefmt;
+		}
+	}
 	vsnprintf(stuff + pos, sizeof(stuff) - pos, fmt, ap);
 	opos = pos;
 	pos = strlen(stuff);
 
+
 	if (stuff[strlen(stuff)-1] == '\n') 
 		complete = 1;
 	else
@@ -703,7 +720,6 @@ extern void ast_verbose(const char *fmt, ...)
 		}
 	} /* else
 		fprintf(stdout, stuff + opos); */
-
 	ast_log(LOG_VERBOSE, "%s", stuff);
 	if (strlen(stuff)) {
 		if (stuff[strlen(stuff)-1] != '\n') 
-- 
GitLab