- elif node not in self.emailed.keys():
- # Email about Down.
- if node in self.cmn.down:
- logger.debug("POLICY: Emailing (down) " + node)
- self.emailed[node] = ("down", time.localtime())
- msg = emailTxt.mailtxt.DOWN \
- % {'hostname': node}
- mailer.email(node + " down", msg,
- "tech-" + id + "@sites.planet-lab.org")
- return
-
- # Email about no SSH.
- if node in self.cmn.ssh:
- logger.debug("POLICY: Emailing (ssh) " + node)
- self.emailed[node] = ("ssh", time.localtime())
- msg = emailTxt.mailtxt.SSH \
- % {'hostname': node}
- mailer.email(node + " down", msg,
- "tech-" + id + "@sites.planet-lab.org")
- return
-
- # Email about DNS
- if node in self.cmn.dns:
- logger.debug("POLICY: Emailing (dns)" + node)
- self.emailed[node] = ("dns", time.localtime())
- msg = emailTxt.mailtxt.DNS \
- % {'hostname': node}
- mailer.email("Please update DNS used by " \
- + node, msg,
- "tech-" + id + "@sites.planet-lab.org")
- return
-
+ # And we didn't email already.
+ else:
+ # If first email, send to Tech
+ target = [TECHEMAIL % id]
+
+ # If disk is foobarred, PLC should check it.
+ if (node in self.cmn.filerw) and \
+ (node not in self.emailed.keys()):
+ target = [PLCEMAIL]
+ logger.info("Emailing PLC for " + node)
+
+ # If in dbg, set to rins, then reboot. Inform PLC.
+ if (node in self.cmn.dbg):
+ logger.info("Node in dbg - " + node)
+ return
+
+ # If its a disk, email PLC; dont bother going through this loop.
+ if (node in self.emailed.keys()) and \
+ (node not in self.cmn.filerw):
+ # If we emailed before, how long ago?
+ delta = time.localtime()[2] - self.emailed[node][1][2]
+ # If more than PI thresh, but less than slicethresh
+ if (delta >= PITHRESH) and (delta < SLICETHRESH):
+ logger.info("Emailing PI for " + node)
+ target.append(PIEMAIL % id)
+ # If more than PI thresh and slicethresh
+ if (delta >= PITHRESH) and (delta > SLICETHRESH):
+ logger.info("Emailing slices for " + node)
+ # Email slices at site.
+ slices = mailer.slices(id)
+ if len(slices) >= 1:
+ for slice in slices:
+ target.append(SLICEMAIL % slice)
+
+ # Find the bucket the node is in and send appropriate email
+ # to approriate list of people.
+ for bkt in self.cmn.comonbkts.keys():
+ if (node in getattr(self.cmn, bkt)):
+ # Send predefined message for that bucket.
+ logger.info("POLICY: Emailing (%s) %s - %s"\
+ %(bkt, node, target))
+ tmp = getattr(emailTxt.mailtxt, bkt)
+ sbj = tmp[0] % {'hostname': node}
+ msg = tmp[1] % {'hostname': node}
+ mailer.email(sbj, msg, target)
+ self.emailed[node] = (bkt , time.localtime())
+ return
+