コード例 #1
0
ファイル: alarm.c プロジェクト: ClausKlein/net-snmp
int
alarm_Activate(RMON_ENTRY_T * eptr)
{
    CRTL_ENTRY_T   *body = (CRTL_ENTRY_T *) eptr->body;
    int             ierr;

#if 0                           /* KUKU */
    kuku_sum = 0;
    kuku_cnt = 0;
#endif
    ierr = fetch_var_val(body->var_name.objid,
                         body->var_name.length, &body->last_abs_value);
    if (SNMP_ERR_NOERROR != ierr) {
        ag_trace("Can't fetch var_name");
        return ierr;
    }

    if (SAMPLE_TYPE_ABSOLUTE != body->sample_type) {
        /*
         * check startup alarm 
         */
        if (ALARM_RISING == body->startup_type ||
            ALARM_BOTH == body->startup_type) {
            if (body->last_abs_value >= body->rising_threshold) {
                event_api_send_alarm(1, eptr->ctrl_index,
                                     body->rising_event_index,
                                     body->var_name.objid,
                                     body->var_name.length,
                                     ALARM_RISING, body->value,
                                     body->rising_threshold,
                                     "Startup Rising");
            }
        }

        if (ALARM_FALLING == body->startup_type ||
            ALARM_BOTH == body->startup_type) {
            if (body->last_abs_value <= body->falling_threshold) {
                event_api_send_alarm(0, eptr->ctrl_index,
                                     body->falling_event_index,
                                     body->var_name.objid,
                                     body->var_name.length,
                                     ALARM_RISING, body->value,
                                     body->falling_threshold,
                                     "Startup Falling");
            }
        }

    }

    body->timer_id = snmp_alarm_register(body->interval, SA_REPEAT,
                                         alarm_check_var, eptr);
    return 0;
}
コード例 #2
0
ファイル: alarm.c プロジェクト: 274914765/C
static void alarm_check_var (unsigned int clientreg, void *clientarg)
{
    RMON_ENTRY_T *hdr_ptr;

    CRTL_ENTRY_T *body;

    u_long new_value;

    int ierr;

    hdr_ptr = (RMON_ENTRY_T *) clientarg;
    if (!hdr_ptr)
    {
        ag_trace ("Err: history_get_backet: hdr_ptr=NULL ? (Inserted in shock)");
        return;
    }

    body = (CRTL_ENTRY_T *) hdr_ptr->body;
    if (!body)
    {
        ag_trace ("Err: history_get_backet: body=NULL ? (Inserted in shock)");
        return;
    }

    if (RMON1_ENTRY_VALID != hdr_ptr->status)
    {
        ag_trace ("Err: history_get_backet when entry %d is not valid ?!!", (int) hdr_ptr->ctrl_index);
        snmp_alarm_unregister (body->timer_id);
        return;
    }

    ierr = fetch_var_val (body->var_name.objid, body->var_name.length, &new_value);
    if (SNMP_ERR_NOERROR != ierr)
    {
        ag_trace ("Err: Can't fetch var_name");
        return;
    }

    body->value = (SAMPLE_TYPE_ABSOLUTE == body->sample_type) ? new_value : new_value - body->last_abs_value;
    body->last_abs_value = new_value;
    /*
     * ag_trace ("fetched value=%ld check %ld", (long) new_value, (long) body->value); 
     */
#if 0                            /* KUKU */
    kuku_sum += body->value;
    kuku_cnt++;
#endif

    if (ALARM_RISING != body->prev_alarm &&
        body->value >= body->rising_threshold &&
        SNMP_ERR_NOERROR == event_api_send_alarm (1, hdr_ptr->ctrl_index,
                                                  body->rising_event_index,
                                                  body->var_name.objid,
                                                  body->var_name.length,
                                                  ALARM_RISING, body->value, body->rising_threshold, "Rising"))
        body->prev_alarm = ALARM_RISING;
    else if (ALARM_FALLING != body->prev_alarm &&
             body->value <= body->falling_threshold &&
             SNMP_ERR_NOERROR == event_api_send_alarm (0,
                                                       hdr_ptr->ctrl_index,
                                                       body->falling_event_index,
                                                       body->var_name.objid,
                                                       body->var_name.length, ALARM_RISING,
                                                       body->value, body->falling_threshold, "Falling"))
        body->prev_alarm = ALARM_FALLING;
}