various files updated with new paths and import strings.
from monitor.util import command
from monitor import config
-from monitor.database.infovacuum import FindbadNodeRecordSync, FindbadNodeRecord
-from monitor.database.dborm import mon_session as session
+from monitor.database.info.model import FindbadNodeRecordSync, FindbadNodeRecord, session
from monitor.sources import comon
from monitor.wrapper import plc, plccache
import monitor
from monitor.pcu import reboot
from monitor import config
-from monitor.database.infovacuum import FindbadPCURecordSync, FindbadPCURecord
-from monitor.database.dborm import mon_session as session
+from monitor.database.info.model import FindbadPCURecordSync, FindbadPCURecord, session
from monitor import util
from monitor.wrapper import plc, plccache
from nodequery import pcu_select
fbrec = FindbadPCURecord(
date_checked=datetime.fromtimestamp(values['date_checked']),
- record=fbsync.round,
+ round=fbsync.round,
plc_pcuid=pcu_id,
plc_pcu_stats=values['plc_pcu_stats'],
dns_status=values['dnsmatch'],
reboot_trial_status="%s" % values['reboot'],
)
fbnodesync.round = global_round
+
+ fbnodesync.flush()
+ fbsync.flush()
+ fbrec.flush()
+
count += 1
print "%d %s %s" % (count, nodename, values)
for pcuname in l_pcus:
pcu_id = int(pcuname)
fbnodesync = FindbadPCURecordSync.findby_or_create(plc_pcuid=pcu_id, if_new_set={'round' : 0})
+ fbnodesync.flush()
node_round = fbnodesync.round
if node_round < global_round:
global_round += 1
fbsync.round = global_round
+ fbsync.flush()
+
if config.site is not None:
api = plc.getAuthAPI()
site = api.GetSites(config.site)
# automated actions for debug nodes.
01 * * * * root /usr/share/monitor/automate.sh 2>&1 > /usr/share/monitor/monitor.log
-
+01 * * * * root /usr/share/monitor/zabbix/zabbixsync.py 2>&1 > /usr/share/monitor/zabbixsync.log
}
function check_monitor_schema_and_data()
{
- # NOTE: call create_all() to setup the database from the infovacuum model.
- python -c "from monitor.database.infovacuum import *; from elixir import create_all; create_all()"
+ # NOTE: call create_all() to setup the database from the info model.
+ python -c "from monitor.database.info.model import *; from elixir import create_all; create_all()"
}
function check_zabbix_schema_and_data()
-e "s#DBName=.*#DBName=$ZABBIX_DB_NAME#g" \
-e "s#DBUser=.*#DBUser=$ZABBIX_DB_USER#g" \
-e "s#DBPassword=.*#DBPassword=$PLC_MONITOR_DBPASSWORD#g" \
+ -e "s/.*ExternalScripts=.*/ExternalScripts=${MONITORPATH}\/zabbix/g" \
${ZABBIXCFG}/zabbix_server.conf > $TMP_FILE
cat $TMP_FILE > ${ZABBIXCFG}/zabbix_server.conf
fi
zab_metadata = sqlalchemy.MetaData()
zab_metadata.bind = sqlalchemy.create_engine(config.zabbix_dburi, echo=config.echo)
zab_session = sqlalchemy.orm.scoped_session(sqlalchemy.orm.sessionmaker(autoflush=False,autocommit=True))
-
-#from monitor.database.infovacuum.model import *
-#from monitor.database.zabbixapi.model import *
-#__connection__ = hub = PackageHub('infovacuum')
try:
import pkg_resources
pkg_resources.require("SQLAlchemy>=0.4.9")
from elixir import options_defaults, using_options, setup_all
from elixir import String, Unicode, Integer, DateTime
options_defaults['autosetup'] = False
+# NOTE: due to the module path length, this is required.
+options_defaults['shortnames'] = True
from monitor.database.dborm import mon_metadata, mon_session
__metadata__ = mon_metadata
class FindbadPCURecord(Entity):
@classmethod
def get_all_latest(cls):
- fbsync = cls.get_by(hostname="global")
+ fbsync = FindbadPCURecordSync.get_by(plc_pcuid=0)
+ print "round: ", fbsync.round
return cls.query.filter_by(round=fbsync.round)
@classmethod
def get_latest_by(cls, **kwargs):
- fbsync = cls.get_by(hostname="global")
+ fbsync = FindbadPCURecordSync.get_by(plc_pcuid=0)
kwargs['round'] = fbsync.round
return cls.query.filter_by(**kwargs)
# ACCOUNTING
from monitor.database.info.action import *
from monitor.database.info.findbad import *
from monitor.database.info.history import *
+from monitor.database.dborm import mon_session as session
logger = logging.getLogger("monitor")
class Auth:
- def __init__(self):
- self.auth = {'AuthMethod': "anonymous"}
+ def __init__(self, username=None, password=None):
+ if username==None and password==None:
+ self.auth = {'AuthMethod': "anonymous"}
+ else:
+ self.auth = {'Username' : username,
+ 'AuthMethod' : 'password',
+ 'AuthString' : password}
+
# NOTE: this host is used by default when there are no auth files.
XMLRPC_SERVER="https://boot.planet-lab.org/PLCAPI/"
from monitor.wrapper import plc, plccache
api = plc.getAuthAPI()
-from monitor.database.infovacuum import FindbadNodeRecordSync, FindbadNodeRecord
-from monitor.database.dborm import mon_session as session
+from monitor.database.info.model import FindbadNodeRecordSync, FindbadNodeRecord, session
from monitor import util
from monitor import config
#!/usr/bin/python
-import plc
+from monitor.wrapper import plc
import sys
import time
-email_list = [ 'monitor@planet-lab.org',
+email_list = [ 'soltesz@cs.princeton.edu',
# 'soltesz@cs.princeton.edu',
# 'justin@cs.arizona.edu',
# 'bakers@cs.arizona.edu',
# 'vivek@cs.princeton.edu',
]
-import config
-api = plc.PLC(config.API_AUTH, config.API_SERVER)
-api06 = plc.PLC(config.API_AUTH06, config.API_SERVER06)
-
+from monitor import config
+api = plc.PLC(plc.Auth(config.API_AUTH_USER, config.API_AUTH_PASSWORD).auth, config.API_SERVER)
+api06 = plc.PLC(plc.Auth(config.API06_AUTH_USER, config.API06_AUTH_PASSWORD).auth, config.API06_SERVER)
# add planetlab-15.cs.princeton.edu, and use the key on the CD.
-id = api06.AddNode(1, {'boot_state': 'rins', 'model': 'Dell Optiplex',
- 'hostname' : 'planetlab-15.cs.princeton.edu',
- 'version' : '3.3'})
-api06.AddNodeNetwork(id, {'ip': '128.112.139.39',
- 'type' : 'ipv4',
- 'is_primary' : True,
- 'method' : 'dhcp', })
-api06.UpdateNode(id, {'key': "wptNagk8SgRxzN1lXfKMAjUYhQbOBymKnKg9Uv0LwGM"})
-
+#id = api06.AddNode(1, {'boot_state': 'rins', 'model': 'Dell Optiplex',
+# 'hostname' : 'planetlab-15.cs.princeton.edu',
+# 'version' : '3.3'})
+#api06.AddNodeNetwork(id, {'ip': '128.112.139.39',
+# 'type' : 'ipv4',
+## 'is_primary' : True,
+# 'method' : 'dhcp', })
+#api06.UpdateNode(id, {'key': "wptNagk8SgRxzN1lXfKMAjUYhQbOBymKnKg9Uv0LwGM"})
+#
#print "adding vsys attributes"
#api06.AddSliceAttribute('princeton_slicestat', 'vsys', 'pl-ps')
except:
return False
+def node_exists(node):
+ x = api06.GetNodes({'hostname':node['hostname']})
+ if len(x) == 0:
+ return False
+ else:
+ return True
+
# Renew slices
slices = api06.GetSlices()
for slice in slices:
sites = api.GetSites(user['site_ids'])
print "Adding sites:",
for site in sites:
- if not site_exists(site):
- print "%s" % site['login_base'],
- api06.AddSite(site)
- api06.AddPersonToSite(user['email'], site['login_base'])
- sys.stdout.flush()
+ nodes = api.GetNodes(site['node_ids'])
+
+ if not site_exists(site):
+ print "%s" % site['login_base']
+ api06.AddSite(site)
+ api06.AddPersonToSite(user['email'], site['login_base'])
+ sys.stdout.flush()
+
+ for node in nodes:
+ if not node_exists(node):
+ id = api06.AddNode(site['login_base'], {'boot_state': node['boot_state'],
+ 'model': node['model'],
+ 'hostname' : node['hostname'],
+ 'version' : node['version']})
+ nnets = api.GetNodeNetworks(node['nodenetwork_ids'])
+ for nnet in nnets:
+ del nnet['nodenetwork_id']
+ del nnet['nodenetwork_setting_ids']
+ api06.AddNodeNetwork(id, nnet)
print ""
nodes = api06.GetNodes()
#from setuptools import setup, find_packages
packages=['monitor', 'monitor.database', 'monitor.database.zabbixapi',
- 'monitor.database.infovacuum', 'monitor.pcu',
- 'monitor.sources', 'monitor.util', 'monitor.wrapper' ]
+ 'monitor.database.info', 'monitor.pcu', 'monitor.sources',
+ 'monitor.util', 'monitor.wrapper' ]
#packages = find_packages(exclude=('Rpyc', 'www', 'ssh', 'pyssh',
#'Rpyc.Demo', 'Rpyc.Servers', 'www.HyperText'))
})
return
+def merge_iplist(iplist):
+ # TODO: rewrite addresses as x.x.x.y-z rather than x.x.x.y,x.x.x.z if y-z==1
+ ips = iplist.split(',')
+ ips.sort()
+ prev=None
+ newlist=""
+ for ip in ips:
+ fields = ip.split('.')
+ first = ".".join(fields[:2])
+ last = int(fields[3])
+ if prev:
+ if last - prev == 1:
+ pass
+ prev=last
+ newlist += "%s,"
+ return newlist[:-1]
+
def setup_site(loginbase, techemail, piemail, iplist):
# TODO: send a message when host is discovered.