summaryrefslogtreecommitdiffstats
path: root/frontends/php/include/nodes.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'frontends/php/include/nodes.inc.php')
-rw-r--r--frontends/php/include/nodes.inc.php83
1 files changed, 78 insertions, 5 deletions
diff --git a/frontends/php/include/nodes.inc.php b/frontends/php/include/nodes.inc.php
index 306c66df..ec2bd51d 100644
--- a/frontends/php/include/nodes.inc.php
+++ b/frontends/php/include/nodes.inc.php
@@ -20,16 +20,73 @@
require_once "include/db.inc.php";
?>
<?php
- function add_node($name,$timezone,$ip,$port,$slave_history,$slave_trends)
+ function detect_node_type($node_data)
{
- global $ZBX_CURNODEID;
+ global $ZBX_CURNODEID, $ZBX_CURMASTERID;
+
+ if($node_data['nodeid'] == $ZBX_CURNODEID) $node_type = ZBX_NODE_LOCAL;
+ else if($node_data['nodeid'] == $ZBX_CURMASTERID) $node_type = ZBX_NODE_MASTER;
+ else if($node_data['masterid'] == $ZBX_CURNODEID) $node_type = ZBX_NODE_REMOTE;
+ else $node_type = -1;
+
+ return $node_type;
+ }
+
+ function node_type2str($node_type)
+ {
+ $result = '';
+ switch($node_type)
+ {
+ case ZBX_NODE_REMOTE: $result = S_REMOTE; break;
+ case ZBX_NODE_MASTER: $result = S_MASTER; break;
+ case ZBX_NODE_LOCAL: $result = S_LOCAL; break;
+ default: $result = S_UNKNOWN; break;
+ }
+
+ return $result;
+ }
+
+ function add_node($name,$timezone,$ip,$port,$slave_history,$slave_trends,$node_type)
+ {
+ global $ZBX_CURNODEID, $ZBX_CURMASTERID;
+
+ switch($node_type)
+ {
+ case ZBX_NODE_REMOTE:
+ $masterid = $ZBX_CURNODEID;
+ $nodetype = 0;
+ break;
+ case ZBX_NODE_MASTER:
+ $masterid = 0;
+ $nodetype = 0;
+ if($ZBX_CURMASTERID)
+ {
+ error('Master node already exist');
+ return false;
+ }
+ break;
+ case ZBX_NODE_LOCAL:
+ $masterid = $ZBX_CURMASTERID;
+ $nodetype = 1;
+ break;
+ default:
+ error('Incorrect node type');
+ return false;
+ break;
+ }
$nodeid = DBfetch(DBselect('select max(nodeid) as max from nodes'));
$nodeid = $nodeid['max'] + 1;
$result = DBexecute('insert into nodes (nodeid,name,timezone,ip,port,slave_history,slave_trends,'.
'event_lastid,history_lastid,nodetype,masterid) values ('.
$nodeid.','.zbx_dbstr($name).','.$timezone.','.zbx_dbstr($ip).','.$port.','.$slave_history.','.$slave_trends.','.
- '0,0,0,'.$ZBX_CURNODEID.')');
+ '0,0,'.$nodetype.','.$masterid.')');
+
+ if($result && $node_type == ZBX_NODE_MASTER)
+ {
+ DBexecute('update nodes set masterid='.$nodeid.' where nodeid='.$ZBX_CURNODEID);
+ $ZBX_CURMASTERID = $nodeid; /* applay Master node for this script */
+ }
return ($result ? $nodeid : $result);
}
@@ -45,9 +102,25 @@
function delete_node($nodeid)
{
$result = false;
- if(!DBfetch(DBselect('select * from nodes where masterid='.$nodeid)))
+ $node_data = DBfetch(DBselect('select * from nodes where nodeid='.$nodeid));
+
+ $node_type = detect_node_type($node_data);
+
+ if($node_type == ZBX_NODE_LOCAL)
+ {
+ error('Unable to remove local node');
+ }
+ else
{
- $result = DBexecute('delete from nodes where nodeid='.$nodeid);
+ SDI('TODO: Correct housekeeper scheduling [node deletion]!'); /* TODO */ /* add node deletion by housekeeper */
+
+ $housekeeperid = get_dbid('housekeeper','housekeeperid');
+ $result = (
+ DBexecute("insert into housekeeper (housekeeperid,tablename,field,value)".
+ " values ($housekeeperid,'nodes','nodeid',$nodeid)") &&
+ DBexecute('delete from nodes where nodeid='.$nodeid) &&
+ DBexecute('update nodes set masterid=0 where masterid='.$nodeid)
+ );
}
return $result;
}