|
@@ -8,7 +8,6 @@
|
|
|
#include "jhash.h"
|
|
|
#include "strutil.h"
|
|
|
#include "fileutil.h"
|
|
|
-#include "scew.h"
|
|
|
|
|
|
#if 0
|
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
@@ -1475,97 +1474,6 @@ static int extract_filter_element(evt_engine_t* engine, rvc_slotfilter_t* filter
|
|
|
}
|
|
|
|
|
|
|
|
|
-static int extract_filter(evt_engine_t *engine, scew_element *filter_elem, int *p_log_type, int *p_ent_id, const char **p_entity, int *p_severity, int *p_sys_code, int *p_usr_code, const char **p_slotvar)
|
|
|
-{
|
|
|
- int log_type, ent_id, severity, sys_code, usr_code;
|
|
|
- const char *entity = NULL;
|
|
|
- const char *slotvar = NULL;
|
|
|
- scew_attribute *attr;
|
|
|
- attr = scew_element_attribute_by_name(filter_elem, "LogType");
|
|
|
- if (attr) {
|
|
|
- log_type = parse_log_type(scew_attribute_value(attr));
|
|
|
- if (log_type == -1) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("parse log type failed!");
|
|
|
- }
|
|
|
- return Error_Unexpect;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- log_type = Log_Ignore;
|
|
|
- }
|
|
|
-
|
|
|
- attr = scew_element_attribute_by_name(filter_elem, "Entity");
|
|
|
- if (attr) {
|
|
|
- ent_id = parse_ent_id(engine, scew_attribute_value(attr));
|
|
|
- if (ent_id == -1) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("parse entity id failed!");
|
|
|
- }
|
|
|
- return Error_Unexpect;
|
|
|
- }
|
|
|
- else {
|
|
|
- entity = scew_attribute_value(attr);
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- ent_id = -1;
|
|
|
- }
|
|
|
-
|
|
|
- attr = scew_element_attribute_by_name(filter_elem, "SeverityLevel");
|
|
|
- if (attr) {
|
|
|
- severity = parse_severity(scew_attribute_value(attr));
|
|
|
- if (severity == -1) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("parse severity level failed!");
|
|
|
- }
|
|
|
- return Error_Unexpect;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- severity = Severity_None;
|
|
|
- }
|
|
|
-
|
|
|
- attr = scew_element_attribute_by_name(filter_elem, "SysError");
|
|
|
- if (attr) {
|
|
|
- sys_code = parse_sys_code(scew_attribute_value(attr));
|
|
|
- if (sys_code == -1) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("parse sys code failed! sys_code: %s", scew_attribute_value(attr));
|
|
|
- }
|
|
|
- return Error_Unexpect;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- sys_code = Error_IgnoreAll;
|
|
|
- }
|
|
|
-
|
|
|
- attr = scew_element_attribute_by_name(filter_elem, "UserCode");
|
|
|
- if (attr) {
|
|
|
- usr_code = parse_usr_code(scew_attribute_value(attr));
|
|
|
- }
|
|
|
- else {
|
|
|
- usr_code = -2;
|
|
|
- }
|
|
|
-
|
|
|
- attr = scew_element_attribute_by_name(filter_elem, "ContentToVar");
|
|
|
- if (attr) {
|
|
|
- slotvar = scew_attribute_value(attr);
|
|
|
- }
|
|
|
- else {
|
|
|
- slotvar = NULL;
|
|
|
- }
|
|
|
-
|
|
|
- *p_log_type = log_type;
|
|
|
- *p_ent_id = ent_id;
|
|
|
- *p_severity = severity;
|
|
|
- *p_sys_code = sys_code;
|
|
|
- *p_usr_code = usr_code;
|
|
|
- *p_entity = entity;
|
|
|
- *p_slotvar = slotvar;
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
static int load_filter_element(evt_engine_t* engine, evt_slot_t* slot, rvc_slotfilter_t* filter_elem)
|
|
|
{
|
|
|
evt_filter_t* filter = ZALLOC_T(evt_filter_t);
|
|
@@ -1601,70 +1509,6 @@ static int load_filter_element(evt_engine_t* engine, evt_slot_t* slot, rvc_slotf
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int load_filter(evt_engine_t *engine, evt_slot_t *slot, scew_element *filter_elem)
|
|
|
-{
|
|
|
- evt_filter_t *filter = ZALLOC_T(evt_filter_t);
|
|
|
- const char *entity = NULL;
|
|
|
- const char *slotvar = NULL;
|
|
|
- int rc = extract_filter(engine, filter_elem, &filter->log_type, &filter->ent_id, (const char**)&entity, &filter->severity, &filter->sys_code, &filter->user_code, &slotvar);
|
|
|
- if (rc != 0) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("extract filter failed!");
|
|
|
- }
|
|
|
- return rc;
|
|
|
- }
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("filter->log_type = %d, filter->ent_id = %d, entity = %s, filter->severity = %d, filter->sys_code = %d, filter->user_code = 0x%08x, slotvar = %s.", filter->log_type, filter->ent_id, entity, filter->severity, filter->sys_code, filter->user_code, slotvar);
|
|
|
- if (slotvar) {
|
|
|
- int i;
|
|
|
- for (i = 0; i < slot->arr_slotvar->nelts; ++i) {
|
|
|
- evt_slotvar_t *var = ARRAY_IDX(slot->arr_slotvar, i, evt_slotvar_t *);
|
|
|
- if (_stricmp(var->name, slotvar) == 0) {
|
|
|
- filter->content_to_var = var;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- if (!filter->content_to_var) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("cannot find %s slotvar!", slotvar);
|
|
|
- }
|
|
|
- return -1;
|
|
|
- }
|
|
|
- }
|
|
|
- filter->entity = entity ? _strdup(entity) : NULL;
|
|
|
- filter->key.listen_id = 0;
|
|
|
- filter->owner = slot;
|
|
|
- ARRAY_PUSH(slot->arr_filter, evt_filter_t*) = filter;
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-static int load_slotvar(evt_engine_t *engine, evt_slot_t *slot, scew_element *slotvar_elem)
|
|
|
-{
|
|
|
- evt_slotvar_t *slotvar = ZALLOC_T(evt_slotvar_t);
|
|
|
- scew_attribute *attr;
|
|
|
- attr = scew_element_attribute_by_name(slotvar_elem, "Name");
|
|
|
- if (attr) {
|
|
|
- slotvar->name = _strdup(scew_attribute_value(attr));
|
|
|
- }
|
|
|
- else {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("not found slot var Name property!");
|
|
|
- }
|
|
|
- return -1;
|
|
|
- }
|
|
|
- attr = scew_element_attribute_by_name(slotvar_elem, "Value");
|
|
|
- if (attr) {
|
|
|
- slotvar->init_value = _strdup(scew_attribute_value(attr));
|
|
|
- slotvar->current_value = _strdup(slotvar->init_value);
|
|
|
- }
|
|
|
- else {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("not found slot var Value property!");
|
|
|
- }
|
|
|
- return -1;
|
|
|
- }
|
|
|
- ARRAY_PUSH(slot->arr_slotvar, evt_slotvar_t*) = slotvar;
|
|
|
- return 0;
|
|
|
-}
|
|
|
|
|
|
static int load_slotvar_element(evt_engine_t* engine, evt_slot_t* slot, rvc_slotvar_t* slotvar_elem)
|
|
|
{
|
|
@@ -1831,162 +1675,6 @@ static int load_slot_arrays(evt_engine_t* engine, const char* ns, rvc_slot_t* tn
|
|
|
}
|
|
|
|
|
|
|
|
|
-static int load_slot(evt_engine_t *engine, const char *ns, scew_element *slot_elem)
|
|
|
-{
|
|
|
- evt_slot_t *slot = ZALLOC_T(evt_slot_t);
|
|
|
- if (!slot){
|
|
|
- return Error_Resource;
|
|
|
- }
|
|
|
- INIT_HLIST_NODE(&slot->hentry);
|
|
|
- slot->arr_filter = array_make(-1, sizeof(evt_filter_t*));
|
|
|
- slot->arr_reset = array_make(-1, sizeof(char*));
|
|
|
- slot->arr_rref_reset = array_make(-1, sizeof(evt_slot_t*));
|
|
|
- slot->arr_ref_reset = array_make(-1, sizeof(evt_slot_t*));
|
|
|
- slot->arr_ref_trigger = array_make(-1, sizeof(evt_trigger_t*));
|
|
|
- slot->arr_slotvar = array_make(-1, sizeof(evt_slotvar_t*));
|
|
|
- slot->parent = engine;
|
|
|
-
|
|
|
- char* code = NULL;
|
|
|
- scew_list* slotval_list = NULL;
|
|
|
- scew_list* filter_list = NULL;
|
|
|
- scew_list* reset_list = NULL;
|
|
|
-
|
|
|
- scew_attribute *attr = scew_element_attribute_by_name(slot_elem, "Code");
|
|
|
- if (!attr) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("slot miss attribute code!");
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
- else {
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("scew_attribute_name is %s.", scew_attribute_name(attr));
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("scew_attribute_value is %s.", scew_attribute_value(attr));
|
|
|
- code = parse_code(ns, scew_attribute_value(attr));
|
|
|
- if (!code) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("parse code failed!");
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
- else {
|
|
|
- slot->key.code = code;
|
|
|
- slot->key.index_hash_code = hash32_str(code, HASH32_STR_INIT);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- attr = scew_element_attribute_by_name(slot_elem, "Timeout");
|
|
|
- if (attr) {
|
|
|
- evt_expire_t *expire = ZALLOC_T(evt_expire_t);
|
|
|
- if (!expire){
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
- expire->timeout = parse_timeout_value(scew_attribute_value(attr));
|
|
|
- if (expire->timeout < 0) {
|
|
|
- FREE(expire);
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
-
|
|
|
- if (expire->timeout == 0) {
|
|
|
- FREE(expire);
|
|
|
- }
|
|
|
- else {
|
|
|
- expire->parent = slot;
|
|
|
- expire->timer_id = 0;
|
|
|
- slot->timer = expire;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- attr = scew_element_attribute_by_name(slot_elem, "OnceTrigger");
|
|
|
- if (attr) {
|
|
|
- slot->once = parse_bool(scew_attribute_value(attr));
|
|
|
- }
|
|
|
- else {
|
|
|
- slot->once = 0;
|
|
|
- }
|
|
|
-
|
|
|
- slotval_list = scew_element_list_by_name(slot_elem, "Var");
|
|
|
- if (slotval_list) {
|
|
|
- for (scew_list *it = scew_list_first(slotval_list); it; it = scew_list_next(it)) {
|
|
|
- scew_element *elem = (scew_element *)scew_list_data(it);
|
|
|
- int rc = load_slotvar(engine, slot, elem);
|
|
|
- if (rc != 0) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("load slot var failed!%s", slot->key.code);
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
- }
|
|
|
- scew_list_free(slotval_list);
|
|
|
- }
|
|
|
-
|
|
|
- filter_list = scew_element_list_by_name(slot_elem, "Filter");
|
|
|
- if (filter_list) {
|
|
|
- for (scew_list *it = scew_list_first(filter_list); it; it = scew_list_next(it)) {
|
|
|
- scew_element *elem = (scew_element *)scew_list_data(it);
|
|
|
- int rc = load_filter(engine, slot, elem);
|
|
|
- if (rc != 0) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("load filter failed!");
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
- }
|
|
|
- scew_list_free(filter_list);
|
|
|
- }
|
|
|
-
|
|
|
- reset_list = scew_element_list_by_name(slot_elem, "Reset");
|
|
|
- if (reset_list) {
|
|
|
- for (scew_list *it = scew_list_first(reset_list); it; it = scew_list_next(it)) {
|
|
|
- scew_element *elem = (scew_element *)scew_list_data(it);
|
|
|
- attr = scew_element_attribute_by_name(elem, "Source");
|
|
|
- if (attr) {
|
|
|
- char *source = parse_code(ns, scew_attribute_value(attr));
|
|
|
- if (!source) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("parse code of Reset tag Source attribute failed!");
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
- else {
|
|
|
- ARRAY_PUSH(slot->arr_reset, char*) = source;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Reset tag miss source attribute!");
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
- }
|
|
|
- scew_list_free(reset_list);
|
|
|
- }
|
|
|
- if (!slot->timer){
|
|
|
- slot->once = 1;
|
|
|
- }
|
|
|
-
|
|
|
- if (slot_find(engine->slot_ht, &slot->key)) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("duplicate slot %s", slot->key.code);
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
-
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%s:%d engine->slot_ht->size = %d, engine->slot_ht count = %d.", __FUNCTION__, __LINE__, engine->slot_ht->size, htable_get_count(engine->slot_ht));
|
|
|
-
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("slot->key.code = %s, slot->key.index_hash_code = %d.", slot->key.code, slot->key.index_hash_code);
|
|
|
-
|
|
|
- slot_add(engine->slot_ht, slot);
|
|
|
-
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%s:%d engine->slot_ht->size = %d, engine->slot_ht count = %d.", __FUNCTION__, __LINE__, engine->slot_ht->size, htable_get_count(engine->slot_ht));
|
|
|
-
|
|
|
- return 0;
|
|
|
-
|
|
|
-on_error:
|
|
|
- slot_free(slot);
|
|
|
- return Error_Unexpect;
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
static int load_slot_element_rule(evt_trigger_t* trigger, const char* ns, rvc_triggerslot_t* slot_elem)
|
|
|
{
|
|
|
evt_slot_rule_t* rule = ZALLOC_T(evt_slot_rule_t);
|
|
@@ -2027,56 +1715,9 @@ on_error:
|
|
|
return Error_Unexpect;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-static int load_slot_rule(evt_trigger_t *trigger, const char *ns, scew_element *slot_elem)
|
|
|
-{
|
|
|
- evt_slot_rule_t *rule = ZALLOC_T(evt_slot_rule_t);
|
|
|
- scew_attribute *attr = scew_element_attribute_by_name(slot_elem, "Code");
|
|
|
- if (attr) {
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Slot Code value is %s.", scew_attribute_value(attr));
|
|
|
- rule->code = parse_code(ns, scew_attribute_value(attr));
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("after parse_code, rule->code is %s.", rule->code);
|
|
|
- }
|
|
|
- else {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("slot rule parse code attribute failed!");
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
-
|
|
|
- attr = scew_element_attribute_by_name(slot_elem, "Positive");
|
|
|
- if (attr) {
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Slot Positive value is %s.", scew_attribute_value(attr));
|
|
|
- rule->positive = parse_bool(scew_attribute_value(attr));
|
|
|
- if (rule->positive == -1) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("slot rule parse positive attr failed!");
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- rule->positive = 1;
|
|
|
- }
|
|
|
-
|
|
|
- attr = scew_element_attribute_by_name(slot_elem, "Message");
|
|
|
- if (attr) {
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Slot Message value is %s.", scew_attribute_value(attr));
|
|
|
- rule->message = _strdup(scew_attribute_value(attr));
|
|
|
- }
|
|
|
- rule->parent = trigger;
|
|
|
- list_add_tail(&rule->entry, &trigger->slot_rule_list);
|
|
|
- return 0;
|
|
|
-
|
|
|
-on_error:
|
|
|
- slot_rule_free(rule);
|
|
|
- return Error_Unexpect;
|
|
|
-}
|
|
|
-
|
|
|
static int load_sysvar_element_rule(evt_engine_t* engine, evt_trigger_t* trigger, rvc_triggersysvar_t* sysvar_elem)
|
|
|
{
|
|
|
evt_sysvar_rule_t* rule = ZALLOC_T(evt_sysvar_rule_t);
|
|
|
- scew_list* state_list = NULL;
|
|
|
|
|
|
if (sysvar_elem->strCode) {
|
|
|
char* code = sysvar_elem->strCode;
|
|
@@ -2140,80 +1781,6 @@ static int load_sysvar_element_rule(evt_engine_t* engine, evt_trigger_t* trigger
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int load_sysvar_rule(evt_engine_t *engine, evt_trigger_t *trigger, scew_element *sysvar_elem)
|
|
|
-{
|
|
|
- evt_sysvar_rule_t *rule = ZALLOC_T(evt_sysvar_rule_t);
|
|
|
- scew_list* state_list = NULL;
|
|
|
-
|
|
|
- scew_attribute *attr = scew_element_attribute_by_name(sysvar_elem, "Code");
|
|
|
- if (attr) {
|
|
|
- char *code = (char*)scew_attribute_value(attr);
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("sysvar code is %s.", code);
|
|
|
- evt_sysvar_key_t key;
|
|
|
- key.code = code;
|
|
|
- key.index_hash_code = hash32_str(code, HASH32_STR_INIT);
|
|
|
- evt_sysvar_t *sysvar = sysvar_find(engine->sysvar_ht, &key);
|
|
|
- if (!sysvar) {
|
|
|
- sysvar = ZALLOC_T(evt_sysvar_t);
|
|
|
- INIT_HLIST_NODE(&sysvar->hentry);
|
|
|
- sysvar->arr_ref_rule = array_make(-1, sizeof(evt_sysvar_rule_t*));
|
|
|
- sysvar->parent = engine;
|
|
|
- sysvar->key.code = _strdup(code);
|
|
|
- sysvar->key.index_hash_code = key.index_hash_code;
|
|
|
- sysvar_add(engine->sysvar_ht, sysvar);
|
|
|
- }
|
|
|
- ARRAY_PUSH(sysvar->arr_ref_rule, evt_sysvar_rule_t*) = rule;
|
|
|
- rule->ref_sysvar = sysvar;
|
|
|
- }
|
|
|
- else {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("load sysvar rule, undefine code attr!");
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
-
|
|
|
- attr = scew_element_attribute_by_name(sysvar_elem, "Positive");
|
|
|
- if (attr) {
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("sysvar Positive is %s.", (char*)scew_attribute_value(attr));
|
|
|
- rule->positive = parse_bool((char*)scew_attribute_value(attr));
|
|
|
- }
|
|
|
- else {
|
|
|
- rule->positive = 1;
|
|
|
- }
|
|
|
- rule->parent = trigger;
|
|
|
- rule->arr_state = array_make(0, sizeof(char*));
|
|
|
- state_list = scew_element_children(sysvar_elem);
|
|
|
- if (state_list) {
|
|
|
- for (scew_list *it = scew_list_first(state_list); it; it = scew_list_next(it)) {
|
|
|
- scew_element *state_elem = (scew_element *)scew_list_data(it);
|
|
|
- const char *state = scew_element_contents(state_elem);
|
|
|
- if (state) {
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("add sysvar state %s.", state);
|
|
|
- ARRAY_PUSH(rule->arr_state, char*) = _strdup(state);
|
|
|
- }
|
|
|
- else {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("sysvar state is NULL, add it.");
|
|
|
- ARRAY_PUSH(rule->arr_state, char*) = NULL;
|
|
|
- }
|
|
|
- }
|
|
|
- scew_list_first(state_list);
|
|
|
- }
|
|
|
- else {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("trigger sysvar does not have state children!");
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
-
|
|
|
- list_add_tail(&rule->entry, &trigger->sysvar_list);
|
|
|
-
|
|
|
- return 0;
|
|
|
-
|
|
|
-on_error:
|
|
|
- sysvar_rule_free(rule);
|
|
|
- return Error_Unexpect;
|
|
|
-}
|
|
|
-
|
|
|
void SetLogType(int nIslog)
|
|
|
{
|
|
|
nIslog = nIslog;
|
|
@@ -2341,244 +1908,6 @@ static int load_trigger_arrays(evt_engine_t* engine, const char* ns, rvc_trigger
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int load_trigger(evt_engine_t *engine, const char *ns, scew_element *trigger_elem)
|
|
|
-{
|
|
|
- evt_trigger_t *trigger = ZALLOC_T(evt_trigger_t);
|
|
|
- scew_attribute *attr;
|
|
|
- scew_list *slot_list, *sysvar_list;
|
|
|
- scew_element *delayer;
|
|
|
- INIT_LIST_HEAD(&trigger->slot_rule_list);
|
|
|
- INIT_LIST_HEAD(&trigger->sysvar_list);
|
|
|
- attr = scew_element_attribute_by_name(trigger_elem, "LogType");
|
|
|
- if (attr) {
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("LogType value is %s.", scew_attribute_value(attr));
|
|
|
- trigger->log_type = parse_log_type(scew_attribute_value(attr));
|
|
|
- if (trigger->log_type == -1) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("trigger log type parse failed!");
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("trigger LogType undefined!");
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
-
|
|
|
- attr = scew_element_attribute_by_name(trigger_elem, "SeverityLevel");
|
|
|
- if (attr) {
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("SeverityLevel value is %s.", scew_attribute_value(attr));
|
|
|
- trigger->severity_level = parse_severity(scew_attribute_value(attr));
|
|
|
- if (trigger->severity_level == -1) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("trigger parse severity level failed!");
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- if (trigger->log_type == Log_Event || trigger->log_type == Log_Error) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("trigger LogType undefined!");
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- attr = scew_element_attribute_by_name(trigger_elem, "SysError");
|
|
|
- if (attr) {
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("SysError value is %s.", scew_attribute_value(attr));
|
|
|
- trigger->sys_code = parse_sys_code(scew_attribute_value(attr));
|
|
|
- if (trigger->sys_code == -1) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("trigger parse sys code failed! sys_code: %s", scew_attribute_value(attr));
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- if (trigger->log_type == Log_Error || trigger->log_type == Log_Warning) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("trigger parse sys code undefined!");
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- attr = scew_element_attribute_by_name(trigger_elem, "UserCode");
|
|
|
- if (attr) {
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("UserCode value is %s.", scew_attribute_value(attr));
|
|
|
- trigger->user_code = parse_usr_code(scew_attribute_value(attr));
|
|
|
- }
|
|
|
- else {
|
|
|
- if (trigger->log_type == Log_Event || trigger->log_type == Log_Error || trigger->log_type == Log_Warning) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("trigger parse user code undefined!");
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- attr = scew_element_attribute_by_name(trigger_elem, "Message");
|
|
|
- if (attr) {
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Message value is %s.", scew_attribute_value(attr));
|
|
|
- trigger->msg = _strdup(scew_attribute_value(attr));
|
|
|
- }
|
|
|
-
|
|
|
- slot_list = scew_element_list_by_name(trigger_elem, "Slot");
|
|
|
- if (slot_list) {
|
|
|
- for (scew_list *it = scew_list_first(slot_list); it; it = scew_list_next(it)) {
|
|
|
- scew_element *slot_elem = (scew_element*)scew_list_data(it);
|
|
|
- int rc = load_slot_rule(trigger, ns, slot_elem);
|
|
|
- if (rc != 0) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("load slot rule failed!");
|
|
|
- }
|
|
|
- scew_list_free(slot_list);
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
- }
|
|
|
- scew_list_free(slot_list);
|
|
|
- }
|
|
|
-
|
|
|
- sysvar_list = scew_element_list_by_name(trigger_elem, "SysVar");
|
|
|
- if (sysvar_list) {
|
|
|
- for (scew_list *it = scew_list_first(sysvar_list); it; it = scew_list_next(it)) {
|
|
|
- scew_element *sysvar_elem = (scew_element*)scew_list_data(it);
|
|
|
- int rc = load_sysvar_rule(engine, trigger, sysvar_elem);
|
|
|
- if (rc != 0) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("load sysvar rule failed!");
|
|
|
- }
|
|
|
- scew_list_free(sysvar_list);
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
- }
|
|
|
- scew_list_free(sysvar_list);
|
|
|
- }
|
|
|
-
|
|
|
- delayer = scew_element_by_name(trigger_elem, "Delayer");
|
|
|
- if (delayer) {
|
|
|
- trigger->delay_ms = parse_timeout_value(scew_element_contents(delayer));
|
|
|
- trigger->delay_timer_id = -1;
|
|
|
- }
|
|
|
- else {
|
|
|
- trigger->delay_ms = 0;
|
|
|
- trigger->delay_timer_id = -1;
|
|
|
- }
|
|
|
- trigger->parent = engine;
|
|
|
- list_add_tail(&trigger->entry, &engine->trigger_list);
|
|
|
-
|
|
|
- return 0;
|
|
|
-
|
|
|
-on_error:
|
|
|
- trigger_free(trigger);
|
|
|
- return Error_Unexpect;
|
|
|
-}
|
|
|
-
|
|
|
-static int load_file(evt_engine_t *engine, const char *filename)
|
|
|
-{
|
|
|
- scew_reader *reader = NULL;
|
|
|
- scew_parser *parser = NULL;
|
|
|
- scew_tree *tree = NULL;
|
|
|
- scew_element *root;
|
|
|
- const char *ns;
|
|
|
- char tmp_ns[MAX_PATH];
|
|
|
- int rc = Error_Param;
|
|
|
-
|
|
|
- scew_attribute* attr = NULL;
|
|
|
- scew_element* elem = NULL;
|
|
|
-
|
|
|
- reader = scew_reader_file_create(filename);
|
|
|
- if (!reader) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("open file %s failed!", filename);
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
- parser = scew_parser_create();
|
|
|
- tree = scew_parser_load(parser, reader);
|
|
|
- if (!tree) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("read file %s failed! parser xml failed", filename);
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
- root = scew_tree_root(tree);
|
|
|
- if (!root) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("%s file does not have root element!", filename);
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
-
|
|
|
- attr = scew_element_attribute_by_name(root, "xmlns");
|
|
|
- if (attr) {
|
|
|
- ns = (const char*)scew_attribute_value(attr);
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("scew_element_attribute_by_name xmlns success, ns is %s.", ns);
|
|
|
- }
|
|
|
- else {
|
|
|
- const char *s = strrchr(filename, SPLIT_SLASH)+1;
|
|
|
- const char *e = strrchr(filename, '.');
|
|
|
- memcpy(tmp_ns, s, e-s);
|
|
|
- tmp_ns[e-s] = 0;
|
|
|
- ns = tmp_ns;
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("scew_element_attribute_by_name xmlns failed, ns is %s.", ns);
|
|
|
- }
|
|
|
-
|
|
|
- elem = scew_element_by_name(root, "SlotList");
|
|
|
- if (elem) {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("element SlotList contents is %s.", scew_element_contents(elem));
|
|
|
- scew_list *slot_list = scew_element_children(elem);
|
|
|
- if (slot_list) {
|
|
|
- for (scew_list *it = scew_list_first(slot_list); it; it = scew_list_next(it)) {
|
|
|
- scew_element *slot_elem = (scew_element *)scew_list_data(it);
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("slot_elem element name is %s, count is %d.", scew_element_name(slot_elem), scew_element_count(slot_elem));
|
|
|
- if (load_slot(engine, ns, slot_elem) != 0) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("load slot failed!");
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- elem = scew_element_by_name(root, "TriggerList");
|
|
|
- if (elem) {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("element TriggerList contents is %s.", scew_element_contents(elem));
|
|
|
- scew_list *trigger_list = scew_element_children(elem);
|
|
|
- if (trigger_list) {
|
|
|
- for (scew_list *it = scew_list_first(trigger_list); it; it = scew_list_next(it)) {
|
|
|
- scew_element *trigger_elem = (scew_element*)scew_list_data(it);
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("the number of children of %s is %d.", scew_element_name(trigger_elem), scew_element_count(trigger_elem));
|
|
|
- if (load_trigger(engine, ns, trigger_elem) != 0) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("load trigger failed!");
|
|
|
- }
|
|
|
- goto on_error;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- rc = 0;
|
|
|
-
|
|
|
-on_error:
|
|
|
- if (tree) {
|
|
|
- scew_tree_free(tree);
|
|
|
- }
|
|
|
- if (parser) {
|
|
|
- scew_parser_free(parser);
|
|
|
- }
|
|
|
- if (reader) {
|
|
|
- scew_reader_close(reader);
|
|
|
- }
|
|
|
- return rc;
|
|
|
-}
|
|
|
-
|
|
|
|
|
|
static int load_strategy_array(evt_engine_t* engine, slot_trigger_elem_t* pelement)
|
|
|
{
|
|
@@ -2644,43 +1973,6 @@ void evt_engine_destroy(evt_engine_t *engine)
|
|
|
FREE(engine);
|
|
|
}
|
|
|
|
|
|
-int evt_engine_load(evt_engine_t *engine, int nfile, const char **files)
|
|
|
-{
|
|
|
- int i;
|
|
|
- int rc = 0;
|
|
|
-
|
|
|
- for (i = 0; i < nfile; ++i) {
|
|
|
- const char* filename = files[i];
|
|
|
- assert(filename);
|
|
|
- rc = load_file(engine, filename);
|
|
|
- if (rc != 0) {
|
|
|
- if (nIslog) {
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("load file %s failed!", filename);
|
|
|
- }
|
|
|
- return rc;
|
|
|
- }
|
|
|
- else {
|
|
|
- if (nIslog) {
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("%s loaded!", filename);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- rc = build_ref(engine);
|
|
|
- if (rc != 0) {
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("build ref failed!");
|
|
|
- }
|
|
|
- return rc;
|
|
|
- }
|
|
|
-
|
|
|
- if (nIslog){
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("build ref ok!");
|
|
|
- }
|
|
|
-
|
|
|
- return rc;
|
|
|
-}
|
|
|
-
|
|
|
int evt_engine_load(evt_engine_t* engine, int* indexarr, int icount, slot_trigger_elem_t* parr, int iarrlen)
|
|
|
{
|
|
|
int rc = 0;
|