function probes() { $array = array(); $unix = new unix(); $gluster = $unix->find_program("gluster"); $q = new mysql(); $results = $q->QUERY_SQL("SELECT client_ip,hostname FROM glusters_clients WHERE LENGTH(uuid)=0 AND NotifToDelete=0", "artica_backup"); if ($GLOBALS["VERBOSE"]) { echo "SELECT client_ip,hostname FROM glusters_clients WHERE LENGTH(uuid)=0 = " . mysql_num_rows($results) . " rows\n"; } while ($ligne = mysql_fetch_array($results, MYSQL_ASSOC)) { if ($GLOBALS["VERBOSE"]) { echo "Probe {$ligne["client_ip"]}\n"; } if ($ligne["client_ip"] != null) { $results2 = array(); exec("{$gluster} peer probe {$ligne["client_ip"]} 2>&1", $results2); if (preg_match("#is already part of another cluster#", $results2[0])) { $glusterClass = new gluster_client($ligne["client_ip"]); $glusterClass->state = "WARN: is already part of another cluster"; $glusterClass->edit_client(); } system_admin_events("Probe {$ligne["client_ip"]}:\n" . @implode("\n", $results2), __FUNCTION__, __FILE__, __LINE__, "clusters"); continue; } } $q = new mysql(); $results = $q->QUERY_SQL("SELECT client_ip,hostname FROM glusters_clients WHERE NotifToDelete=1", "artica_backup"); while ($ligne = mysql_fetch_array($results, MYSQL_ASSOC)) { if ($GLOBALS["VERBOSE"]) { echo "detach {$ligne["client_ip"]}/{$ligne["hostname"]}\n"; } if ($ligne["client_ip"] != null) { $results2 = array(); exec("{$gluster} peer detach {$ligne["client_ip"]} 2>&1", $results2); if (preg_match("#is not part of cluster#i", $results2[0])) { $glusterClass = new gluster_client($ligne["client_ip"]); $glusterClass->remove(); } if (preg_match("#successful#i", $results2[0])) { $glusterClass = new gluster_client($ligne["client_ip"]); $glusterClass->remove(); } if (preg_match("#exist in cluster#", $results2[0])) { $glusterClass = new gluster_client($ligne["client_ip"]); $glusterClass->state = "WARN: {$results2[0]}"; $glusterClass->edit_client(); $NOSTATUS[$ligne["client_ip"]] = true; continue; } if (preg_match("#is probably down#", $results2[0])) { $glusterClass = new gluster_client($ligne["client_ip"]); $glusterClass->state = "WARN: {$results2[0]}"; $glusterClass->edit_client(); $NOSTATUS[$ligne["client_ip"]] = true; continue; } system_admin_events("detach {$ligne["client_ip"]}:\n" . @implode("\n", $results2), __FUNCTION__, __FILE__, __LINE__, "clusters"); continue; } } exec("{$gluster} peer status 2>&1", $results); while (list($index, $line) = each($results)) { if (preg_match("#Hostname:\\s+(.+)#", $line, $re)) { $hostname = $re[1]; if (!preg_match("#[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+\$#", $hostname)) { $array[$hostname]["client_ip"] = gethostbyname($hostname); } continue; } if (preg_match("#Uuid:\\s+(.+)#i", $line, $re)) { $array[$hostname]["UUID"] = $re[1]; continue; } if (preg_match("#State:\\s+(.+)#i", $line, $re)) { $array[$hostname]["STATE"] = $re[1]; continue; } if ($GLOBALS["VERBOSE"]) { echo "peer status: {$line} -> SKIP\n"; } } if ($GLOBALS["VERBOSE"]) { echo "peer status: " . count($array) . " items\n"; } while (list($hostname, $line) = each($array)) { $hostnameText = null; if (preg_match("#[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+\$#", $hostname)) { if ($GLOBALS["VERBOSE"]) { echo "{$hostname} -> is an ip -> resolve it\n"; } $line["client_ip"] = $hostname; $hostnameText = gethostbyaddr($hostname); } if (isset($NOSTATUS[$line["client_ip"]])) { continue; } $gluster = new gluster_client($hostname); if ($gluster->client_ip == null) { if ($GLOBALS["VERBOSE"]) { echo "{$hostname} -> ADD -> {$line["STATE"]}\n"; } if (isset($line["client_ip"])) { $gluster->client_ip = $line["client_ip"]; } $gluster->state = $line["STATE"]; $gluster->uuid = $line["UUID"]; if ($hostnameText != null) { $gluster->hostname = $hostnameText; } $gluster->add_client(); continue; } if ($GLOBALS["VERBOSE"]) { echo "{$hostname} -> EDIT -> {$line["STATE"]} - {$hostnameText}\n"; } $gluster->state = $line["STATE"]; $gluster->uuid = $line["UUID"]; $gluster->edit_client(); } }