def publish(self): try: if (len(self.metricList) > 0) or MetricCache: if len(self.metricList) < NUM_of_PUBLISHES_per_CONNECTION : for (metric, datapoints) in self.getMetrics(): if(len(metric)>255): log.amqpPublisher("Dropped metric %s as it is too long"%(metric)) continue self.metricList.append((metric, datapoints)) if len(self.metricList) >= NUM_of_PUBLISHES_per_CONNECTION : break d = writeMetric(self.metricList, settings.AMQP_PUB_HOST, settings.AMQP_PUB_PORT, settings.AMQP_PUB_USER, settings.AMQP_PUB_PASSWORD, settings.AMQP_PUB_VHOST, settings.AMQP_PUB_EXCHANGE, settings.AMQP_PUB_QUEUE) d.addCallbacks(self.successful, self.tryAgain) d.addBoth(self.nextCall) else: reactor.callLater(10, self.publish) except: reactor.callLater(15, self.publish)
def tryAgain(self,_): log.amqpPublisher("Failed to publish %d (metric, datapoints) tuples"%(len(self.metricList))) try: yield conn.close("Closing Connection") log.amqpPublisher("Closing connection after failing to publish") except Exception, e: log.amqpPublisher("Error in closing connection: %s"%(repr(e)))
def successful(self,_): log.amqpPublisher("Completed publishing %d (metric, datapoints) tuples"%(len(self.metricList))) self.metricList = []