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])
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])
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):
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))