From 2ecb77e4a1817ecc7ce62dd59fefbb701eac6a83 Mon Sep 17 00:00:00 2001
From: Stephen Soltesz <soltesz@cs.princeton.edu>
Date: Thu, 8 Jan 2009 22:05:36 +0000
Subject: [PATCH] moved nodecommon.py into monitor module updated many files
 that imported nodecommon added 'node-discovered' message to eamilZabbix added
 'node-discovered' message to zabbixsite.py

---
 findbad.py                                |  2 +-
 findbadpcu.py                             |  2 +-
 grouprins.py                              |  2 +-
 nodecommon.py => monitor/common.py        |  0
 monitor/database/zabbixapi/emailZabbix.py | 12 ++++++++++
 monitor/scanapi.py                        |  2 +-
 nodebad.py                                |  2 +-
 nodeconfig.py                             |  2 +-
 nodegroups.py                             |  2 +-
 nodehistory.py                            |  2 +-
 nodeinfo.py                               |  2 +-
 nodequery.py                              |  2 +-
 pcubad.py                                 |  2 +-
 showlatlon.py                             |  2 +-
 sitebad.py                                |  2 +-
 siteinfo.py                               |  2 +-
 zabbix/zabbix-auto-login.diff             |  5 +++-
 zabbix/zabbixsite.py                      | 28 ++++++++++++++++-------
 zabbix/zabbixsync.py                      |  9 ++++----
 19 files changed, 55 insertions(+), 27 deletions(-)
 rename nodecommon.py => monitor/common.py (100%)

diff --git a/findbad.py b/findbad.py
index 4c73e45..78ba65e 100755
--- a/findbad.py
+++ b/findbad.py
@@ -20,7 +20,7 @@ from monitor.scanapi import *
 
 from nodequery import verify,query_to_dict,node_select
 import traceback
-from nodecommon import nmap_port_status
+from monitor.common import nmap_port_status
 
 #print "starting sqlfindbad.py"
 # QUERY all nodes.
diff --git a/findbadpcu.py b/findbadpcu.py
index 9feb62d..2d27f79 100755
--- a/findbadpcu.py
+++ b/findbadpcu.py
@@ -20,7 +20,7 @@ from monitor import database
 from monitor import util 
 from monitor.wrapper import plc, plccache
 from nodequery import pcu_select
-from nodecommon import nmap_port_status
+from monitor.common import nmap_port_status
 from monitor.scanapi import *
 
 plc_lock = threading.Lock()
diff --git a/grouprins.py b/grouprins.py
index ba3ba88..c30e85d 100755
--- a/grouprins.py
+++ b/grouprins.py
@@ -24,7 +24,7 @@ api = plc.getAuthAPI()
 import traceback
 from optparse import OptionParser
 
-from nodecommon import *
+from monitor.common import *
 from nodequery import verify,query_to_dict,node_select
 from monitor.model import *
 import os
diff --git a/nodecommon.py b/monitor/common.py
similarity index 100%
rename from nodecommon.py
rename to monitor/common.py
diff --git a/monitor/database/zabbixapi/emailZabbix.py b/monitor/database/zabbixapi/emailZabbix.py
index 3f61fff..740ac1e 100644
--- a/monitor/database/zabbixapi/emailZabbix.py
+++ b/monitor/database/zabbixapi/emailZabbix.py
@@ -119,6 +119,18 @@ You can acknowledge this notice by visiting the link below or by letting us know
     http://%(hostname)s/zabbix/acknow.php?eventid={EVENT.ID}
     http://%(hostname)s/zabbix/tr_events.php?triggerid={TRIGGER.ID}&eventid={EVENT.ID}
 
