mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
move the trae functions to thier own subdirectory
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@8427 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
09f80afc5d
commit
f5a84f15c2
@ -37,6 +37,7 @@ libgncmod_engine_la_SOURCES = \
|
||||
gnc-pricedb.c \
|
||||
gnc-session.c \
|
||||
gnc-session-scm.c \
|
||||
gnc-trace.c \
|
||||
gncmod-engine.c \
|
||||
guid.c \
|
||||
gncObject.c \
|
||||
@ -79,6 +80,7 @@ gncinclude_HEADERS = \
|
||||
gnc-pricedb.h \
|
||||
gnc-session.h \
|
||||
gnc-session-scm.h \
|
||||
gnc-trace.h \
|
||||
guid.h \
|
||||
gncObject.h \
|
||||
kvp_frame.h \
|
||||
|
@ -27,256 +27,11 @@
|
||||
#include "config.h"
|
||||
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <glib.h>
|
||||
#include <limits.h>
|
||||
#include <math.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include "gnc-engine-util.h"
|
||||
#include "gnc-engine.h"
|
||||
|
||||
/** GLOBALS *********************************************************/
|
||||
|
||||
/* This static indicates the debugging module that this .o belongs to. */
|
||||
/* static short module = MOD_ENGINE; */
|
||||
|
||||
static gncLogLevel loglevel[MOD_LAST + 1] =
|
||||
{
|
||||
GNC_LOG_FATAL, /* DUMMY */
|
||||
GNC_LOG_WARNING, /* ENGINE */
|
||||
GNC_LOG_WARNING, /* IO */
|
||||
GNC_LOG_WARNING, /* REGISTER */
|
||||
GNC_LOG_WARNING, /* LEDGER */
|
||||
GNC_LOG_WARNING, /* HTML */
|
||||
GNC_LOG_WARNING, /* GUI */
|
||||
GNC_LOG_WARNING, /* SCRUB */
|
||||
GNC_LOG_WARNING, /* GTK_REG */
|
||||
GNC_LOG_WARNING, /* GUILE */
|
||||
GNC_LOG_WARNING, /* BACKEND */
|
||||
GNC_LOG_WARNING, /* QUERY */
|
||||
GNC_LOG_WARNING, /* PRICE */
|
||||
GNC_LOG_WARNING, /* SQL EVENT */
|
||||
GNC_LOG_WARNING, /* SQL TXN */
|
||||
GNC_LOG_WARNING, /* KVP */
|
||||
GNC_LOG_WARNING, /* SX */
|
||||
GNC_LOG_WARNING, /* BOOK */
|
||||
GNC_LOG_TRACE, /* TEST */
|
||||
GNC_LOG_WARNING, /* LOT */
|
||||
GNC_LOG_WARNING, /* ACCOUNT */
|
||||
GNC_LOG_WARNING, /* IMPORT */
|
||||
GNC_LOG_WARNING, /* BUSINESS */
|
||||
};
|
||||
|
||||
static FILE *fout = NULL;
|
||||
|
||||
/* Set the logging level of the given module. */
|
||||
void
|
||||
gnc_set_log_level(gncModuleType module, gncLogLevel level)
|
||||
{
|
||||
if ((module < 0) || (module > MOD_LAST))
|
||||
return;
|
||||
|
||||
loglevel[module] = level;
|
||||
}
|
||||
|
||||
/* Set the logging level for all modules. */
|
||||
void
|
||||
gnc_set_log_level_global(gncLogLevel level)
|
||||
{
|
||||
gncModuleType module;
|
||||
|
||||
for (module = 0; module <= MOD_LAST; module++)
|
||||
loglevel[module] = level;
|
||||
}
|
||||
|
||||
void
|
||||
gnc_set_logfile (FILE *outfile)
|
||||
{
|
||||
fout = outfile;
|
||||
}
|
||||
|
||||
/* prettify() cleans up subroutine names. AIX/xlC has the habit of
|
||||
* printing signatures not names; clean this up. On other operating
|
||||
* systems, truncate name to 30 chars. Note this routine is not thread
|
||||
* safe. Note we wouldn't need this routine if AIX did something more
|
||||
* reasonable. Hope thread safety doesn't poke us in eye. */
|
||||
static const char *
|
||||
prettify (const char *name)
|
||||
{
|
||||
static char bf[128];
|
||||
char *p;
|
||||
|
||||
if (!name)
|
||||
return "";
|
||||
|
||||
strncpy (bf, name, 29); bf[28] = 0;
|
||||
p = strchr (bf, '(');
|
||||
|
||||
if (p)
|
||||
{
|
||||
*(p+1) = ')';
|
||||
*(p+2) = 0x0;
|
||||
}
|
||||
else
|
||||
strcpy (&bf[26], "...()");
|
||||
|
||||
return bf;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gnc_should_log (gncModuleType module, gncLogLevel log_level)
|
||||
{
|
||||
if (module < 0 || module > MOD_LAST)
|
||||
{
|
||||
PERR ("Bad module: %d", module);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (log_level > loglevel[module])
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
gnc_log (gncModuleType module, gncLogLevel log_level, const char *prefix,
|
||||
const char *function_name, const char *format, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
if (!gnc_should_log (module, log_level))
|
||||
return;
|
||||
|
||||
if (!fout) fout = stderr;
|
||||
|
||||
fprintf (fout, "%s: %s: ",
|
||||
prefix ? prefix : "(null)",
|
||||
prettify (function_name));
|
||||
|
||||
va_start (ap, format);
|
||||
|
||||
vfprintf (fout, format, ap);
|
||||
|
||||
va_end (ap);
|
||||
|
||||
fprintf (fout, "\n");
|
||||
}
|
||||
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
|
||||
#define NUM_CLOCKS 10
|
||||
|
||||
static
|
||||
struct timeval gnc_clock[NUM_CLOCKS] = {
|
||||
{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0},
|
||||
{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0},
|
||||
};
|
||||
|
||||
static
|
||||
struct timeval gnc_clock_total[NUM_CLOCKS] = {
|
||||
{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0},
|
||||
{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0},
|
||||
};
|
||||
|
||||
void
|
||||
gnc_start_clock (int clockno, gncModuleType module, gncLogLevel log_level,
|
||||
const char *function_name, const char *format, ...)
|
||||
{
|
||||
struct timezone tz;
|
||||
va_list ap;
|
||||
|
||||
if ((0>clockno) || (NUM_CLOCKS <= clockno)) return;
|
||||
gettimeofday (&gnc_clock[clockno], &tz);
|
||||
|
||||
if (!fout) fout = stderr;
|
||||
|
||||
fprintf (fout, "Clock %d Start: %s: ",
|
||||
clockno, prettify (function_name));
|
||||
|
||||
va_start (ap, format);
|
||||
|
||||
vfprintf (fout, format, ap);
|
||||
|
||||
va_end (ap);
|
||||
|
||||
fprintf (fout, "\n");
|
||||
}
|
||||
|
||||
void
|
||||
gnc_report_clock (int clockno, gncModuleType module, gncLogLevel log_level,
|
||||
const char *function_name, const char *format, ...)
|
||||
{
|
||||
struct timezone tz;
|
||||
struct timeval now;
|
||||
va_list ap;
|
||||
|
||||
if ((0>clockno) || (NUM_CLOCKS <= clockno)) return;
|
||||
gettimeofday (&now, &tz);
|
||||
|
||||
/* need to borrow to make difference */
|
||||
if (now.tv_usec < gnc_clock[clockno].tv_usec)
|
||||
{
|
||||
now.tv_sec --;
|
||||
now.tv_usec += 1000000;
|
||||
}
|
||||
now.tv_sec -= gnc_clock[clockno].tv_sec;
|
||||
now.tv_usec -= gnc_clock[clockno].tv_usec;
|
||||
|
||||
gnc_clock_total[clockno].tv_sec += now.tv_sec;
|
||||
gnc_clock_total[clockno].tv_usec += now.tv_usec;
|
||||
|
||||
if (!fout) fout = stderr;
|
||||
|
||||
fprintf (fout, "Clock %d Elapsed: %ld.%06lds %s: ",
|
||||
clockno, now.tv_sec, now.tv_usec, prettify (function_name));
|
||||
|
||||
va_start (ap, format);
|
||||
|
||||
vfprintf (fout, format, ap);
|
||||
|
||||
va_end (ap);
|
||||
|
||||
fprintf (fout, "\n");
|
||||
}
|
||||
|
||||
void
|
||||
gnc_report_clock_total (int clockno,
|
||||
gncModuleType module, gncLogLevel log_level,
|
||||
const char *function_name, const char *format, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
if ((0>clockno) || (NUM_CLOCKS <= clockno)) return;
|
||||
|
||||
/* need to normalize usec */
|
||||
while (gnc_clock_total[clockno].tv_usec >= 1000000)
|
||||
{
|
||||
gnc_clock_total[clockno].tv_sec ++;
|
||||
gnc_clock_total[clockno].tv_usec -= 1000000;
|
||||
}
|
||||
|
||||
if (!fout) fout = stderr;
|
||||
|
||||
fprintf (fout, "Clock %d Total Elapsed: %ld.%06lds %s: ",
|
||||
clockno,
|
||||
gnc_clock_total[clockno].tv_sec,
|
||||
gnc_clock_total[clockno].tv_usec,
|
||||
prettify (function_name));
|
||||
|
||||
va_start (ap, format);
|
||||
|
||||
vfprintf (fout, format, ap);
|
||||
|
||||
va_end (ap);
|
||||
|
||||
fprintf (fout, "\n");
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
@ -424,51 +179,5 @@ gnc_stpcpy (char *dest, const char *src)
|
||||
return (dest + strlen (src));
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
Callbacks so that the engine can display gui messages.
|
||||
\********************************************************************/
|
||||
|
||||
static GNCGuiMessage gnc_gui_warning_func = NULL;
|
||||
static GNCGuiMessage gnc_gui_error_func = NULL;
|
||||
|
||||
void gnc_set_warning_message (GNCGuiMessage func)
|
||||
{
|
||||
gnc_gui_warning_func = func;
|
||||
}
|
||||
|
||||
void gnc_set_error_message (GNCGuiMessage func)
|
||||
{
|
||||
gnc_gui_error_func = func;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gnc_send_gui_warning(const gchar *format, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
if (!gnc_gui_warning_func)
|
||||
return(FALSE);
|
||||
|
||||
va_start(args, format);
|
||||
gnc_gui_warning_func(format, args);
|
||||
va_end(args);
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gnc_send_gui_error(const gchar *format, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
if (!gnc_gui_error_func)
|
||||
return(FALSE);
|
||||
|
||||
va_start(args, format);
|
||||
gnc_gui_error_func(format, args);
|
||||
va_end(args);
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
|
||||
/************************* END OF FILE ******************************\
|
||||
\********************************************************************/
|
||||
|
@ -29,186 +29,11 @@
|
||||
#ifndef GNC_ENGINE_UTIL_H
|
||||
#define GNC_ENGINE_UTIL_H
|
||||
|
||||
#include <errno.h>
|
||||
#include <glib.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "config.h"
|
||||
|
||||
/** DEBUGGING MACROS ************************************************/
|
||||
/* The debuging macros enable the setting of trace messages */
|
||||
#include <stddef.h>
|
||||
|
||||
/** If you modify this, modify the loglevel table in the .c file. */
|
||||
typedef enum
|
||||
{
|
||||
MOD_DUMMY = 0,
|
||||
MOD_ENGINE = 1,
|
||||
MOD_IO = 2,
|
||||
MOD_REGISTER= 3,
|
||||
MOD_LEDGER = 4,
|
||||
MOD_HTML = 5,
|
||||
MOD_GUI = 6,
|
||||
MOD_SCRUB = 7,
|
||||
MOD_GTK_REG = 8,
|
||||
MOD_GUILE = 9,
|
||||
MOD_BACKEND = 10,
|
||||
MOD_QUERY = 11,
|
||||
MOD_PRICE = 12,
|
||||
MOD_EVENT = 13,
|
||||
MOD_TXN = 14,
|
||||
MOD_KVP = 15,
|
||||
MOD_SX = 16,
|
||||
MOD_BOOK = 17,
|
||||
MOD_TEST = 18,
|
||||
MOD_LOT = 19,
|
||||
MOD_ACCOUNT = 20,
|
||||
MOD_IMPORT = 21,
|
||||
MOD_BUSINESS= 22,
|
||||
MOD_LAST = 22
|
||||
} gncModuleType;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
GNC_LOG_FATAL = 0,
|
||||
GNC_LOG_ERROR = 1,
|
||||
GNC_LOG_WARNING = 2,
|
||||
GNC_LOG_INFO = 3,
|
||||
GNC_LOG_DEBUG = 4,
|
||||
GNC_LOG_DETAIL = 5,
|
||||
GNC_LOG_TRACE = 6,
|
||||
} gncLogLevel;
|
||||
|
||||
|
||||
typedef void (*GNCGuiMessage) (const gchar *format, va_list args);
|
||||
void gnc_set_warning_message (GNCGuiMessage func);
|
||||
void gnc_set_error_message (GNCGuiMessage func);
|
||||
|
||||
gboolean gnc_send_gui_warning (const gchar *format, ...);
|
||||
gboolean gnc_send_gui_error (const gchar *format, ...);
|
||||
|
||||
/* FIXME: these logging functions should proably get replaced by
|
||||
* the glib.h g_error(), etc functions. That way, we would have
|
||||
* unified logging mechanism, instead of having some messages
|
||||
* work one way, and other a different way ...
|
||||
*
|
||||
* FIXME: the if test should not be a subroutine call, it should
|
||||
* not use that many CPU cycles. These logging functions are supposed
|
||||
* to be lightweight. Who changed this ??? Why ???
|
||||
*
|
||||
*/
|
||||
gboolean gnc_should_log (gncModuleType module, gncLogLevel log_level);
|
||||
void gnc_log (gncModuleType module, gncLogLevel log_level,
|
||||
const char *prefix, const char *function_name,
|
||||
const char *format, ...) G_GNUC_PRINTF(5,6);
|
||||
|
||||
#define FATAL(format, args...) { \
|
||||
if (gnc_should_log (module, GNC_LOG_FATAL)) \
|
||||
gnc_log (module, GNC_LOG_FATAL, "Fatal Error", \
|
||||
__FUNCTION__, format, ## args); \
|
||||
}
|
||||
|
||||
#define PERR(format, args...) { \
|
||||
if (gnc_should_log (module, GNC_LOG_ERROR)) \
|
||||
gnc_log (module, GNC_LOG_ERROR, "Error", \
|
||||
__FUNCTION__, format, ##args); \
|
||||
}
|
||||
|
||||
#define PWARN(format, args...) { \
|
||||
if (gnc_should_log (module, GNC_LOG_WARNING)) \
|
||||
gnc_log (module, GNC_LOG_WARNING, "Warning", \
|
||||
__FUNCTION__, format, ## args); \
|
||||
}
|
||||
|
||||
#define PWARN_GUI(format, args...) { \
|
||||
if (!gnc_send_gui_error(format, ## args)) \
|
||||
PWARN(format, ## args); \
|
||||
}
|
||||
|
||||
#define PINFO(format, args...) { \
|
||||
if (gnc_should_log (module, GNC_LOG_INFO)) \
|
||||
gnc_log (module, GNC_LOG_INFO, "Info", \
|
||||
__FUNCTION__, format, ## args); \
|
||||
}
|
||||
|
||||
#define DEBUG(format, args...) { \
|
||||
if (gnc_should_log (module, GNC_LOG_DEBUG)) \
|
||||
gnc_log (module, GNC_LOG_DEBUG, "Debug", \
|
||||
__FUNCTION__, format, ## args); \
|
||||
}
|
||||
|
||||
#define ENTER(format, args...) { \
|
||||
if (gnc_should_log (module, GNC_LOG_DEBUG)) \
|
||||
gnc_log (module, GNC_LOG_DEBUG, "Enter", \
|
||||
__FUNCTION__, format, ## args); \
|
||||
}
|
||||
|
||||
#define LEAVE(format, args...) { \
|
||||
if (gnc_should_log (module, GNC_LOG_DEBUG)) \
|
||||
gnc_log (module, GNC_LOG_DEBUG, "Leave", \
|
||||
__FUNCTION__, format, ## args); \
|
||||
}
|
||||
|
||||
#define DETAIL(format, args...) { \
|
||||
if (gnc_should_log (module, GNC_LOG_DETAIL)) \
|
||||
gnc_log (module, GNC_LOG_DETAIL, "Detail", \
|
||||
__FUNCTION__, format, ## args); \
|
||||
}
|
||||
|
||||
|
||||
#define DEBUGCMD(x) { if (gnc_should_log (module, GNC_LOG_DEBUG)) { x; }}
|
||||
|
||||
#define ERROR() fprintf(stderr,"%s: Line %d, error = %s\n", \
|
||||
__FILE__, __LINE__, strerror(errno));
|
||||
|
||||
#define TRACE(format, args...) { \
|
||||
if (gnc_should_log (module, GNC_LOG_TRACE)) \
|
||||
gnc_log (module, GNC_LOG_TRACE, "Trace", \
|
||||
__FUNCTION__, format, ## args); \
|
||||
}
|
||||
|
||||
void gnc_start_clock (int clockno, gncModuleType module, gncLogLevel log_level,
|
||||
const char *function_name, const char *format, ...);
|
||||
|
||||
void gnc_report_clock (int clockno,
|
||||
gncModuleType module,
|
||||
gncLogLevel log_level,
|
||||
const char *function_name,
|
||||
const char *format, ...);
|
||||
|
||||
void gnc_report_clock_total (int clockno,
|
||||
gncModuleType module,
|
||||
gncLogLevel log_level,
|
||||
const char *function_name,
|
||||
const char *format, ...);
|
||||
|
||||
#define START_CLOCK(clockno,format, args...) { \
|
||||
if (gnc_should_log (module, GNC_LOG_INFO)) \
|
||||
gnc_start_clock (clockno, module, GNC_LOG_INFO,\
|
||||
__FUNCTION__, format, ## args); \
|
||||
}
|
||||
|
||||
#define REPORT_CLOCK(clockno,format, args...) { \
|
||||
if (gnc_should_log (module, GNC_LOG_INFO)) \
|
||||
gnc_report_clock (clockno, module, GNC_LOG_INFO,\
|
||||
__FUNCTION__, format, ## args); \
|
||||
}
|
||||
|
||||
#define REPORT_CLOCK_TOTAL(clockno,format, args...) { \
|
||||
if (gnc_should_log (module, GNC_LOG_INFO)) \
|
||||
gnc_report_clock_total (clockno, module, GNC_LOG_INFO, \
|
||||
__FUNCTION__, format, ## args); \
|
||||
}
|
||||
|
||||
/* Set the logging level of the given module. */
|
||||
void gnc_set_log_level(gncModuleType module, gncLogLevel level);
|
||||
|
||||
/* Set the logging level for all modules. */
|
||||
void gnc_set_log_level_global(gncLogLevel level);
|
||||
|
||||
/* Pipe log output to pipe or file */
|
||||
void gnc_set_logfile (FILE *outfile);
|
||||
#include "gnc-trace.h"
|
||||
|
||||
/** Macros *****************************************************/
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user