3 #include <sys/types.h>
\r
9 #include <proc/procps.h>
\r
10 #include "../../src/sharedmemory.h"
\r
13 struct shmid_ds buf;
\r
17 enum{ NOP_SHM, WAIT_ATTACH_SHM, TRY_ATTACH_SHM, MAT_SHM, CLEAN_UP_SHM, RUN_SHM };
\r
19 unsigned int shm_statem = TRY_ATTACH_SHM;
\r
23 int main(int argc, char **argv)
\r
26 key_t key = 0x53021d79;
\r
28 while ((opt = getopt(argc, argv, "w")) != -1) {
\r
34 fprintf(stderr, "Usage: %s [-w]\n", argv[0]);
\r
35 fprintf(stderr, "\t-w - Wait for umurmurd to create shm area. useful if you need to start from init.d script\n" );
\r
41 //key = ftok(".", 'S'); // check if ftok works if both umurmur and mon-umurmur are in same dir
\r
42 // using my own key for now. makes dev easier will fix
\r
46 shm_statem = WAIT_ATTACH_SHM;
\r
51 switch( shm_statem )
\r
57 case WAIT_ATTACH_SHM:
\r
58 printf( "waiting on umurmurd to be run\n\r"); fflush(stdout);
\r
59 while( ( shmid = shmget( key, 0, 0) ) == -1 )
\r
61 shm_statem = MAT_SHM;
\r
63 case TRY_ATTACH_SHM:
\r
64 if( ( shmid = shmget( key, 0, 0) ) == -1 )
\r
67 printf( "umurmurd doesn't seem to be running\n\r" );
\r
70 shm_statem = MAT_SHM;
\r
73 if( ( shmptr = shmat( shmid, 0, 0 ) ) == (void *) (-1) ) ////MJP BUG?
\r
78 printf( "shmid: %i\n\r", shmid );
\r
79 printf( "umumurd PID: %u\n\r", shmptr->umurmurd_pid );
\r
80 shm_statem = RUN_SHM;
\r
100 shmctl( shmid, IPC_STAT, &buf ); //MJP BUG check for errors here
\r
102 printf("\033[2J\033[H"); //clear screen VT100
\r
104 printf( "attach: %lu SCC: %i SMC: %i\n", (unsigned long int)buf.shm_nattch, shmptr->clientcount, shmptr->server_max_clients );
\r
105 for( cc = 0 ; cc < shmptr->server_max_clients ; cc++ )
\r
108 if( !shmptr->client[cc].authenticated )
\r
111 printf( "%s@%s:%i in channel: %s\n\
\r
112 \tlastActivity/connectTime/idleTime: %llu/%llu/%llu idleTime: %llu \n\
\r
113 \tUDP_Avg/Var: %3.2f/%3.2f \n\
\r
114 \tTCP_Avg/Var: %3.2f/%3.2f \n\
\r
115 \tUDP_C/TCP_C: %lu/%lu\n",
\r
119 shmptr->client[cc].username,
\r
120 shmptr->client[cc].ipaddress,
\r
121 shmptr->client[cc].udp_port,
\r
122 shmptr->client[cc].channel,
\r
123 shmptr->client[cc].lastActivity,
\r
124 shmptr->client[cc].connectTime,
\r
125 shmptr->client[cc].idleTime,
\r
126 (long long unsigned int)shmptr->client[cc].lastActivity - shmptr->client[cc].idleTime,
\r
127 shmptr->client[cc].UDPPingAvg,
\r
128 shmptr->client[cc].UDPPingVar,
\r
129 shmptr->client[cc].TCPPingAvg,
\r
130 shmptr->client[cc].TCPPingVar,
\r
131 shmptr->client[cc].UDPPackets,
\r
132 shmptr->client[cc].TCPPackets
\r
133 ); fflush(stdout); // fflush need because of sleep() call
\r
135 sleep( 1 ); // Sleep for 1 sec
\r