Skip to content

Commit

Permalink
market price init market from matchengine
Browse files Browse the repository at this point in the history
  • Loading branch information
haipome committed Nov 23, 2017
1 parent 46a01f7 commit 5de1de2
Show file tree
Hide file tree
Showing 6 changed files with 143 additions and 77 deletions.
3 changes: 2 additions & 1 deletion marketprice/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,6 @@
"127.0.0.1:26382",
"127.0.0.1:26383"
]
}
},
"accesshttp": "http:https://127.0.0.1:8080"
}
2 changes: 1 addition & 1 deletion marketprice/makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
TARGET := marketprice.exe
INCS = -I ../network -I ../utils
LIBS = -L ../utils -lutils -L ../network -lnetwork -Wl,-Bstatic -lev -ljansson -lmpdec -lrdkafka -lz -lssl -lcrypto -lhiredis -Wl,-Bdynamic -lm -lpthread -ldl
LIBS = -L ../utils -lutils -L ../network -lnetwork -Wl,-Bstatic -lev -ljansson -lmpdec -lrdkafka -lz -lssl -lcrypto -lhiredis -lcurl -Wl,-Bdynamic -lm -lpthread -ldl
include ../makefile.inc
2 changes: 1 addition & 1 deletion marketprice/mp_config.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ static int read_config_from_json(json_t *root)
ERR_RET_LN(read_cfg_int(root, "min_max", &settings.min_max, false, 60 * 24 * 365));
ERR_RET_LN(read_cfg_int(root, "hour_max", &settings.hour_max, false, 24 * 365 * 10));
ERR_RET_LN(read_cfg_real(root, "cache_timeout", &settings.cache_timeout, false, 0.45));
ERR_RET_LN(read_cfg_str(root, "accesshttp", &settings.accesshttp, NULL));

settings.timezone = get_timezone_offset();

Expand Down Expand Up @@ -78,4 +79,3 @@ int init_config(const char *path)
return 0;
}


1 change: 1 addition & 0 deletions marketprice/mp_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ struct settings {
int min_max;
int hour_max;
double cache_timeout;
char *accesshttp;
};

extern struct settings settings;
Expand Down
109 changes: 77 additions & 32 deletions marketprice/mp_message.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
* History: [email protected], 2017/04/16, create
*/

# include <curl/curl.h>

# include "mp_config.h"
# include "mp_message.h"
# include "mp_kline.h"
Expand Down Expand Up @@ -227,22 +229,6 @@ static int load_market(redisContext *context, struct market_info *info)
return 0;
}

static int add_markets_list(const char *market)
{
redisContext *context = redis_sentinel_connect_master(redis);
if (context == NULL)
return -__LINE__;
redisReply *reply = redisCmd(context, "SADD k:markets %s", market);
if (reply == NULL) {
redisFree(context);
return -__LINE__;
}
freeReplyObject(reply);
redisFree(context);

return 0;
}

static struct market_info *create_market(const char *market)
{
struct market_info *info = malloc(sizeof(struct market_info));
Expand Down Expand Up @@ -293,6 +279,67 @@ static struct market_info *create_market(const char *market)
return info;
}

static size_t post_write_callback(char *ptr, size_t size, size_t nmemb, void *userdata)
{
sds *reply = userdata;
*reply = sdscatlen(*reply, ptr, size * nmemb);
return size * nmemb;
}

static json_t *send_market_list_req(void)
{
json_t *reply = NULL;
json_t *error = NULL;
json_t *result = NULL;

json_t *request = json_object();
json_object_set_new(request, "method", json_string("market.list"));
json_object_set_new(request, "params", json_array());
json_object_set_new(request, "id", json_integer(time(NULL)));
char *request_data = json_dumps(request, 0);
json_decref(request);

CURL *curl = curl_easy_init();
sds reply_str = sdsempty();

struct curl_slist *chunk = NULL;
chunk = curl_slist_append(chunk, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);
curl_easy_setopt(curl, CURLOPT_URL, settings.accesshttp);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, post_write_callback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &reply_str);
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
curl_easy_setopt(curl, CURLOPT_TIMEOUT_MS, (long)(1000));
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, request_data);

CURLcode ret = curl_easy_perform(curl);
if (ret != CURLE_OK) {
log_fatal("curl_easy_perform fail: %s", curl_easy_strerror(ret));
goto cleanup;
}

reply = json_loads(reply_str, 0, NULL);
if (reply == NULL)
goto cleanup;
error = json_object_get(reply, "error");
if (!json_is_null(error)) {
log_error("get market list fail: %s", reply_str);
goto cleanup;
}
result = json_object_get(reply, "result");
json_incref(result);

cleanup:
free(request_data);
sdsfree(reply_str);
curl_easy_cleanup(curl);
curl_slist_free_all(chunk);
if (reply)
json_decref(reply);

