Project

General

Profile

Feature #247 » 0001-support-for-stats.log-configurable-and-fixed-timezon.patch

Gurvinder Singh, 12/14/2010 01:44 AM

View differences:

src/alert-debuglog.c
static void CreateTimeString (const struct timeval *ts, char *str, size_t size) {
time_t time = ts->tv_sec;
struct tm local_tm;
struct tm *t = gmtime_r(&time, &local_tm);
uint32_t sec = ts->tv_sec % 86400;
struct tm *t = (struct tm*)localtime_r(&time, &local_tm);
snprintf(str, size, "%02d/%02d/%02d-%02d:%02d:%02d.%06u",
t->tm_mon + 1, t->tm_mday, t->tm_year - 100,
sec / 3600, (sec % 3600) / 60, sec % 60,
(uint32_t) ts->tv_usec);
t->tm_mon + 1, t->tm_mday, t->tm_year + 1900, t->tm_hour,
t->tm_min, t->tm_sec, (uint32_t) ts->tv_usec);
}
/**
src/alert-fastlog.c
static void CreateTimeString (const struct timeval *ts, char *str, size_t size) {
time_t time = ts->tv_sec;
struct tm local_tm;
struct tm *t = gmtime_r(&time, &local_tm);
uint32_t sec = ts->tv_sec % 86400;
struct tm *t = (struct tm *)localtime_r(&time, &local_tm);
snprintf(str, size, "%02d/%02d/%02d-%02d:%02d:%02d.%06u",
t->tm_mon + 1, t->tm_mday, t->tm_year - 100,
sec / 3600, (sec % 3600) / 60, sec % 60,
(uint32_t) ts->tv_usec);
t->tm_mon + 1, t->tm_mday, 1, t->tm_year + 1900, t->tm_hour,
t->tm_min, t->tm_sec, (uint32_t) ts->tv_usec);
}
TmEcode AlertFastLogIPv4(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq, PacketQueue *postpq)
src/counters.c
static SCPerfOPIfaceContext *sc_perf_op_ctx = NULL;
static time_t sc_start_time;
static uint32_t sc_counter_int = SC_PERF_MGMTT_TTS;
static const char *enabled = "yes";
/**
* \brief Adds a value of type uint64_t to the local counter.
......
* \retval An allocated string containing the log filename on success or NULL on
* failure.
*/
static char *SCPerfGetLogFilename(void)
static char *SCPerfGetLogFilename(ConfNode *stats)
{
char *log_dir = NULL;
char *log_filename = NULL;
const char* filename = NULL;
if (ConfGet("default-log-dir", &log_dir) != 1)
log_dir = DEFAULT_LOG_DIR;
......
return NULL;
}
if (stats != NULL) {
filename = ConfNodeLookupChildValue(stats, "filename");
if (filename == NULL) {
filename = SC_PERF_DEFAULT_LOG_FILENAME;
}
} else {
filename = SC_PERF_DEFAULT_LOG_FILENAME;
}
if (snprintf(log_filename, PATH_MAX, "%s/%s", log_dir,
SC_PERF_DEFAULT_LOG_FILENAME) < 0) {
filename) < 0) {
SCLogError(SC_ERR_SPRINTF, "Sprintf Error");
SCFree(log_filename);
return NULL;
......
{
SCEnter();
ConfNode *root = ConfGetNode("outputs");
ConfNode *node = NULL;
ConfNode *stats = NULL;
if (root != NULL) {
TAILQ_FOREACH(node, &root->head, next) {
if (strncmp(node->val, "stats", 5) == 0) {
stats = node->head.tqh_first;
}
}
}
/* Check if the stats module is enabled or not */
if (stats != NULL) {
enabled = ConfNodeLookupChildValue(stats, "enabled");
if (strncmp(enabled, "no", 2) == 0) {
SCLogDebug("Stats module has been disabled");
SCReturn;
}
const char *interval = ConfNodeLookupChildValue(stats, "interval");
if (interval != NULL)
sc_counter_int = (uint32_t) atoi(interval);
}
/* Store the engine start time */
time(&sc_start_time);
......
sc_perf_op_ctx->iface = SC_PERF_IFACE_FILE;
if ( (sc_perf_op_ctx->file = SCPerfGetLogFilename()) == NULL) {
if ( (sc_perf_op_ctx->file = SCPerfGetLogFilename(stats)) == NULL) {
SCLogInfo("Error retrieving Perf Counter API output file path");
}
......
*/
static void SCPerfReleaseOPCtx()
{
if (sc_perf_op_ctx == NULL) {
SCLogDebug("Counter module has been disabled");
return;
}
SCPerfClubTMInst *pctmi = NULL;
SCPerfClubTMInst *temp = NULL;
pctmi = sc_perf_op_ctx->pctmi;
......
while (run) {
TmThreadTestThreadUnPaused(tv_local);
cond_time.tv_sec = time(NULL) + SC_PERF_MGMTT_TTS;
cond_time.tv_sec = time(NULL) + sc_counter_int;
cond_time.tv_nsec = 0;
SCMutexLock(tv_local->m);
......
*/
void SCPerfSpawnThreads(void)
{
if (strncmp(enabled, "no", 2) == 0) {
return;
}
ThreadVars *tv_wakeup = NULL;
ThreadVars *tv_mgmt = NULL;
......
*/
int SCPerfAddToClubbedTMTable(char *tm_name, SCPerfContext *pctx)
{
if (sc_perf_op_ctx == NULL) {
SCLogDebug("Counter module has been disabled");
return 0;
}
SCPerfClubTMInst *pctmi = NULL;
SCPerfClubTMInst *prev = NULL;
SCPerfClubTMInst *temp = NULL;
suricata.yaml
enabled: no
profile: suricata
# Stats.log contains data from various counters of the suricata engine.
# The interval field (in seconds) tells after how long output will be written
# on the log file.
- stats:
enabled: yes
filename: stats1.log
interval: 40
defrag:
max-frags: 65535
prealloc: yes
(1-1/2)