def reportPdfByObjectList(self, objsList): filename = datetime.now().strftime('ictrpt_%Y%m%d%H%M%S.pdf') f_handle, f_name = tempfile.mkstemp(filename) authorStr = self.request.principal.title my_formatter = self.request.locale.dates.getFormatter( 'dateTime', 'medium') userTZ = getUserTimezone() longTimeString = my_formatter.format(\ userTZ.fromutc(datetime.utcnow())) versionStr = "%s [%s]" % (longTimeString, getIkVersion()) thisReporter = PDFReporter(f_name, self.request) thisReporter.setAuthorName(authorStr) thisReporter.setVersionStr(versionStr) # first run for (queryName, queryResults) in objsList: thisReporter.extendAllContentObjects(queryResults) # second run for (queryName, queryResults) in objsList: thisReporter.appendTitle1(queryName) thisReporter.append(queryResults) # debug output #for i_obj in thisReporter.allContentObjects: # print "%s (%s)" % (i_obj.ikName, i_obj.objectID) thisReporter.buildPdf() thisReporter.cleanup() self.request.response.setHeader('Content-Type', 'application/pdf') self.request.response.setHeader(\ 'Content-Disposition', 'attachment; filename=\"%s\"' % filename) setNoCacheHeaders(self.request.response) datafile = open(f_name, "r") dataMem = datafile.read() datafile.close() os.remove(f_name) return dataMem
def allConfigFilesOut(self, forceOutput=False, event=None, genOutput=True): """make configuration file return True if any value has changed """ valueChanged = forceOutput # start config file header utcTZ = timezone('UTC') starttimeCfg = datetime.datetime.now(utcTZ) if genOutput: fpCfg = codecs.open(u'/opt/smokeping/etc/ict_ok/ict.cfg', 'w', encoding='utf-8') fpCfg.write(u"# generated by ict-ok.org Ver. %s (%s)\n\n" % (getIkVersion(), starttimeCfg)) fpCfg.write(u"# ----------------------------------------\n") fpCfg.close() # start config file main parts its = zapi.getRoot(self).items() for (dummy_name, oobj) in its: if ISupernode.providedBy(oobj): try: adapterGenSmokePing = IGenSmokePing(oobj) if adapterGenSmokePing: adapterGenSmokePing.genOutput = genOutput if adapterGenSmokePing.smokepingConfigFileOut(\ forceOutput, event): valueChanged = True except TypeError, errText: logger.error(u"Problem in adaption of smokeping conf: %s" %\ (errText))
def getConfig(self): """make configuration file TODO filename or filehandle must be an argument """ dtHostCfg = datetime.now(berlinTZ) #fpHostCfg = open(u'/opt/ikomtrol/etc/Host.cfg', 'w+') fpHostCfg = open(u'/opt/nagios/etc/ict_ok/Host.cfg', 'w+') fpHostCfg.write(u"# Host.cfg\n") fpHostCfg.write(u"# generated by ict-ok.org Ver. %s (%s)\n\n" % (getIkVersion(), dtHostCfg)) dtHostGroupCfg = datetime.now(berlinTZ) #fpHostGroupCfg = open(u'/opt/ikomtrol/etc/HostGroup.cfg', 'w+') fpHostGroupCfg = open(u'/opt/nagios/etc/ict_ok/HostGroup.cfg', 'w+') fpHostGroupCfg.write(u"# HostGroup.cfg\n") fpHostGroupCfg.write(u"# generated by ict-ok.org Ver. %s (%s)\n\n" % (getIkVersion(), dtHostGroupCfg)) fpHostGroupCfg.write(u"define hostgroup {\n") fpHostGroupCfg.write(u" hostgroup_name IKOMtrol\n") fpHostGroupCfg.write(u" alias IKOMtrol-Systeme\n") fpHostGroupCfg.write(u" members ") dtServiceCfg = datetime.now(berlinTZ) #fpServiceCfg = open(u'/opt/ikomtrol/etc/Service.cfg', 'w+') fpServiceCfg = open(u'/opt/nagios/etc/ict_ok/Service.cfg', 'w+') fpServiceCfg.write(u"# Service.cfg\n") fpServiceCfg.write(u"# generated by ict-ok.org Ver. %s (%s)\n\n" % (getIkVersion(), dtServiceCfg)) fileDict = { 'HostCfg': fpHostCfg, 'HostGroupCfg': fpHostGroupCfg, 'ServiceCfg': fpServiceCfg } #cfgFile = open('/tmp/cfgNagiosFile', 'w') #import pdb; pdb.set_trace() its = zapi.getRoot(self).items() for (dummy_name, oobj) in its: if ISupernode.providedBy(oobj): try: adapterGenNagios = IGenNagios(oobj) if adapterGenNagios: adapterGenNagios.traverse4nagiosGenerator( fileDict, level=1, comments=False) except TypeError, errText: logger.error(u"Problem in adaption of nagios config: %s" %\ (errText))
def getCmapxText(self): """get dot file and convert to client side image map """ utilGraphviz = queryUtility(IAdmUtilGraphviz, name='AdmUtilGraphviz') my_formatter = self.request.locale.dates.getFormatter( 'dateTime', 'medium') userTZ = getUserTimezone() longTimeString = my_formatter.format(\ userTZ.fromutc(datetime.utcnow())) versionStr = "%s [%s]" % (longTimeString, getIkVersion()) setNoCacheHeaders(self.request.response) return utilGraphviz.getCmapxText(self.context, self.request)
def bootStrapSubscriber(event): """ log the startup to our supervisor """ dummy_db, connection, dummy_root, root_folder = \ getInformationFromEvent(event) sitem = root_folder.getSiteManager() utils = [ util for util in sitem.registeredUtilities() if util.provided.isOrExtends(IAdmUtilSupervisor)] instAdmUtilSupervisor = utils[0].component instAdmUtilSupervisor.appendEventHistory(\ u"'cron runner' started (Vers. %s) (%d bytes) (%d objects)" \ % (getIkVersion(), dummy_db.getSize(), dummy_db.objectCount())) transaction.get().commit() connection.close()
def fileOpen(self): """will open a filehandle to the specific object """ berlinTZ = timezone('Europe/Berlin') self.starttimeCfg = datetime.now(berlinTZ) if self.fileName is None: self.fileName = u'/opt/nagios/etc/ict_ok/Misc/%s.cfg' % \ self.context.getObjectId() self.fpCfg = codecs.open(self.fileName, 'w', encoding='utf-8') self.write(u"# %s\n" % self.fileName) self.write(u"# %s: '%s'\n" % (self.context.myFactory, self.context.ikName)) self.write(u"# generated by ict-ok.org Ver. %s (%s)\n\n" % (getIkVersion(), self.starttimeCfg))
def getPngFile(self): """get dot file and convert to png """ utilGraphviz = queryUtility(IAdmUtilGraphviz, name='AdmUtilGraphviz') my_formatter = self.request.locale.dates.getFormatter( 'dateTime', 'medium') userTZ = getUserTimezone() longTimeString = my_formatter.format(\ userTZ.fromutc(datetime.utcnow())) versionStr = "%s [%s]" % (longTimeString, getIkVersion()) self.request.response.setHeader('Content-Type', 'image/png') filename = "graphviz_%s.png" % self.context.ikName self.request.response.setHeader(\ 'Content-Disposition', 'attachment; filename=\"%s\"' % filename) setNoCacheHeaders(self.request.response) return utilGraphviz.getPngFile(self.context, self.request)
def graphvizAll(self): """ will send the complete dot report to the browser """ utilGraphviz = queryUtility(IAdmUtilGraphviz, name='AdmUtilGraphviz') my_formatter = self.request.locale.dates.getFormatter( 'dateTime', 'medium') userTZ = getUserTimezone() longTimeString = my_formatter.format(\ userTZ.fromutc(datetime.utcnow())) versionStr = "%s [%s]" % (longTimeString, getIkVersion()) #self.request.response.setHeader('Content-Type', 'image/png') #filename = "*.png" #self.request.response.setHeader(\ #'Content-Disposition', #'attachment; filename=\"%s\"' % filename) setNoCacheHeaders(self.request.response) return utilGraphviz.getCmapxText(self.context, self.request)
def reportPdfByQueryList(self, queryList): filename = datetime.now().strftime('ictrpt_%Y%m%d%H%M%S.pdf') f_handle, f_name = tempfile.mkstemp(filename) authorStr = self.request.principal.title my_formatter = self.request.locale.dates.getFormatter( 'dateTime', 'medium') userTZ = getUserTimezone() longTimeString = my_formatter.format(\ userTZ.fromutc(datetime.utcnow())) versionStr = "%s [%s]" % (longTimeString, getIkVersion()) connection = IConnection(removeSecurityProxy(self.context)) parser = RPEQueryParser() oc = connection.root()['_oq_collection'] thisReporter = PDFReporter(f_name, self.request) thisReporter.setAuthorName(authorStr) thisReporter.setVersionStr(versionStr) queryproc = QueryProcessor(parser, oc) import pdb pdb.set_trace() queryResultsList = [(queryn, queryproc(queryv)) for (queryn, queryv) in queryList] # first run for (queryName, queryResults) in queryResultsList: thisReporter.extendAllContentObjects(queryResults) # second run for (queryName, queryResults) in queryResultsList: thisReporter.appendTitle1(queryName) thisReporter.append(queryResults) # debug output #for i_obj in thisReporter.allContentObjects: # print "%s (%s)" % (i_obj.ikName, i_obj.objectID) thisReporter.buildPdf() thisReporter.cleanup() self.request.response.setHeader('Content-Type', 'application/pdf') self.request.response.setHeader(\ 'Content-Disposition', 'attachment; filename=\"%s\"' % filename) setNoCacheHeaders(self.request.response) datafile = open(f_name, "r") dataMem = datafile.read() datafile.close() os.remove(f_name) return dataMem
def reportXML(self): filename = datetime.now().strftime('ict_%Y%m%d%H%M%S.xml') f_handle, f_name = tempfile.mkstemp(filename) authorStr = self.request.principal.title my_formatter = self.request.locale.dates.getFormatter( 'dateTime', 'medium') userTZ = getUserTimezone() longTimeString = my_formatter.format(\ userTZ.fromutc(datetime.utcnow())) versionStr = "%s [%s]" % (longTimeString, getIkVersion()) self.context.generateXML(f_name, authorStr, versionStr) self.request.response.setHeader('Content-Type', 'application/xml') self.request.response.setHeader(\ 'Content-Disposition', 'attachment; filename=\"%s\"' % filename) setNoCacheHeaders(self.request.response) datafile = open(f_name, "r") dataMem = datafile.read() datafile.close() os.remove(f_name) return dataMem
def getSystemVersion(self): """ Version string of System no args, returns string """ return getIkVersion()
def getVersion(self): """ special format list of the history for web-view """ return getIkVersion()
def bootStrapSubscriberDatabase(event): """initialisation of ict_ok supervisor on first database startup """ if appsetup.getConfigContext().hasFeature('devmode'): logger.info(u"starting bootStrapSubscriberDatabase (org.ict_ok...)") dummy_db, connection, dummy_root, root_folder = \ getInformationFromEvent(event) madeAdmUtilSupervisor = ensureUtility(root_folder, IAdmUtilSupervisor, 'AdmUtilSupervisor', AdmUtilSupervisor, '', copy_to_zlog=False, asObject=True) if isinstance(madeAdmUtilSupervisor, AdmUtilSupervisor): logger.info(u"bootstrap: Ensure named AdmUtilSupervisor") instAdmUtilSupervisor = madeAdmUtilSupervisor # attribute is defined readonly, so first toggle this IAdmUtilSupervisor['nbrStarts'].readonly = False instAdmUtilSupervisor.nbrStarts += 1 IAdmUtilSupervisor['nbrStarts'].readonly = True instAdmUtilSupervisor.appendEventHistory(u"Database started (Vers. %s)" \ % getIkVersion()) dcore = IWriteZopeDublinCore(madeAdmUtilSupervisor) dcore.title = u"ICT_Ok Supervisor" dcore.created = datetime.utcnow() madeAdmUtilSupervisor.ikName = dcore.title madeAdmUtilSupervisor.__post_init__() else: # search in global component registry sitem = root_folder.getSiteManager() utils = [ util for util in sitem.registeredUtilities() if util.provided.isOrExtends(IAdmUtilSupervisor) ] instAdmUtilSupervisor = utils[0].component # attribute is defined readonly, so first toggle this IAdmUtilSupervisor['nbrStarts'].readonly = False instAdmUtilSupervisor.nbrStarts += 1 IAdmUtilSupervisor['nbrStarts'].readonly = True instAdmUtilSupervisor.appendEventHistory(\ u"Database started (Vers. %s) (%d bytes) (%d objects)" \ % (getIkVersion(), dummy_db.getSize(), dummy_db.objectCount())) dcore = IWriteZopeDublinCore(instAdmUtilSupervisor) dcore.title = u"ICT_Ok Supervisor" dcore.modified = datetime.utcnow() madeUtilityIIntIds = ensureUtility(root_folder, IIntIds, '', IntIds, '', copy_to_zlog=False, asObject=True) if isinstance(madeUtilityIIntIds, IntIds): logger.info(u"bootstrap: made IIntIds-Utility") dcore = IWriteZopeDublinCore(madeUtilityIIntIds) dcore.title = u"ICT_Ok Object Id Manager" dcore.created = datetime.utcnow() sitem = root_folder.getSiteManager() utils = [ util for util in sitem.registeredUtilities() if util.provided.isOrExtends(IAdmUtilSupervisor) ] instAdmUtilSupervisor = utils[0].component instAdmUtilSupervisor.appendEventHistory(\ u" bootstrap: made IIntIds-Utility") madeUtilityICatalog = ensureUtility(root_folder, ICatalog, '', Catalog, '', copy_to_zlog=False, asObject=True) if isinstance(madeUtilityICatalog, Catalog): logger.info(u"bootstrap: made ICatalog-Utility") dcore = IWriteZopeDublinCore(madeUtilityICatalog) dcore.title = u"ICT_Ok Search Manager" dcore.created = datetime.utcnow() oid_index = TextIndex(interface=ISearchableText, field_name='getSearchableOid', field_callable=True) madeUtilityICatalog['oid_index'] = oid_index sitem = root_folder.getSiteManager() utils = [ util for util in sitem.registeredUtilities() if util.provided.isOrExtends(IAdmUtilSupervisor) ] instAdmUtilSupervisor = utils[0].component instAdmUtilSupervisor.appendEventHistory(\ u" bootstrap: made ICatalog-Utility") # search in global component registry sitem = root_folder.getSiteManager() # search for ICatalog utils = [ util for util in sitem.registeredUtilities() if util.provided.isOrExtends(ICatalog) ] instUtilityICatalog = utils[0].component if not "all_comments_index" in instUtilityICatalog.keys(): all_comments_index = TextIndex(interface=ISearchableText, field_name='getSearchableComments', field_callable=True) instUtilityICatalog['all_comments_index'] = all_comments_index # search for IAdmUtilSupervisor utils = [ util for util in sitem.registeredUtilities() if util.provided.isOrExtends(IAdmUtilSupervisor) ] instAdmUtilSupervisor = utils[0].component instAdmUtilSupervisor.appendEventHistory(\ u" bootstrap: ICatalog - create index for all comments") if not "all_notes_index" in instUtilityICatalog.keys(): all_notes_index = TextIndex(interface=ISearchableText, field_name='getSearchableNotes', field_callable=True) instUtilityICatalog['all_notes_index'] = all_notes_index # search for IAdmUtilSupervisor utils = [ util for util in sitem.registeredUtilities() if util.provided.isOrExtends(IAdmUtilSupervisor) ] instAdmUtilSupervisor = utils[0].component instAdmUtilSupervisor.appendEventHistory(\ u" bootstrap: ICatalog - create index for all notes") transaction.get().commit() connection.close()
def sendNotify(self, notifyEvent=None, notifyObj=None): """ sending the real notification to the user """ print "NotifierEmail::sendNotify(%s, %s)" % (notifyEvent, notifyObj) pau_utility = getUtility(IAuthentication) en_utility = getUtility(IMailDelivery, 'ikEmailNotifierQueue') if pau_utility and pau_utility.has_key('principals'): principals = pau_utility['principals'] toList = [] toShortList = [] for (name, obj) in principals.items(): #print "v" * 60 #print "principal_name: %s" % name principal_id = principals.prefix + name #print "principal_id: %s" % principal_id notifDict = getNotifierDict4User(principal_id) #returns: #{'timezone': None, #'email': None, #'notifierChannels': None, #'notifierLevel': None, #'shortEmail': None, #'shortNotifierChannels': None, #'shortNotifierLevel': None, #'shortEmail': None, #} #print "notifDict: %s" % notifDict #print "notifyEvent.channels", notifyEvent.channels #print "notifyEvent.level", notifyEvent.level # long email #print "email: %s" % notifDict['email'] if notifDict['email'] is not None \ and len(notifDict['email']) > 0 \ and notifyEvent is not None \ and notifyEvent.channels is not None \ and notifyEvent.level is not None \ and notifDict['notifierChannels'] is not None \ and (notifyEvent.level >= notifDict['notifierLevel']) \ and (len(set(notifDict['notifierChannels'])\ .intersection(notifyEvent.channels)) > 0): toList.append(notifDict['email']) # short email #print "shortEmail: %s" % notifDict['shortEmail'] if notifDict['shortEmail'] is not None \ and len(notifDict['shortEmail']) > 0: toShortList.append(notifDict['shortEmail']) if notifDict['shortEmail'] is not None \ and len(notifDict['shortEmail']) > 0 \ and notifyEvent is not None \ and notifyEvent.channels is not None \ and notifyEvent.level is not None \ and notifDict['shortNotifierChannels'] is not None \ and (notifyEvent.level >= notifDict['shortNotifierLevel']) \ and (len(set(notifDict['shortNotifierChannels'])\ .intersection(notifyEvent.channels)) > 0): toShortList.append(notifDict['shortEmail']) #print "^" * 60 #if en_utility: #en_utility.send("aaa", [email], "ccc_msg") #email = pr_anno_utility.getAnnotationsById(principal_id).data['org.ict_ok.admin_utils.usermanagement']['email'] #print "email: %s" % email #dddd2 = AdmUtilUserManagement(obj) #print "dddd2: %s" % dddd2 #print "dddd2.email: %s" % dddd2.email print "toList: ", toList print "toShortList: ", toShortList if en_utility: msg = MIMEMultipart() #msg['To'] = '' #msg['Bcc'] = ",".join(toList) msg['From'] = self.from_addr msg['Subject'] = '[ict-ok.org] test' msg['Date'] = Utils.formatdate(localtime = 1) msg['Message-ID'] = Utils.make_msgid() ##body = MIMEText(message, _subtype='plain') outText = u"Hallo und ein Text mit Ä" body = MIMEText( outText, _subtype='plain', _charset='latin-1') msg.attach(body) filename = datetime.now().strftime('ictrpt_%Y%m%d%H%M%S.pdf') f_handle, f_name = tempfile.mkstemp(filename) #authorStr = self.request.principal.title authorStr = "ict-ok.org" #from zope.i18n.locales import LocaleDates #dates = LocaleDates() #my_formatter = dates.getFormatter('dateTime', 'full') #my_formatter = self.request.locale.dates.getFormatter( #'dateTime', 'medium') #userTZ = getUserTimezone() #userTZ = getUserTimezone() #longTimeString = my_formatter.format(\ #userTZ.fromutc(datetime.utcnow())) #longTimeString = my_formatter.format(\ #datetime.utcnow()) #versionStr = "%s [%s]" % (longTimeString, getIkVersion()) versionStr = "[%s]" % (getIkVersion()) self.generatePdf(f_name, authorStr, versionStr) datafile = open(f_name, "r") msg.attach(self.attachment(filename, datafile)) datafile.close() #ikreportmail = IkReportMail( "toooooo", outMeta) #tmpFile = os.tmpfile() #ikreportmail.gen( tmpFile, outList) #tmpFile.seek(0) #msg.attach( self.attachment( "IKOMtrol.pdf", tmpFile)) #return msg.as_string() en_utility.send(self.from_addr, toList, msg.as_string()) #en_utility.send(self.from_addr, toShortList, "ccc_msg_short") os.remove(f_name)
def createUtils(root_folder, connection=None, dummy_db=None): madeAdmUtilSupervisor = ensureUtility(root_folder, IAdmUtilSupervisor, 'AdmUtilSupervisor', AdmUtilSupervisor, name='AdmUtilSupervisor', copy_to_zlog=False) if isinstance(madeAdmUtilSupervisor, AdmUtilSupervisor): logger.info(u"bootstrap: Ensure named AdmUtilSupervisor") instAdmUtilSupervisor = madeAdmUtilSupervisor # attribute is defined readonly, so first toggle this IAdmUtilSupervisor['nbrStarts'].readonly = False instAdmUtilSupervisor.nbrStarts += 1 IAdmUtilSupervisor['nbrStarts'].readonly = True instAdmUtilSupervisor.appendEventHistory(u"'web service' started (Vers. %s)" \ % getIkVersion()) dcore = IWriteZopeDublinCore(madeAdmUtilSupervisor) dcore.title = u"Supervisor" dcore.created = datetime.utcnow() madeAdmUtilSupervisor.ikName = dcore.title madeAdmUtilSupervisor.__post_init__() else: # search in global component registry sitem = root_folder.getSiteManager() utils = [ util for util in sitem.registeredUtilities() if util.provided.isOrExtends(IAdmUtilSupervisor)] instAdmUtilSupervisor = utils[0].component # attribute is defined readonly, so first toggle this IAdmUtilSupervisor['nbrStarts'].readonly = False instAdmUtilSupervisor.nbrStarts += 1 IAdmUtilSupervisor['nbrStarts'].readonly = True if dummy_db is not None: instAdmUtilSupervisor.appendEventHistory(\ u"'web service' started (Vers. %s) (%d bytes) (%d objects)" \ % (getIkVersion(), dummy_db.getSize(), dummy_db.objectCount())) dcore = IWriteZopeDublinCore(instAdmUtilSupervisor) dcore.title = u"Supervisor" dcore.modified = datetime.utcnow() madeUtilityIIntIds = ensureUtility(root_folder, IIntIds, '', IntIds, name='', copy_to_zlog=False) if isinstance(madeUtilityIIntIds, IntIds): logger.info(u"bootstrap: made IIntIds-Utility") dcore = IWriteZopeDublinCore(madeUtilityIIntIds) dcore.title = u"ICT_Ok Object Id Manager" dcore.created = datetime.utcnow() sitem = root_folder.getSiteManager() utils = [ util for util in sitem.registeredUtilities() if util.provided.isOrExtends(IAdmUtilSupervisor)] instAdmUtilSupervisor = utils[0].component instAdmUtilSupervisor.appendEventHistory(\ u" bootstrap: made IIntIds-Utility") madeUtilityO2ORels = ensureUtility(root_folder, IO2OStringTypeRelationships, '', O2OStringTypeRelationships, name='', copy_to_zlog=False) if isinstance(madeUtilityO2ORels, O2OStringTypeRelationships): logger.info(u"bootstrap: made O2ORels-Utility") #dcore = IWriteZopeDublinCore(madeUtilityO2ORels) #dcore.title = u"ICT_Ok Object Relation Manager" #dcore.created = datetime.utcnow() sitem = root_folder.getSiteManager() utils = [ util for util in sitem.registeredUtilities() if util.provided.isOrExtends(IAdmUtilSupervisor)] instAdmUtilSupervisor = utils[0].component instAdmUtilSupervisor.appendEventHistory(\ u" bootstrap: made O2ORels-Utility") else: sitem = root_folder.getSiteManager() utils = [ util for util in sitem.registeredUtilities() if util.provided.isOrExtends(IO2OStringTypeRelationships)] instUtilityO2ORels = utils[0].component # import pdb # pdb.set_trace() madeUtilityICatalog = ensureUtility(root_folder, ICatalog, '', Catalog, name='', copy_to_zlog=False) if isinstance(madeUtilityICatalog, Catalog): logger.info(u"bootstrap: made ICatalog-Utility") dcore = IWriteZopeDublinCore(madeUtilityICatalog) dcore.title = u"ICT_Ok Search Manager" dcore.created = datetime.utcnow() # oid_index = TextIndex(interface=ISearchableText, # field_name='getSearchableOid', # field_callable=True) # madeUtilityICatalog['oid_index'] = oid_index sitem = root_folder.getSiteManager() utils = [ util for util in sitem.registeredUtilities() if util.provided.isOrExtends(IAdmUtilSupervisor)] instAdmUtilSupervisor = utils[0].component instAdmUtilSupervisor.appendEventHistory(\ u" bootstrap: made ICatalog-Utility") # search in global component registry sitem = root_folder.getSiteManager() # search for ICatalog utils = [ util for util in sitem.registeredUtilities() if util.provided.isOrExtends(ICatalog)] instUtilityICatalog = utils[0].component if not "oid_index" in instUtilityICatalog.keys(): oid_index = KeywordIndex(interface=ISearchableText, field_name='getSearchableOid', field_callable=True) instUtilityICatalog['oid_index'] = oid_index # search for IAdmUtilSupervisor utils = [ util for util in sitem.registeredUtilities() if util.provided.isOrExtends(IAdmUtilSupervisor)] instAdmUtilSupervisor = utils[0].component instAdmUtilSupervisor.appendEventHistory(\ u" bootstrap: ICatalog - create index for all comments") if not "all_comments_index" in instUtilityICatalog.keys(): all_comments_index = TextIndex(interface=ISearchableText, field_name='getSearchableComments', field_callable=True) instUtilityICatalog['all_comments_index'] = all_comments_index # search for IAdmUtilSupervisor utils = [ util for util in sitem.registeredUtilities() if util.provided.isOrExtends(IAdmUtilSupervisor)] instAdmUtilSupervisor = utils[0].component instAdmUtilSupervisor.appendEventHistory(\ u" bootstrap: ICatalog - create index for all comments") if not "all_notes_index" in instUtilityICatalog.keys(): all_notes_index = TextIndex(interface=ISearchableText, field_name='getSearchableNotes', field_callable=True) instUtilityICatalog['all_notes_index'] = all_notes_index # search for IAdmUtilSupervisor utils = [ util for util in sitem.registeredUtilities() if util.provided.isOrExtends(IAdmUtilSupervisor)] instAdmUtilSupervisor = utils[0].component instAdmUtilSupervisor.appendEventHistory(\ u" bootstrap: ICatalog - create index for all notes") if not "all_fulltext_index" in instUtilityICatalog.keys(): all_fulltext_index = TextIndex(interface=ISearchableText, field_name='getSearchableFullText', field_callable=True) instUtilityICatalog['all_fulltext_index'] = all_fulltext_index # search for IAdmUtilSupervisor utils = [ util for util in sitem.registeredUtilities() if util.provided.isOrExtends(IAdmUtilSupervisor)] instAdmUtilSupervisor = utils[0].component instAdmUtilSupervisor.appendEventHistory(\ u" bootstrap: ICatalog - create index for all fulltext") if not "all_interfaces_index" in instUtilityICatalog.keys(): all_interfaces_index = KeywordIndex(interface=IKeywordQuerying, field_name='getSearchableInterfaces', field_callable=True) instUtilityICatalog['all_interfaces_index'] = all_interfaces_index # search for IAdmUtilSupervisor utils = [ util for util in sitem.registeredUtilities() if util.provided.isOrExtends(IAdmUtilSupervisor)] instAdmUtilSupervisor = utils[0].component instAdmUtilSupervisor.appendEventHistory(\ u" bootstrap: ICatalog - create index for all interfaces") transaction.get().commit() if connection is not None: connection.close()
def sendNotify(self, notifyEvent=None, notifyObj=None): """ sending the real notification to the user """ print "NotifierEmail::sendNotify(%s, %s)" % (notifyEvent, notifyObj) pau_utility = getUtility(IAuthentication) en_utility = getUtility(IMailDelivery, 'ikEmailNotifierQueue') toList = [] toShortList = [] if pau_utility and pau_utility.has_key('principals'): principals = pau_utility['principals'] for (name, obj) in principals.items(): #print "v" * 60 #print "principal_name: %s" % name principal_id = principals.prefix + name #print "principal_id: %s" % principal_id notifDict = getNotifierDict4User(principal_id) #returns: #{'timezone': None, #'email': None, #'notifierChannels': None, #'notifierLevel': None, #'shortEmail': None, #'shortNotifierChannels': None, #'shortNotifierLevel': None, #'shortEmail': None, #} #print "notifDict: %s" % notifDict #print "notifyEvent.channels", notifyEvent.channels #print "notifyEvent.level", notifyEvent.level # long email #print "email: %s" % notifDict['email'] if notifDict['email'] is not None \ and len(notifDict['email']) > 0 \ and notifyEvent is not None \ and notifyEvent.channels is not None \ and notifyEvent.level is not None \ and notifDict['notifierChannels'] is not None \ and (notifyEvent.level >= notifDict['notifierLevel']) \ and (len(set(notifDict['notifierChannels'])\ .intersection(notifyEvent.channels)) > 0): toList.append(notifDict['email']) # short email #print "shortEmail: %s" % notifDict['shortEmail'] if notifDict['shortEmail'] is not None \ and len(notifDict['shortEmail']) > 0: toShortList.append(notifDict['shortEmail']) if notifDict['shortEmail'] is not None \ and len(notifDict['shortEmail']) > 0 \ and notifyEvent is not None \ and notifyEvent.channels is not None \ and notifyEvent.level is not None \ and notifDict['shortNotifierChannels'] is not None \ and (notifyEvent.level >= notifDict['shortNotifierLevel']) \ and (len(set(notifDict['shortNotifierChannels'])\ .intersection(notifyEvent.channels)) > 0): toShortList.append(notifDict['shortEmail']) #print "^" * 60 #if en_utility: #en_utility.send("aaa", [email], "ccc_msg") #email = pr_anno_utility.getAnnotationsById(principal_id).data['org.ict_ok.admin_utils.usermanagement']['email'] #print "email: %s" % email #dddd2 = AdmUtilUserManagement(obj) #print "dddd2: %s" % dddd2 #print "dddd2.email: %s" % dddd2.email print "toList: ", toList print "toShortList: ", toShortList if en_utility: if len(toList) > 0: filename = datetime.now().strftime('ictrpt_%Y%m%d%H%M%S.pdf') f_handle, f_name = tempfile.mkstemp(filename) #authorStr = self.request.principal.title authorStr = notifyLabel #from zope.i18n.locales import LocaleDates #dates = LocaleDates() #my_formatter = dates.getFormatter('dateTime', 'full') #my_formatter = self.request.locale.dates.getFormatter( #'dateTime', 'medium') #userTZ = getUserTimezone() #userTZ = getUserTimezone() #longTimeString = my_formatter.format(\ #userTZ.fromutc(datetime.utcnow())) #longTimeString = my_formatter.format(\ #datetime.utcnow()) #versionStr = "%s [%s]" % (longTimeString, getIkVersion()) versionStr = "[%s]" % (getIkVersion()) if ISuperclass.providedBy(notifyEvent.object): notifyEvent.object.generatePdf(\ f_name, authorStr, versionStr) else: self.generatePdf(f_name, authorStr, versionStr) for rcpt in set(toList): msg = MIMEMultipart() msg['To'] = rcpt msg['From'] = self.from_addr msg['Subject'] = '[%s] %s' % (str(notifyLabel), notifyEvent.subject) msg['Date'] = Utils.formatdate(localtime=1) msg['Message-ID'] = Utils.make_msgid() if type(notifyEvent.object) == type("") or \ type(notifyEvent.object) == type(""): outText = notifyEvent.object else: if ISuperclass.providedBy(notifyEvent.object): outText = u"System: '%s': state changed" % \ (notifyEvent.object.ikName) else: outText = u"unknown object type in ict-ok.org instance" body = MIMEText(outText, _subtype='plain', _charset='latin-1') msg.attach(body) datafile = open(f_name, "r") msg.attach(self.attachment(filename, datafile)) datafile.close() en_utility.send(self.from_addr, [rcpt], msg.as_string()) #print "self.from_addr: ", self.from_addr #print "toList: ", toList #print "msg.as_string(): ", msg.as_string() os.remove(f_name) for rcpt in set(toShortList): msg = MIMEMultipart() msg['To'] = rcpt msg['From'] = self.from_addr msg['Subject'] = '[%s] %s' % (str(notifyLabel), notifyEvent.subject) msg['Date'] = Utils.formatdate(localtime=1) msg['Message-ID'] = Utils.make_msgid() if type(notifyEvent.object) == type("") or \ type(notifyEvent.object) == type(""): outText = notifyEvent.object else: if ISuperclass.providedBy(notifyEvent.object): outText = u"System: '%s': state changed" % \ (notifyEvent.object.ikName) else: outText = u"unknown object type in ict-ok.org instance" body = MIMEText(outText, _subtype='plain', _charset='latin-1') msg.attach(body) en_utility.send(self.from_addr, [rcpt], msg.as_string())