Commit a054f6a2 authored by Matteo Quintiliani's avatar Matteo Quintiliani
Browse files

Improvement: also on earthworm, nmxptool responds quickly to 'stopmodule' and...

Improvement: also on earthworm, nmxptool responds quickly to 'stopmodule' and 'restart' when the server is unreachable.

git-svn-id: file:///home/quintiliani/svncopy/nmxptool/trunk@1402 3cd66e75-5955-46cb-a940-c26e5fc5497d
parent 57733476
Loading
Loading
Loading
Loading
+6 −4
Original line number Original line Diff line number Diff line
@@ -2,10 +2,12 @@
nmxptool Release History
nmxptool Release History
#########################
#########################


* Release 2.1.0-rc2    (2012/02/16) 
* Release 2.1.0-rc3    (2012/03/01) 
    - Added capability to specify the location code within the channel
    - Improvement: added capability to specify the location code within the
        pattern declaration (options -C, -n).
        channel pattern declaration (options -C, -n).
    - Incremented value of NMXP_MAX_LENGTH_DATA_BUFFER.
    - Improvement: also on earthworm, nmxptool responds quickly to 'stopmodule'
        and 'restart' when the server is unreachable.
    - Improvement: incremented value of NMXP_MAX_LENGTH_DATA_BUFFER.
    - Fixed minor bug: computing endtime for earthworm tracebuf.
    - Fixed minor bug: computing endtime for earthworm tracebuf.
    - Fixed minor bug: in some cases did not close .nmxpstate file.
    - Fixed minor bug: in some cases did not close .nmxpstate file.


+9 −5
Original line number Original line Diff line number Diff line
@@ -45,6 +45,7 @@ int nmxp_openSocket(char *hostname, int portNum, int (*func_cond)(void))
  struct hostent *hostinfo = NULL;
  struct hostent *hostinfo = NULL;
  struct sockaddr_in psServAddr;
  struct sockaddr_in psServAddr;
  struct in_addr hostaddr;
  struct in_addr hostaddr;
  time_t timeStart;


#ifdef HAVE_WINDOWS_H
#ifdef HAVE_WINDOWS_H
  nmxp_initWinsock();
  nmxp_initWinsock();
@@ -109,11 +110,14 @@ int nmxp_openSocket(char *hostname, int portNum, int (*func_cond)(void))
		NMXP_LOG_STR(inet_ntoa(hostaddr)), portNum, sleepTime);
		NMXP_LOG_STR(inet_ntoa(hostaddr)), portNum, sleepTime);
	nmxp_closeSocket(isock);
	nmxp_closeSocket(isock);
	isock = -1;
	isock = -1;
	timeStart = time(NULL);

	while(!func_cond()  &&  (time(NULL) - timeStart) < sleepTime) {
	  nmxp_sleep (1);
	}


	if(!func_cond()) {
	    nmxp_sleep (sleepTime);
	sleepTime *= 2;
	sleepTime *= 2;
	    if (sleepTime > NMXP_SLEEPMAX)
	if (sleepTime > NMXP_SLEEPMAX) {
	  sleepTime = NMXP_SLEEPMAX;
	  sleepTime = NMXP_SLEEPMAX;
	}
	}
    }
    }
+34 −6
Original line number Original line Diff line number Diff line
@@ -72,6 +72,8 @@ static void ShutdownHandler(int sig);
static void nmxptool_AlarmHandler(int sig);
static void nmxptool_AlarmHandler(int sig);
static void CloseConnectionHandler(int sig);
static void CloseConnectionHandler(int sig);


int nmxptool_exitcondition_on_open_socket();

void flushing_raw_data_stream();
void flushing_raw_data_stream();


