改成动态存储
This commit is contained in:
@@ -6,14 +6,13 @@
|
|||||||
#include "../../../opt/MESA/include/MESA/MESA_handle_logger.h"
|
#include "../../../opt/MESA/include/MESA/MESA_handle_logger.h"
|
||||||
#include "../../../opt/MESA/include/MESA/http.h"
|
#include "../../../opt/MESA/include/MESA/http.h"
|
||||||
|
|
||||||
#define MAX_STR_LEN 256
|
#define MAX_STR_LEN 256
|
||||||
#define PERSIST_HASH_SIZE 512
|
#define PERSIST_HASH_SIZE 512
|
||||||
#define DOUBLE_DIRECTION 0x03
|
#define DOUBLE_DIRECTION 0x03
|
||||||
#define MIN(a,b) ((a)<(b)?(a):(b))
|
#define HTTP_CHECK_CONFIG "./plug/business/http_count/http_count.conf"
|
||||||
#define HTTP_CHECK_CONFIG "./plug/business/http_count/http_count.conf"
|
#define BASIC_DIR "./plug/business/http_count/"
|
||||||
#define BASIC_DIR "./plug/business/http_count/"
|
#define HTTP_COUNT_PLUGNAME "http_count.so"
|
||||||
#define HTTP_COUNT_PLUGNAME "http_count.so"
|
#define JHASH_GOLDEN_RATIO 0x9e3779b9
|
||||||
#define JHASH_GOLDEN_RATIO 0x9e3779b9
|
|
||||||
#define __jhash_mix(a, b, c)\
|
#define __jhash_mix(a, b, c)\
|
||||||
{\
|
{\
|
||||||
a -= b; a -= c; a ^= (c>>13);\
|
a -= b; a -= c; a ^= (c>>13);\
|
||||||
@@ -42,8 +41,9 @@ enum statistics_type
|
|||||||
struct http_count_node
|
struct http_count_node
|
||||||
{
|
{
|
||||||
struct http_count_node *next;
|
struct http_count_node *next;
|
||||||
char data[MAX_STR_LEN];
|
//char data[MAX_STR_LEN];
|
||||||
uint64_t count;//统计命中次数
|
uint64_t count;//统计命中次数
|
||||||
|
char *data;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct http_data_htable
|
struct http_data_htable
|
||||||
@@ -63,10 +63,17 @@ int add_hlist_node(uint32_t key, char *buf, uint32_t buflen)
|
|||||||
MESA_handle_runtime_log(g_http_count_log_handler, RLOG_LV_FATAL, HTTP_COUNT_PLUGNAME, "malloc node failed!");
|
MESA_handle_runtime_log(g_http_count_log_handler, RLOG_LV_FATAL, HTTP_COUNT_PLUGNAME, "malloc node failed!");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
node->data = malloc(buflen+1);
|
||||||
|
if(!node->data)
|
||||||
|
{
|
||||||
|
printf("http_check.so: malloc node->data failed\n");
|
||||||
|
MESA_handle_runtime_log(g_http_count_log_handler, RLOG_LV_FATAL, HTTP_COUNT_PLUGNAME, "malloc node->data failed!");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
memset(node, 0, sizeof(struct http_count_node));
|
|
||||||
strncpy(node->data, buf, buflen);
|
strncpy(node->data, buf, buflen);
|
||||||
node->count++;//命中次数
|
node->data[buflen] = 0;
|
||||||
|
node->count = 1;//命中次数
|
||||||
node->next = g_http_data_htable->hlist_head[key].next;
|
node->next = g_http_data_htable->hlist_head[key].next;
|
||||||
g_http_data_htable->hlist_head[key].next = node;
|
g_http_data_htable->hlist_head[key].next = node;
|
||||||
g_http_data_htable->hlist_head[key].count++;//哈希链节点数
|
g_http_data_htable->hlist_head[key].count++;//哈希链节点数
|
||||||
@@ -148,13 +155,11 @@ uint32_t get_hash_key(void *buf, uint32_t buflen)
|
|||||||
return (jhash(buf, buflen, 0) % PERSIST_HASH_SIZE);
|
return (jhash(buf, buflen, 0) % PERSIST_HASH_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
int http_count_statistics(char *buf, uint32_t len)
|
int http_count_statistics(char *buf, uint32_t buflen)
|
||||||
{
|
{
|
||||||
uint32_t key = 0;
|
uint32_t key = 0;
|
||||||
uint32_t buflen = 0;
|
|
||||||
struct http_count_node *node = NULL;
|
struct http_count_node *node = NULL;
|
||||||
|
|
||||||
buflen = MIN(len, (MAX_STR_LEN-1));
|
|
||||||
key = get_hash_key(buf, buflen);
|
key = get_hash_key(buf, buflen);
|
||||||
node = find_hlist_node(key, buf, buflen);
|
node = find_hlist_node(key, buf, buflen);
|
||||||
if(node)
|
if(node)
|
||||||
@@ -281,6 +286,8 @@ void free_all(void)
|
|||||||
{
|
{
|
||||||
head->next = free_node->next;
|
head->next = free_node->next;
|
||||||
free_node->next = NULL;
|
free_node->next = NULL;
|
||||||
|
free(free_node->data);
|
||||||
|
free_node->data = NULL;
|
||||||
free(free_node);
|
free(free_node);
|
||||||
free_node = NULL;
|
free_node = NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user