2012-03-26 09:37:55 +00:00
< ? php
2015-07-13 20:10:26 +02:00
if ( $device [ 'os_group' ] == 'unix' ) {
echo $config [ 'project_name' ] . ' UNIX Agent: ' ;
2015-11-17 00:20:06 +00:00
$agent_port = get_dev_attrib ( $device , 'override_Unixagent_port' );
if ( empty ( $agent_port )) {
$agent_port = $config [ 'unix-agent' ][ 'port' ];
}
if ( empty ( $config [ 'unix-agent' ][ 'connection-timeout' ])) {
$config [ 'unix-agent' ][ 'connection-timeout' ] = $config [ 'unix-agent-connection-time-out' ];
}
if ( empty ( $config [ 'unix-agent' ][ 'read-timeout' ])) {
$config [ 'unix-agent' ][ 'read-timeout' ] = $config [ 'unix-agent-read-time-out' ];
}
2015-07-13 20:10:26 +02:00
$agent_start = utime ();
2015-11-17 00:20:06 +00:00
$agent = fsockopen ( $device [ 'hostname' ], $agent_port , $errno , $errstr , $config [ 'unix-agent' ][ 'connection-timeout' ]);
2015-07-13 20:10:26 +02:00
// Set stream timeout (for timeouts during agent fetch
2015-11-17 00:20:06 +00:00
stream_set_timeout ( $agent , $config [ 'unix-agent' ][ 'read-timeout' ]);
2015-07-13 20:10:26 +02:00
$agentinfo = stream_get_meta_data ( $agent );
if ( ! $agent ) {
echo 'Connection to UNIX agent failed on port ' . $port . '.' ;
2012-04-27 17:18:26 +00:00
}
2015-07-13 20:10:26 +02:00
else {
// fetch data while not eof and not timed-out
while (( ! feof ( $agent )) && ( ! $agentinfo [ 'timed_out' ])) {
$agent_raw .= fgets ( $agent , 128 );
$agentinfo = stream_get_meta_data ( $agent );
}
if ( $agentinfo [ 'timed_out' ]) {
echo 'Connection to UNIX agent timed out during fetch on port ' . $port . '.' ;
}
2012-03-26 09:37:55 +00:00
}
2012-04-21 00:36:55 +00:00
2015-07-13 20:10:26 +02:00
$agent_end = utime ();
$agent_time = round (( $agent_end - $agent_start ) * 1000 );
2012-04-26 11:57:52 +00:00
2015-07-13 20:10:26 +02:00
if ( ! empty ( $agent_raw )) {
echo 'execution time: ' . $agent_time . 'ms' ;
$agent_rrd = $config [ 'rrd_dir' ] . '/' . $device [ 'hostname' ] . '/agent.rrd' ;
if ( ! is_file ( $agent_rrd )) {
rrdtool_create ( $agent_rrd , 'DS:time:GAUGE:600:0:U ' . $config [ 'rrd_rra' ]);
}
2012-05-20 23:14:08 +00:00
2015-08-18 16:26:55 +00:00
$fields = array (
'time' => $agent_time ,
);
rrdtool_update ( $agent_rrd , $fields );
2015-07-13 20:10:26 +02:00
$graphs [ 'agent' ] = true ;
foreach ( explode ( '<<<' , $agent_raw ) as $section ) {
list ( $section , $data ) = explode ( '>>>' , $section );
list ( $sa , $sb ) = explode ( '-' , $section , 2 );
2015-08-20 12:25:47 +02:00
$agentapps = array (
" apache " ,
2015-11-10 11:06:03 +01:00
" ceph " ,
2015-08-20 12:25:47 +02:00
" mysql " ,
" nginx " ,
" bind " ,
2015-11-23 14:12:46 +01:00
" powerdns " ,
2015-08-27 13:18:53 +02:00
" proxmox " ,
2015-08-20 12:25:47 +02:00
" tinydns " );
if ( in_array ( $section , $agentapps )) {
$agent_data [ 'app' ][ $section ] = trim ( $data );
2015-07-13 20:10:26 +02:00
}
if ( ! empty ( $sa ) && ! empty ( $sb )) {
$agent_data [ $sa ][ $sb ] = trim ( $data );
}
else {
$agent_data [ $section ] = trim ( $data );
}
} //end foreach
2015-08-20 13:26:18 +02:00
d_echo ( $agent_data );
2012-05-20 23:14:08 +00:00
2015-07-13 20:10:26 +02:00
include 'unix-agent/packages.inc.php' ;
include 'unix-agent/munin-plugins.inc.php' ;
2012-05-20 18:23:40 +00:00
2015-07-13 20:10:26 +02:00
foreach ( array_keys ( $agent_data ) as $key ) {
if ( file_exists ( " includes/polling/unix-agent/ $key .inc.php " )) {
2015-08-20 13:26:18 +02:00
d_echo ( " Including: unix-agent/ $key .inc.php " );
2012-05-20 23:14:08 +00:00
2015-07-13 20:10:26 +02:00
include " unix-agent/ $key .inc.php " ;
}
}
// Processes
if ( ! empty ( $agent_data [ 'ps' ])) {
echo 'Processes: ' ;
dbDelete ( 'processes' , 'device_id = ?' , array ( $device [ 'device_id' ]));
2015-07-16 00:16:25 +02:00
$data = array ();
2015-07-13 20:10:26 +02:00
foreach ( explode ( " \n " , $agent_data [ 'ps' ]) as $process ) {
$process = preg_replace ( '/\((.*),([0-9]*),([0-9]*),([0-9\:]*),([0-9]*)\)\ (.*)/' , '\\1|\\2|\\3|\\4|\\5|\\6' , $process );
list ( $user , $vsz , $rss , $cputime , $pid , $command ) = explode ( '|' , $process , 6 );
if ( ! empty ( $command )) {
2015-07-16 00:16:25 +02:00
$data [] = array ( 'device_id' => $device [ 'device_id' ], 'pid' => $pid , 'user' => $user , 'vsz' => $vsz , 'rss' => $rss , 'cputime' => $cputime , 'command' => $command );
2015-07-13 20:10:26 +02:00
}
}
2015-07-16 00:16:25 +02:00
if ( count ( $data ) > 0 ) {
dbBulkInsert ( 'processes' , $data );
2015-07-14 22:57:15 +02:00
}
2015-07-13 20:10:26 +02:00
echo " \n " ;
}
2012-04-21 00:36:55 +00:00
2015-08-20 12:36:37 +02:00
foreach ( array_keys ( $agent_data [ 'app' ]) as $key ) {
if ( file_exists ( " includes/polling/applications/ $key .inc.php " )) {
2015-08-20 13:26:18 +02:00
d_echo ( " Enabling $key for " . $device [ 'hostname' ] . " if not yet enabled \n " );
2015-08-20 12:36:37 +02:00
2015-11-23 14:12:46 +01:00
if ( in_array ( $key , array ( 'apache' , 'mysql' , 'nginx' , 'proxmox' , 'ceph' , 'powerdns' ))) {
2015-08-20 12:36:37 +02:00
if ( dbFetchCell ( 'SELECT COUNT(*) FROM `applications` WHERE `device_id` = ? AND `app_type` = ?' , array ( $device [ 'device_id' ], $key )) == '0' ) {
echo " Found new application ' $key ' \n " ;
2015-11-16 21:07:50 -08:00
dbInsert ( array ( 'device_id' => $device [ 'device_id' ], 'app_type' => $key , 'app_status' => '' , 'app_instance' => '' ), 'applications' );
2015-08-20 12:36:37 +02:00
}
}
2015-07-13 20:10:26 +02:00
}
2012-04-27 17:18:26 +00:00
}
2015-07-13 20:10:26 +02:00
// memcached
if ( ! empty ( $agent_data [ 'app' ][ 'memcached' ])) {
$agent_data [ 'app' ][ 'memcached' ] = unserialize ( $agent_data [ 'app' ][ 'memcached' ]);
foreach ( $agent_data [ 'app' ][ 'memcached' ] as $memcached_host => $memcached_data ) {
if ( dbFetchCell ( 'SELECT COUNT(*) FROM `applications` WHERE `device_id` = ? AND `app_type` = ? AND `app_instance` = ?' , array ( $device [ 'device_id' ], 'memcached' , $memcached_host )) == '0' ) {
echo " Found new application 'Memcached' $memcached_host\n " ;
2015-11-16 21:07:50 -08:00
dbInsert ( array ( 'device_id' => $device [ 'device_id' ], 'app_type' => 'memcached' , 'app_status' => '' , 'app_instance' => $memcached_host ), 'applications' );
2015-07-13 20:10:26 +02:00
}
}
}
2012-04-21 00:36:55 +00:00
2015-07-13 20:10:26 +02:00
// DRBD
if ( ! empty ( $agent_data [ 'drbd' ])) {
$agent_data [ 'app' ][ 'drbd' ] = array ();
foreach ( explode ( " \n " , $agent_data [ 'drbd' ]) as $drbd_entry ) {
list ( $drbd_dev , $drbd_data ) = explode ( ':' , $drbd_entry );
if ( preg_match ( '/^drbd/' , $drbd_dev )) {
$agent_data [ 'app' ][ 'drbd' ][ $drbd_dev ] = $drbd_data ;
if ( dbFetchCell ( 'SELECT COUNT(*) FROM `applications` WHERE `device_id` = ? AND `app_type` = ? AND `app_instance` = ?' , array ( $device [ 'device_id' ], 'drbd' , $drbd_dev )) == '0' ) {
echo " Found new application 'DRBd' $drbd_dev\n " ;
2015-11-16 21:07:50 -08:00
dbInsert ( array ( 'device_id' => $device [ 'device_id' ], 'app_type' => 'drbd' , 'app_status' => '' , 'app_instance' => $drbd_dev ), 'applications' );
2015-07-13 20:10:26 +02:00
}
}
}
}
} //end if
2012-04-21 00:36:55 +00:00
2015-07-13 20:10:26 +02:00
if ( ! empty ( $agent_sensors )) {
echo 'Sensors: ' ;
check_valid_sensors ( $device , 'temperature' , $valid [ 'sensor' ], 'agent' );
echo " \n " ;
}
2012-03-26 09:37:55 +00:00
2015-07-13 20:10:26 +02:00
echo " \n " ;
} //end if