/* * Copyright (C), 2000-2007 by the monit project group. * All Rights Reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef MONIT_STATE_H #define MONIT_STATE_H /** * Manage service information persistently. Service data is saved to * a state file when monit runs in daemon mode for each poll * cycle. Monit use this file to recover from a crash or to maintain * service data persistently during a reload. The location of the * state file may be set from the command line or set in the monitrc * file, if not set, the default is ~/.monit.state. * * @author Jan-Henrik Haukeland, * @version \$Id: state.h,v 1.5 2007/07/25 12:54:30 hauk Exp $ * @file */ /** * Save service state information to the state file */ void State_save(); /** * Check if we should update current services with persistent state * information. The logic is as follows: Iff a state file is present * *and* older than the running monit daemon's lock file we have had a * crash and should update data from the state file. * @return TRUE if the state should be updated otherwise FALSE */ int State_shouldUpdate(); /** * Update the current service list with data from the state file. We * do *only* change services found in *both* the monitrc file and in * the state file. The algorithm: * * Assume the control file was changed and a new service (B) was added * so the monitrc file now contains the services: A B and C. The * running monit daemon only knows the services A and C. Upon restart * after a crash the monit daemon first read the monitrc file and * creates the service list structure with A B and C. We then read the * state file and update the service A and C since they are found in * the state file, B is not found in this file and therefore not * changed. * * The same strategy is used if a service was removed, e.g. if the * service A was removed from monitrc; when reading the state file, * service A is not found in the current service list (the list is * always generated from monitrc) and therefore A is simply discarded. * * Finally, after the monit service state is updated this function * writes the new state file. */ void State_update(); #endif