From: Wilfried Goesgens Date: Sun, 29 Apr 2012 13:19:10 +0000 (+0200) Subject: Logging: add commands to runtime view/enable/disable logging X-Git-Tag: v8.11~56 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=eee9a1429dd032114946aad9e70fd8d84afbe918 Logging: add commands to runtime view/enable/disable logging - LOGP: print log config - LOGS: set one logging facility --- diff --git a/citadel/modules/c-ares-dns/serv_c-ares-dns.c b/citadel/modules/c-ares-dns/serv_c-ares-dns.c index 13e156a80..0f5c004ee 100644 --- a/citadel/modules/c-ares-dns/serv_c-ares-dns.c +++ b/citadel/modules/c-ares-dns/serv_c-ares-dns.c @@ -610,16 +610,16 @@ void SockStateCb(void *data, int sock, int read, int write) ev_io_stop(event_base, &IO->DNS.send_event); } } -void EnableDebugCAres(void) +void EnableDebugCAres(const int n) { - DebugCAres = 1; + DebugCAres = n; } CTDL_MODULE_INIT(c_ares_client) { if (!threading) { - CtdlRegisterDebugFlagHook(HKEY("cares"), EnableDebugCAres); + CtdlRegisterDebugFlagHook(HKEY("cares"), EnableDebugCAres, &DebugCAres); int r = ares_library_init(ARES_LIB_INIT_ALL); if (0 != r) { diff --git a/citadel/modules/eventclient/serv_eventclient.c b/citadel/modules/eventclient/serv_eventclient.c index a079d1232..06e140b7e 100644 --- a/citadel/modules/eventclient/serv_eventclient.c +++ b/citadel/modules/eventclient/serv_eventclient.c @@ -841,27 +841,27 @@ void ShutDownEventQueues(void) pthread_mutex_unlock(&EventQueueMutex); } -void DebugEventloopEnable(void) +void DebugEventloopEnable(const int n) { - DebugEventLoop = 1; + DebugEventLoop = n; } -void DebugEventloopBacktraceEnable(void) +void DebugEventloopBacktraceEnable(const int n) { - DebugEventLoopBacktrace = 1; + DebugEventLoopBacktrace = n; } -void DebugCurlEnable(void) +void DebugCurlEnable(const int n) { - DebugCurl = 1; + DebugCurl = n; } CTDL_MODULE_INIT(event_client) { if (!threading) { - CtdlRegisterDebugFlagHook(HKEY("eventloop"), DebugEventloopEnable); - CtdlRegisterDebugFlagHook(HKEY("eventloopbacktrace"), DebugEventloopBacktraceEnable); - CtdlRegisterDebugFlagHook(HKEY("curl"), DebugCurlEnable); + CtdlRegisterDebugFlagHook(HKEY("eventloop"), DebugEventloopEnable, &DebugEventLoop); + CtdlRegisterDebugFlagHook(HKEY("eventloopbacktrace"), DebugEventloopBacktraceEnable, &DebugEventLoopBacktrace); + CtdlRegisterDebugFlagHook(HKEY("curl"), DebugCurlEnable, &DebugCurl); InitEventQueue(); DBInitEventQueue(); CtdlThreadCreate(client_event_thread); diff --git a/citadel/modules/network/serv_networkclient.c b/citadel/modules/network/serv_networkclient.c index 91dd4ad4d..1a027ea23 100644 --- a/citadel/modules/network/serv_networkclient.c +++ b/citadel/modules/network/serv_networkclient.c @@ -1037,9 +1037,9 @@ void network_do_clientqueue(void) free(working_ignetcfg); } -void LogDebugEnableNetworkClient(void) +void LogDebugEnableNetworkClient(const int n) { - NetworkClientDebugEnabled = 1; + NetworkClientDebugEnabled = n; } /* * Module entry point @@ -1051,7 +1051,7 @@ CTDL_MODULE_INIT(network_client) CtdlFillSystemContext(&networker_client_CC, "CitNetworker"); CtdlRegisterSessionHook(network_do_clientqueue, EVT_TIMER); - CtdlRegisterDebugFlagHook(HKEY("networkclient"), LogDebugEnableNetworkClient); + CtdlRegisterDebugFlagHook(HKEY("networkclient"), LogDebugEnableNetworkClient, &NetworkClientDebugEnabled); } return "networkclient"; diff --git a/citadel/modules/pop3client/serv_pop3client.c b/citadel/modules/pop3client/serv_pop3client.c index 9784798cc..3d1c1dd8f 100644 --- a/citadel/modules/pop3client/serv_pop3client.c +++ b/citadel/modules/pop3client/serv_pop3client.c @@ -1214,9 +1214,9 @@ void pop3_cleanup(void) -void LogDebugEnablePOP3Client(void) +void LogDebugEnablePOP3Client(const int n) { - POP3ClientDebugEnabled = 1; + POP3ClientDebugEnabled = n; } CTDL_MODULE_INIT(pop3client) @@ -1229,7 +1229,7 @@ CTDL_MODULE_INIT(pop3client) POP3FetchUrls = NewHash(1, NULL); CtdlRegisterSessionHook(pop3client_scan, EVT_TIMER); CtdlRegisterEVCleanupHook(pop3_cleanup); - CtdlRegisterDebugFlagHook(HKEY("pop3client"), LogDebugEnablePOP3Client); + CtdlRegisterDebugFlagHook(HKEY("pop3client"), LogDebugEnablePOP3Client, &POP3ClientDebugEnabled); } /* return our module id for the log */ diff --git a/citadel/modules/rssclient/rss_atom_parser.c b/citadel/modules/rssclient/rss_atom_parser.c index 0c7290b5c..c33fe9e70 100644 --- a/citadel/modules/rssclient/rss_atom_parser.c +++ b/citadel/modules/rssclient/rss_atom_parser.c @@ -1086,9 +1086,9 @@ void rss_parser_cleanup(void) DeleteHash(&KnownNameSpaces); } -void LogDebugEnableRSSATOMParser(void) +void LogDebugEnableRSSATOMParser(const int n) { - RSSAtomParserDebugEnabled = 1; + RSSAtomParserDebugEnabled = n; } CTDL_MODULE_INIT(rssparser) @@ -1177,7 +1177,7 @@ CTDL_MODULE_INIT(rssparser) /* we don't like these namespaces because of they shadow our usefull parameters. */ Put(KnownNameSpaces, HKEY("http://search.yahoo.com/mrss/"), NULL, reference_free_handler); #endif - CtdlRegisterDebugFlagHook(HKEY("RSSAtomParser"), LogDebugEnableRSSATOMParser); + CtdlRegisterDebugFlagHook(HKEY("RSSAtomParser"), LogDebugEnableRSSATOMParser, &RSSAtomParserDebugEnabled); CtdlRegisterCleanupHook(rss_parser_cleanup); } return "rssparser"; diff --git a/citadel/modules/rssclient/serv_rssclient.c b/citadel/modules/rssclient/serv_rssclient.c index 638300feb..f6561e6b1 100644 --- a/citadel/modules/rssclient/serv_rssclient.c +++ b/citadel/modules/rssclient/serv_rssclient.c @@ -582,9 +582,9 @@ void rss_cleanup(void) DeleteHash(&RSSQueueRooms); } -void LogDebugEnableRSSClient(void) +void LogDebugEnableRSSClient(const int n) { - RSSClientDebugEnabled = 1; + RSSClientDebugEnabled = n; } CTDL_MODULE_INIT(rssclient) @@ -598,7 +598,7 @@ CTDL_MODULE_INIT(rssclient) syslog(LOG_INFO, "%s\n", curl_version()); CtdlRegisterSessionHook(rssclient_scan, EVT_TIMER); CtdlRegisterEVCleanupHook(rss_cleanup); - CtdlRegisterDebugFlagHook(HKEY("rssclient"), LogDebugEnableRSSClient); + CtdlRegisterDebugFlagHook(HKEY("rssclient"), LogDebugEnableRSSClient, &RSSClientDebugEnabled); } return "rssclient"; } diff --git a/citadel/modules/smtp/serv_smtpeventclient.c b/citadel/modules/smtp/serv_smtpeventclient.c index d98a2181b..dbe2c297d 100644 --- a/citadel/modules/smtp/serv_smtpeventclient.c +++ b/citadel/modules/smtp/serv_smtpeventclient.c @@ -828,14 +828,14 @@ eReadState SMTP_C_ReadServerStatus(AsyncIO *IO) return Finished; } -void LogDebugEnableSMTPClient(void) +void LogDebugEnableSMTPClient(const int n) { - SMTPClientDebugEnabled = 1; + SMTPClientDebugEnabled = n; } CTDL_MODULE_INIT(smtp_eventclient) { if (!threading) - CtdlRegisterDebugFlagHook(HKEY("smtpeventclient"), LogDebugEnableSMTPClient); + CtdlRegisterDebugFlagHook(HKEY("smtpeventclient"), LogDebugEnableSMTPClient, &SMTPClientDebugEnabled); return "smtpeventclient"; } diff --git a/citadel/serv_extensions.c b/citadel/serv_extensions.c index 45221c514..04c34704b 100644 --- a/citadel/serv_extensions.c +++ b/citadel/serv_extensions.c @@ -55,6 +55,7 @@ typedef struct __LogDebugEntry { CtdlDbgFunction F; const char *Name; long Len; + const int *LogP; } LogDebugEntry; HashList *LogDebugEntryTable = NULL; @@ -332,15 +333,8 @@ long FourHash(const char *key, long length) return ret; } -/* -typedef struct __LogDebugEntry { - CtdlDbgFunction F; - const char *Name; - long Len; -} LogDebugEntry; -HashList *LogDebugEntryTable = NULL; -*/ -void CtdlRegisterDebugFlagHook(const char *Name, long Len, CtdlDbgFunction F) + +void CtdlRegisterDebugFlagHook(const char *Name, long Len, CtdlDbgFunction F, const int *LogP) { LogDebugEntry *E; if (LogDebugEntryTable == NULL) @@ -349,6 +343,7 @@ void CtdlRegisterDebugFlagHook(const char *Name, long Len, CtdlDbgFunction F) E->F = F; E->Name = Name; E->Len = Len; + E->LogP = LogP; Put(LogDebugEntryTable, Name, Len, E, NULL); } @@ -377,7 +372,7 @@ void CtdlSetDebugLogFacilities(const char **Str, long n) (vptr != NULL)) { LogDebugEntry *E = (LogDebugEntry*)vptr; - E->F(); + E->F(1); } } } @@ -392,12 +387,58 @@ void CtdlSetDebugLogFacilities(const char **Str, long n) Pos = GetNewHashPos(LogDebugEntryTable, 0); while (GetNextHashPos(LogDebugEntryTable, Pos, &HKLen, &ch, &vptr)) { LogDebugEntry *E = (LogDebugEntry*)vptr; - E->F(); + E->F(1); } DeleteHashPos(&Pos); } } +void cmd_log_get(char *argbuf) +{ + long HKLen; + const char *ch; + HashPos *Pos; + void *vptr; + + if (CtdlAccessCheck(ac_aide)) return; + + cprintf("%d Log modules enabled:\n", LISTING_FOLLOWS); + + Pos = GetNewHashPos(LogDebugEntryTable, 0); + + while (GetNextHashPos(LogDebugEntryTable, Pos, &HKLen, &ch, &vptr)) { + LogDebugEntry *E = (LogDebugEntry*)vptr; + cprintf("%s: %d\n", ch, *E->LogP); + } + + DeleteHashPos(&Pos); + cprintf("000\n"); +} +void cmd_log_set(char *argbuf) +{ + void *vptr; + int lset; + int wlen; + char which[SIZ] = ""; + + if (CtdlAccessCheck(ac_aide)) return; + + wlen = extract_token(which, argbuf, 0, '|', sizeof(which)); + if (wlen < 0) wlen = 0; + lset = extract_int(argbuf, 1); + if (lset != 0) lset = 1; + if (GetHash(LogDebugEntryTable, which, wlen, &vptr) && + (vptr != NULL)) + { + LogDebugEntry *E = (LogDebugEntry*)vptr; + E->F(lset); + cprintf("%d %s|%d\n", CIT_OK, which, lset); + } + else { + cprintf("%d Log setting %s not known\n", + ERROR, which); + } +} void CtdlDestroyDebugTable(void) { @@ -1309,3 +1350,13 @@ void CtdlModuleStartCryptoMsgs(char *ok_response, char *nosup_response, char *er CtdlStartTLS (ok_response, nosup_response, error_response); #endif } + + +CTDL_MODULE_INIT(modules) +{ + if (!threading) { + CtdlRegisterProtoHook(cmd_log_get, "LOGP", "Print Log-parameters"); + CtdlRegisterProtoHook(cmd_log_set, "LOGS", "Set Log-parameters"); + } + return "modules"; +} diff --git a/citadel/serv_extensions.h b/citadel/serv_extensions.h index 0ef8e1408..59dcfec3a 100644 --- a/citadel/serv_extensions.h +++ b/citadel/serv_extensions.h @@ -15,7 +15,7 @@ /* */ -typedef void (*CtdlDbgFunction) (void); +typedef void (*CtdlDbgFunction) (const int); @@ -85,7 +85,7 @@ void CtdlDestroySearchHooks(void); void CtdlDestroyFixedOutputHooks(void); int PerformFixedOutputHooks(char *, char *, int); -void CtdlRegisterDebugFlagHook(const char *Name, long len, CtdlDbgFunction F); +void CtdlRegisterDebugFlagHook(const char *Name, long len, CtdlDbgFunction F, const int *); void CtdlSetDebugLogFacilities(const char **Str, long n); void CtdlDestroyDebugTable(void);