+Thank you for your help,
+    -- PlanetLab Central (%(support_email)s)
+"""
+	node_discovered_subject = """Discovered {HOSTNAME} and online"""
+	node_discovered = """
+Thank you for registering and installing this machine:
+
+    {HOSTNAME}
+
+Our monitoring infrastructure has detected it, and in the future it will alert you in the event of unexpected downtime.
+
+	{TRIGGER.NAME}: {STATUS}
 Thank you for your help,
     -- PlanetLab Central (%(support_email)s)
 """
diff --git a/monitor/scanapi.py b/monitor/scanapi.py
index bbc99d7..194ab40 100644
--- a/monitor/scanapi.py
+++ b/monitor/scanapi.py
@@ -21,7 +21,7 @@ from monitor.sources import comon
 from monitor.wrapper import plc, plccache
 
 import traceback
-from nodecommon import nmap_port_status
+from monitor.common import nmap_port_status
 
 COMON_COTOPURL= "http://summer.cs.princeton.edu/status/tabulator.cgi?" + \
 			"table=table_nodeview&" + \
diff --git a/nodebad.py b/nodebad.py
index f9f6edf..767a4fe 100755
--- a/nodebad.py
+++ b/nodebad.py
@@ -8,7 +8,7 @@ from datetime import datetime,timedelta
 
 from nodequery import verify,query_to_dict,node_select
 
-from nodecommon import *
+from monitor.common import *
 
 from monitor import config
 from monitor.wrapper import plc,plccache
diff --git a/nodeconfig.py b/nodeconfig.py
index b205900..401ff83 100755
--- a/nodeconfig.py
+++ b/nodeconfig.py
@@ -7,7 +7,7 @@ api = plc.getAuthAPI()
 from monitor import parser as parsermodule
 from sets import Set
 
-from nodecommon import *
+from monitor.common import *
 from monitor import database
 from monitor.database import FindbadNodeRecord
 
diff --git a/nodegroups.py b/nodegroups.py
index 9e14e2f..8302404 100755
--- a/nodegroups.py
+++ b/nodegroups.py
@@ -22,7 +22,7 @@ from monitor import parser as parsermodule
 api = plc.getAuthAPI()
 
 from nodequery import verify,query_to_dict,node_select
-from nodecommon import *
+from monitor.common import *
 from sets import Set
 
 def main():
diff --git a/nodehistory.py b/nodehistory.py
index 7ea30fb..6302823 100755
--- a/nodehistory.py
+++ b/nodehistory.py
@@ -12,7 +12,7 @@ import calendar
 import sys
 import time
 from monitor.model import *
-from nodecommon import *
+from monitor.common import *
 
 def get_filefromglob(d, str):
 	import os
diff --git a/nodeinfo.py b/nodeinfo.py
index 29d77bb..9afed5c 100755
--- a/nodeinfo.py
+++ b/nodeinfo.py
@@ -12,7 +12,7 @@ from pcucontrol  import reboot
 
 import time
 from monitor.model import *
-from nodecommon import *
+from monitor.common import *
 #from monitor.model import node_end_record, PersistFlags
 
 parser = parsermodule.getParser()
diff --git a/nodequery.py b/nodequery.py
index bcebf15..dfe3f95 100755
--- a/nodequery.py
+++ b/nodequery.py
@@ -3,7 +3,7 @@
 
 import sys
 from monitor import database
-from nodecommon import *
+from monitor.common import *
 from monitor.model import Record
 import glob
 import os
diff --git a/pcubad.py b/pcubad.py
index 6ca478f..181f001 100755
--- a/pcubad.py
+++ b/pcubad.py
@@ -15,7 +15,7 @@ from monitor.database.dborm import mon_session as session
 from monitor.wrapper import plc,plccache
 from monitor.const import MINUP
 
-from nodecommon import *
+from monitor.common import *
 from nodequery import verify,query_to_dict,node_select
 from monitor.model import *
 
diff --git a/showlatlon.py b/showlatlon.py
index a556953..1d06594 100755
--- a/showlatlon.py
+++ b/showlatlon.py
@@ -9,7 +9,7 @@ from datetime import datetime, timedelta
 
 import database
 import comon
-from nodecommon import color_pcu_state, datetime_fromstr
+from monitor.common import color_pcu_state, datetime_fromstr
 from nodehistory import get_filefromglob
 import time
 import traceback
diff --git a/sitebad.py b/sitebad.py
index 781cab6..5132233 100755
--- a/sitebad.py
+++ b/sitebad.py
@@ -14,7 +14,7 @@ from monitor.database.info.model import HistorySiteRecord, FindbadNodeRecord, se
 from monitor.wrapper import plc, plccache
 from monitor.const import MINUP
 
-from nodecommon import *
+from monitor.common import *
 from nodequery import verify,query_to_dict,node_select
 from monitor.model import *
 
diff --git a/siteinfo.py b/siteinfo.py
index 9101443..cfce458 100755
--- a/siteinfo.py
+++ b/siteinfo.py
@@ -7,7 +7,7 @@ from monitor import database
 from pcucontrol  import reboot
 
 import time
-from nodecommon import *
+from monitor.common import *
 
 from monitor import util
 from monitor import parser as parsermodule
diff --git a/zabbix/zabbix-auto-login.diff b/zabbix/zabbix-auto-login.diff
index a55f138..3d79cea 100644
--- a/zabbix/zabbix-auto-login.diff
+++ b/zabbix/zabbix-auto-login.diff
@@ -14,13 +14,16 @@
  	if(isset($_REQUEST['enter'])&&($_REQUEST['enter']=='Enter')){
  		
  		$name = get_request('name','');
-@@ -154,6 +157,10 @@
+@@ -154,6 +157,13 @@
  				$row["url"] = get_profile('web.menu.view.last','index.php');
  				unset($USER_DETAILS);
  			}
 +			if ( array_key_exists('url', $_GET) )
 +			{
 +				$row['url'] = urldecode($_GET['url']);
++			}
++			if ( $row['url'] == 'index.php' ) {
++				$row['url'] = 'dashboard.php';
 +			}
  			redirect($row["url"]);
  			die();
diff --git a/zabbix/zabbixsite.py b/zabbix/zabbixsite.py
index 419b84b..07ad9d4 100755
--- a/zabbix/zabbixsite.py
+++ b/zabbix/zabbixsite.py
@@ -146,9 +146,6 @@ def merge_iplist(iplist):
 
 def setup_site(loginbase, techemail, piemail, iplist):
 
-	# TODO: send a message when host is discovered.
-
-	# TODO: update 'discovered' hosts with dns name.
 	# TODO: remove old nodes that are no longer in the plcdb.
 	# TODO: remove old users that are no longer in the plcdb.
 	# TODO: consider creating two user groups for Tech & PI emails
@@ -162,11 +159,14 @@ def setup_site(loginbase, techemail, piemail, iplist):
 		raise Exception("iplist length is too long!")
 
 	BI_WEEKLY_ESC_PERIOD = int(60*60*24)
-	#BI_WEEKLY_ESC_PERIOD = int(60) # testing...
+	DISCOVERY_DELAY = 3600
+	BI_WEEKLY_ESC_PERIOD = int(240) # testing...
+	DISCOVERY_DELAY = 120 # testing
 
 	# User Group
 	site_user_group = UsrGrp.find_or_create(name=USERGROUP_NAME % loginbase)
-	for user in set(techemail + piemail + [config.cc_email]):
+	#for user in set(techemail + piemail + [config.cc_email]):
+	for user in set([config.cc_email]):
 		if not user: continue
 		# USER
 		u = User.find_or_create(alias=user, type=1,
@@ -193,7 +193,7 @@ def setup_site(loginbase, techemail, piemail, iplist):
 
 	# DISCOVERY RULE & CHECK
 	dr = DiscoveryRule.find_or_create(name=discovery_rule_name,
-			  delay=3600,
+			  delay=DISCOVERY_DELAY,
 			  proxy_hostid=0,
 			  set_if_new = {'iprange':iplist},
 			  exec_if_new=lambda obj: \
@@ -234,6 +234,15 @@ def setup_site(loginbase, techemail, piemail, iplist):
 				]
 				# THEN
 		a.actionoperation_list=[
+					# Send Email
+					ActionOperation(
+						operationtype=defines.OPERATION_TYPE_MESSAGE,
+						shortdata=mailtxt.node_discovered_subject,
+						longdata=mailtxt.node_discovered,
+						object=defines.OPERATION_OBJECT_GROUP, 
+						objectid=site_user_group.usrgrpid, 
+						esc_period=0, esc_step_to=1, esc_step_from=1, 
+					),
 					# Add Host
 					ActionOperation(
 						operationtype=defines.OPERATION_TYPE_HOST_ADD,
@@ -249,7 +258,7 @@ def setup_site(loginbase, techemail, piemail, iplist):
 						operationtype=defines.OPERATION_TYPE_GROUP_ADD,
 						object=0, objectid=site_host_group.groupid,
 						esc_period=0, esc_step_from=1, esc_step_to=1),
-					# Link to Template 'Template_Linux_Minimal'
+					# Link to Template 'Template_Linux_PLC_Host'
 					ActionOperation(
 						operationtype=defines.OPERATION_TYPE_TEMPLATE_ADD,
 						object=0, objectid=plctemplate.hostid,
@@ -258,7 +267,10 @@ def setup_site(loginbase, techemail, piemail, iplist):
 	else:
 		# TODO: verify iplist is up-to-date
 		# NOTE: len(a.actioncondition_list) > 0
-		ip_condition  = a.actioncondition_list[0]
+		#ip_condition  = a.actioncondition_list[0]
+		ip_condition = filter(lambda x: x.conditiontype == defines.CONDITION_TYPE_DHOST_IP, a.actioncondition_list)[0]
+		print ip_condition.conditiontype
+		print defines.CONDITION_TYPE_DHOST_IP
 		assert ip_condition.conditiontype == defines.CONDITION_TYPE_DHOST_IP
 		if ip_condition.value != iplist:
 			ip_condition.value = iplist
diff --git a/zabbix/zabbixsync.py b/zabbix/zabbixsync.py
index 1c0e405..e35798c 100755
--- a/zabbix/zabbixsync.py
+++ b/zabbix/zabbixsync.py
@@ -20,9 +20,10 @@ def get_site_iplist(loginbase):
 	# TODO: if it is, then we need to break up the discovery rule.
 	ip_list = ""
 	for node in node_list:
-		ip = netid2ip[node['nodenetwork_ids'][0]]
-		if len(ip_list) > 0: ip_list += ","
-		ip_list += ip
+		if len(node['nodenetwork_ids']) > 0:
+			ip = netid2ip[node['nodenetwork_ids'][0]]
+			if len(ip_list) > 0: ip_list += ","
+			ip_list += ip
 
 	return ip_list
 	
@@ -59,7 +60,7 @@ if __name__=="__main__":
 			query.update({'login_base' : opts.site})
 
 		sites = api.GetSites(query, ['login_base'])
-		for site in sites:
+		for site in sites[:10]:
 			add_loginbase(site['login_base'])
 			session.flush()
 
-- 
2.47.0