static void fsof_provider_node_watcher()

in agent/src/c/src/fsof_main.c [186:227]


static void fsof_provider_node_watcher(zhandle_t* zh, int type, int state,
                                                 const char* path, void* watcherCtx) {
    struct String_vector *str_list = NULL;
    struct timeval start = {0};
    struct timeval end   = {0};
    int exec_time = 0;

    if (type == ZOO_CHILD_EVENT) {

		fsof_log_info(INFO,"%s children node has been changed ,need to get new children list\n",path);
        if (strcmp(path,FSOF_ROOT_NAME) == 0) {
            gettimeofday(&start,NULL);
            str_list = fsof_zk_get_children(FSOF_ROOT_NAME);
            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) {
                fsof_log_info(INFO,"%s|FSOF_AGENT|%d|get zookeeper data succeed!|get_zookeeper|%d",g_str_localip,0,exec_time);
                set_all_providers_watcher(str_list);
            } else {
                fsof_log_info(INFO,"%s|FSOF_AGENT|%d|get zookeeper data failed!|get_zookeeper|%d",g_str_localip,-1,exec_time);
            }
        } else {
            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) {
                fsof_log_info(INFO,"%s|FSOF_AGENT|%d|get zookeeper data succeed!|get_zookeeper|%d",g_str_localip,0,exec_time);
                parse_provider_key(str_list,path);
            } else {
                fsof_log_info(INFO,"%s|FSOF_AGENT|%d|get zookeeper data failed!|get_zookeeper|%d",g_str_localip,-1,exec_time);
            }
        }
		
        if (str_list != NULL) {
            deallocate_String_vector(str_list);
            free(str_list);
        }		
    }
}