Ejemplo n.º 1
0
class LinuxDiskUsage:
    def __init__(self, task):
        self.destination = (task.db_host, task.db_port)
        self.task = task
        if len(task.disks) == 0:
            logging.error("LinuxDiskUsage: No disk name list provided")
        self.session = None
        self.last_connection = None

    def connect(self):
        # Check if already connected
        if self.session:
            # Expire session
            if datetime.now() - self.last_connection > timedelta(hours=1):
                self.session.close()
            else:
                # Keep session alive
                return True

        self.session = CreateSshSession(self.task)
        self.last_connection = datetime.now()
        return (self.session is not None)

    def on_output(self, task, line):
        if 'Permission denied' in line:
            logger.error("Permission denied")
            return
        now = int(time.time())
        out = line.split()

        try:
            disk_name = out[5].replace('/', '_')
            path = self.task.path + '.disk.' + disk_name
            free = (path + '.free', (now, out[1].replace('M', '')))
            used = (path + '.used', (now, out[2].replace('M', '')))
            total = (path + '.available', (now, out[3].replace('M', '')))
            percent = (path + '.used_percent',
                       (now, out[4].replace('M', '').replace('%', '')))

            payload = pickle.dumps([free, used, total, percent], protocol=2)
            header = struct.pack("!L", len(payload))

            if SendGraphitePayload(self.destination, header, payload):
                logger.debug('Sent:\n%s', [free, used, total, percent])
        except:
            logger.error(traceback.format_exc)

    def execute(self, session=None):
        if session:
            # use external session
            for disk in self.task.disks:
                session.execute('df -BM | grep {}'.format(disk),
                                on_stdout=self.on_output)
        else:
            # Use our own session
            if not self.connect():
                return
            for disk in self.task.disks:
                self.session.execute('df -BM | grep {}'.format(disk),
                                     on_stdout=self.on_output)
Ejemplo n.º 2
0
    def connect(self):
        # Check if already connected
        if self.session:
            # Expire session
            if datetime.now() - self.last_connection > timedelta(hours=1):
                self.session.close()
            else:
                # Keep session alive
                return True

        self.session = CreateSshSession(self.task)
        self.last_connection = datetime.now()
        return (self.session is not None)
Ejemplo n.º 3
0
    def connect(self):
        # Check if already connected
        if self.session:
            # Expire session
            if datetime.now() - self.last_connection > timedelta(hours=1):
                self.session.close()
            else:
                # Keep session alive
                return True

        self.session = CreateSshSession(self.task)
        self.last_connection = datetime.now()
        return (self.session is not None)
Ejemplo n.º 4
0
    def _connect(self):
        ''' Handle the ssh connection and timeout '''
        # Check if already connected
        if self.session:
            # Expire session
            if datetime.now() - self.last_connection > self.timeout:
                self.session.close()
            else:
                # Keep session alive
                return True

        self.session = CreateSshSession(self.task)
        self.last_connection = datetime.now()
        return (self.session is not None)
Ejemplo n.º 5
0
class LinuxMemoryUsage:

    def __init__(self, task):
        self.destination = (task.db_host, task.db_port)
        self.task = task
        self.last_connection = None
        self.session = None

    def connect(self):
        # Check if already connected
        if self.session:
            # Expire session
            if datetime.now() - self.last_connection > timedelta(hours=1):
                self.session.close()
            else:
                # Keep session alive
                return True

        self.session = CreateSshSession(self.task)
        self.last_connection = datetime.now()
        return (self.session is not None)

    def on_output(self, task, line):
        now = int(time.time())
        out = line.split()

        try:
            total = int(out[-1]) + int(out[-2])
            free = (self.task.path + '.memory.free', (now, out[-1]))
            used = (self.task.path + '.memory.used', (now, out[-2]))
            total = (self.task.path + '.memory.total', (now, total))

            payload = pickle.dumps([free, used, total], protocol=2)
            header = struct.pack("!L", len(payload))

            if SendGraphitePayload(self.destination, header, payload):
                logger.debug('Sent:\n%s', [free, used, total])

        except:
            logger.error(traceback.format_exc)

    def on_swap_output(self, tak, line):
        now = int(time.time())
        out = line.split()

        try:
            free = (self.task.path + '.memory.swap_free', (now, out[-1]))
            used = (self.task.path + '.memory.swap_used', (now, out[-2]))
            total = (self.task.path + '.memory.swap_total', (now, out[-3]))

            payload = pickle.dumps([free, used, total], protocol=2)
            header = struct.pack("!L", len(payload))

            if SendGraphitePayload(self.destination, header, payload):
                logger.debug('Sent:\n%s', [free, used, total])

        except:
            logger.error(traceback.format_exc)

    def execute(self, session=None):
        if session:
            # Use external session
            session.execute('free -m | grep +', on_stdout=self.on_output)
            session.execute('free -m | grep Swap',
                             on_stdout=self.on_swap_output)
        else:
            if not self.connect():
                return
            self.session.execute('free -m | grep +', on_stdout=self.on_output)
            self.session.execute('free -m | grep Swap',
                             on_stdout=self.on_swap_output)
