Ejemplo n.º 1
0
    def _respond(self, transaction):

        mgmt = self.session().value('mgmt')
        assert 'monitor' != mgmt.remoteUser.lower(), \
               'Monitor may not view or download logs.'
        # check permissions
        assert Nodes.permission(mgmt,
            '/logging/syslog/action/file/\/var\/log\/messages') != 'deny', \
            ('%s may not view or download logs.' % mgmt.remoteUser)

        request = transaction.request()
        response = transaction.response()
        fields = request.fields()
        logtype = fields.get('logtype', 'user')
        mime = fields.get('mime', '') or self.ContentType
        logfilename = '/var/log/%smessages' % self.LOGTYPE_PREFIX[logtype]
        try:
            bytesize = os.stat(logfilename)[stat.ST_SIZE]
            seekto = max(0, bytesize - 500)
            response.setHeader('Content-type', mime)
            response.commit()
            if mime.endswith('html'):
                response.write('<html>\n')
                response.write('<head>\n')
                response.write('<title>Continuous Log</title>\n')
                response.write('</head>\n')
                response.write('<body>\n')
                response.write('<pre>\n')
            response.flush(True)

            logfile = file(logfilename)
            logfile.seek(seekto) # Seek to almost EOF
            # Print out the last few lines of the log,
            # stripping out any partial line artifact of our seek()
            txt = cgi.escape(logfile.read() or '')
            txt = txt[txt.find('\n') + 1:]
            writingDots = 0
            # Write to log after seek so we should read it in the first
            # iteration of reading logfile.
            while hasattr(request, '_transaction') and \
                  2 < AppServerModule.globalAppServer._running:
                if txt:
                    if writingDots:
                        response.write('\n')
                        writingDots = 0
                    response.write(txt)
                else:
                    writingDots += 1
                    if 0 == writingDots % 80:
                        response.write('\n')
                    response.write('. ')
                    time.sleep(3)
                response.flush() # I don't trust auto flush
                txt = cgi.escape(logfile.read() or '')
        except ConnectionAbortedError:
            pass
        except:
            OSUtils.logException()
Ejemplo n.º 2
0
    def _openPathname(self, pathName):

        # check permissions
        mgmt = self.session().value('mgmt')
        assert 'monitor' != mgmt.remoteUser.lower(), \
            'Download prohibited for the monitor user.'
        assert Nodes.permission(
            mgmt, self.__getTarget()['rbaNode']) != 'deny', \
            ('Download prohibited for user %s.' % mgmt.remoteUser)

        if 'openFileFn' in self.__getTarget():
            return self.__getTarget()['openFileFn'](pathName)
        else:
            return file(pathName, "r")