static void fsof_service_node_watcher()

in agent/src/c/src/fsof_main.c [230:279]


static void fsof_service_node_watcher(zhandle_t* zh, int type, int state,
                                                const char* path, void* watcherCtx) {
    struct String_vector *str_list = NULL;
    struct String_vector *provider_list = NULL;
    struct timeval start = {0};
    struct timeval end   = {0};
    int exec_time = 0;
    char provider_key[512] = {0};
    int i;

    if (type == ZOO_CHILD_EVENT) {
            fsof_log_info(INFO,"service node watcher  entered %s\n",path);
            gettimeofday(&start,NULL);
            str_list = fsof_zk_get_children(path);
            gettimeofday(&end,NULL);
            exec_time = (end.tv_sec - start.tv_sec) * 1000000 + (end.tv_usec - start.tv_usec); //calculate execute time

            if (str_list != NULL) {
                sprintf(provider_key,"%s%s",path,PROVIDER_NAME);
                fsof_log_info(INFO,"%s|FSOF_AGENT|%d|get zookeeper data succeed!|get_zookeeper|%d",g_str_localip,0,exec_time);

                for (i = 0; i < str_list->count; i++) {
                    if (strcmp(str_list->data[i],PROVIDER_NODE_NAME) == 0) {
                        fsof_zk_add_listener(provider_key,fsof_provider_node_watcher);
                        gettimeofday(&start,NULL);
                        provider_list = fsof_zk_get_children(provider_key); 
                        gettimeofday(&end,NULL);
                        exec_time = (end.tv_sec - start.tv_sec) * 1000000 + (end.tv_usec - start.tv_usec); //calculate execute time

                        if (provider_list != NULL) { //deal 
                            //enum_provider_list(provider_list,provider_key);
                            parse_provider_key(provider_list,provider_key);
                            deallocate_String_vector(provider_list);
                            free(provider_list);
                            fsof_log_info(INFO,"%s|FSOF_AGENT|%d|get zookeeper data succeed!|get_zookeeper|%d",g_str_localip,0,exec_time);
                        } else {
                            fsof_log_info(INFO,"%s|FSOF_AGENT|%d|get zookeeper data failed!|get_zookeeper|%d",g_str_localip,-1,exec_time);
                        }
                        break;
                    }
                } 

                deallocate_String_vector(str_list);
                free(str_list);
            } else {
                fsof_log_info(INFO,"%s|FSOF_AGENT|%d|get zookeeper data failed!|get_zookeeper|%d",g_str_localip,-1,exec_time);
            }
    }

}