未验证 提交 f08b40fc 编写于 作者: 何延龙 提交者: GitHub

Merge pull request #100 from bostin/fixbug/sky_execute_ex_missing_sky_close

fix sky_execute_ex missing application_instance == 0; predis emalloc error; add redis.command tag
...@@ -153,6 +153,10 @@ static char *pcre_match(char *pattern, int len, char *subject) { ...@@ -153,6 +153,10 @@ static char *pcre_match(char *pattern, int len, char *subject) {
ZEND_API void sky_execute_ex(zend_execute_data *execute_data) { ZEND_API void sky_execute_ex(zend_execute_data *execute_data) {
if (application_instance == 0) {
ori_execute_ex(execute_data);
return;
}
zend_function *zf = execute_data->func; zend_function *zf = execute_data->func;
const char *class_name = (zf->common.scope != NULL && zf->common.scope->name != NULL) ? ZSTR_VAL( const char *class_name = (zf->common.scope != NULL && zf->common.scope->name != NULL) ? ZSTR_VAL(
...@@ -168,7 +172,7 @@ ZEND_API void sky_execute_ex(zend_execute_data *execute_data) { ...@@ -168,7 +172,7 @@ ZEND_API void sky_execute_ex(zend_execute_data *execute_data) {
zval *p = ZEND_CALL_ARG(execute_data, 1); zval *p = ZEND_CALL_ARG(execute_data, 1);
if (Z_TYPE_P(p) == IS_STRING) { if (Z_TYPE_P(p) == IS_STRING) {
operationName = (char *) emalloc(strlen(class_name) + strlen(function_name) + 3); operationName = (char *) emalloc(strlen(class_name) + strlen(Z_STRVAL_P(p)) + 3);
strcpy(operationName, class_name); strcpy(operationName, class_name);
strcat(operationName, "->"); strcat(operationName, "->");
strcat(operationName, Z_STRVAL_P(p)); strcat(operationName, Z_STRVAL_P(p));
...@@ -194,31 +198,62 @@ ZEND_API void sky_execute_ex(zend_execute_data *execute_data) { ...@@ -194,31 +198,62 @@ ZEND_API void sky_execute_ex(zend_execute_data *execute_data) {
if (Z_TYPE_P(pam) == IS_ARRAY) { if (Z_TYPE_P(pam) == IS_ARRAY) {
zend_ulong num_key; zend_ulong num_key;
zval *entry; zval *entry;
int is_string_command = 0;
smart_str command = {0};
ZEND_HASH_FOREACH_NUM_KEY_VAL(Z_ARRVAL_P(pam), num_key, entry) ZEND_HASH_FOREACH_NUM_KEY_VAL(Z_ARRVAL_P(pam), num_key, entry)
{ {
char *fnamewall = (char *) emalloc(strlen(Z_STRVAL_P(fname)) + 3); char *fnamewall = (char *) emalloc(strlen(Z_STRVAL_P(fname)) + 3);
sprintf(fnamewall, "|%s|", Z_STRVAL_P(fname)); sprintf(fnamewall, "|%s|", Z_STRVAL_P(fname));
// strtolower for matching redis key
fnamewall = php_strtolower(fnamewall, strlen(fnamewall));
// first params // first params
if (num_key == 0) { if (num_key == 0) {
switch (Z_TYPE_P(entry)) { switch (Z_TYPE_P(entry)) {
case IS_STRING: case IS_STRING:
is_string_command = 1;
smart_str_appends(&command, php_strtolower(Z_STRVAL_P(fname), Z_STRLEN_P(fname)));
smart_str_appends(&command, " ");
// string // string
if (strstr(REDIS_KEY_STRING, fnamewall)) { // add tag key if (strstr(REDIS_KEY_STRING, fnamewall)
|| strstr(REDIS_KEY_KEY, fnamewall)
|| strstr(REDIS_KEY_HASH, fnamewall)
|| strstr(REDIS_KEY_LIST, fnamewall)
|| strstr(REDIS_KEY_SET, fnamewall)
|| strstr(REDIS_KEY_SORT, fnamewall)
|| strstr(REDIS_KEY_HLL, fnamewall)
|| strstr(REDIS_KEY_GEO, fnamewall)
) { // add tag key
add_assoc_string(&tags, "redis.key", Z_STRVAL_P(entry)); add_assoc_string(&tags, "redis.key", Z_STRVAL_P(entry));
} else if (strstr(REDIS_OPERATION_STRING, fnamewall)) { // add tag operation } else if (strstr(REDIS_OPERATION_STRING, fnamewall)) { // add tag operation
add_assoc_string(&tags, "redis.operation", Z_STRVAL_P(entry)); add_assoc_string(&tags, "redis.operation", Z_STRVAL_P(entry));
} }
break; break;
case IS_ARRAY: case IS_ARRAY:
// @todo
break; break;
} }
} }
// collect command params for string command
if (is_string_command == 1) {
if (Z_TYPE_P(entry) != IS_STRING) {
convert_to_string(entry);
}
smart_str_appends(&command, Z_STRVAL_P(entry));
smart_str_appends(&command, " ");
}
efree(fnamewall); efree(fnamewall);
} }
ZEND_HASH_FOREACH_END(); ZEND_HASH_FOREACH_END();
// store command to tags
if (command.s) {
smart_str_0(&command);
add_assoc_string(&tags, "redis.command", ZSTR_VAL(php_trim(command.s, NULL, 0, 3)));
smart_str_free(&command);
}
} }
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册