Ejemplo n.º 1
0
    def store(self, hostname, metadata, stats):
        """Store the file to disk"""

        try:
            payload = cPickle.dumps(
                dict(hostname=hostname, metadata=metadata, stats=stats))
        except:  # pylint: disable=W0702
            msg = "%s: Failed to build interaction object: %s" % \
                (self.__class__.__name__,
                 traceback.format_exc().splitlines()[-1])
            self.logger.error(msg)
            raise TransportError(msg)

        fname = "%s-%s" % (hostname, time.time())
        save_file = os.path.join(self.work_path, fname)
        tmp_file = os.path.join(self.work_path, "." + fname)
        if os.path.exists(save_file):
            self.logger.error("%s: Oops.. duplicate statistic in directory." %
                              self.__class__.__name__)
            raise TransportError

        # using a tmpfile to hopefully avoid the file monitor from grabbing too
        # soon
        saved = open(tmp_file, 'wb')
        try:
            saved.write(payload)
        except IOError:
            self.logger.error(
                "Failed to store interaction for %s: %s" %
                (hostname, traceback.format_exc().splitlines()[-1]))
            os.unlink(tmp_file)
        saved.close()
        os.rename(tmp_file, save_file)
Ejemplo n.º 2
0
 def rpc(self, method, *args, **kwargs):
     try:
         return getattr(self.storage, method)(*args, **kwargs)
     except:  # pylint: disable=W0702
         msg = "Reporting: RPC method %s failed: %s" % (method,
                                                        sys.exc_info()[1])
         self.logger.error(msg)
         raise TransportError(msg)
Ejemplo n.º 3
0
    def start_monitor(self, collector):
        """Start the file monitor.  Most of this comes from BaseCore"""
        try:
            self.fmon = Bcfg2.Server.FileMonitor.get_fam()
        except IOError:
            msg = "Failed to instantiate fam driver %s" % \
                Bcfg2.Options.setup.filemonitor
            self.logger.error(msg, exc_info=1)
            raise TransportError(msg)

        if self.debug_flag:
            self.fmon.set_debug(self.debug_flag)
        self.fmon.start()
        self.fmon.AddMonitor(self.work_path, self)
Ejemplo n.º 4
0
    def store(self, hostname, metadata, stats):
        """Store the file to disk"""

        try:
            payload = cPickle.dumps(
                dict(hostname=hostname, metadata=metadata, stats=stats))
        except:  # pylint: disable=W0702
            msg = "%s: Failed to build interaction object: %s" % \
                (self.__class__.__name__,
                 traceback.format_exc().splitlines()[-1])
            self.logger.error(msg)
            raise TransportError(msg)

        try:
            self._redis.rpush(RedisTransport.STATS_KEY, payload)
        except redis.RedisError:
            self.logger.error(
                "Failed to store interaction for %s: %s" %
                (hostname, traceback.format_exc().splitlines()[-1]))
Ejemplo n.º 5
0
    def start_monitor(self, collector):
        """Start the file monitor.  Most of this comes from BaseCore"""
        setup = self.setup
        try:
            fmon = Bcfg2.Server.FileMonitor.available[setup['filemonitor']]
        except KeyError:
            self.logger.error("File monitor driver %s not available; "
                              "forcing to default" % setup['filemonitor'])
            fmon = Bcfg2.Server.FileMonitor.available['default']

        fmdebug = setup.get('debug', False)
        try:
            self.fmon = fmon(debug=fmdebug)
            self.logger.info("Using the %s file monitor" %
                             self.fmon.__class__.__name__)
        except IOError:
            msg = "Failed to instantiate file monitor %s" % setup['filemonitor']
            self.logger.error(msg, exc_info=1)
            raise TransportError(msg)
        self.fmon.start()
        self.fmon.AddMonitor(self.work_path, self)