void *nmxptool_print_info_raw_stream(void *arg);
void *nmxptool_print_info_raw_stream(void *arg);
@@ -264,7 +266,7 @@ int main (int argc, char **argv) {
	/* List available channels on server */
	/* List available channels on server */
	if(params.flag_listchannels) {
	if(params.flag_listchannels) {


	    meta_channelList = nmxp_getMetaChannelList(params.hostname, params.portnumberdap, NMXP_DATA_TIMESERIES, params.flag_request_channelinfo, params.datas_username, params.datas_password, &channelList, nmxptool_sigcondition_read);
	    meta_channelList = nmxp_getMetaChannelList(params.hostname, params.portnumberdap, NMXP_DATA_TIMESERIES, params.flag_request_channelinfo, params.datas_username, params.datas_password, &channelList, nmxptool_exitcondition_on_open_socket);


	    /* nmxp_meta_chan_print(meta_channelList); */
	    /* nmxp_meta_chan_print(meta_channelList); */
	    nmxp_meta_chan_print_with_match(meta_channelList, params.channels);
	    nmxp_meta_chan_print_with_match(meta_channelList, params.channels);
@@ -273,7 +275,7 @@ int main (int argc, char **argv) {


	} else if(params.flag_listchannelsnaqs) {
	} else if(params.flag_listchannelsnaqs) {


	    channelList = nmxp_getAvailableChannelList(params.hostname, params.portnumberpds, NMXP_DATA_TIMESERIES, nmxptool_sigcondition_read);
	    channelList = nmxp_getAvailableChannelList(params.hostname, params.portnumberpds, NMXP_DATA_TIMESERIES, nmxptool_exitcondition_on_open_socket);


	    /* nmxp_chan_print_channelList(channelList); */
	    /* nmxp_chan_print_channelList(channelList); */
	    nmxp_chan_print_channelList_with_match(channelList, params.channels, 1);
	    nmxp_chan_print_channelList_with_match(channelList, params.channels, 1);
@@ -361,12 +363,12 @@ int main (int argc, char **argv) {
	if_dap_condition_only_one_time = 1;
	if_dap_condition_only_one_time = 1;
	/* From DataServer */
	/* From DataServer */
	if(!nmxp_getMetaChannelList(params.hostname, params.portnumberdap, NMXP_DATA_TIMESERIES,
	if(!nmxp_getMetaChannelList(params.hostname, params.portnumberdap, NMXP_DATA_TIMESERIES,
		    params.flag_request_channelinfo, params.datas_username, params.datas_password, &channelList, nmxptool_sigcondition_read)) {
		    params.flag_request_channelinfo, params.datas_username, params.datas_password, &channelList, nmxptool_exitcondition_on_open_socket)) {
	    return -1;
	    return -1;
	}
	}
    } else {
    } else {
	/* From NaqsServer */
	/* From NaqsServer */
	channelList = nmxp_getAvailableChannelList(params.hostname, params.portnumberpds, NMXP_DATA_TIMESERIES, nmxptool_sigcondition_read);
	channelList = nmxp_getAvailableChannelList(params.hostname, params.portnumberpds, NMXP_DATA_TIMESERIES, nmxptool_exitcondition_on_open_socket);
    }
    }


    if(!channelList) {
    if(!channelList) {
@@ -486,7 +488,7 @@ int main (int argc, char **argv) {
	/* ************************************************************** */
	/* ************************************************************** */


	/* DAP Step 1: Open a socket */
	/* DAP Step 1: Open a socket */
	if( (naqssock = nmxp_openSocket(params.hostname, params.portnumberdap, nmxptool_sigcondition_read)) == NMXP_SOCKET_ERROR) {
	if( (naqssock = nmxp_openSocket(params.hostname, params.portnumberdap, nmxptool_exitcondition_on_open_socket)) == NMXP_SOCKET_ERROR) {
	    nmxp_log(NMXP_LOG_ERR, NMXP_LOG_D_CONNFLOW, "Error opening socket!\n");
	    nmxp_log(NMXP_LOG_ERR, NMXP_LOG_D_CONNFLOW, "Error opening socket!\n");
	    return 1;
	    return 1;
	}
	}
@@ -822,7 +824,7 @@ int main (int argc, char **argv) {
	/* ************************************************************* */
	/* ************************************************************* */


	/* PDS Step 1: Open a socket */
	/* PDS Step 1: Open a socket */
	naqssock = nmxp_openSocket(params.hostname, params.portnumberpds, nmxptool_sigcondition_read);
	naqssock = nmxp_openSocket(params.hostname, params.portnumberpds, nmxptool_exitcondition_on_open_socket);


	if(naqssock == NMXP_SOCKET_ERROR) {
	if(naqssock == NMXP_SOCKET_ERROR) {
	    return 1;
	    return 1;
@@ -1225,6 +1227,32 @@ int main (int argc, char **argv) {
} /* End MAIN */
} /* End MAIN */




int nmxptool_exitcondition_on_open_socket() {
    int ret = nmxptool_sigcondition_read();
#ifdef HAVE_EARTHWORMOBJS
    if(!ret) {
	if(params.ew_configuration_file) {

	    /* Check if we are being asked to terminate */
	    if( (ret  = nmxptool_ew_check_flag_terminate()) ) {

		logit ("t", "nmxptool terminating on request\n");
		nmxptool_ew_send_error(NMXPTOOL_EW_ERR_TERMREQ, NULL, params.hostname);

		nmxptool_sigcondition_write(15);
	    }

	    /* Check if we need to send heartbeat message */
	    nmxptool_ew_send_heartbeat_if_needed();

	}
    }
#endif
    return ret;
}



void flushing_raw_data_stream() {
void flushing_raw_data_stream() {
    int to_cur_chan;
    int to_cur_chan;