コード例 #1
0
ファイル: hb.c プロジェクト: kingiol/cmoon
int main(int argc, char *argv[])
{
    int ret;

    if (argc != 5) {
        printf("Usage: %s HOST PORT EVENT_NAME CONFIG_FILE\n", argv[0]);
        return 1;
    }

    settings.smsalarm = 0;
    //settings.logfname = "-";
    log_init();
    if (config_parse_file(argv[4], &g_cfg) != 1) {
        printf("parse config file %s failure", argv[3]);
            return 1;
    }
    
    mevent_t *evt = mevent_init(argv[3]);
    if (evt == NULL) {
        printf("init error\n");
        SMS_ALARM("mevent_init error");
        return 1;
    }

    struct timeval tv;
    tv.tv_sec = 0;
    tv.tv_usec = 800000;
    
    mevent_add_udp_server(evt, argv[1], atoi(argv[2]), NULL, &tv);
    ret = mevent_trigger(evt, NULL, REQ_CMD_STATS, FLAGS_SYNC);
    if (PROCESS_OK(ret)) {
        hdf_dump(evt->hdfrcv, NULL);
    } else {
        int try = 0;
        
    redo:
        sleep(10);
        ret = mevent_trigger(evt, NULL, REQ_CMD_STATS, FLAGS_SYNC);
        if (PROCESS_NOK(ret) && try < 3) {
            try++;
            goto redo;
        }

        if (PROCESS_NOK(ret) && try >= 3) {
            printf("process failure %d\n", ret);
            SMS_ALARM("process failure %d, restarted", ret);
            system("killall -9 mevent; sleep 2; /usr/local/revive/xport/daemon/mevent -c /usr/local/revive/xport/conf/server.hdf");
        } else {
            printf("process temproray error %d, %d", ret, try);
        }
    }

    mevent_free(evt);
    return 0;
}
コード例 #2
0
ファイル: omember.c プロジェクト: pombredanne/cmoon
NEOERR* member_exist_data_get(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses)
{
    mevent_t *evt = hash_lookup(evth, "member");
    char *mname;

    MCS_NOT_NULLB(cgi->hdf, evt);

    HDF_GET_STR(cgi->hdf, PRE_QUERY".mname", mname);

    hdf_set_value(evt->hdfsnd, "mname", mname);

    mevent_trigger(evt, mname, REQ_CMD_MEMBER_GET, FLAGS_SYNC);

    if (PROCESS_OK(evt->errcode)) {
        hdf_set_value(cgi->hdf, PRE_OUTPUT".exist", "1");
        hdf_set_value(cgi->hdf, PRE_OUTPUT".msg", "用户已被注册");
    } else if (evt->errcode == LERR_MEMBER_NEXIST) {
        hdf_set_value(cgi->hdf, PRE_OUTPUT".exist", "0");
        hdf_set_value(cgi->hdf, PRE_OUTPUT".msg", "用户还未注册");
    } else {
        return nerr_raise(evt->errcode, "get member %s info failure %d",
                          evt->ename, evt->errcode);
    }

    return STATUS_OK;
}
コード例 #3
0
ファイル: ooms.c プロジェクト: kingiol/cmoon
NEOERR* oms_users_data_add(CGI *cgi, HASH *dbh, HASH *evth, session_t *ses)
{
    mevent_t *evt = (mevent_t*)hash_lookup(evth, "aic");
    char *aname, *pname, *email;
    int cost;
    NEOERR *err;

    APP_CHECK_ADMIN();

    HDF_GET_STR_IDENT(cgi->hdf, PRE_COOKIE".aname", pname);
    HDF_GET_STR(cgi->hdf, PRE_QUERY".aname", aname);
    HDF_GET_STR(cgi->hdf, PRE_QUERY".email", email);
    LEGAL_CK_ANAME(pname);
    LEGAL_CK_ANAME(aname);
    LEGAL_CK_EMAIL(email);

    /*
     * check
     */
    int state = hdf_get_int_value(evt->hdfrcv, "state", LCS_ST_FREE);
    if (state <= LCS_ST_FREE)
        return nerr_raise(LERR_NEEDUP, "%s want to add users %s", pname, aname);
    else if (state >= LCS_ST_VIP) goto add;

    /*
     * chargeback
     */
    cost = hdf_get_int_value(g_cfg, "Cost.account", 0);
    evt = (mevent_t*)hash_lookup(evth, "bank");
    hdf_set_value(evt->hdfsnd, "aname", pname);
    hdf_set_int_value(evt->hdfsnd, "btype", BANK_OP_ADDACCOUNT);
    hdf_set_int_value(evt->hdfsnd, "fee", cost);
    hdf_set_value(evt->hdfsnd, "account", aname);

    MEVENT_TRIGGER(evt, pname, REQ_CMD_BANK_ADDBILL, FLAGS_SYNC);

add:
    /*
     * add
     */
    evt = (mevent_t*)hash_lookup(evth, "aic");
    hdf_copy(evt->hdfsnd, NULL, hdf_get_obj(cgi->hdf, PRE_QUERY));
    hdf_set_value(evt->hdfsnd, "pname", pname);
    hdf_set_value(evt->hdfsnd, "aname", aname);
    hdf_set_int_value(evt->hdfsnd, "state",
                      hdf_get_int_value(evt->hdfrcv, "state", LCS_ST_FREE));
    hdf_set_value(evt->hdfsnd, "masn", aname);

    if (PROCESS_NOK(mevent_trigger(evt, aname, REQ_CMD_APPNEW, FLAGS_SYNC))) {
        char *zpa = NULL;
        hdf_write_string(evt->hdfrcv, &zpa);
        mtc_foo("add %s failure %d %s", aname, evt->errcode, zpa);
        SAFE_FREE(zpa);

        if (state < LCS_ST_VIP) {
            /*
             * roll back
             */
            evt = (mevent_t*)hash_lookup(evth, "bank");
            hdf_set_value(evt->hdfsnd, "aname", pname);
            hdf_set_int_value(evt->hdfsnd, "btype", BANK_OP_ROLLBACK);
            hdf_set_int_value(evt->hdfsnd, "fee", -cost);
            hdf_set_valuef(evt->hdfsnd, "remark = 客服帐号 %s 创建失败", aname);

            if (PROCESS_NOK(mevent_trigger(evt, pname, REQ_CMD_BANK_ADDBILL,
                                           FLAGS_SYNC))) {
                /*
                 * ATTENTION we need pay back to customer manually
                 */
                hdf_write_string(evt->hdfrcv, &zpa);
                mtc_foo("rollback %s failure %d %s", aname, evt->errcode, zpa);
                SAFE_FREE(zpa);
            }
        }

        return nerr_raise(evt->errcode, "add %s failure %d", aname, evt->errcode);
    }

    return STATUS_OK;
}