$tempid $text
";
}
// Connect to Database
function sqlrequest($database,$sql,$id=false,$prepare=false){
// Get the global value
global $database_host;
global $database_username;
global $database_password;
$connexion = mysqli_connect($database_host, $database_username, $database_password, $database);
if (!$connexion) {
echo "
Could not connect to database : $database ($database_host)
";
echo "
";
exit(1);
}
if ( $database == "eonweb" ) {
// Force UTF-8
mysqli_query($connexion, "SET NAMES 'utf8'");
}
if(is_array($prepare)) {
$stmt = mysqli_prepare($connexion,$sql);
if(isset($prepare[0]) && isset($prepare[1])) {
$ref = new ReflectionClass('mysqli_stmt');
$method = $ref->getMethod("bind_param");
$method->invokeArgs($stmt,$prepare);
}
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
} else {
$result=mysqli_query($connexion, "$sql");
}
if($id==true)
$result=mysqli_insert_id($connexion);
mysqli_close($connexion);
return $result;
}
// Display array value
function display_value($value, $key){
echo "$value\n";
}
// Function Edit and Modify a file
function filemodify($path,$get=false){
if(is_writable($path)) {
// Test If Update or Display.
if (isset($_POST['maj'])) {
if (!$fconf = fopen($path, "w")) message(2,$path,"critical");
// Write the change
if (fwrite ($fconf, str_replace("\r\n", "\n", $_POST['maj'])) === FALSE) message(3,$path,"critical");
else {
message(6," : File updated","ok");
}
fclose ($fconf);
if (!$fconf = fopen($path, "r")) message(2,$path,"critical");
}
else if (!$fconf = fopen($path, "r")) message(2,$path,"critical");
// Display the Text Area and button
echo "";
fclose ($fconf);
}
else message(3,$path,"critical");
}
// Host List form Nagios
function get_host_list_from_nagios($field=false, $queue = false){
global $database_lilac;
global $database_ged;
$hosts=array();
if($field && $field != 'owner'){
switch ($field) {
case 'service': $column = 'description'; break;
case 'description': echo json_encode($hosts); return; break;
default: $column = 'name'; break;
}
$request="SELECT DISTINCT $column FROM nagios_$field ORDER BY $column";
$db = $database_lilac;
} elseif ($field && $field === 'owner') {
$request="SELECT DISTINCT owner FROM nagios_queue_$queue WHERE owner != '' ORDER BY owner";
$db = $database_ged;
}
else {
$request="SELECT name FROM nagios_host
UNION SELECT name from nagios_hostgroup
UNION SELECT DISTINCT description from nagios_service
UNION SELECT name from nagios_service_group
ORDER BY name";
$db = $database_lilac;
}
$result=sqlrequest($db,$request);
while ($line = mysqli_fetch_array($result)){
array_push($hosts, $line[0]);
}
echo json_encode($hosts);
}
// Host and Address list from nagios. //TODO send the adress
function get_host_list(){
global $database_lilac;
$hosts=array();
$result=sqlrequest($database_lilac,"SELECT name,address FROM nagios_host ORDER BY name");
while ($line = mysqli_fetch_array($result)){
$hosts[]=$line[0];
$hosts[]=$line[1];
}
echo json_encode($hosts);
}
// Host and Address listbox from nagios. //TODO send the adress
function get_host_listbox_from_nagios(){
global $database_lilac;
// create input autocomplete with all nagios host values
echo "";
$result=sqlrequest($database_lilac,"SELECT DISTINCT name FROM nagios_host UNION ALL SELECT DISTINCT address FROM nagios_host");
$input = "';
echo $input;
echo '
';
echo '';
}
// Host list from CACTI
function get_title_list_from_cacti(){
global $database_cacti;
$titles=array();
$request="SELECT DISTINCT graph_templates_graph.title FROM graph_local,graph_templates_graph WHERE graph_templates_graph.local_graph_id=graph_local.id ORDER BY title";
$result=sqlrequest($database_cacti,$request);
while ($line = mysqli_fetch_array($result)){
$line[0]=str_replace("|host_description| - ","",$line[0]);
$titles[]=$line[0];
}
echo json_encode($titles);
}
// Host listbox from CACTI
function get_host_listbox_from_cacti(){
global $database_cacti;
$ref = "";
if( isset($_GET['host']) ){
$ref = $_GET['host'];
}
$result=sqlrequest($database_cacti,"SELECT DISTINCT host.id,hostname,description FROM host INNER JOIN graph_local ON host.id = graph_local.host_id ORDER BY hostname ASC");
echo " ";
}
// system function : CUT
function cut($string, $width, $padding = "..."){
return (strlen($string) > $width ? substr($string, 0, $width-strlen($padding)).$padding : $string);
}
// Get graph from CACTI
function get_graph_listbox_from_cacti(){
global $database_cacti;
$ref = "";
if( isset($_GET['graph']) ){
$ref = $_GET['graph'];
}
$result=sqlrequest($database_cacti,"SELECT DISTINCT graph_templates.id,name FROM graph_templates INNER JOIN graph_local ON graph_local.graph_template_id = graph_templates.id ORDER BY name ASC");
echo " ";
}
// Display TOOL list
function get_tool_listbox(){
// Get the global table
global $array_tools;
echo "";
// Get the first array key
reset($array_tools);
// Display the list of tool
echo "";
}
// Display min and max port value for show port tool
function get_toolport_ports(){
global $default_minport;
global $default_maxport;
echo "";
echo "
";
echo "
";
}
// Display User list
function get_user_listbox(){
echo "
Select user :
";
global $database_eonweb;
$result=sqlrequest($database_eonweb,"SELECT DISTINCT user_name,user_id,group_id,user_descr FROM users ORDER BY user_name");
print "";
}
// Retrive form data
function retrieve_form_data($field_name,$default_value){
if (!isset ($_GET[$field_name]))
if (!isset ($_POST[$field_name]))
return $default_value;
else
return $_POST[$field_name];
else
return $_GET[$field_name];
}
// Delete accents
function stripAccents($str, $charset='utf-8'){
$str = htmlentities($str, ENT_NOQUOTES, $charset);
$str = preg_replace('#\&([A-za-z])(?:acute|cedil|circ|grave|ring|tilde|uml)\;#', '\1', $str);
$str = preg_replace('#\&([A-za-z]{2})(?:lig)\;#', '\1', $str);
$str = preg_replace('#\&[^;]+\;#', '', $str);
return $str;
}
// Add Logs
function logging($module,$command,$user=false){
global $database_eonweb;
global $dateformat;
if($user)
sqlrequest($database_eonweb,"insert into logs values ('','".time()."','$user','$module','$command','".$_SERVER["REMOTE_ADDR"]."');");
elseif(isset($_COOKIE['user_name']))
sqlrequest($database_eonweb,"insert into logs values ('','".time()."','".$_COOKIE['user_name']."','$module','$command','".$_SERVER["REMOTE_ADDR"]."');");
}
// Time
function getmtime(){
$temps = microtime();
$temps = explode(' ', $temps);
return $temps[1] + $temps[0];
}
// Get the informations of nagios' config's file.
function getBpProcess(){
global $path_nagiosbpcfg ;
global $path_nagiosbpcfg_lock ;
wait($path_nagiosbpcfg_lock); //Wait for the file to not be in use.
$fp=@fopen($path_nagiosbpcfg_lock,"w"); //Lock the file
fputs($fp,getmypid());
fclose($fp);
$tabProcess = array() ;
$lines = file($path_nagiosbpcfg);
if (!$lines) {
unlink($path_nagiosbpcfg_lock); //Unlock the file
message(2,$path_nagiosbpcfg,"critical");
}
foreach( $lines as $line) {
if ( trim($line) == "# Fin def") { //End of definition
$tabProcess[] = $tabProp ;
$tabProp = null ;
}
elseif ( preg_match("/^# (ET|OU|MIN)$/", $line, $match)) {
$tabProp['type'] = $match[1]; //Get the type of the process
}
elseif ( preg_match("/^display (\d)*/", $line, $match)) { //Get the prirority
$tabProp['prio'] = $match[1] ;
$tab = explode(";",$line);
$tabProp['pnom'] = $tab[2];
}
elseif ( strpos($line,"info_url") !== false) { //Get the link
$tab = explode(";", $line);
$tabProp['url'] = $tab[count($tab)-1] ;
}
elseif ( strpos($line,"external_info") !== false) { //Get the command
$tab = explode(";", $line);
$tabProp['cmd'] = $tab[count($tab)-1] ;
}
elseif ( strpos($line,"=") !== false) { //Get the name, the minimun, and the services
$tab = explode("=", $line);
$tabProp['nom'] = trim($tab[0]);
if ($tabProp['type'] == "MIN") {
$tabProp['min'] = (int)trim($tab[1]);
$tab = explode(":",$tab[1]);
$tabProp['serv'] = $tab[1];
}
else $tabProp['serv'] = $tab[1];
}
}
unlink($path_nagiosbpcfg_lock); //Unlock the file
return $tabProcess ;
}
// Wait the end of modification of a file
function wait($file){
$retry = 0 ;
while (file_exists($file)){
if($retry>20) { die ("$file is already in use!"); }
$retry++;
sleep(1);
}
}
// Insert a value in an array
function array_push_after($src,$in,$pos){
if(is_int($pos)) $R=array_merge(array_slice($src,0,$pos+1), $in, array_slice($src,$pos+1));
else{
foreach($src as $k=>$v){
$R[$k]=$v;
if($k==$pos)$R=array_merge($R,$in);
}
}return $R;
}
//Format the nagios.conf file
function formatFile(){
global $path_nagiosbpcfg;
global $path_nagiosbpcfg_lock;
global $database_nagios;
wait($path_nagiosbpcfg_lock); //Wait for the file to not be in use.
$fp=@fopen($path_nagiosbpcfg_lock,"w"); //Lock the file.
fputs($fp,getmypid());
fclose($fp);
$lines = file($path_nagiosbpcfg);
$file[0] = "# Checked\n";
if ( empty($lines) || trim($lines[0]) != "# Checked"){ //Not checked. Let's read it !
write_file($path_nagiosbpcfg,array_merge($file,$lines),"w"," : File updated");
sqlrequest($database_nagios,"DELETE FROM bp");
sqlrequest($database_nagios,"DELETE FROM bp_services");
sqlrequest($database_nagios,"DELETE FROM bp_links");
$tabName = array();
$tabDef = array();
foreach($lines as $i => $line){
if ($line[0] == "#"){
unset($lines[$i]); continue; //A commented line. Delete.
}
if (($posComment = strpos($line,"#")) !== false){ //Found a commentary. Delete.
$line = substr($line,0,$posComment);
}
//No more commentary in the file
if (strpos($line,"=") !== false){ //Found a name
$tab = explode("=",$line);
$tabName[] = trim($tab[0]); //Keep the name
$vals = explode("=",$line);
$tabDef[] = $vals[1]; //Keep the whole line
unset($lines[$i]);
}
}
//There we got all the names.
$serv = null;
foreach($tabName as $i => $name){
$type = $prio = $url = $cmd = $val = $desc = "" ;
//Try to get the type. Default ET
if ( strpos($tabDef[$i], ":")){
$vals = explode("of:",$tabDef[$i]);
$val = trim($vals[0]);
$type = "MIN";
$serv = $vals[1];
}
else {
if ( strpos($tabDef[$i], "&")) $type = "ET";
elseif ( strpos($tabDef[$i], "|")) $type = "OU";
else $type = "ET";
$serv = $tabDef[$i];
}
foreach($lines as $j=>$line){
if (strpos($line,"$name;") !== false){ //We found a name
if ( preg_match("/^display (\d)+/", $line,$match)){
$prio = $match[1];
$vals = explode(";",$line);
$desc = trim($vals[2]);
}
elseif ( strpos($line,"info_url") !== false) {
$vals = explode(";",$line);
$url = trim($vals[1]);
}
elseif ( strpos($line,"external_info") !== false) {
$vals = explode(";",$line);
$cmd= trim($vals[1]);
}
unset($lines[$j]);
}
}
if ($prio == "" ) $prio = "null";
sqlrequest($database_nagios,"INSERT INTO bp VALUES('$name','$desc','$prio','$type','$cmd','$url','$val','1')");
switch ($type){
case "ET": $vals = explode("&",$serv);
break;
case "OU": $vals = explode("|",$serv);
break;
case "MIN": $vals = explode("+",$serv);
break;
}
foreach ($vals as $v) {
if ( strpos($v,";") !== false ){
$val = explode(";",$v); $host=trim($val[0]); $service=trim($val[1]);
sqlrequest($database_nagios,"INSERT INTO bp_services VALUES('','$name','$host','$service')");
}
else sqlrequest($database_nagios,"INSERT INTO bp_links VALUES('','$name','".trim($v)."')");
}
}
message(6," : Database updated with configuration file","ok");
}
unlink($path_nagiosbpcfg_lock);
}
//Write in a file, with error or succes message
function write_file($file,$contenu,$mode,$message = null){
if(is_writable($file)){
$error = 0 ;
if (!$fconf = fopen($file, $mode)) message(2,$file,"critical");
if ( is_array($contenu)){
foreach ($contenu as $line) {
if (fwrite ($fconf, $line) === FALSE) $error = 1 ;
}
}
else if (fwrite ($fconf, $contenu) === FALSE) $error = 1 ;
if ($error) message(3,$file,"critical");
else if ( $message != null )message(6,$message,"ok");
fclose ($fconf);
}
else
message(3,$file,"critical");
}
// MySQL request in php array
function sqlArrayNagios($request){
global $database_nagios;
$result = sqlrequest($database_nagios,$request);
$values = array();
for ($i=0; $i 0; $i--){
if ( file_exists($path_nagiosbpcfg_bu.$i)){
if ( $i == $start) unlink($path_nagiosbpcfg_bu.$i);
else {
rename($path_nagiosbpcfg_bu.$i,$path_nagiosbpcfg_bu.($i+1));
}
}
}
copy($path_nagiosbpcfg,$path_nagiosbpcfg_bu.'1');
}
// NagiosBP file creation
function buildFile(){
global $path_nagiosbpcfg_lock;
wait($path_nagiosbpcfg_lock); //Wait for the file to not be in use.
$fp=@fopen($path_nagiosbpcfg_lock,"w"); //Lock the file.
fputs($fp,getmypid());
fclose($fp);
global $max_bu_file;
backup_file($max_bu_file);
global $path_nagiosbpcfg;
$request = "SELECT * FROM bp WHERE `name` NOT IN (SELECT bp_name FROM bp_links) AND `is_define`='1'";
$values = sqlArrayNagios($request);
$prevRequest = str_replace("*","name",$request);
$file[] = "# Checked";
foreach( $values as $metier){
$writenBP[] = $metier['name'];
switch( $metier['type']) {
case "ET" : $sep = "&";break;
case "OU" : $sep = "|";break;
case "MIN" : $sep = "+";break;
}
$result = sqlArrayNagios("SELECT host,service FROM bp_services WHERE bp_name='$metier[name]'");
$strServ = $string = null;
foreach($result as $serv){
if ( is_null($strServ) ) {
$string = "\n#\n# Name : $metier[name]\n# Type : $metier[type]\n$metier[name] = ";
if ( $metier['type'] == "MIN") $string .= "$metier[min_value] of: ";
$strServ = "$serv[host];$serv[service]";
}
else $strServ .= " $sep $serv[host];$serv[service]";
}
$string .= $strServ."\n";
if ( $metier['priority'] != "null") $string .= "display $metier[priority];$metier[name];$metier[description]\n";
if ( $metier['command'] != "") $string .= "external_info $metier[name];$metier[command]\n";
if ( $metier['url'] != "") $string .= "info_url $metier[name];$metier[url]\n";
$file[] = $string;
}
if ( $values ) build($prevRequest,$file,$writenBP);
write_file($path_nagiosbpcfg,$file,"w"," : File updated");
unlink($path_nagiosbpcfg_lock);
}
// Nagiosbp build
function build($pRequest,&$file,$pWritenBP){
$values = sqlArrayNagios($pRequest);
unset($r);
foreach( $values as $v){
if ( !isset($r) ) $r = "SELECT bp_name FROM bp_links WHERE (bp_link='$v[name]' ";
else $r .= " OR bp_link='$v[name]'";
}
$values = sqlArrayNagios($r.")");
if ($values){
unset($r);
foreach ($values as $v) {
if ( !isset($r) ) $r = "SELECT * FROM bp WHERE (name='$v[bp_name]' ";
else $r .= " OR name='$v[bp_name]'";
}
$values = sqlArrayNagios($r.") AND `is_define`='1'");
/*$request = "SELECT * FROM bp WHERE `name` IN (SELECT bp_name FROM bp_links WHERE bp_link IN ($pRequest)) AND `is_define`='1'";
$values = sqlArrayNagios($request);
sql takes to much time with this type of request. We split it in multiple request instead.*/
$prevRequest = str_replace("*","name",$r.") AND `is_define`='1'");
$writenBP = $pWritenBP;
foreach ($pWritenBP as $r) {
if ( !isset($reqC)) $reqC = "SELECT COUNT(bp_name) AS nbr FROM bp_links WHERE (bp_link='$r' ";
else $reqC .= " OR bp_link='$r'";
}
foreach( $values as $metier){
if (in_array($metier, $pWritenBP)) continue;
$requestC = $reqC.") AND bp_name='$metier[name]'";
$count = sqlArrayNagios($requestC);
$cnt = sqlArrayNagios("SELECT COUNT(bp_name) AS nbr FROM bp_links WHERE bp_name='$metier[name]'");
if ( $count[0]['nbr'] == $cnt[0]['nbr']){
$writenBP[] = $metier['name'];
switch( $metier['type']) {
case "ET" : $sep = "&";break;
case "OU" : $sep = "|";break;
case "MIN" : $sep = "+";break;
}
$result = sqlArrayNagios("SELECT host,service FROM bp_services WHERE bp_name='$metier[name]'");
$strServ = $string = null;
foreach($result as $serv){
if ( is_null($strServ) ) {
$string = "\n#\n# Name : $metier[name]\n# Type : $metier[type]\n$metier[name] = ";
if ( $metier['type'] == "MIN") $string .= "$metier[min_value] of: ";
$strServ = "$serv[host];$serv[service]";
}
else $strServ .= " $sep $serv[host];$serv[service]";
}
$result = sqlArrayNagios("SELECT bp_link FROM bp_links WHERE bp_name='$metier[name]'");
foreach($result as $serv){
if ( is_null($strServ) ) {
$string = "\n#\n# Name : $metier[name]\n# Type : $metier[type]\n$metier[name] = ";
if ( $metier['type'] == "MIN") $string .= "$metier[min_value] of: ";
$strServ = "$serv[bp_link]";
}
else $strServ .= " $sep $serv[bp_link]";
}
$string .= $strServ."\n";
if ( $metier['priority'] != "null") $string .= "display $metier[priority];$metier[name];$metier[description]\n";
if ( $metier['command'] != "") $string .= "external_info $metier[name];$metier[command]\n";
if ( $metier['url'] != "") $string .= "info_url $metier[name];$metier[url]\n";
$file[] = $string;
}
}
build($prevRequest,$file,$writenBP);
}
}
// Ldap escape special caracters
function ldap_escape($str, $login=false, $escape=false){
$str = trim($str);
if ( $login ) {
$search = array("\\\\",'"','+','>','<');
$replace = array("\\",'\"','\\2B','\>','\<');
} else {
$search = array("\\","'",'"');
$replace = array("\\\\","\'",'\"');
}
$str = str_replace($search, $replace, $str);
if ( $escape ) { $str = str_replace("\\", "\\\\", $str); }
return $str;
}
// User creation
function insert_user($user_name, $user_descr, $user_group, $user_password1, $user_password2, $user_type, $user_location, $user_mail, $user_limitation, $message, $in_nagvis = false, $in_cacti = false, $nagvis_group = false, $user_language = false){
global $database_host;
global $database_cacti;
global $database_username;
global $database_password;
global $database_eonweb;
global $database_lilac;
$user_id=null;
// Check if user exist
$user_exist=mysqli_result(sqlrequest("$database_eonweb","SELECT count('user_name') from users where user_name='$user_name';"),0);
// Check user descr
if($user_descr=="")
$user_descr=$user_name;
if($user_location != "" && $user_location != null){
if( strpos($user_location, " -- ") !== false && strpos($user_location, "|") !== false ){
$user_location_parts = explode(" -- ", $user_location);
$user_loc = explode("|", $user_location_parts[1]);
$user_dn_name = $user_loc[0];
$user_name = $user_dn_name;
$user_location = $user_loc[1];
}
else{
$user_location = $user_location;
}
}
if (($user_name != "") && ($user_name != null) && ($user_exist == 0)) {
if (($user_password1 != "") && ($user_password1 != null) && ($user_password1 == $user_password2)) {
$user_password = md5($user_password1);
// Insert into eonweb
sqlrequest("$database_eonweb","INSERT INTO users (user_name,user_descr,group_id,user_passwd,user_type,user_location,user_limitation,user_language) VALUES('$user_name', '$user_descr', '$user_group', '$user_password', '$user_type', '$user_location', '$user_limitation', '$user_language')");
$user_id=mysqli_result(sqlrequest("$database_eonweb","SELECT user_id FROM users WHERE user_name='$user_name'"),0,"user_id");
$group_name=mysqli_result(sqlrequest("$database_eonweb","SELECT group_name FROM groups WHERE group_id='$user_group'"),0,"group_name");
// Insert into lilac
$lilac_period=mysqli_result(sqlrequest("$database_lilac","SELECT id FROM nagios_timeperiod limit 1"),0,"id");
sqlrequest("$database_lilac","INSERT INTO nagios_contact (id,name,alias,email,host_notifications_enabled,service_notifications_enabled,host_notification_period,service_notification_period,host_notification_on_down,host_notification_on_unreachable,host_notification_on_recovery,host_notification_on_flapping,service_notification_on_warning,service_notification_on_unknown,service_notification_on_critical,service_notification_on_recovery,service_notification_on_flapping,can_submit_commands,retain_status_information,retain_nonstatus_information,host_notification_on_scheduled_downtime) VALUES('','$user_name','$user_descr','$user_mail', 1, 1, '$lilac_period', '$lilac_period', 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1 ,1, 1, 1);");
// Lilac contact_group_member
$lilac_contactgroupid=mysqli_result(sqlrequest("$database_lilac","SELECT id FROM nagios_contact_group WHERE name='$group_name'"),0,"id");
$lilac_contactid=mysqli_result(sqlrequest("$database_lilac","SELECT id FROM nagios_contact where name='$user_name'"),0,"id");
if($lilac_contactgroupid!="" and $lilac_contactid!="" and $user_limitation!="1")
sqlrequest("$database_lilac","INSERT INTO nagios_contact_group_member (contactgroup, contact) VALUES ('$lilac_contactgroupid', '$lilac_contactid')");
// Insert into nagvis
if($in_nagvis == "yes"){
$bdd = new PDO('sqlite:/srv/eyesofnetwork/nagvis/etc/auth.db');
$req = $bdd->query("SELECT count(*) FROM users WHERE name = '$user_name'");
$nagvis_user_exist = $req->fetch();
if ($nagvis_user_exist["count(*)"] == 0){
// this is nagvis default salt for password encryption security
$nagvis_salt = '29d58ead6a65f5c00342ae03cdc6d26565e20954';
// insert user in nagvis SQLite DB
$sql = "INSERT INTO users (name, password) VALUES ('$user_name', '".sha1($nagvis_salt.$user_password1)."')";
$bdd->exec($sql);
// insert user's right as "Guest" by default
$sql = "SELECT userId FROM users WHERE name = '$user_name'";
$req = $bdd->query($sql);
$result = $req->fetch();
$nagvis_id = $result['userId'];
$sql = "INSERT INTO users2roles (userId, roleId) VALUES ($nagvis_id, $nagvis_group)";
$bdd->exec($sql);
}
}
// Insert into cacti
if($in_cacti == "yes"){
$bdd = new PDO('mysql:host='.$database_host.';dbname='.$database_cacti, $database_username, $database_password);
$req = $bdd->query("SELECT count(*) FROM user_auth WHERE username='$user_name'");
$cacti_user_exist = $req->fetch();
if ($cacti_user_exist["count(*)"] == 0){
$bdd->exec("INSERT INTO user_auth (username,password,realm,full_name,show_tree,show_list,show_preview,graph_settings,login_opts,policy_graphs,policy_trees,policy_hosts,policy_graph_templates,enabled) VALUES ('$user_name','',2,'$user_descr','on','on','on','on',3,2,2,2,2,'on')");
}
}
// Messages
logging("admin_user","INSERT : $user_name $user_descr $user_limitation $user_group $user_type $user_location");
if($message){ message(8," : User Inserted",'ok'); }
// Lilac contact_commands
$lilac_contact_hcommand=mysqli_result(sqlrequest("$database_lilac","select id from nagios_command where name like 'notify-by-email-host'"),0,"id");
$lilac_contact_scommand=mysqli_result(sqlrequest("$database_lilac","select id from nagios_command where name like 'notify-by-email-service'"),0,"id");
if($lilac_contactid!="" and $lilac_contact_hcommand!="")
sqlrequest("$database_lilac","INSERT INTO nagios_contact_notification_command (contact_id,command,type) values ('$lilac_contactid','$lilac_contact_hcommand','host')");
elseif($lilac_contact_hcommand=="")
message(8," : Verify contact 'notify-by-email-host' command in nagios configurator",'warning');
if($lilac_contactid!="" and $lilac_contact_scommand!="")
sqlrequest("$database_lilac","INSERT INTO nagios_contact_notification_command (contact_id,command,type) values ('$lilac_contactid','$lilac_contact_scommand','service')");
elseif($lilac_contact_scommand=="")
message(8," : Verify contact 'notify-by-email-service' command in nagios configurator",'warning');
}
else
message(8," : Passwords do not match or are empty",'warning');
}
elseif($user_exist != 0 )
message(8," : User $user_name already exists",'warning');
else
message(8," : User name can not be empty",'warning');
return $user_id;
}
// "mysqli" version of mysql_result
function mysqli_result($res, $row, $field=0){
$res->data_seek($row);
if(gettype($field) == "string"){
$datarow = $res->fetch_assoc();
}
else{
$datarow = $res->fetch_array();
}
return $datarow[$field];
}
// get traduction words
function getLabel($reference){
global $dictionnary;
global $path_messages;
global $path_messages_custom;
global $t;
// Load dictionnary if not isset
if(!isset($t)) {
$t = new Translator();
$t->initFile($path_messages,$path_messages_custom);
$dictionnary = $t->createPHPDictionnary();
}
// Display dictionnary reference if isset or reference
if(isset($dictionnary[$reference])) {
$label = $dictionnary[$reference];
}
else {
$label = $reference;
}
return $label;
}
// get default page
function getDefaultPage($usrlimit=0){
global $t;
global $defaultpage;
global $path_frame;
global $path_menu_limited;
global $path_menu_limited_custom;
global $path_menus;
global $path_menus_custom;
// load dictionnary if not isset
if(!isset($t)) {
$t = new Translator();
}
// get json file
if(isset($_COOKIE["user_limitation"])) { $usrlimit = $_COOKIE["user_limitation"]; }
if($usrlimit == 1){
$file=$t->getFile($path_menu_limited, $path_menu_limited_custom);
$json_content = file_get_contents($file);
$links = json_decode($json_content, true);
foreach ($links["link"] as $link) {
if(isset($link["default"])) {
if( $link["default"] != null ){
if($link["target"]=="frame") { $link["url"]=$path_frame.urlencode($link['url']); }
$defaultpage = $link["url"];
}
}
}
}
return $defaultpage;
}
// get frame url
function getFrameURL($url){
global $path_frame;
$frame_url = $path_frame.urlencode($url);
return $frame_url;
}
function pieChart($queue, $field, $search, $period)
{
// all external variables we need
global $database_ged;
global $array_ged_states;
if($queue == "active"){ global $ged_active_intervals; extract($ged_active_intervals); }
else{ global $ged_history_intervals; extract($ged_history_intervals); }
$array_result = array();
$sql = "SELECT pkt_type_name FROM pkt_type WHERE pkt_type_id!='0' AND pkt_type_id<'100'";
$pkt_result = sqlrequest($database_ged, $sql);
// set the search clause (according to field and value)
$search_clause = "";
if( isset($search) && $search != "" )
{
switch ($field) {
case 'host': $field = 'equipment'; break;
case 'hostgroup': $field = 'hostgroups'; break;
case 'service_group': $field = 'servicegroups'; break;
}
$like = "'";
if( substr($search, 0, 1) === '*' ){
$like .= "%";
}
$like .= trim($search, '*');
if ( substr($search, -1) === '*' ) {
$like .= "%";
}
$like .= "'";
$search_clause = " AND $field LIKE $like";
}
// set the period clause (according to checkboxes checked)
$period_clause = "";
if( isset($period) && $period != "" )
{
switch($period)
{
case "day": $period_clause = " AND o_sec >= $day"; break;
case "week": $period_clause = " AND o_sec >= $week AND o_sec < $day"; break;
case "month": $period_clause = " AND o_sec >= $month AND o_sec < $week"; break;
case "year": $period_clause = " AND o_sec >= $year AND o_sec < $month"; break;
}
}
while( $pkt = mysqli_fetch_row($pkt_result) )
{
foreach($array_ged_states as $key => $state)
{
if($key == "ok")
{
continue;
}
if( !isset($array_result["$key"]) ){
$array_result["$key"] = 0;
}
$sql = "SELECT count(id) FROM ".$pkt[0]."_queue_".$queue." WHERE state='".$state."' AND queue='".substr($queue{0},0,1)."'";
$sql .= $search_clause;
$sql .= $period_clause;
$result = sqlrequest($database_ged, $sql);
$result = mysqli_fetch_row($result);
$array_result["$key"] += $result[0];
}
}
return json_encode($array_result);
}
function barChart($queue, $field, $search)
{
global $database_ged;
global $array_ged_states;
if($queue == "active"){ global $ged_active_intervals; extract($ged_active_intervals); }
else{ global $ged_history_intervals; extract($ged_history_intervals); }
$sql = "SELECT pkt_type_name FROM pkt_type WHERE pkt_type_id!='0' AND pkt_type_id<'100'";
$pkt_result = sqlrequest($database_ged, $sql);
$array_result = array();
$array_now_day = array();
$array_day_week = array();
$array_week_month = array();
$array_month_year = array();
$array_year_more = array();
// set the search clause (according to field and value)
$search_clause = "";
if( isset($search) && $search != "" )
{
switch ($field) {
case 'host': $field = 'equipment'; break;
case 'hostgroup': $field = 'hostgroups'; break;
case 'service_group': $field = 'servicegroups'; break;
}
$like = "'";
if( substr($search, 0, 1) === '*' ){
$like .= "%";
}
$like .= trim($search, '*');
if ( substr($search, -1) === '*' ) {
$like .= "%";
}
$like .= "'";
$search_clause = " AND $field LIKE $like";
}
while( $pkt = mysqli_fetch_row($pkt_result) )
{
foreach($array_ged_states as $key => $state)
{
if($key == "ok")
{
continue;
}
if( !isset($array_now_day["$key"]) ){$array_now_day["$key"] = 0;}
if( !isset($array_day_week["$key"]) ){$array_day_week["$key"] = 0;}
if( !isset($array_week_month["$key"]) ){$array_week_month["$key"] = 0;}
if( !isset($array_month_year["$key"]) ){$array_month_year["$key"] = 0;}
if( !isset($array_year_more["$key"]) ){$array_year_more["$key"] = 0;}
$sql = "
SELECT count(id) FROM ".$pkt[0]."_queue_".$queue." WHERE state='".$state."' AND queue='".substr($queue{0},0,1)."' AND o_sec >= $day".$search_clause.
" UNION ALL
SELECT count(id) FROM ".$pkt[0]."_queue_".$queue." WHERE state='".$state."' AND queue='".substr($queue{0},0,1)."' AND o_sec >= $week AND o_sec < $day".$search_clause.
" UNION ALL
SELECT count(id) FROM ".$pkt[0]."_queue_".$queue." WHERE state='".$state."' AND queue='".substr($queue{0},0,1)."' AND o_sec >= $month AND o_sec < $week".$search_clause.
" UNION ALL
SELECT count(id) FROM ".$pkt[0]."_queue_".$queue." WHERE state='".$state."' AND queue='".substr($queue{0},0,1)."' AND o_sec >= $year AND o_sec < $month".$search_clause.
" UNION ALL
SELECT count(id) FROM ".$pkt[0]."_queue_".$queue." WHERE state='".$state."' AND queue='".substr($queue{0},0,1)."' AND o_sec < $year".$search_clause;
$result = sqlrequest($database_ged, $sql);
$cpt = 0;
while( $row = mysqli_fetch_row($result) )
{
switch($cpt)
{
case 0: $array_now_day["$key"] += $row[0]; break;
case 1: $array_day_week["$key"] += $row[0]; break;
case 2: $array_week_month["$key"] += $row[0]; break;
case 3: $array_month_year["$key"] += $row[0]; break;
case 4: $array_year_more["$key"] += $row[0]; break;
}
$cpt++;
}
}
}
array_push($array_result, $array_now_day);
array_push($array_result, $array_day_week);
array_push($array_result, $array_week_month);
array_push($array_result, $array_month_year);
array_push($array_result, $array_year_more);
return json_encode($array_result);
}
function slaPieChart($field, $search, $period)
{
// all external variables we need
global $database_ged;
global $ged_sla_intervals;
global $ged_history_intervals;
extract($ged_sla_intervals);
extract($ged_history_intervals);
$array_result = array();
$sql = "SELECT pkt_type_name FROM pkt_type WHERE pkt_type_id!='0' AND pkt_type_id<'100'";
$pkt_result = sqlrequest($database_ged, $sql);
// set the search clause (according to field and value)
$search_clause = "";
if( isset($search) && $search != "" )
{
switch ($field) {
case 'host': $field = 'equipment'; break;
case 'hostgroup': $field = 'hostgroups'; break;
case 'service_group': $field = 'servicegroups'; break;
}
$like = "'";
if( substr($search, 0, 1) === '*' ){
$like .= "%";
}
$like .= trim($search, '*');
if ( substr($search, -1) === '*' ) {
$like .= "%";
}
$like .= "'";
$search_clause = " AND $field LIKE $like";
}
// set the period clause (according to checkboxes checked)
$period_clause = "";
if( isset($period) && $period != "" )
{
switch($period)
{
case "day": $period_clause = " AND o_sec >= $day"; break;
case "week": $period_clause = " AND o_sec >= $week AND o_sec < $day"; break;
case "month": $period_clause = " AND o_sec >= $month AND o_sec < $week"; break;
case "year": $period_clause = " AND o_sec >= $year AND o_sec < $month"; break;
}
}
while( $pkt = mysqli_fetch_row($pkt_result) )
{
foreach($ged_sla_intervals as $key => $value)
{
if( !isset($array_result["$key"]) ){
$array_result["$key"] = 0;
}
$sla_clause = "";
switch($key)
{
case "first" : $sla_clause = " AND a_sec-o_sec < $first"; break;
case "second": $sla_clause = " AND a_sec-o_sec >= $first AND a_sec-o_sec < $second"; break;
case "third" : $sla_clause = " AND a_sec-o_sec >= $second AND a_sec-o_sec < $third"; break;
case "fourth": $sla_clause = " AND a_sec-o_sec >= $third"; break;
}
$sql = "SELECT count(id) FROM ".$pkt[0]."_queue_history WHERE queue='h' AND state!='0'".$sla_clause;
$sql .= $search_clause;
$sql .= $period_clause;
$result = sqlrequest($database_ged, $sql);
$result = mysqli_fetch_row($result);
$array_result["$key"] += $result[0];
}
}
return json_encode($array_result);
}
function slaBarChart($field, $search)
{
// all external variables we need
global $database_ged;
global $array_ged_states;
global $ged_sla_intervals;
global $ged_history_intervals;
extract($ged_sla_intervals);
extract($ged_history_intervals);
$array_result = array();
$array_now_day = array();
$array_day_week = array();
$array_week_month = array();
$array_month_year = array();
$array_year_more = array();
$array_result = array();
$sql = "SELECT pkt_type_name FROM pkt_type WHERE pkt_type_id!='0' AND pkt_type_id<'100'";
$pkt_result = sqlrequest($database_ged, $sql);
// set the search clause (according to field and value)
$search_clause = "";
if( isset($search) && $search != "" )
{
switch ($field) {
case 'host': $field = 'equipment'; break;
case 'hostgroup': $field = 'hostgroups'; break;
case 'service_group': $field = 'servicegroups'; break;
}
$like = "'";
if( substr($search, 0, 1) === '*' ){
$like .= "%";
}
$like .= trim($search, '*');
if ( substr($search, -1) === '*' ) {
$like .= "%";
}
$like .= "'";
$search_clause = " AND $field LIKE $like";
}
while( $pkt = mysqli_fetch_row($pkt_result) )
{
foreach($ged_sla_intervals as $key => $value)
{
if( !isset($array_now_day["$key"]) ){$array_now_day["$key"] = 0;}
if( !isset($array_day_week["$key"]) ){$array_day_week["$key"] = 0;}
if( !isset($array_week_month["$key"]) ){$array_week_month["$key"] = 0;}
if( !isset($array_month_year["$key"]) ){$array_month_year["$key"] = 0;}
if( !isset($array_year_more["$key"]) ){$array_year_more["$key"] = 0;}
switch($key)
{
case "first" : $sla_clause = " AND a_sec-o_sec < $first"; break;
case "second": $sla_clause = " AND a_sec-o_sec >= $first AND a_sec-o_sec < $second"; break;
case "third" : $sla_clause = " AND a_sec-o_sec >= $second AND a_sec-o_sec < $third"; break;
case "fourth": $sla_clause = " AND a_sec-o_sec >= $third"; break;
}
$sql = "SELECT count(id) FROM ".$pkt[0]."_queue_history WHERE queue='h' AND state !='0' AND o_sec >= $day".$sla_clause.$search_clause.
" UNION ALL
SELECT count(id) FROM ".$pkt[0]."_queue_history WHERE queue='h' AND state !='0' AND o_sec >= $week AND o_sec < $day".$sla_clause.$search_clause.
" UNION ALL
SELECT count(id) FROM ".$pkt[0]."_queue_history WHERE queue='h' AND state !='0' AND o_sec >= $month AND o_sec < $week".$sla_clause.$search_clause.
" UNION ALL
SELECT count(id) FROM ".$pkt[0]."_queue_history WHERE queue='h' AND state !='0' AND o_sec >= $year AND o_sec < $month".$sla_clause.$search_clause.
" UNION ALL
SELECT count(id) FROM ".$pkt[0]."_queue_history WHERE queue='h' AND state !='0' AND o_sec < $year".$sla_clause.$search_clause;
$result = sqlrequest($database_ged, $sql);
$cpt = 0;
while( $row = mysqli_fetch_row($result) )
{
switch($cpt)
{
case 0: $array_now_day["$key"] += $row[0]; break;
case 1: $array_day_week["$key"] += $row[0]; break;
case 2: $array_week_month["$key"] += $row[0]; break;
case 3: $array_month_year["$key"] += $row[0]; break;
case 4: $array_year_more["$key"] += $row[0]; break;
}
$cpt++;
}
}
}
array_push($array_result, $array_now_day);
array_push($array_result, $array_day_week);
array_push($array_result, $array_week_month);
array_push($array_result, $array_month_year);
array_push($array_result, $array_year_more);
return json_encode($array_result);
}
# Convert seconds to human readable
function strTime($s) {
$d = intval($s/86400);
$s -= $d*86400;
$h = intval($s/3600);
$s -= $h*3600;
$m = intval($s/60);
$s -= $m*60;
if($d<10) $d="0".$d;
if($h<10) $h="0".$h;
if($m<10) $m="0".$m;
if($s<10) $s="0".$s;
if ($d) $str = $d . 'd ';
else $str = '00d ';
if ($h) $str .= $h . 'h ';
else $str .= '00h ';
if ($m) $str .= $m . 'm ';
else $str .= '00m ';
if ($s) $str .= $s . 's';
else $str .= '00s';
return $str;
}
# Get eon config values
function getEonConfig($name,$type=false)
{
global $database_eonweb;
global ${$name};
// mysql request
$sql = "SELECT value FROM configs WHERE name='".$name."'";
$value = sqlrequest($database_eonweb, $sql);
$result = mysqli_fetch_row($value);
// return value if exists
if(count($result)==0) {
return ${$name};
} elseif($type=="array") {
return explode(",",$result[0]);
} else {
return $result[0];
}
}
function checkUpdateDB(){
global $version;
global $database_eonweb;
global $database_username;
global $database_password;
global $path_eonweb;
$dir=$path_eonweb."/appliance/updates/";
$version_sql = sqlrequest($database_eonweb,"SELECT count(value) as value FROM configs WHERE name='version'");
if(mysqli_result($version_sql,0,"value") == 0){
$version_sql = sqlrequest($database_eonweb,"INSERT INTO configs (name, value) VALUES('version', '".$version."')");
// execution de tous les .sql jusqu'à la version donné dans config
$SQL_Files = array_slice(scandir($dir), 2);
usort($SQL_Files, 'version_compare');
foreach($SQL_Files as $file){
if(rtrim($file,'.sql') <= $version){
exec("mysql -u $database_username --password=$database_password < $dir$file");
}
}
}else{
$versionBD = mysqli_result(sqlrequest($database_eonweb,"SELECT value FROM configs WHERE name='version'"),0,"value");
// execution des .sql entre version en BD et celle config
$SQL_Files = array_slice(scandir($dir), 2);
usort($SQL_Files, 'version_compare');
foreach($SQL_Files as $file){
if((rtrim($file,'.sql') <= $version && rtrim($file,'.sql') > $versionBD)){
exec("mysql -u $database_username --password=$database_password < $dir$file");
}
}
sqlrequest($database_eonweb,"UPDATE configs SET value='$version' WHERE name='version'");
}
}
?>