Exemple #1
0
    def _send(self, msg):
        """Low level send method which does not support a timeout."""

        # make sure we have a socket
        if not self.socket:
            raise NotConnected(self.address, 'not connected')

        # keep track of how much we've sent
        sent = 0

        # prepend messages we haven't sent from previous calls
        if self.queueSends and self.__sendBuf:
            msg = self.__sendBuf + msg
            self.__sendBuf = ""

        try:
            while sent < len(msg):
                bytes = self.socket.send(msg[sent:])
                if bytes == 0:
                    raise LostConnection(
                        self.address, "lost connection "
                        "after sending %d bytes" % sent)
                sent += bytes
                # keep track of how many bytes have been sent so the
                # send() method knows if its full message has gone through
                self.__sent += bytes

        except socket.error, errMsg:
            code = errno.errorcode.get(errMsg[0], None)
            excp = None
            if code in ('EAGAIN', 'EWOULDBLOCK'):
                excp = WouldBlock
                if self.queueSends:
                    self.__sendBuf += msg[sent:]
                    # don't let the queue get too larger
                    if len(self.__sendBuf) >= self.sendQueueSize:
                        raise SendQueueLimit(
                            self.address, "send queue is larger than %s "
                            "bytes" % unitutil.formatBytes(self.sendQueueSize))
            elif code in ('EPIPE', 'ECONNRESET', 'ETIMEDOUT', 'EBADF'):
                excp = LostConnection
            elif code == 'ENOTCONN':
                excp = NotConnected
            elif code == 'EINTR':
                excp = Interrupted
            else:
                excp = SendError

            raise excp(self.address, str(errMsg), ecode=errMsg[0])
Exemple #2
0
    def _send(self, msg):
        """Low level send method which does not support a timeout."""

        # make sure we have a socket
        if not self.socket:
            raise NotConnected(self.address, 'not connected')

        # keep track of how much we've sent
        sent = 0

        # prepend messages we haven't sent from previous calls
        if self.queueSends and self.__sendBuf:
            msg = self.__sendBuf + msg
            self.__sendBuf = ""

        try:
            while sent < len(msg):
                bytes = self.socket.send(msg[sent:])
                if bytes == 0:
                    raise LostConnection(self.address, "lost connection "
                                         "after sending %d bytes" % sent)
                sent += bytes
                # keep track of how many bytes have been sent so the
                # send() method knows if its full message has gone through
                self.__sent += bytes

        except socket.error, errMsg:
            code = errno.errorcode.get(errMsg[0], None)
            excp = None
            if code in ('EAGAIN', 'EWOULDBLOCK'):
                excp = WouldBlock
                if self.queueSends:
                    self.__sendBuf += msg[sent:]
                    # don't let the queue get too larger
                    if len(self.__sendBuf) >= self.sendQueueSize:
                        raise SendQueueLimit(
                            self.address, "send queue is larger than %s "
                            "bytes" % unitutil.formatBytes(self.sendQueueSize))
            elif code in ('EPIPE', 'ECONNRESET', 'ETIMEDOUT', 'EBADF'):
                excp = LostConnection
            elif code == 'ENOTCONN':
                excp = NotConnected
            elif code == 'EINTR':
                excp = Interrupted
            else:
                excp = SendError
            
            raise excp(self.address, str(errMsg), ecode=errMsg[0])
Exemple #3
0
     argv = ["tail", "-f", logFile]
     print " ".join(argv)
     sys.stdout.flush()
     os.system(" ".join(argv))
             
 def logsUsage(self):
     """Report the disk space used by postgresql logs."""
     logDir = os.path.join(self.config.pgDataDir(), "pg_log")
     usage = 0
     try:
         for f in os.listdir(logDir):
             logFilename = os.path.join(logDir, f)
             usage += os.path.getsize(logFilename) if os.path.isfile(logFilename) else 0
     except (IOError, OSError), err:
         raise DBControlToolError, "Unable to determine disk usage of log directory %s: %s" % (logDir, str(err))
     usageStr = unitutil.formatBytes(usage)
     usageStr += "B" if usageStr[-1] != "B" else ""
     print "The postgresql log directory %s is taking %s of disk space." % (logDir, usageStr)
     
 def purgeLogs(self):
     """Remove all postgresql log files."""
     # make sure postgresql server is not running
     if self.isPostgreSQLRunning():
         raise DBControlToolError, "The postgresql server is already running.  It must be shutdown with --stop before using --purge-logs."
     logDir = os.path.join(self.config.pgDataDir(), "pg_log")
     try:
         shutil.rmtree(logDir)
     except (IOError, OSError), err:
         raise DBControlToolError, "Unable to remove log directory %s: %s" % (logDir, str(err))
             
 def showParams(self):
Exemple #4
0
        sys.stdout.flush()
        os.system(" ".join(argv))

    def logsUsage(self):
        """Report the disk space used by postgresql logs."""
        logDir = os.path.join(self.config.pgDataDir(), "pg_log")
        usage = 0
        try:
            for f in os.listdir(logDir):
                logFilename = os.path.join(logDir, f)
                usage += os.path.getsize(logFilename) if os.path.isfile(
                    logFilename) else 0
        except (IOError, OSError), err:
            raise DBControlToolError, "Unable to determine disk usage of log directory %s: %s" % (
                logDir, str(err))
        usageStr = unitutil.formatBytes(usage)
        usageStr += "B" if usageStr[-1] != "B" else ""
        print "The postgresql log directory %s is taking %s of disk space." % (
            logDir, usageStr)

    def purgeLogs(self):
        """Remove all postgresql log files."""
        # make sure postgresql server is not running
        if self.isPostgreSQLRunning():
            raise DBControlToolError, "The postgresql server is already running.  It must be shutdown with --stop before using --purge-logs."
        logDir = os.path.join(self.config.pgDataDir(), "pg_log")
        try:
            shutil.rmtree(logDir)
        except (IOError, OSError), err:
            raise DBControlToolError, "Unable to remove log directory %s: %s" % (
                logDir, str(err))