Example #1
0
T_KRHDITable *kr_hdi_table_construct(T_KRShmHDI *shm_hdi, T_KRModule *datamodule)
{
    T_KRHDITable *krhditable = kr_calloc(sizeof(T_KRHDITable));
    if (krhditable == NULL) {
        KR_LOG(KR_LOGERROR, "kr_calloc krhditable failed!");
        return NULL;
    }
    krhditable->ptShmHDIs = shm_hdi;
    krhditable->lHDICnt = shm_hdi->lHDIDefCnt;
    krhditable->ptHDITable = \
      kr_hashtable_new_full(kr_long_hash, kr_long_equal, \
                            NULL, (KRDestroyNotify )kr_hdi_destruct);
    
    int i = 0;
    T_KRHDI *krhdi = NULL;
    for (i=0; i<shm_hdi->lHDIDefCnt; ++i) {
        krhdi = kr_hdi_construct(&shm_hdi->stShmHDIDef[i], datamodule);
        if (krhdi == NULL) {
            KR_LOG(KR_LOGERROR, "kr_hdi_construct [%d] failed!", i);
            kr_hashtable_destroy(krhditable->ptHDITable);
            kr_free(krhditable);
            return NULL;
        }
        kr_hashtable_insert(krhditable->ptHDITable, &krhdi->lHDIId, krhdi);
    }
    krhditable->tConstructTime = shm_hdi->tLastLoadTime;
    
    return krhditable;    
}
Example #2
0
T_KRData* kr_data_construct(T_KRParam *ptParam, T_KRModule *ptModule,
        KRGetTypeFunc pfGetType, KRGetValueFunc pfGetValue)
{
    T_KRData *ptData = kr_malloc(sizeof(T_KRData));
    if (ptData == NULL) {
        KR_LOG(KR_LOGERROR, "kr_malloc ptData Failed!");
        return NULL;
    }
    ptData->ptModule = ptModule;
    ptData->pfGetType = pfGetType;
    ptData->pfGetValue = pfGetValue;

    ptData->ptItemTable = kr_hashtable_new_full(
                              (KRHashFunc )kr_string_hash, \
                              (KREqualFunc )kr_string_equal,\
                              NULL, 
                             (KRDestroyNotify )kr_data_item_free);
    if (ptData->ptItemTable == NULL) {
        KR_LOG(KR_LOGERROR, "kr_hashtable_new_full item table Failed!");
        return NULL;
    }

    //load data item according parameter
    if (kr_data_item_load(ptData, ptParam) != 0) {
        KR_LOG(KR_LOGERROR, "load item table error!");
        return NULL;
    }
    
    ptData->tConstructTime = kr_param_load_time(ptParam);
    
    return ptData;
}
Example #3
0
/* initialize rule detecting context */
T_KRContext *kr_context_init(T_KRContextEnv *ptEnv)
{
    T_KRContext *ptContext = kr_calloc(sizeof(T_KRContext));
    if (ptContext == NULL) {
        KR_LOG(KR_LOGERROR, "kr_calloc ptContext failed!");
        return NULL;
    }

    ptContext->ptEnv = ptEnv;

    /* reconnect database in thread */
    T_DbsEnv *ptDbsEnv = ((T_KRContextEnv *)ptEnv)->ptDbsEnv;
    ptContext->ptDbsEnv = dbsConnect(ptDbsEnv->dsn, ptDbsEnv->user, ptDbsEnv->pass);
    if (ptContext->ptDbsEnv == NULL) {
        KR_LOG(KR_LOGERROR, "dbsConnect [%s] [%s] [%s] failed!", \
                ptDbsEnv->dsn, ptDbsEnv->user, ptDbsEnv->pass);
        kr_free(ptContext);
        return NULL;
    }

    /* construct data */
    ptContext->ptData = kr_data_construct(ptEnv->ptParam, ptEnv->dataModule, 
            ptDbsEnv, ptEnv->ptHDICache, kr_data_get_type, kr_data_get_value);
    if (ptContext->ptData == NULL) {
        KR_LOG(KR_LOGERROR, "kr_data_construct failed!");
        dbsDisconnect(ptContext->ptDbsEnv);
        kr_free(ptContext);
        return NULL;
    }
    
    /* construct flow */
    
    return ptContext;
}
Example #4
0
/*static dataitem*/
T_KRDDI *kr_ddi_construct(T_KRParamDDIDef *ptParamDDIDef, T_KRModule *ptModule,
        KRGetTypeFunc pfGetType, KRGetValueFunc pfGetValue)
{
    T_KRDDI *ptDDI = kr_calloc(sizeof(T_KRDDI));
    if (ptDDI == NULL) {
        KR_LOG(KR_LOGERROR, "kr_calloc ptDDI failed!");
        return NULL;
    }
    ptDDI->ptParamDDIDef = ptParamDDIDef;
    ptDDI->lDDIId = ptParamDDIDef->lDdiId;
    ptDDI->ptDDICalc = kr_calc_construct(ptParamDDIDef->caDdiFilterFormat[0], \
            ptParamDDIDef->caDdiFilterString, pfGetType, pfGetValue);
    ptDDI->eValueType = ptParamDDIDef->caDdiValueType[0];
    /*get the retrieve data function from module*/
    if (ptParamDDIDef->caDdiAggrFunc[0] != '\0') {
        ptDDI->pfDDIAggr = (KRDDIAggrFunc )kr_module_symbol(ptModule,
                ptParamDDIDef->caDdiAggrFunc);
        if (ptDDI->pfDDIAggr == NULL) {
            KR_LOG(KR_LOGERROR, "kr_module_symbol [%s] error!", \
                    ptParamDDIDef->caDdiAggrFunc);
            return NULL;
        }
    }
    ptDDI->eValueInd = KR_VALUE_UNSET;
    ptDDI->ptRelated = kr_hashtable_new(kr_pointer_hash, kr_pointer_equal);
    
    return ptDDI;
}
Example #5
0
static int kr_data_item_load(T_KRData *ptData, T_KRParam *ptParam)
{
    //load set
    if (kr_param_object_foreach(ptParam, KR_PARAM_SET, 
                _kr_data_item_set_load, ptData) != 0) {
        KR_LOG(KR_LOGERROR, "kr_data_item_set_load Error!");
        return -1;
    }

    //load sdi
    if (kr_param_object_foreach(ptParam, KR_PARAM_SDI, 
                _kr_data_item_sdi_load, ptData) != 0) {
        KR_LOG(KR_LOGERROR, "kr_data_item_sdi_load Error!");
        return -1;
    }

    //load ddi
    if (kr_param_object_foreach(ptParam, KR_PARAM_DDI, 
                _kr_data_item_ddi_load, ptData) != 0) {
        KR_LOG(KR_LOGERROR, "kr_data_item_ddi_load Error!");
        return -1;
    }

    //load hdi
    if (kr_param_object_foreach(ptParam, KR_PARAM_HDI, 
                _kr_data_item_hdi_load, ptData) != 0) {
        KR_LOG(KR_LOGERROR, "kr_data_item_hdi_load Error!");
        return -1;
    }

    return 0;
}
int kr_param_persist_file_load(T_KRParam *ptParam, char *psParamVersion, char *psParamClassName, void *ptResource)
{
    int nRet = 0;
    cJSON *root = (cJSON *)ptResource;
    
    cJSON *children = cJSON_GetObjectItem(root, psParamClassName);
    if (children == NULL) {
        KR_LOG(KR_LOGDEBUG, "no param class %s found!", psParamClassName);
        return nRet;
    }
    for (int i=0; i<cJSON_GetArraySize(children); ++i) {
        cJSON *child = cJSON_GetArrayItem(children, i);
        
        char *psParamObjectKey = cJSON_GetString(child, "param_object_key");
        char *psParamObjectString = cJSON_GetString(child, "param_object_string");
        
        nRet = kr_param_object_add(ptParam, psParamClassName, 
                psParamObjectKey, psParamObjectString);
        if (nRet != 0) {
            KR_LOG(KR_LOGERROR, "kr_param_object_add %s failed!", psParamObjectKey);
            return -1;
        }
    }

    return nRet;
}
Example #7
0
T_KRHDITable *kr_hdi_table_construct(T_KRParamHDI *ptParamHDI, T_KRModule *ptModule)
{
    T_KRHDITable *ptHdiTable = kr_calloc(sizeof(T_KRHDITable));
    if (ptHdiTable == NULL) {
        KR_LOG(KR_LOGERROR, "kr_calloc ptHdiTable failed!");
        return NULL;
    }
    ptHdiTable->ptParamHDI = ptParamHDI;
    ptHdiTable->lHDICnt = ptParamHDI->lHDIDefCnt;
    ptHdiTable->ptHDITable = \
      kr_hashtable_new_full(kr_long_hash, kr_long_equal, \
                            NULL, (KRDestroyNotify )kr_hdi_destruct);
    
    int i = 0;
    T_KRHDI *ptHDI = NULL;
    for (i=0; i<ptParamHDI->lHDIDefCnt; ++i) {
        ptHDI = kr_hdi_construct(&ptParamHDI->stParamHDIDef[i], ptModule);
        if (ptHDI == NULL) {
            KR_LOG(KR_LOGERROR, "kr_hdi_construct [%d] failed!", i);
            kr_hashtable_destroy(ptHdiTable->ptHDITable);
            kr_free(ptHdiTable);
            return NULL;
        }
        kr_hashtable_insert(ptHdiTable->ptHDITable, &ptHDI->lHDIId, ptHDI);
    }
    ptHdiTable->tConstructTime = ptParamHDI->tLastLoadTime;
    
    return ptHdiTable;    
}
Example #8
0
int kr_coordi_handle_clioff(T_KREventLoop *el, int fd, T_KRMessage *krmsg)
{
    KR_LOG(KR_LOGDEBUG, "Client [%s] Offline [%d]!", krmsg->clientid, fd);

    /* Check this client whether exists */
    T_KRListNode *node = kr_list_search(krcoordi.clients, krmsg->clientid);
    if (node == NULL) {
        KR_LOG(KR_LOGDEBUG, "Client %s not exists!", krmsg->clientid);
        return 0;
    }
   
    /*remove from list*/
    T_KRCoordiConnector *ptClient = (T_KRCoordiConnector *)node->value;
    kr_list_remove(krcoordi.clients, ptClient->id);

    /* remove from fdtable */
    kr_hashtable_remove(krcoordi.fdtable, &fd);
    
    /* Free this client */
    kr_event_file_delete(el, fd, KR_EVENT_READABLE);
    close(fd);
    
    kr_free(ptClient);
    
    return 0;
}
Example #9
0
int ERMHandle(int iDataSrc, void *ptReqDef)
{
    int iResult = 0;
    
    /* 插入KRDB内存数据库 */
    gstContext.ptCurrRec = kr_db_insert(gstContext.ptKRDB, iDataSrc, ptReqDef);
    if (gstContext.ptCurrRec == NULL)
    {
        KR_LOG(KR_LOGERROR, "kr_db_insert Failed!");
        return -1;
    }
KR_LOG(KR_LOGDEBUG, "0.kr_db_insert [%d] Passed!", iDataSrc);

    /* 规则侦测 */
    iResult = kr_rule_group_detect(ptDynMem, &gstContext);
    if (iResult != 0)
    {
        KR_LOG(KR_LOGERROR, "kr_rule_group_detect Failed!");
        return -1;
    }
KR_LOG(KR_LOGDEBUG, "1.kr_rule_group_detect [%d] Passed!", iDataSrc);
    
    /*DumpDataVal(stdout, &gptDataVal);*/
    
    return 0;
}
Example #10
0
int kr_coordi_handle_reply(T_KREventLoop *el, int fd, T_KRMessage *krmsg)
{
    KR_LOG(KR_LOGDEBUG, "Client [%s] Got Reply[%s] From Server [%s]!", \
        krmsg->clientid, krmsg->msgid, krmsg->serverid);
        
    /* Check this server whether allowed */
    T_KRActualNode *server = NULL;
    server = kr_conhash_lookup(krcoordi.servers, krmsg->serverid);
    if (server == NULL) {
        KR_LOG(KR_LOGERROR, "Server %s not allowed!", krmsg->serverid);
        return -1;
    }
    T_KRCoordiConnector *ptServer = (T_KRCoordiConnector *)server->priv;
    ++ptServer->rplnum;
        
    /* Check this client whether exists */
    T_KRListNode *node = kr_list_search(krcoordi.clients, krmsg->clientid);
    if (node == NULL) {
        KR_LOG(KR_LOGERROR, "Client %s not exists!", krmsg->clientid);
        return -1;
    }
    T_KRCoordiConnector *ptClient = (T_KRCoordiConnector *)node->value;
    
    /*send reply to client*/
    int writeLen = kr_message_write(ptClient->fd, krmsg);
    if (writeLen <= 0) {/* write message failure */        
        KR_LOG(KR_LOGERROR, "write message error[%s]!", krcoordi.neterr);
        strcpy(ptClient->neterr, krcoordi.neterr);
        ++ptClient->errnum;
        return -1;
    }
    
    ++ptClient->rplnum;
    return 0;
}
Example #11
0
int ERMInitial(void)
{
    //Step 1:kr_db_startup
    gstContext.ptKRDB = kr_db_startup("ERM_KRDB");
    if (gstContext.ptKRDB == NULL)
    {
        KR_LOG(KR_LOGERROR, "kr_db_startup Failed!");
        return -1;
    }

    //kr_db_load(gptKRDB);
    //Step 3: kr_shm_attach 
    gstContext.ptShm = kr_shm_attach(74561);
    if (gstContext.ptShm == NULL) {
        KR_LOG(KR_LOGERROR, "Attach ShareMemory Failed!");
        return -1;
    }

    ptDynMem = kr_dym_construct(gptShmBuf);
    if (ptDynMem == NULL) 
    {
        KR_LOG(KR_LOGERROR, "kr_dym_construct Failed!");
        return -1;
    }

       return 0;
}
Example #12
0
T_KROutput* kr_output_construct(T_KRParam *ptParam, char *psOutputModule, 
        KRGetTypeFunc pfGetType, KRGetValueFunc pfGetValue)
{
    T_KROutput *ptOutput = kr_calloc(sizeof(*ptOutput));
    if (ptOutput == NULL) {
        KR_LOG(KR_LOGERROR, "kr_calloc ptOutput failed!");
        return NULL;
    }
    
    /* load output module */
    ptOutput->ptOutputModule = kr_module_open(psOutputModule, RTLD_LAZY);
    if (ptOutput->ptOutputModule == NULL) {
        KR_LOG(KR_LOGERROR, "kr_module_open %s failed!", psOutputModule);
        kr_output_destruct(ptOutput);
        return NULL;
    }
    ptOutput->pfGetType = pfGetType;
    ptOutput->pfGetValue = pfGetValue;
    
    /*alloc output define list*/
    ptOutput->ptOutputDefineList = kr_list_new();
    kr_list_set_match(ptOutput->ptOutputDefineList, (KRListMatchFunc )kr_output_define_match);
    kr_list_set_free(ptOutput->ptOutputDefineList, (KRListFreeFunc )kr_output_define_free);
    
    /*create output list*/
    if (kr_param_object_foreach(ptParam, KR_PARAM_OUTPUT, 
            _kr_output_define_new, ptOutput) != 0) {
        KR_LOG(KR_LOGERROR, "_kr_db_build_table Error!");
        return NULL;
    }
    
    ptOutput->tConstructTime = kr_param_load_time(ptParam);
    
    return ptOutput;
}
Example #13
0
int kr_coordi_handle_svroff(T_KREventLoop *el, int fd, T_KRMessage *krmsg)
{
    KR_LOG(KR_LOGDEBUG, "Server [%s] Offline [%d]!", krmsg->serverid, fd);
    
    /* Check this server whether exists */
    T_KRActualNode *node = \
        kr_conhash_lookup(krcoordi.servers, krmsg->serverid);
    if (node == NULL) {
        KR_LOG(KR_LOGDEBUG, "Server %s not exists!", krmsg->serverid);
        return 0;
    }
    
    /* remove from fdtable */
    kr_hashtable_remove(krcoordi.fdtable, &fd);
    
    /* remove from conhash */
    T_KRCoordiConnector *ptServer = (T_KRCoordiConnector *)node->priv;
    kr_conhash_remove(krcoordi.servers, ptServer->id);

    /* Free this server */
    kr_event_file_delete(el, fd, KR_EVENT_READABLE);
    close(fd);
    
    kr_free(ptServer);
    
    return 0;
}
Example #14
0
static int kr_server_try_connect_to_cluster(void)
{
    if (krserver.coordport != 0) {
        krserver.cofd = kr_net_tcp_connect(krserver.neterr, \
            krserver.coordip, krserver.coordport);
        if (krserver.cofd == KR_NET_ERR) {
            KR_LOG(KR_LOGERROR, "kr_net_tcp_connect[%s][%d] failed[%s]",
                krserver.coordip, krserver.coordport, krserver.neterr);
            return -1;
        }
    }
    
    if (krserver.cofd < 0) {
        KR_LOG(KR_LOGERROR, "Can't connect to coordinator in cluster!");
        return -1;
    }
    
    /* write svron message to the cluster */
    if (kr_server_handle_svron() != 0) {
        KR_LOG(KR_LOGERROR, "kr_server_handle_svron cluster!");
        return -1;
    }
    
    /* Register read file event */
    if (kr_event_file_create(krserver.krel, krserver.cofd, KR_EVENT_READABLE, \
        kr_server_message_read_handler, NULL) == KR_NET_ERR) {
        KR_LOG(KR_LOGERROR, "kr_event_file_create failed[%s]", krserver.neterr);
        return -1;
    }
    
    return 0;
}
Example #15
0
static T_KRDataItem *kr_data_item_get(T_KRData *ptData, char kind, int id, T_KRContext *ptContext)
{
    char caDataItemId[20+1] = {0};
    snprintf(caDataItemId, sizeof(caDataItemId), "%c_%d", kind, id);

    T_KRDataItem *ptDataItem = kr_hashtable_lookup(ptData->ptItemTable, caDataItemId);
    if (ptDataItem == NULL) {
        KR_LOG(KR_LOGERROR, "kr_hashtable_lookup [%c]:[%d] failed!", kind, id);
        return NULL;
    }

    //check whether computed yet, that is record level cache
    T_KRRecord *ptCurrRec = kr_context_get_data(ptContext, "curr_rec");
    if (ptDataItem->ptCurrRec != ptCurrRec) {
        ptDataItem->ptCurrRec = ptCurrRec;
        if (ptDataItem->pfDataItemAggr != NULL) {
            if (ptDataItem->pfDataItemAggr(ptDataItem, ptContext) != 0) {
                KR_LOG(KR_LOGERROR, "pfDataItemAggr [%c]:[%d] failed!", 
                        kind, id);
                return NULL;
            }
        }
    } else {
        KR_LOG(KR_LOGDEBUG, "Get [%c]:[%d] record level cached!", kind, id);
    }
    
    return ptDataItem;
}
Example #16
0
T_KRRecord *kr_input_process(T_KRInput *ptInput, T_KRRequest *ptRequest)
{
    char *msgid = ptRequest->msgid;
    int msgsrc = ptRequest->msgsrc;
    char *msgfmt = ptRequest->msgfmt;
    size_t msglen = ptRequest->msglen;
    char *msgbuf = ptRequest->msgbuf;

    T_KRInputDefine *ptInputDefine = kr_input_get_define(ptInput, msgsrc);
    if (ptInputDefine == NULL) {
        KR_LOG(KR_LOGERROR, "kr_input_get_define [%d] error!", msgsrc);
        return NULL;
    }
    
    T_KRInputHandle *ptInputHandle = kr_input_define_get_handle(ptInputDefine, msgfmt, ptInput->ptInputModule);
    if (ptInputHandle == NULL) {
        KR_LOG(KR_LOGERROR, "kr_input_define_get_handle [%s] error!", msgfmt);
        return NULL;
    }
    
    T_KRRecord *ptRecord = kr_record_new(ptInput, msgsrc);
    if (ptRecord == NULL) {
        KR_LOG(KR_LOGERROR, "kr_record_new [%s] error!", msgsrc);
        return NULL;
    }
    
    int iResult = kr_input_handle_process(ptInputHandle, ptInputDefine, msglen, msgbuf, ptRecord);
    if (iResult != 0) {
        KR_LOG(KR_LOGERROR, "kr_input_handle_process [%s] error!", msgid);
        kr_record_free(ptRecord);
        return NULL;
    }
    
    return ptRecord;
}
Example #17
0
void 
kr_coordi_tcp_accept_handler(T_KREventLoop *el, int fd, void *priv, int mask) 
{
    int cport, cfd;
    char cip[128];

    cfd = kr_net_tcp_accept(krcoordi.neterr, fd, cip, &cport);
    if (cfd == KR_NET_ERR) {
        KR_LOG(KR_LOGERROR, "Accepting client connection: %s", krcoordi.neterr);
        return;
    }
    KR_LOG(KR_LOGDEBUG, "Accepted tcp/ip connection %s:%d", cip, cport);
    kr_coordi_common_accept_handler(cfd);
}
Example #18
0
int kr_coordi_handle_apply(T_KREventLoop *el, int fd, T_KRMessage *krmsg)
{
    KR_LOG(KR_LOGDEBUG, "Client [%s] Send Apply[%s] To Server [%s]!", \
        krmsg->clientid, krmsg->msgid, krmsg->serverid);
    
    /* Check this client whether allowed */
    T_KRListNode *node = kr_list_search(krcoordi.clients, krmsg->clientid);
    if (node == NULL) {
        KR_LOG(KR_LOGERROR, "Client %s not allowed!", krmsg->clientid);
        return -1;
    }
    T_KRCoordiConnector *ptClient = (T_KRCoordiConnector *)node->value;
    ++ptClient->aplnum;

    T_KRActualNode *server = NULL;
    /*if apply message specified the destination server*/
    if (krmsg->serverid[0] != '\0') {
        /* Check this server whether exists */
        server = kr_conhash_lookup(krcoordi.servers, krmsg->serverid);
        if (server == NULL) {
            KR_LOG(KR_LOGDEBUG, "Specified Server [%s] doesn't exists!", \
                krmsg->serverid);
        }
    }
    
    /*choose server according to the key*/
    if (server == NULL) {
        server = kr_conhash_locate(krcoordi.servers, krmsg->msgid);
        if (server == NULL) {
            KR_LOG(KR_LOGERROR, "kr_conhash_locate %s failed!", \
               krmsg->msgid);
            return -1;   
        }
    }
    
    /* padding serverid field */
    T_KRCoordiConnector *ptServer = (T_KRCoordiConnector *)server->priv;
    strcpy(krmsg->serverid, ptServer->id);
    ++ptServer->aplnum;
    
    KR_LOG(KR_LOGDEBUG, "Located Server [%s] with Consistent hashing [%s]!", \
                krmsg->serverid, krmsg->msgid);
    
    /* send to the one who's the specified or need replication */
    kr_conhash_foreach_node(krcoordi.servers, \
        (KRForEachFunc )kr_coordi_send_to_server, krmsg);

    return 0;
}
Example #19
0
void *kr_data_get_value(T_KRData *ptData, char kind, int id, T_KRContext *ptContext)
{
    T_KRDataItem *ptDataItem = kr_data_item_get(ptData, kind, id, ptContext);
    if (ptDataItem == NULL) {
        KR_LOG(KR_LOGERROR, "kr_data_item_get [%c]:[%d] failed!", kind, id);
        return NULL;
    }
    
    if (ptDataItem->eValueInd != KR_VALUE_SETED) {
        KR_LOG(KR_LOGERROR, "[%c]:[%d] value unset!", kind, id);
        return NULL;
    }

    return kr_get_value(&ptDataItem->uValue, ptDataItem->eValueType);
}
Example #20
0
E_KRType kr_data_get_type(T_KRData *ptData, char kind, int id, T_KRContext *ptContext)
{
    T_KRDataItem *ptDataItem = kr_data_item_get(ptData, kind, id, ptContext);
    if (ptDataItem == NULL) {
        KR_LOG(KR_LOGERROR, "kr_data_item_get [%c]:[%d] failed!", kind, id);
        return KR_TYPE_UNKNOWN;
    }
    
    if (ptDataItem->eValueInd != KR_VALUE_SETED) {
        KR_LOG(KR_LOGERROR, "[%c]:[%d] value unset!", kind, id);
        return KR_TYPE_UNKNOWN;
    }

    return ptDataItem->eValueType;
}
Example #21
0
int kr_group_func(T_KRGroup *krgroup, T_KRContext *krcontext)
{
    /*add alert info*/
    cJSON *alert = cJSON_CreateObject();
    cJSON_AddNumberToObject(alert, "groupid", krgroup->lGroupId);

    /*add current record info*/
    cJSON *currec = cJSON_CreateObject();
    _set_cjson_record(krcontext->ptCurrRec, currec);
    cJSON_AddItemToObject(alert, "currec", currec);

    /*add rules info*/
    cJSON *rules = cJSON_CreateArray();
    kr_list_foreach(krgroup->ptRuleList->ptRuleList, (KRForEachFunc )_add_rule, rules);
    cJSON_AddItemToObject(alert, "rules", rules);

    /*add dataitems info*/
    cJSON *datas = cJSON_CreateObject();
    T_KRHashTable *sditable = krcontext->ptDym->sditable->ptSDITable;
    _add_sdis_to_data(sditable, datas);
    T_KRHashTable *dditable = krcontext->ptDym->dditable->ptDDITable;
    _add_ddis_to_data(dditable, datas);
    T_KRHashTable *hditable = krcontext->ptDym->hditable->ptHDITable;
    _add_hdis_to_data(hditable, datas);
    cJSON_AddItemToObject(alert, "datas", datas);

    krcontext->pcaResp = cJSON_PrintUnformatted(alert);
    cJSON_Delete(alert);

    /*Important: You need kr_free Response*/
    printf("response: %s\n", krcontext->pcaResp);
    KR_LOG(KR_LOGDEBUG, "response : %s ", krcontext->pcaResp);
    return 0;
}
Example #22
0
int ERMFinish(void)
{
    int iResult = 0;

    kr_dym_destruct(ptDynMem);
    
    /* kr_shm_detach */
    kr_shm_detach(gstContext.ptShm);
    
    /* kr_db_dump */
    FILE *fpKRDBDump = NULL;
    char caDateTime[14+1] = {0};
    char caKRDBDumpFileName[1024]= {0};
    snprintf(caKRDBDumpFileName, sizeof(caKRDBDumpFileName), \
             "KRDB.%s.Dump", kr_time_system(caDateTime));
    if ((fpKRDBDump = fopen(caKRDBDumpFileName, "w")) != NULL) 
    {
        kr_db_dump(gstContext.ptKRDB, 0, fpKRDBDump);
        fclose(fpKRDBDump);
    }
    
    // kr_db_shutdown
    iResult = kr_db_shutdown(gstContext.ptKRDB);
    if (iResult != 0)
    {
        KR_LOG(KR_LOGERROR, "kr_db_shutdown Failed!");
        return -1;
    }
    return 0;
}
Example #23
0
static int _kr_data_item_hdi_load(char *psParamClassName, 
        char *psParamObjectKey, char *psParamObjectString, 
        void *ptParamObject, void *data)
{
    T_KRParamHdi *ptParamHdi = (T_KRParamHdi *)ptParamObject;
    T_KRData *ptData = (T_KRData *)data;

    T_KRDataItem *ptDataItem = kr_data_item_new(
            ptParamHdi,
            ptParamHdi->caHdiName[0], //FIXME: 
            ptParamHdi->lHdiId, 
            ptData->pfGetType,
            ptData->pfGetValue,
            kr_data_item_hdi_new,
            kr_data_item_hdi_aggr,
            kr_data_item_hdi_free);
    if (ptDataItem == NULL) {
        KR_LOG(KR_LOGERROR, "kr_data_item_create [%ld] failed!", \
                ptParamHdi->lHdiId);
        return -1; 
    }

    //insert into item table
    kr_hashtable_replace(ptData->ptItemTable, ptDataItem->caDataItemId, ptDataItem);

    return 0;
}
Example #24
0
int kr_data_check(T_KRData *ptData, T_KRParam *ptParam)
{  
    /*check item table*/
    if (ptData->tConstructTime != kr_param_load_time(ptParam)) {
        KR_LOG(KR_LOGDEBUG, "reload ...[%ld][%ld]", 
                ptData->tConstructTime, kr_param_load_time(ptParam));

        kr_hashtable_remove_all(ptData->ptItemTable);
        if (kr_data_item_load(ptData, ptParam) != 0) {
            KR_LOG(KR_LOGERROR, "reload item table error!");
            return -1;
        }
    }

    return 0;
}
T_KRCache *kr_hdi_cache_create(unsigned int cache_size)
{
    T_KRCache *cache = kr_cache_new(cache_size, 
                                    (KRHashFunc )kr_string_hash, 
                                    (KREqualFunc )kr_string_equal,
                                    (KRDupFunc )kr_strdup, kr_free,
                                    NULL, (KRFreeFunc )kr_hashtable_destroy,
                                    (KRFunc )kr_hdi_cache_node_dump);
    if (cache == NULL) {
        KR_LOG(KR_LOGERROR, "kr_cache_new [%u] Failed!", cache_size);
        return NULL;
    }
    
    KR_LOG(KR_LOGDEBUG, "HDI Cache [%u] has been created!", cache_size);
    return cache;
}
Example #26
0
void *kr_data_item_ddi_new(T_KRDataItem *ptDataItem)
{
    T_KRParamDdi *ptParamDdi = (T_KRParamDdi *)ptDataItem->ptDataItemDef;

    T_KRDdi *ptDdi = kr_calloc(sizeof(*ptDdi));
    if (ptDdi == NULL) {
        KR_LOG(KR_LOGERROR, "kr_calloc ptDdi failed!");
        return NULL;
    }

    ptDdi->ptFilterCalc = kr_calc_construct(
            ptParamDdi->caDdiFilterFormat[0], \
            ptParamDdi->caDdiFilterString, \
            ptDataItem->pfGetType, \
            ptDataItem->pfGetValue);
    if (ptDdi->ptFilterCalc == NULL) {
        KR_LOG(KR_LOGERROR, "kr_calc_construct filter failed!");
        return NULL;
    }

    /*
    ptDdi->ptResultCalc = kr_calc_construct(
            ptParamSdi->caSdiResultFormat[0], \
            ptParamSdi->caSdiResultString, \
            ptDataItem->pfGetType, \
            ptDataItem->pfGetValue);
    if (ptDdi->ptResultCalc == NULL) {
        KR_LOG(KR_LOGERROR, "kr_calc_construct result failed!");
        return NULL;
    }
    */

    ptDdi->ptRelated = kr_hashtable_new(kr_pointer_hash, kr_pointer_equal);
    if (ptDdi->ptRelated == NULL) {
        KR_LOG(KR_LOGERROR, "kr_hashtable_new related failed!");
        return NULL;
    }

    ptDataItem->ptPrivate = ptDdi;
    
    return ptDdi;
}
Example #27
0
int kr_output_check(T_KROutput* ptOutput, T_KRParam *ptParam)
{
    /*check output param*/
    if (ptOutput->tConstructTime != kr_param_load_time(ptParam)) {
        KR_LOG(KR_LOGDEBUG, "reload output ...[%ld][%ld]", 
                ptOutput->tConstructTime, kr_param_load_time(ptParam));

        //TODO:reconstruct ptOutput
    }
    return 0;
}
Example #28
0
/* initialize rule detecting context */
T_KRContext *kr_context_init(T_KRContextEnv *ptEnv)
{
    T_KRContext *ptContext = kr_calloc(sizeof(T_KRContext));
    if (ptContext == NULL) {
        KR_LOG(KR_LOGERROR, "kr_calloc ptContext failed!");
        return NULL;
    }

    ptContext->ptEnv = ptEnv;

    /* reconnect database in thread */
    T_DbsEnv *dbsenv = ((T_KRContextEnv *)ptEnv)->ptDbs;
    ptContext->ptDbs = dbsConnect(dbsenv->dsn, dbsenv->user, dbsenv->pass);
    if (ptContext->ptDbs == NULL) {
        KR_LOG(KR_LOGERROR, "dbsConnect [%s] [%s] [%s] failed!", \
                dbsenv->dsn, dbsenv->user, dbsenv->pass);
        kr_free(ptContext);
        return NULL;
    }

    ptContext->ptArg = kr_calloc(sizeof(T_KRContextArg));
    if (ptContext->ptArg == NULL) {
        KR_LOG(KR_LOGERROR, "kr_calloc ptContext->ptArg failed!");
        dbsDisconnect(ptContext->ptDbs);
        kr_free(ptContext);
        return NULL;
    }

    ptContext->ptDym = kr_dynamicmem_init(ptEnv->ptShm, \
            ptEnv->dataModule, ptEnv->ruleModule);
    if (ptContext->ptDym == NULL) {
        KR_LOG(KR_LOGERROR, "kr_dynamicmem_init failed!");
        dbsDisconnect(ptContext->ptDbs);
        kr_free(ptContext->ptArg);
        kr_free(ptContext);
        return NULL;
    }
    
    return ptContext;
}
Example #29
0
static void 
kr_coordi_read_handler(T_KREventLoop *el, int fd, void *priv, int mask) 
{
    int ret = 0;
    T_KRMessage stMsg = {0};

    /** read message */
    T_KRMessage *ptMsg = kr_message_read(fd);
    if (ptMsg == NULL) {
        /* read message failure */
        KR_LOG(KR_LOGERROR, "read message error[%s]!", krcoordi.neterr);
        T_KRCoordiConnector *ptConn = NULL;
        
        /* find server or client with fd, then free it */
        ptConn = kr_hashtable_lookup(krcoordi.fdtable, &fd);
        if (ptConn == NULL) {
            kr_event_file_delete(el, fd, KR_EVENT_READABLE);
            close(fd);
            return;
        }
        
        /* handle it as connector offline */
        if (ptConn->role == KR_COORDI_SERVER) {
            stMsg.msgtype = KR_MSGTYPE_SVROFF;
            strcpy(stMsg.serverid, ptConn->id);
        } else {
            stMsg.msgtype = KR_MSGTYPE_CLIOFF;
            strcpy(stMsg.clientid, ptConn->id);
        }
        ptMsg = &stMsg;
    }
            
    /** handle message */
    ret = kr_coordi_handle_message(el, fd, ptMsg);
    if (ret != 0) {/* handle message failure */
        KR_LOG(KR_LOGERROR, "handle message [%d], [%s]error!", \
               ptMsg->msgtype, ptMsg->msgbuf);
        return;
    }
}
Example #30
0
/*data item*/
T_KRDataItem *kr_data_item_new(void *ptDataItemDef, char kind, int id,
        KRGetTypeFunc pfGetType, KRGetValueFunc pfGetValue,
        KRDataItemNewFunc pfDataItemNew, 
        KRDataItemAggrFunc pfDataItemAggr, 
        KRDataItemFreeFunc pfDataItemFree)
{
    T_KRDataItem *ptDataItem = kr_calloc(sizeof(T_KRDataItem));
    if (ptDataItem == NULL) {
        KR_LOG(KR_LOGERROR, "kr_calloc ptDataItem failed!");
        return NULL;
    }
    ptDataItem->ptDataItemDef = ptDataItemDef;
    ptDataItem->cDataItemKind = kind;
    ptDataItem->lDataItemId = id;
    ptDataItem->pfGetType = pfGetType;
    ptDataItem->pfGetValue = pfGetValue;
    ptDataItem->pfDataItemNew = pfDataItemNew;
    ptDataItem->pfDataItemAggr = pfDataItemAggr;
    ptDataItem->pfDataItemFree = pfDataItemFree;
    snprintf(ptDataItem->caDataItemId, sizeof(ptDataItem->caDataItemId), 
            "%c_%d", kind, id);

    //initialize variable
    ptDataItem->ptCurrRec = NULL;
    ptDataItem->eValueInd == KR_VALUE_UNSET;
    
    //new private data if new function specified
    if (ptDataItem->pfDataItemNew != NULL) {
        ptDataItem->ptPrivate = ptDataItem->pfDataItemNew(ptDataItem);
        if (ptDataItem->ptPrivate == NULL) {
            KR_LOG(KR_LOGERROR, "call pfDataItemNew failed!");
            kr_free(ptDataItem);
            return NULL;
        }
    }

    return ptDataItem;
}