summaryrefslogtreecommitdiffstats
path: root/hbeat.c
diff options
context:
space:
mode:
authorDean Jansa <djansa@redhat.com>2005-10-06 20:06:41 +0000
committerNathan Straz <nstraz@redhat.com>2008-09-23 09:37:45 -0400
commit5da52098beb4fa5af4b592b3f050fcc12e0bd05b (patch)
treef61ee7f110582435e76be49acc1187173e3709f5 /hbeat.c
parent89d2504db378c5b091db5229484af5c58851fa5f (diff)
downloadqarsh-5da52098beb4fa5af4b592b3f050fcc12e0bd05b.tar.gz
qarsh-5da52098beb4fa5af4b592b3f050fcc12e0bd05b.tar.xz
qarsh-5da52098beb4fa5af4b592b3f050fcc12e0bd05b.zip
Added interfaces to get/set the hbeat state.
Diffstat (limited to 'hbeat.c')
-rw-r--r--hbeat.c72
1 files changed, 55 insertions, 17 deletions
diff --git a/hbeat.c b/hbeat.c
index e0255a3..6242d38 100644
--- a/hbeat.c
+++ b/hbeat.c
@@ -17,7 +17,7 @@
struct hbeat_s {
char *host;
int max_timeout;
- enum {HOST_ALIVE, HOST_QUIET, HOST_TIMEOUT, HOST_REBOOT} rhost_state;
+ hbeat_state_t rhost_state;
unsigned int last_rhost_btime;
time_t start_quiet_time;
};
@@ -85,38 +85,76 @@ hbeat(hbeat_t hbh)
struct hbeat_s *hbeatp = hbh;
unsigned int hbeat;
time_t current_time;
+ int retval;
/* User disabled heart beating */
if (!hbeatp->max_timeout) {
+ hbeatp->rhost_state = HOST_HBEAT_DISABLED;
return 1;
}
hbeat = btime(hbeatp->host);
current_time = time(NULL);
- if (!hbeat && (hbeatp->rhost_state == HOST_QUIET)) {
- if (current_time - hbeatp->start_quiet_time
- > hbeatp->max_timeout) {
- hbeatp->rhost_state = HOST_TIMEOUT;
- return 0;
- }
- } else {
- hbeatp->rhost_state = HOST_QUIET;
- hbeatp->start_quiet_time = time(NULL);
+ if (!hbeat) {
+ switch (hbeatp->rhost_state) {
+ case HOST_ALIVE:
+ hbeatp->rhost_state = HOST_QUIET;
+ hbeatp->start_quiet_time = time(NULL);
+ retval = 1;
+ break;
+
+ case HOST_QUIET:
+ if (current_time - hbeatp->start_quiet_time
+ > hbeatp->max_timeout) {
+ hbeatp->rhost_state = HOST_TIMEOUT;
+ retval = 0;
+ } else {
+ retval = 1;
+ }
+ break;
+
+ case HOST_TIMEOUT:
+ case HOST_REBOOT:
+ retval = 0;
+ break;
+
+ case HOST_HBEAT_DISABLED:
+ retval = 1;
+ break;
+ }
}
if (hbeat) {
- if (hbeatp->last_rhost_btime == 0) {
+ if (hbeatp->rhost_state == HOST_REBOOT) {
+ retval = 0;
+ } else {
hbeatp->last_rhost_btime = hbeat;
hbeatp->rhost_state = HOST_ALIVE;
hbeatp->start_quiet_time = 0;
- }
+ retval = 1;
- if (abs(hbeat - hbeatp->last_rhost_btime) > 5) {
- hbeatp->rhost_state = HOST_REBOOT;
- return 0;
- }
+ if (abs(hbeat - hbeatp->last_rhost_btime) > 5) {
+ hbeatp->rhost_state = HOST_REBOOT;
+ retval = 0;
+ }
+ }
}
- return 1;
+ return retval;
+}
+
+
+hbeat_state_t
+hbeat_getstate(hbeat_t hbh)
+{
+ return ((struct hbeat_s *)hbh)->rhost_state;
+}
+
+
+void
+hbeat_setstate(hbeat_t hbh, hbeat_state_t state)
+{
+ ((struct hbeat_s *)hbh)->rhost_state = state;
+ return;
}