It's working... Please review code. Requires Cacti changes as well.

git-svn-id: svn+ssh://repo.cacti.net/var/data/svnroot/cacti/trunk/cactid_unix@1706 860744bd-22fc-0310-8c96-e9fe5004b5ca
This commit is contained in:
Larry Adams committed 2004-07-15 06:47:39 +00:00
1 parent d67fe4ff72
commit ed402f77df
6 files changed
+46 -20

No files matched your search

+1 -1
View File
@@ -202,7 +202,7 @@ int main(int argc, char *argv[]) {
pthread_attr_init(&attr);
// pthread_mutexattr_settype(&mutexattr);
pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_ERRORCHECK);
// pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_ERRORCHECK);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
init_mutexes();
+2
View File
@@ -70,6 +70,7 @@
#define LOCK_RRDTOOL 3
#define LOCK_PIPE 4
#define LOCK_SYSLOG 5
#define LOCK_PHP 6
#define LOCK_SNMP_O 0
#define LOCK_THREAD_O 1
@@ -77,6 +78,7 @@
#define LOCK_RRDTOOL_O 3
#define LOCK_PIPE_O 4
#define LOCK_SYSLOG_O 5
#define LOCK_PHP_O 6
#define POLLER_ACTION_SNMP 0
#define POLLER_ACTION_SCRIPT 1
+13
View File
@@ -34,6 +34,7 @@ pthread_mutex_t mysql_lock;
pthread_mutex_t rrdtool_lock;
pthread_mutex_t pipe_lock;
pthread_mutex_t syslog_lock;
pthread_mutex_t php_lock;
pthread_once_t snmp_lock_o = PTHREAD_ONCE_INIT;
pthread_once_t threads_lock_o = PTHREAD_ONCE_INIT;
@@ -41,6 +42,7 @@ pthread_once_t mysql_lock_o = PTHREAD_ONCE_INIT;
pthread_once_t rrdtool_lock_o = PTHREAD_ONCE_INIT;
pthread_once_t pipe_lock_o = PTHREAD_ONCE_INIT;
pthread_once_t syslog_lock_o = PTHREAD_ONCE_INIT;
pthread_once_t php_lock_o = PTHREAD_ONCE_INIT;
static void init_snmp_lock(void) {
pthread_mutex_init(&snmp_lock, PTHREAD_MUTEXATTR_DEFAULT);
@@ -66,6 +68,10 @@ static void init_syslog_lock(void) {
pthread_mutex_init(&syslog_lock, PTHREAD_MUTEXATTR_DEFAULT);
}
static void init_php_lock(void) {
pthread_mutex_init(&php_lock, PTHREAD_MUTEXATTR_DEFAULT);
}
void init_mutexes() {
pthread_once((pthread_once_t*) get_attr(LOCK_SNMP_O), init_snmp_lock);
pthread_once((pthread_once_t*) get_attr(LOCK_THREAD_O), init_thread_lock);
@@ -73,6 +79,7 @@ void init_mutexes() {
pthread_once((pthread_once_t*) get_attr(LOCK_RRDTOOL_O), init_rrdtool_lock);
pthread_once((pthread_once_t*) get_attr(LOCK_PIPE_O), init_pipe_lock);
pthread_once((pthread_once_t*) get_attr(LOCK_SYSLOG_O), init_syslog_lock);
pthread_once((pthread_once_t*) get_attr(LOCK_PHP_O), init_php_lock);
}
pthread_mutex_t* get_lock(int lock) {
@@ -97,6 +104,9 @@ pthread_mutex_t* get_lock(int lock) {
case LOCK_SYSLOG:
ret_val = &syslog_lock;
break;
case LOCK_PHP:
ret_val = &php_lock;
break;
}
return ret_val;
@@ -124,6 +134,9 @@ pthread_once_t* get_attr(int locko) {
case LOCK_SYSLOG_O:
ret_val = &syslog_lock_o;
break;
case LOCK_PHP_O:
ret_val = &php_lock_o;
break;
}
return ret_val;
+1
View File
@@ -29,6 +29,7 @@ static void init_mysql_lock(void);
static void init_rrdtool_lock(void);
static void init_pipe_lock(void);
static void init_syslog_lock(void);
static void init_php_lock(void);
void init_mutexes(void);
void thread_mutex_lock(int);
void thread_mutex_unlock(int);
+23 -12
View File
@@ -46,18 +46,30 @@ extern char **environ;
/******************************************************************************/
char *php_cmd(char *php_command) {
char *result_string;
char *spaceloc;
char command[BUFSIZE+5];
/* pad command with CR-LF */
sprintf(command,php_command,strlen(php_command));
strcat(command,"\r\n");
thread_mutex_lock(LOCK_PHP);
/* send command to the script server */
write(php_pipes.php_write_fd, command, strlen(command));
/* read the result from the php_command */
result_string = php_readpipe();
/* Clean garbage from string. Don't know why it's there... */
spaceloc = strchr(result_string, ' ');
if (spaceloc != 0) {
*spaceloc = '\0';
spaceloc = strchr(result_string, ' ');
if (spaceloc != 0)
*spaceloc = '\0';
}
thread_mutex_unlock(LOCK_PHP);
return result_string;
}
@@ -65,8 +77,8 @@ char *php_cmd(char *php_command) {
/* php_readpipe - Read a line from the PHP Script Server */
/******************************************************************************/
char *php_readpipe() {
char result[BUFSIZE];
char *result_string = (char *) malloc(BUFSIZE);
char result[BUFSIZE] = "";
fd_set fds;
int rescode, numfds;
struct timeval timeout;
@@ -82,7 +94,7 @@ char *php_readpipe() {
numfds = php_pipes.php_write_fd + 1;
/* Establish Timeout of 1 Second to Have PHP Script Server Respond */
timeout.tv_sec = 1;
timeout.tv_sec = 3;
timeout.tv_usec = 0;
/* Wait for A Response on The Pipes */
@@ -92,9 +104,13 @@ char *php_readpipe() {
/* Should only be the READ Pipe */
if (FD_ISSET(php_pipes.php_read_fd, &fds)) {
rescode = read(php_pipes.php_read_fd, result_string, BUFSIZE);
if (rescode > 0)
snprintf(result_string, rescode, "%s", result_string);
else
snprintf(result_string, 2, "%s", "U");
} else {
cacti_log("ERROR: The PHP Script Server Did not Respond in Time\n","e");
snprintf(result_string, BUFSIZE, "%s", "U");
snprintf(result_string, 2, "%s", "U");
}
return result_string;
@@ -109,7 +125,7 @@ int php_init() {
char logmessage[255];
int i = 0;
int pid;
char *argv[3];
char *argv[4];
int check;
int cancel_state;
char *result_string;
@@ -136,7 +152,8 @@ int php_init() {
/* establish arguments for script server execution */
argv[0] = set.phppath;
argv[1] = set.path_php_server;
argv[2] = NULL;
argv[2] = "cactid";
argv[3] = NULL;
/* fork a child process */
if (set.verbose >= DEBUG) {
@@ -197,15 +214,9 @@ int php_init() {
result_string = php_readpipe();
free(result_string);
if ((set.verbose == DEBUG) && (strstr(result_string, "Started")))
if ((set.verbose == DEBUG) && (strstr(result_string, "Started")))
cacti_log("CACTID: Confirmed PHP Script Server Running\n","e");
/* Make a sample call to the pipe to see if everything is running */
result_string = php_cmd("C:/wwwroot/cacti/scripts/ss_query_host_cpu.php ss_query_host_cpu 192.168.0.2 public 1 get usage 0");
// printf("The result was ->%s\n",result_string);
// free(result_string);
return 1;
}
+6 -7
View File
@@ -213,7 +213,7 @@ void poll_host(int host_id) {
}
if (set.verbose >= HIGH) {
printf("SNMPGET COMPLETE: Host [%i]: v%i: %s, dsname: %s, oid: %s, value: %s\n", host_id, host->snmp_version, host->hostname, entry->rrd_name, entry->arg1, entry->result);
printf("SNMPGET: Host [%i]: v%i: %s, dsname: %s, oid: %s, value: %s\n", host_id, host->snmp_version, host->hostname, entry->rrd_name, entry->arg1, entry->result);
}
break;
@@ -223,18 +223,17 @@ void poll_host(int host_id) {
free(poll_result);
if (set.verbose >= HIGH) {
printf("POLL COMPLETE: Command [%i]: %s, output: %s\n", host_id, entry->arg1, entry->result);
printf("SCRIPT: CMD [%i]: %s, output: %s\n", host_id, entry->arg1, entry->result);
}
break;
case POLLER_ACTION_PHP_SCRIPT_SERVER: /* execute script server */
// poll_result = php_cmd(entry->arg1);
//printf("The Poll Result was ->%s\n", poll_result);
// snprintf(entry->result, sizeof(entry->result), "%s", poll_result);
// free(poll_result);
poll_result = php_cmd(entry->arg1);
snprintf(entry->result, sizeof(entry->result), "%s", poll_result);
free(poll_result);
if (set.verbose >= HIGH) {
printf("PHP SERVER COMPLETE: Command [%i]: %s, output: %s\n", host_id, entry->arg1, entry->result);
printf("PHPSERVER: CMD [%i]: %s, output: %s\n", host_id, entry->arg1, entry->result);
}
break;