[nagiosplug] Added skeleton

Ton Voon tonvoon at users.sourceforge.net
Mon Jun 21 14:07:54 CEST 2010


 Module: nagiosplug
 Branch: ton/state
 Commit: 95b190f3dee629b1c1ee2fab5b69c08e511f51b3
 Author: Ton Voon <ton.voon at opsera.com>
   Date: Thu Jun 17 10:16:43 2010 +0100
    URL: http://nagiosplug.git.sf.net/git/gitweb.cgi?p=nagiosplug/nagiosplug;a=commit;h=95b190f

Added skeleton

---

 lib/utils_base.c |   61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 lib/utils_base.h |   24 +++++++++++++++++++++
 2 files changed, 85 insertions(+), 0 deletions(-)

diff --git a/lib/utils_base.c b/lib/utils_base.c
index 4303e15..c9f0912 100644
--- a/lib/utils_base.c
+++ b/lib/utils_base.c
@@ -310,3 +310,64 @@ char *np_extract_value(const char *varlist, const char *name, char sep) {
 	return value;
 }
 
+/*
+ * Returns a string to use as a keyname, based on an md5 hash of argv, thus
+ * hopefully a unique key per service/plugin invocation. Use the extra-opts
+ * parse of argv, so that uniqueness in parameters are reflected there.
+ */
+char *np_state_generate_key(const char **argv) {
+	return "Ahash";
+}
+
+/*
+ * Initiatializer for state routines.
+ * Sets variables. Generates filename. Returns np_state_key. die with
+ * UNKNOWN if exception
+ */
+state_key *np_state_init(char *plugin_name, char *keyname, int expected_data_version) {
+	state_key *this_state = NULL;
+
+	this_state = (state_key *) malloc(sizeof(state_key));
+	
+	if(this_state==NULL)
+		die(STATE_UNKNOWN, _("Cannot allocate memory for state key"));
+
+	this_state->name=keyname;
+	this_state->plugin_name=plugin_name;
+	this_state->data_version=expected_data_version;
+
+	/* Calculate filename */
+	this_state->_filename="Tobedone";
+
+	return this_state;
+}
+
+/*
+ * Will return NULL if no data is available (first run). If key currently
+ * exists, read data. If state file format version is not expected, return
+ * as if no data. Get state data version number and compares to expected.
+ * If numerically lower, then return as no previous state. die with UNKNOWN
+ * if exceptional error.
+ */
+state_data *np_state_read(state_key *my_state_key) {
+	state_data *this_state_data=NULL;
+	my_state_key->state_data = this_state_data;
+	return this_state_data;
+}
+
+/*
+ * If time=NULL, use current time. Create state file, with state format 
+ * version, default text. Writes version, time, and data. Avoid locking 
+ * problems - use mv to write and then swap. Possible loss of state data if 
+ * two things writing to same key at same time. 
+ * Will die with UNKNOWN if errors
+ */
+void np_state_write_string(state_key *my_state_key, time_t data_time, char *data_string) {
+}
+
+/*
+ * Cleanup
+ */
+void np_state_cleanup(state_key *my_state_key) {
+}
+
diff --git a/lib/utils_base.h b/lib/utils_base.h
index 49e40a6..6e1af94 100644
--- a/lib/utils_base.h
+++ b/lib/utils_base.h
@@ -28,6 +28,23 @@ typedef struct thresholds_struct {
 	range	*critical;
 	} thresholds;
 
+#define STATE_FORMAT_VERSION "1"
+
+typedef struct state_data_struct {
+	time_t	time;
+	void	*data;
+	int	length; /* Of binary data */
+	} state_data;
+
+
+typedef struct state_key_struct {
+	char       *name;
+	char       *plugin_name;
+	int        data_version;
+	char       *_filename;
+	state_data *state_data;
+	} state_key;
+
 range *parse_range_string (char *);
 int _set_thresholds(thresholds **, char *, char *);
 void set_thresholds(thresholds **, char *, char *);
@@ -67,4 +84,11 @@ char *np_extract_value(const char*, const char*, char);
  */
 #define np_extract_ntpvar(l, n) np_extract_value(l, n, ',')
 
+
+char *np_state_generate_key(const char **);
+state_key *np_state_init(char *, char *, int);
+state_data *np_state_read(state_key *);
+void np_state_write_string(state_key *, time_t, char *);
+void np_state_cleanup(state_key *);
+
 #endif /* _UTILS_BASE_ */





More information about the Commits mailing list