1 |
+ |
/* |
2 |
+ |
* i-scream central monitoring system |
3 |
+ |
* Copyright (C) 2000-2002 i-scream |
4 |
+ |
* |
5 |
+ |
* This program is free software; you can redistribute it and/or |
6 |
+ |
* modify it under the terms of the GNU General Public License |
7 |
+ |
* as published by the Free Software Foundation; either version 2 |
8 |
+ |
* of the License, or (at your option) any later version. |
9 |
+ |
* |
10 |
+ |
* This program is distributed in the hope that it will be useful, |
11 |
+ |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 |
+ |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 |
+ |
* GNU General Public License for more details. |
14 |
+ |
* |
15 |
+ |
* You should have received a copy of the GNU General Public License |
16 |
+ |
* along with this program; if not, write to the Free Software |
17 |
+ |
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
18 |
+ |
*/ |
19 |
+ |
|
20 |
|
#include <stdio.h> |
21 |
|
#include <sys/socket.h> |
22 |
|
#include <stdlib.h> |
25 |
|
#include <netinet/in.h> |
26 |
|
#include "ukcprog.h" |
27 |
|
#include <netdb.h> |
28 |
< |
#include <strings.h> |
28 |
> |
#include <string.h> |
29 |
|
#include "statgrab.h" |
30 |
+ |
#include <time.h> |
31 |
|
|
32 |
|
#define RECONFIGURE_RETURN_CODE 2 |
33 |
|
#define UDP_MAX_PACKET_SIZE 8192 |
294 |
|
return -1; |
295 |
|
} |
296 |
|
|
297 |
+ |
fflush(fm_fd_r); |
298 |
+ |
fflush(fm_fd_w); |
299 |
+ |
|
300 |
|
if(fclose(fm_fd_r) !=0){ |
301 |
|
errf("Failed to close read FD (%m)"); |
302 |
|
return -1; |
385 |
|
return -1; |
386 |
|
} |
387 |
|
|
388 |
+ |
close(sd); |
389 |
+ |
|
390 |
|
return 0; |
391 |
|
} |
392 |
|
|
394 |
|
ihost_state_t ihost_state; |
395 |
|
int heartbeat_exit; |
396 |
|
int counter=0; |
397 |
< |
long udp_time=0, tcp_time=0, cur_time=0; |
397 |
> |
long udp_time=0, tcp_time=0, stat_grab_time=0, cur_time=0; |
398 |
|
int sleep_delay=0; |
399 |
|
char *xml_stats; |
400 |
|
|
422 |
|
exit(1); |
423 |
|
} |
424 |
|
|
400 |
– |
/* get starting stats */ |
401 |
– |
if((heartbeat(&ihost_state)) == -1){ |
402 |
– |
errf("inital heartbeat failed (%m)"); |
403 |
– |
exit(1); |
404 |
– |
} |
405 |
– |
|
406 |
– |
|
407 |
– |
if((xml_stats=stat_grab(&ihost_state, counter)) == NULL){ |
408 |
– |
errf("Failed to get stats (%m)"); |
409 |
– |
exit(1); |
410 |
– |
} |
411 |
– |
|
412 |
– |
|
425 |
|
for(;;){ |
426 |
|
cur_time=time(NULL); |
427 |
|
if(cur_time>=tcp_time){ |
428 |
+ |
/*printf("sending TCP\n");*/ |
429 |
|
heartbeat_exit=heartbeat(&ihost_state); |
430 |
|
if(heartbeat_exit==RECONFIGURE_RETURN_CODE){ |
431 |
< |
errf("heartbeat needs to be reconfigured"); |
431 |
> |
/*errf("heartbeat needs to be reconfigured");*/ |
432 |
|
ihost_configure(&ihost_state); |
433 |
|
/* So udp doesn't wait til next sending before updating */ |
434 |
|
udp_time=0; |
439 |
|
} |
440 |
|
tcp_time=time(NULL)+ihost_state.tcp_update_time; |
441 |
|
} |
442 |
+ |
|
443 |
|
if(cur_time>=udp_time){ |
444 |
< |
send_stats(&ihost_state, xml_stats); |
445 |
< |
free(xml_stats); |
444 |
> |
/*printf("sending UDP\n");*/ |
445 |
> |
stat_grab_time=time(NULL); |
446 |
|
if((xml_stats=stat_grab(&ihost_state, counter)) == NULL){ |
447 |
|
errf("Failed to get stats (%m)"); |
448 |
|
exit(1); |
449 |
|
} |
450 |
< |
udp_time=time(NULL)+ihost_state.udp_update_time; |
450 |
> |
stat_grab_time=time(NULL)-stat_grab_time; |
451 |
> |
send_stats(&ihost_state, xml_stats); |
452 |
> |
free(xml_stats); |
453 |
> |
udp_time=time(NULL)+ihost_state.udp_update_time-stat_grab_time; |
454 |
|
} |
455 |
< |
if(tcp_time>udp_time){ |
456 |
< |
sleep_delay=time(NULL)-tcp_time; |
455 |
> |
|
456 |
> |
if(tcp_time<udp_time){ |
457 |
> |
sleep_delay=tcp_time-time(NULL); |
458 |
|
}else{ |
459 |
< |
sleep_delay=time(NULL)-udp_time; |
459 |
> |
sleep_delay=udp_time-time(NULL); |
460 |
|
} |
461 |
< |
sleep(sleep_delay); |
461 |
> |
|
462 |
> |
/*printf("tcp epoc: %ld \t udp epoc: %ld\ntime:%ld \tsleeping: %d\n", tcp_time, udp_time, time(NULL), sleep_delay);*/ |
463 |
> |
if(sleep_delay>0) sleep(sleep_delay); |
464 |
|
} |
465 |
|
return 0; |
466 |
|
} |