예제 #1
0
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);
}
예제 #2
0
파일: time_classes.c 프로젝트: cduclos/core
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);
        }
    }
}