Back to home page

Enduro/X

 
 

    


0001 /**
0002  * @brief ndrxd daemon ping
0003  *
0004  * @file cmd_dping.c
0005  */
0006 /* -----------------------------------------------------------------------------
0007  * Enduro/X Middleware Platform for Distributed Transaction Processing
0008  * Copyright (C) 2009-2016, ATR Baltic, Ltd. All Rights Reserved.
0009  * Copyright (C) 2017-2023, Mavimax, Ltd. All Rights Reserved.
0010  * This software is released under one of the following licenses:
0011  * AGPL (with Java and Go exceptions) or Mavimax's license for commercial use.
0012  * See LICENSE file for full text.
0013  * -----------------------------------------------------------------------------
0014  * AGPL license:
0015  *
0016  * This program is free software; you can redistribute it and/or modify it under
0017  * the terms of the GNU Affero General Public License, version 3 as published
0018  * by the Free Software Foundation;
0019  *
0020  * This program is distributed in the hope that it will be useful, but WITHOUT ANY
0021  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
0022  * PARTICULAR PURPOSE. See the GNU Affero General Public License, version 3
0023  * for more details.
0024  *
0025  * You should have received a copy of the GNU Affero General Public License along 
0026  * with this program; if not, write to the Free Software Foundation, Inc.,
0027  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0028  *
0029  * -----------------------------------------------------------------------------
0030  * A commercial use license is available from Mavimax, Ltd
0031  * contact@mavimax.com
0032  * -----------------------------------------------------------------------------
0033  */
0034 #include <string.h>
0035 #include <stdio.h>
0036 #include <stdlib.h>
0037 #include <memory.h>
0038 #include <sys/param.h>
0039 
0040 #include <ndrstandard.h>
0041 #include <ndebug.h>
0042 #include <nstdutil.h>
0043 
0044 #include <ndrxdcmn.h>
0045 #include <atmi_int.h>
0046 #include <gencall.h>
0047 #include <utlist.h>
0048 #include <Exfields.h>
0049 
0050 #include "xa_cmn.h"
0051 #include "nclopt.h"
0052 #include <ndrx.h>
0053 #include <qcommon.h>
0054 #include <atmi_cache.h>
0055 #include <ubfutil.h>
0056 /*---------------------------Externs------------------------------------*/
0057 /*---------------------------Macros-------------------------------------*/
0058 /*---------------------------Enums--------------------------------------*/
0059 /*---------------------------Typedefs-----------------------------------*/
0060 /*---------------------------Globals------------------------------------*/
0061 /*---------------------------Statics------------------------------------*/
0062 /*---------------------------Prototypes---------------------------------*/
0063 
0064 /**
0065  * Put ndrxd in sleep for certain period of time (used for debugging).
0066  * @param p_cmd_map
0067  * @param argc
0068  * @param argv
0069  * @param p_have_next
0070  * @return 
0071  */
0072 expublic int cmd_dsleep(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next)
0073 {
0074     int ret = EXSUCCEED;
0075     command_dsleep_t call;
0076     
0077     memset(&call, 0, sizeof(call));
0078     
0079     call.secs = atoi(argv[1]);
0080     
0081     ret=cmd_generic_listcall(p_cmd_map->ndrxd_cmd, NDRXD_SRC_ADMIN,
0082                     NDRXD_CALL_TYPE_DSLEEP,
0083                     (command_call_t *)&call, sizeof(call),
0084                     G_config.reply_queue_str,
0085                     G_config.reply_queue,
0086                     G_config.ndrxd_q,
0087                     G_config.ndrxd_q_str,
0088                     argc, argv,
0089                     p_have_next,
0090                     G_call_args,
0091                     EXFALSE,
0092                     G_config.listcall_flags);
0093     
0094 out:
0095     return ret;    
0096 }
0097 
0098 /**
0099  * Print NDRXD pid number (from file)
0100  * @param p_cmd_map
0101  * @param argc
0102  * @param argv
0103  * @param p_have_next
0104  * @return 
0105  */
0106 expublic int cmd_dpid(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next)
0107 {
0108     pid_t pid;
0109     int ret = EXSUCCEED;
0110     
0111     if (EXFAIL==(pid = ndrx_ndrxd_pid_get()))
0112     {
0113         EXFAIL_OUT(ret);
0114     }
0115     
0116     fprintf(stdout, "%d\n", pid);
0117     
0118 out:
0119     return ret;
0120     
0121 }
0122 /**
0123  * Perform ndrxd ping
0124  * @param p_cmd_map
0125  * @param argc
0126  * @param argv
0127  * @return SUCCEED
0128  */
0129 expublic int cmd_dping(cmd_mapping_t *p_cmd_map, int argc, char **argv, int *p_have_next)
0130 {
0131     int ret=EXSUCCEED;
0132     long loops = 4;
0133     long i;
0134     int seq;
0135     long tim;
0136     
0137     ncloptmap_t clopt[] =
0138     {
0139         {'c', BFLD_LONG, (void *)&loops, sizeof(loops), 
0140                                 NCLOPT_OPT|NCLOPT_HAVE_VALUE, "Count of pings, default 4"},
0141         {0}
0142     };
0143         
0144     /* parse command line */
0145     if (nstd_parse_clopt(clopt, EXTRUE,  argc, argv, EXFALSE))
0146     {
0147         fprintf(stderr, XADMIN_INVALID_OPTIONS_MSG);
0148         EXFAIL_OUT(ret);
0149     }
0150 
0151     /* we need to init TP subsystem... (daemon queues, etc...) */
0152     if (EXSUCCEED!=tpinit(NULL))
0153     {
0154         fprintf(stderr, "Failed to tpinit(): %s\n", tpstrerror(tperrno));
0155         EXFAIL_OUT(ret);
0156     }
0157     
0158     for (i=0; i<loops; i++)
0159     {
0160         if (EXSUCCEED!=ndrx_ndrxd_ping(&seq, &tim, G_config.reply_queue, 
0161                 G_config.reply_queue_str))
0162         {
0163             fprintf(stdout, "loop %ld: ndrxd_ping_seq=%d: timeout or system error\n", 
0164                     i, seq);
0165         }
0166         else
0167         {
0168             fprintf(stdout, "loop %ld: ndrxd_ping_seq=%d time=%ld ms\n", i, seq, tim);
0169         }
0170         
0171         sleep(1);
0172     }
0173     
0174 out:
0175     return ret;
0176 }
0177 
0178 /* vim: set ts=4 sw=4 et smartindent: */