Ejemplo n.º 6
0
class ICEMemoryUsage:

    def __init__(self, task):
        self.destination = (task.db_host, task.db_port)
        self.session = None
        self.last_connection = None
        self.task = task

    def connect(self):
        # Check if already connected
        if self.session:
            # Expire session
            if datetime.now() - self.last_connection > timedelta(hours=1):
                self.session.close()
            else:
                # Keep session alive
                return True

        self.session = CreateSshSession(self.task)
        self.last_connection = datetime.now()
        return (self.session is not None)

    def on_output(self, task, line):
        now = int(time.time())
        out = line.split()

        try:
            free = (self.task.path + '.memory.free', (now, out[-1]))
            used = (self.task.path + '.memory.used', (now, out[2]))
            total = (self.task.path + '.memory.total', (now, out[1]))

            payload = pickle.dumps([free, used, total], protocol=2)
            header = struct.pack("!L", len(payload))

            if SendGraphitePayload(self.destination, header, payload):
                logger.debug('Sent:\n%s', [free, used, total])

        except:
            logger.error(traceback.format_exc)

    def on_swap_output(self, tak, line):
        now = int(time.time())
        out = line.split()

        try:
            free = (self.task.path + '.memory.swap_free', (now, out[-1]))
            used = (self.task.path + '.memory.swap_used', (now, out[-2]))
            total = (self.task.path + '.memory.swap_total', (now, out[-3]))

            payload = pickle.dumps([free, used, total], protocol=2)
            header = struct.pack("!L", len(payload))

            if SendGraphitePayload(self.destination, header, payload):
                logger.debug('Sent:\n%s', [free, used, total])

        except:
            logger.error(traceback.format_exc)

    def execute(self, session):
        if session:
            # Use external session
            session.execute('free -m | grep Mem', on_stdout=self.on_output)
            session.execute('free -m | grep Swap',
                                on_stdout=self.on_swap_output)
        else:
            if not self.connect():
                return

            self.session.execute('free -m | grep Mem', on_stdout=self.on_output)
            self.session.execute('free -m | grep Swap',
                                on_stdout=self.on_swap_output)
Ejemplo n.º 7
0
class LinuxDiskUsage:

    def __init__(self, task):
        self.destination = (task.db_host, task.db_port)
        self.task = task
        if len(task.disks) == 0:
            logging.error("LinuxDiskUsage: No disk name list provided")
        self.session = None
        self.last_connection = None

    def connect(self):
        # Check if already connected
        if self.session:
            # Expire session
            if datetime.now() - self.last_connection > timedelta(hours=1):
                self.session.close()
            else:
                # Keep session alive
                return True

        self.session = CreateSshSession(self.task)
        self.last_connection = datetime.now()
        return (self.session is not None)

    def on_output(self, task, line):
        if 'Permission denied' in line:
            logger.error("Permission denied")
            return
        now = int(time.time())
        out = line.split()

        try:
            disk_name = out[5].replace('/', '_')
            path = self.task.path + '.disk.' + disk_name
            free = (path + '.free', (now, out[1].replace('M', '')))
            used = (path + '.used', (now, out[2].replace('M', '')))
            total = (path + '.available', (now, out[3].replace('M', '')))
            percent = (path + '.used_percent',
                       (now, out[4].replace('M', '').replace('%', '')))

            payload = pickle.dumps([free, used, total, percent], protocol=2)
            header = struct.pack("!L", len(payload))

            if SendGraphitePayload(self.destination, header, payload):
                logger.debug('Sent:\n%s', [free, used, total, percent])
        except:
            logger.error(traceback.format_exc)

    def execute(self, session=None):
        if session:
            # use external session
            for disk in self.task.disks:
                session.execute('df -BM | grep {}'.format(disk),
                                     on_stdout=self.on_output)
        else:
            # Use our own session
            if not self.connect():
                return
            for disk in self.task.disks:
                self.session.execute('df -BM | grep {}'.format(disk),
                                     on_stdout=self.on_output)