示例#1
0
 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
示例#2
0
 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))
示例#3
0
    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))
示例#4
0
 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)
示例#5
0
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()
示例#6
0
 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))
示例#7
0
 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)
示例#8
0
 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)
示例#9
0
 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
示例#10
0
 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
示例#11
0
 def getSystemVersion(self):
     """
     Version string of System
     no args, returns string
     """
     return getIkVersion()
示例#12
0
 def getVersion(self):
     """
     special format list of the history for web-view
     """
     return getIkVersion()
示例#13
0
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()
示例#14
0
 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)
示例#15
0
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()
示例#16
0
 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())