static void RemoveTimeClass(EvalContext *ctx, const char* tags) { Rlist *tags_rlist = RlistFromSplitString(tags, ','); ClassTableIterator *iter = EvalContextClassTableIteratorNewGlobal(ctx, NULL, true, true); StringSet *global_matches = ClassesMatching(ctx, iter, ".*", tags_rlist, false); ClassTableIteratorDestroy(iter); StringSetIterator it = StringSetIteratorInit(global_matches); const char *element = NULL; while ((element = StringSetIteratorNext(&it))) { EvalContextClassRemove(ctx, NULL, element); } StringSetDestroy(global_matches); RlistDestroy(tags_rlist); }
static void RemoveTimeClass(EvalContext *ctx, time_t time) { // The first element is the local timezone const char* tz_prefix[2] = { "", "GMT_" }; const char* tz_function[2] = { "localtime_r", "gmtime_r" }; struct tm tz_parsed_time[2]; const struct tm* tz_tm[2] = { localtime_r(&time, &(tz_parsed_time[0])), gmtime_r(&time, &(tz_parsed_time[1])) }; for (int tz = 0; tz < 2; tz++) { int i, j; char buf[CF_BUFSIZE]; if (tz_tm[tz] == NULL) { Log(LOG_LEVEL_ERR, "Unable to parse passed time. (%s: %s)", tz_function[tz], GetErrorStr()); return; } /* Lifecycle */ for( i = 0; i < 3; i++ ) { snprintf(buf, CF_BUFSIZE, "%sLcycle_%d", tz_prefix[tz], i); EvalContextClassRemove(ctx, NULL, buf); } /* Year */ snprintf(buf, CF_BUFSIZE, "%sYr%04d", tz_prefix[tz], tz_parsed_time[tz].tm_year - 1 + 1900); EvalContextClassRemove(ctx, NULL, buf); snprintf(buf, CF_BUFSIZE, "%sYr%04d", tz_prefix[tz], tz_parsed_time[tz].tm_year + 1900); EvalContextClassRemove(ctx, NULL, buf); /* Month */ for( i = 0; i < 12; i++ ) { snprintf(buf, CF_BUFSIZE, "%s%s", tz_prefix[tz], MONTH_TEXT[i]); EvalContextClassRemove(ctx, NULL, buf); } /* Day of week */ for( i = 0; i < 7; i++ ) { snprintf(buf, CF_BUFSIZE, "%s%s", tz_prefix[tz], DAY_TEXT[i]); EvalContextClassRemove(ctx, NULL, buf); } /* Day */ for( i = 1; i < 32; i++ ) { snprintf(buf, CF_BUFSIZE, "%sDay%d", tz_prefix[tz], i); EvalContextClassRemove(ctx, NULL, buf); } /* Shift */ for( i = 0; i < 4; i++ ) { snprintf(buf, CF_BUFSIZE, "%s%s", tz_prefix[tz], SHIFT_TEXT[i]); EvalContextClassRemove(ctx, NULL, buf); } /* Hour */ for( i = 0; i < 24; i++ ) { snprintf(buf, CF_BUFSIZE, "%sHr%02d", tz_prefix[tz], i); EvalContextClassRemove(ctx, NULL, buf); snprintf(buf, CF_BUFSIZE, "%sHr%d", tz_prefix[tz], i); EvalContextClassRemove(ctx, NULL, buf); } /* Quarter */ for( i = 1; i <= 4; i++ ) { snprintf(buf, CF_BUFSIZE, "%sQ%d", tz_prefix[tz], i); EvalContextClassRemove(ctx, NULL, buf); for( j = 0; j < 24; j++ ) { snprintf(buf, CF_BUFSIZE, "%sHr%02d_Q%d", tz_prefix[tz], j, i); EvalContextClassRemove(ctx, NULL, buf); } } /* Minute */ for( i = 0; i < 60; i++ ) { snprintf(buf, CF_BUFSIZE, "%sMin%02d", tz_prefix[tz], i); EvalContextClassRemove(ctx, NULL, buf); } for( i = 0; i < 60; i += 5 ) { snprintf(buf, CF_BUFSIZE, "%sMin%02d_%02d", tz_prefix[tz], i, (i + 5) % 60); EvalContextClassRemove(ctx, NULL, buf); } } }