diff --git a/ProcessSocketTransfer/sourceProcess/.source.c.swp b/ProcessSocketTransfer/sourceProcess/.source.c.swp new file mode 100644 index 0000000000000000000000000000000000000000..5d0ef0e694e2026e7b57a5dd8fd6341c6d42b73c Binary files /dev/null and b/ProcessSocketTransfer/sourceProcess/.source.c.swp differ diff --git a/ProcessSocketTransfer/sourceProcess/Makefile b/ProcessSocketTransfer/sourceProcess/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..670dc1e341572d26f7590cdc9a9194693e24695a --- /dev/null +++ b/ProcessSocketTransfer/sourceProcess/Makefile @@ -0,0 +1,15 @@ +all : source + +LIBS = -lark_jansson -lzmq -L/home/hwajin/ARKCDC/lib +INC = -I/home/hwajin/ARKCDC/lib/include/ +CC = gcc + +source : source.o + $(CC) -o source source.o $(LIBS) + +source.o : source.c + $(CC) -c source.c comn.h $(INC) $(LIBS) + +clean : + rm source.o + diff --git a/ProcessSocketTransfer/sourceProcess/comn.h b/ProcessSocketTransfer/sourceProcess/comn.h new file mode 100644 index 0000000000000000000000000000000000000000..8d14677238e82b0d1c8c659524b00fe842974911 --- /dev/null +++ b/ProcessSocketTransfer/sourceProcess/comn.h @@ -0,0 +1,22 @@ +#include +#include +#include // zeromq library +#include // jansson library +#include +#include +#include +#include // size_t +#include + +void *context; +void *requester; + + + +int total_count = 0; +int insert_count = 0; +int insert_success = 0; +int update_count = 0; +int update_success = 0; +int delete_count = 0; +int delete_success = 0; diff --git a/ProcessSocketTransfer/sourceProcess/comn.h.gch b/ProcessSocketTransfer/sourceProcess/comn.h.gch new file mode 100644 index 0000000000000000000000000000000000000000..46b2660a2ad0ef426856a0269a1a91bdc6ac00d2 Binary files /dev/null and b/ProcessSocketTransfer/sourceProcess/comn.h.gch differ diff --git a/ProcessSocketTransfer/sourceProcess/json/test.json b/ProcessSocketTransfer/sourceProcess/json/test.json new file mode 100644 index 0000000000000000000000000000000000000000..1cdf0caa1f799b889fabe573f984e3051c599e57 --- /dev/null +++ b/ProcessSocketTransfer/sourceProcess/json/test.json @@ -0,0 +1,12 @@ +{ "schema": "schtest", "table": "test", "type": "insert", "process_column_list": [ { "column_name": "no", "column_type": "int", "column_size": 10, "column_value": 1 }, { "column_name": "id", "column_type": "char", "column_size": 10, "column_value": "id123" }, { "column_name": "name", "column_type": "char", "column_size": 15, "column_value": "user1" } ] } +{ "schema": "schtest", "table": "test", "type": "update", "process_column_list": [ { "column_name": "id", "column_type": "char", "column_size": 10, "column_value": "id456" }, { "column_name": "name", "column_type": "char", "column_size": 15, "column_value": "chuser1" } ], "condition_list": [ { "column_name": "no", "column_value": 1 } ] } +{ "schema": "schtest", "table": "test", "type": "delete", "condition_list": [ { "column_name": "name", "column_value": "user1" } ] } +{ "schema": "schtest", "table": "test", "type": "insert", "process_column_list": [ { "column_name": "no", "column_type": "int", "column_size": 10, "column_value": 1 }, { "column_name": "id", "column_type": "char", "column_size": 10, "column_value": "id123" }, { "column_name": "name", "column_type": "char", "column_size": 15, "column_value": "user1" } ] } +{ "schema": "schtest", "table": "test", "type": "update", "process_column_list": [ { "column_name": "id", "column_type": "char", "column_size": 10, "column_value": "changeid" } ], "condition_list": [ { "column_name": "no", "column_value": 1 } ] } +{ "schema": "schtest", "table": "test", "type": "delete", "condition_list": [ { "column_name": "name", "column_value": "user2" } ] } +{ "schema": "schtest", "table": "test", "type": "insert", "process_column_list": [ { "column_name": "no", "column_type": "int", "column_size": 10, "column_value": 3 }, { "column_name": "id", "column_type": "char", "column_size": 10, "column_value": "id345" }, { "column_name": "name", "column_type": "char", "column_size": 15, "column_value": "user3" } ] } +{ "schema": "schtest", "table": "test", "type": "update", "process_column_list": [ { "column_name": "id", "column_type": "char", "column_size": 10, "column_value": "id456" }, { "column_name": "name", "column_type": "char", "column_size": 15, "column_value": "user11" } ], "condition_list": [ { "column_name": "no", "column_value": 1 } ] } +{ "schema": "schtest", "table": "test", "type": "delete", "condition_list": [ { "column_name": "no", "column_value": 5 } ] } +{ "schema": "schtest", "table": "test", "type": "insert", "process_column_list": [ { "column_name": "no", "column_type": "int", "column_size": 10, "column_value": 2 }, { "column_name": "id", "column_type": "char", "column_size": 10, "column_value": "id234" }, { "column_name": "name", "column_type": "char", "column_size": 15, "column_value": "user2" } ] } +{ "schema": "schtest", "table": "test", "type": "update", "process_column_list": [ { "column_name": "name", "column_type": "char", "column_size": 15, "column_value": "chuser3name" } ], "condition_list": [ { "column_name": "no", "column_value": 3 } ] } +{ "schema": "schtest", "table": "test", "type": "delete", "condition_list": [ { "column_name": "no", "column_value": 1 } ] } diff --git a/ProcessSocketTransfer/sourceProcess/source b/ProcessSocketTransfer/sourceProcess/source new file mode 100755 index 0000000000000000000000000000000000000000..a4b242111ec265e93ab0681a00da851c46971cba Binary files /dev/null and b/ProcessSocketTransfer/sourceProcess/source differ diff --git a/ProcessSocketTransfer/sourceProcess/source.c b/ProcessSocketTransfer/sourceProcess/source.c new file mode 100644 index 0000000000000000000000000000000000000000..6dc2aa3fffd095871d5d03e7ca79621a48725c0f --- /dev/null +++ b/ProcessSocketTransfer/sourceProcess/source.c @@ -0,0 +1,163 @@ +#include "comn.h" + +int ConnectSocket(char path[20]); +void ParsingResult(char recv_buf[1000]); +void PrintExecuteResult(); + +int main(int argc, char *argv[]) { + // check command argument + if (argc == 4) { + char file_path[20]; + memset(file_path, 0, sizeof(file_path)); + sprintf(file_path, "./json/%s.json", argv[3]); + printf("file_path : %s\n", file_path); + + // check file exist + if (-1 != access(file_path, 0)) { + // socket connection + char msg_buf[1000] = {0, }; + char recv_buf[1000] = {0, }; + char path[20]; + int is_connect = 0; + FILE *file; + int i = 1; + json_t *jstr; + json_error_t *error; + + memset(path, 0, sizeof(path)); + sprintf(path, "tcp://%s:%s", argv[1], argv[2]); + printf("path :: %s\n", path); + + is_connect = ConnectSocket(path); + if(0 != is_connect) { + printf("## socket connect fail ##\n"); + return; + } + printf("## socket connect success ##\n"); + + // check json file open + file = fopen(file_path, "r"); + if(NULL == file) { + printf("## file open fail ##\n"); + return; + } + printf("## file open success ##\n"); + + // load file + while (!feof(file)) { + if (fgets(msg_buf, sizeof(msg_buf), file) == 0) { + strcpy(msg_buf, "process exist"); + if (-1 == zmq_send(requester, msg_buf, sizeof(msg_buf), 0)) { + printf("## send fail ##\n"); + break; + } + if (-1 == zmq_recv(requester, recv_buf, sizeof(recv_buf), 0)) { + printf("## recv fail ##\n"); + break; + } + ParsingResult(recv_buf); + break; + } + + printf("msg_buf :: %s\n", msg_buf); + // check json format + jstr = json_loads(msg_buf, 0, &error); + if(!json_is_object(jstr)) { + printf("## not json format ##"); + break; + } + + printf("msg send ···\n"); + + if(i < 5) { + if (-1 == zmq_send(requester, msg_buf, sizeof(msg_buf), ZMQ_SNDMORE)) { + printf("## send fail ##\n"); + break; + } + } else { + if (-1 == zmq_send(requester, msg_buf, sizeof(msg_buf), 0)) { + printf("## send fail ##\n"); + break; + } + if (-1 == zmq_recv(requester, recv_buf, sizeof(recv_buf), 0)) { + printf("## recv fail ##\n"); + break; + } + //printf("######\nrecv_buf : %s\n", recv_buf); + // recv_buf 파싱 처리하고 결과값 계속 누적 + ParsingResult(recv_buf); + + i = 0; + } + + i++; + sleep(1); + } + + if(0 != fclose(file)) { + printf("## file close fail ##\n"); + } + printf("## file close success ##\n"); + PrintExecuteResult(); + } else{ + printf("### no exist file path ###\n"); + } + + } else { + printf("### no enough arguments ###\n"); + } + + return 0; +} + +int ConnectSocket(char path[20]) { + context = zmq_ctx_new(); + assert(context != NULL); + requester = zmq_socket(context, ZMQ_REQ); + assert(requester != NULL); + + // socket connect + int result = 0; + result = zmq_connect(requester, path); + return result; +} + +void ParsingResult(char recv_buf[1000]) { + printf("\n### recv_buf ###\n%s\n", recv_buf); + json_t *result_json; + json_error_t *error; + json_t *key, *obj; + json_int_t result_value; + + result_json = json_loads(recv_buf, 0, &error); + + json_object_foreach(result_json, key, obj) { + if(json_is_integer(obj)) { + result_value = json_integer_value(obj); + + if(0 == strcmp(key, "total_count")) { + total_count += result_value; + printf("total :: %d\n", total_count); + } else if(0 == strcmp(key, "insert_count")) { + insert_count += result_value; + } else if(0 == strcmp(key, "insert_success")) { + insert_success += result_value; + } else if(0 == strcmp(key, "update_count")) { + update_count += result_value; + } else if(0 == strcmp(key, "update_success")) { + update_success += result_value; + } else if(0 == strcmp(key, "delete_count")) { + delete_count += result_value; + } else if(0 == strcmp(key, "delete_success")) { + delete_success += result_value; + } + } + } +} + +void PrintExecuteResult() { + printf("[Result] DML Count : %d\n", total_count); + printf("Insert : %d/%d\n", insert_success, insert_count); + printf("Update : %d/%d\n", update_success, update_count); + printf("Delete : %d/%d\n", delete_success, delete_count); +} diff --git a/ProcessSocketTransfer/sourceProcess/source.o b/ProcessSocketTransfer/sourceProcess/source.o new file mode 100644 index 0000000000000000000000000000000000000000..c1fc2ce2a9f2cf08a2031f685ba10ba1ffc014fc Binary files /dev/null and b/ProcessSocketTransfer/sourceProcess/source.o differ