return result;
}

static int init_market(void)
{
dict_types type;
Expand All @@ -304,29 +351,32 @@ static int init_market(void)
if (dict_market == NULL)
return -__LINE__;

json_t *r = send_market_list_req();
if (r == NULL)
return -__LINE__;
redisContext *context = redis_sentinel_connect_master(redis);
if (context == NULL)
return -__LINE__;
redisReply *reply = redisCmd(context, "SMEMBERS k:markets");
if (reply == NULL) {
redisFree(context);
return -__LINE__;
}
for (size_t i = 0; i < reply->elements; ++i) {
struct market_info *info = create_market(reply->element[i]->str);
for (size_t i = 0; i < json_array_size(r); ++i) {
json_t *item = json_array_get(r, i);
const char *name = json_string_value(json_object_get(item, "name"));
log_stderr("init market %s", name);
struct market_info *info = create_market(name);
if (info == NULL) {
freeReplyObject(reply);
log_error("create market %s fail", name);
json_decref(r);
redisFree(context);
return -__LINE__;
}
int ret = load_market(context, info);
if (ret < 0) {
freeReplyObject(reply);
log_error("load market %s fail: %d", name, ret);
json_decref(r);
redisFree(context);
return ret;
return -__LINE__;
}
}
freeReplyObject(reply);
json_decref(r);
redisFree(context);

return 0;
Expand Down Expand Up @@ -379,11 +429,6 @@ static int market_update(const char *market, double timestamp, mpd_t *price, mpd
if (info == NULL) {
return -__LINE__;
}
int ret = add_markets_list(market);
if (ret < 0) {
log_fatal("add market: %s fail: %d", market, ret);
return -__LINE__;
}
}

// update sec
Expand Down
103 changes: 61 additions & 42 deletions matchengine/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,98 +37,117 @@
},
"assets": [
{
"name": "USD",
"prec_save": 16,
"prec_show": 4
}, {
"name": "BTC",
"prec_save": 16,
"name": "BCH",
"prec_save": 20,
"prec_show": 8
}, {
"name": "BCC",
"prec_save": 16,
"name": "BTC",
"prec_save": 12,
"prec_show": 8
}, {
"name": "LTC",
"prec_save": 8,
"prec_save": 12,
"prec_show": 8
}, {
"name": "ETH",
"prec_save": 8,
"prec_save": 12,
"prec_show": 8
}, {
"name": "ETC",
"prec_save": 12,
"prec_show": 8
}, {
"name": "ZEC",
"prec_save": 8,
"prec_save": 12,
"prec_show": 8
}, {
"name": "XMR",
"prec_save": 12,
"prec_show": 8
}, {
"name": "DASH",
"prec_save": 8,
"prec_save": 12,
"prec_show": 8
}
],
"markets": [
{
"name": "BTCUSD",
"name": "BTCBCH",
"stock": {
"name": "BTC",
"prec": 4
"prec": 8
},
"money": {
"name": "USD",
"prec": 2
"name": "BCH",
"prec": 8
},
"min_amount": "0.001"
}, {
"name": "BCCUSD",
"name": "LTCBCH",
"stock": {
"name": "BCC",
"prec": 4
"name": "LTC",
"prec": 8
},
"money": {
"name": "USD",
"prec": 2
"name": "BCH",
"prec": 8
},
"min_amount": "0.001"
}, {
"name": "ETHUSD",
"name": "ETHBCH",
"stock": {
"name": "ETH",
"prec": 4
"prec": 8
},
"money": {
"name": "USD",
"prec": 2
}
"name": "BCH",
"prec": 8
},
"min_amount": "0.001"
}, {
"name": "ZECUSD",
"name": "ETCBCH",
"stock": {
"name": "ETC",
"prec": 8
},
"money": {
"name": "BCH",
"prec": 8
},
"min_amount": "0.001"
}, {
"name": "ZECBCH",
"stock": {
"name": "ZEC",
"prec": 4
"prec": 8
},
"money": {
"name": "USD",
"prec": 2
}
"name": "BCH",
"prec": 8
},
"min_amount": "0.001"
}, {
"name": "LTCUSD",
"name": "XMRBCH",
"stock": {
"name": "LTC",
"prec": 4
"name": "XMR",
"prec": 8
},
"money": {
"name": "USD",
"prec": 2
}
"name": "BCH",
"prec": 8
},
"min_amount": "0.001"
}, {
"name": "DASHUSD",
"name": "DASHBCH",
"stock": {
"name": "DASH",
"prec": 4
"prec": 8
},
"money": {
"name": "USD",
"prec": 2
}
"name": "BCH",
"prec": 8
},
"min_amount": "0.001"
}
],
"brokers": "127.0.0.1:9092",
Expand Down

0 comments on commit 5de1de2

Please sign in to comment.