def test_config_file(self): mail_host = "mailhost.domain" mail_port = 123 mail_host_port = "mailhost.domain:567" smtp_auth_user = "******" smtp_auth_password = "******" smtp_use_starttls = True mail = VscMail(mail_host=mail_host) self.assertEqual(mail.mail_host, mail_host) self.assertEqual(mail.mail_port, 587) mail = VscMail(mail_host=mail_host, mail_port=mail_port) self.assertEqual(mail.mail_host, mail_host) self.assertEqual(mail.mail_port, mail_port) mail = VscMail(mail_config=os.path.dirname(__file__) + '/data/' + 'mailconfig.ini') logging.warning("mail.mail_host: %s", mail.mail_host) self.assertEqual(mail.mail_host, "config_host") self.assertEqual(mail.mail_port, 789) self.assertEqual(mail.smtp_auth_user, "config_user") self.assertEqual(mail.smtp_auth_password, "config_passwd") self.assertEqual(mail.smtp_use_starttls, '1')
def test_send(self, mock_ssl, mock_smtplib): msg = MIMEText("test") msg['Subject'] = "subject" msg['From'] = "*****@*****.**" msg['To'] = "*****@*****.**" msg['Reply-to'] = "*****@*****.**" vm = VscMail() self.assertEqual(vm.mail_host, '') self.assertEqual(vm.mail_port, 587) self.assertEqual(vm.smtp_auth_user, None) self.assertEqual(vm.smtp_auth_password, None) self.assertEqual(vm.smtp_use_starttls, False) vm._send(mail_from="*****@*****.**", mail_to="*****@*****.**", mail_subject="s", msg=msg) vm = VscMail( mail_host = "test.machine.com", mail_port=123, smtp_auth_user="******", smtp_auth_password="******", ) self.assertEqual(vm.mail_host, "test.machine.com") self.assertEqual(vm.mail_port, 123) self.assertEqual(vm.smtp_auth_user, "me") self.assertEqual(vm.smtp_auth_password, "hunter2") self.assertEqual(vm.smtp_use_starttls, False) vm._send(mail_from="*****@*****.**", mail_to="*****@*****.**", mail_subject="s", msg=msg) mock_smtplib.SMTP.assert_called_with(host="test.machine.com", port=123) vm = VscMail( mail_host = "test.machine.com", mail_port=124, smtp_auth_user="******", smtp_auth_password="******", smtp_use_starttls=True ) self.assertEqual(vm.mail_host, "test.machine.com") self.assertEqual(vm.mail_port, 124) self.assertEqual(vm.smtp_auth_user, "me") self.assertEqual(vm.smtp_auth_password, "hunter2") self.assertEqual(vm.smtp_use_starttls, True) vm._send(mail_from="*****@*****.**", mail_to="*****@*****.**", mail_subject="s", msg=msg) mock_smtplib.SMTP.assert_called_with(host="test.machine.com", port=124) mock_ssl.create_default_context.assert_called()
def mail_admins(critical_filesets, dry_run=True): """Send email to the HPC admin about the inodes running out soonish.""" mail = VscMail(mail_host="smtp.ugent.be") message = CRITICAL_INODE_COUNT_MESSAGE fileset_info = [] for (fs_name, fs_info) in critical_filesets.items(): for (fileset_name, inode_info) in fs_info.items(): fileset_info.append( "%s - %s: used %d (%d%%) of max %d [allocated: %d]" % (fs_name, fileset_name, inode_info.used, int(inode_info.used * 100 / inode_info.maxinodes), inode_info.maxinodes, inode_info.allocated)) message = message % ({'fileset_info': "\n".join(fileset_info)}) if dry_run: logging.info("Would have sent this message: %s" % (message, )) else: mail.sendTextMail(mail_to="*****@*****.**", mail_from="*****@*****.**", reply_to="*****@*****.**", mail_subject="Inode space(s) running out on %s" % (socket.gethostname()), message=message)
def mail_admins(critical_filesets, dry_run=True, host_institute=GENT): """Send email to the HPC admin about the inodes running out soonish.""" mail = VscMail(mail_host=INSTITUTE_SMTP_SERVER[host_institute]) message = CRITICAL_INODE_COUNT_MESSAGE fileset_info = [] for (fs_name, fs_info) in critical_filesets.items(): for (fileset_name, inode_info) in fs_info.items(): fileset_info.append( "%s - %s: used %d (%d%%) of max %d [allocated: %d]" % (fs_name, fileset_name, inode_info.used, int(inode_info.used * 100 / inode_info.maxinodes), inode_info.maxinodes, inode_info.allocated)) message = message % ({'fileset_info': "\n".join(fileset_info)}) if dry_run: logging.info("Would have sent this message: %s", message) else: mail.sendTextMail(mail_to=INSTITUTE_ADMIN_EMAIL[host_institute], mail_from=INSTITUTE_ADMIN_EMAIL[host_institute], reply_to=INSTITUTE_ADMIN_EMAIL[host_institute], mail_subject="Inode space(s) running out on %s" % (socket.gethostname()), message=message)
def mail_report(t, queued_jobs, running_jobs): """Mail report to [email protected]. @type t: string representing the time when the job list was fetched @type queued_jobs: list of queued job tuples (name, PBS job entry) @type running_jobs: list of running job tuples (name, PBS job entry) """ message_queued_jobs = '\n'.join( ['Queued jobs belonging to gracing or inactive users', 50 * '-'] + [ "{user_name} - {job_name} queued at {queue_time}".format( user_name=job['euser'][0], queue_time=job['qtime'][0], job_name=job_name) for (job_name, job) in queued_jobs ]) message_running_jobs = '\n'.join( ['Running jobs belonging to inactive users', 40 * '-'] + [ "{user_name} - {job_name} running on {nodes}".format( user_name=job['euser'][0], job_name=job_name, nodes=str(job['exec_host'])) for (job_name, job) in running_jobs ]) mail_to = '*****@*****.**' mail = VscMail() message = """Dear admins, These are the jobs on belonging to users who have entered their grace period or have become inactive, as indicated by the LDAP replica on {master} at {time}. {message_queued_jobs} {message_running_jobs} Kind regards, Your friendly pbs job checking script """.format(master=socket.gethostname(), time=t, message_queued_jobs=message_queued_jobs, message_running_jobs=message_running_jobs) try: logger.info("Sending report mail to %s" % (mail_to)) mail.sendTextMail( mail_to=mail_to, mail_from='*****@*****.**', reply_to='*****@*****.**', mail_subject= 'PBS check for jobs belonging to gracing or inactive users', message=message) except Exception, err: logger.error("Failed in sending mail to %s (%s)." % (mail_to, err))
def do(self, dry_run): """Get the information and mail it""" clusters = GENT_PRODUCTION_COMPUTE_CLUSTERS if self.options.cluster: clusters = (self.options.cluster, ) self.load_users() body = [] for cluster in clusters: body += self.report(cluster) mail_body = "\n".join(body) mail_subject = "HPC: usage report %s - %s" % (self.options.start, self.options.end) mail_to = self.options.recipient mail = VscMail("loudred.gastly.os") mail.sendTextMail(mail_to=mail_to, mail_from="*****@*****.**", reply_to="*****@*****.**", mail_subject=mail_subject, message=mail_body)
REINSTATEMENT_MESSAGE = """ Dear %(gecos)s, You have been reinstated to regular status on the VSC Tier-1 cluster at Ghent. This means you can again submit jobs to the scheduler. Should you have any questions, please contact us at %(tier1_helpdesk)s or reply to this email which will open a ticket in our helpdesk system for you. Kind regards, -- The UGent HPC team """ logger = fancylogger.getLogger(__name__) mailer = VscMail() def create_stat_directory(path, permissions, uid, gid, posix, override_permissions=True): """ Create a new directory if it does not exist and set permissions, ownership. Otherwise, check the permissions and ownership and change if needed. """ created = False try: