Пример #1
0
 def __call__(self, hostname):
     remote_ip = get_hostname_ip(hostname)
     sock = socket.socket(socket.AF_INET, tcp)
     sock.settimeout(0.2)
     result = sock.connect_ex((remote_ip, self.port))
     if result == 0:
         return State(OK)
     return State(CRITICAL)
Пример #2
0
 def get_state(self, cmd_exec):
     state = OK
     if not cmd_exec.file_exists(self.cmd_line):
         print '%s not found ! Can not check for update !' % self.cmd_line
         return State(UNKNOWN, 'smartctl not found !')
     devices = self._get_devices(cmd_exec)
     for devicename in devices:
         nb_error = self._get_device_nb_errors(cmd_exec, devicename)
         if nb_error:
             state = WARNING
     return State(state)
Пример #3
0
 def get_state(self, cmd_exec):
     updates = self._get_update_availables(cmd_exec)
     if updates is None:
         return State(UNKNOWN, 'apt-check not found!')
     messages = []
     if updates['normal']:
         messages.append('Normal: %s' % updates['normal'])
     if updates['security'] > 0:
         messages.append('Security: %s' % updates['security'])
     state = OK
     if updates['security'] > 0:
         state = CRITICAL
     elif updates['normal'] > 0:
         state = WARNING
     return State(state, '\n'.join(messages))
Пример #4
0
 def get_state(self, cmd_exec):
     loads = self._get_loads(cmd_exec)
     state_5m = loads[1]
     state = WARNING
     if state_5m < 1:
         state = OK
     return State(state, ' - '.join(['%.2f' % l for l in loads]))
Пример #5
0
 def __call__(self, hostname):
     remote_ip = get_hostname_ip(hostname)
     sock = socket.socket(socket.AF_INET, udp)
     sock.settimeout(0.2)
     result = sock.connect_ex((remote_ip, self.port))
     try:
         sock.send('')
         sock.recv(10)
         is_open = False
     except socket.timeout:
         is_open = True
     except socket.error:
         is_open = False
     sock.close()
     if is_open:
         return State(OK)
     return State(CRITICAL)
Пример #6
0
 def get_state(self, cmd_exec):
     state = OK
     mount_usages = self._get_mount_usages(cmd_exec)
     for mount_name, mount_usage in mount_usages.iteritems():
         free_ratio = mount_usage['free_space'] / float(mount_usage['size'])
         if free_ratio <= 0.1:
             state = CRITICAL
         elif free_ratio <= 0.2:
             state = WARNING
     return State(state, self._str_data(mount_usages))
Пример #7
0
 def get_state(self, cmd_exec):
     state = OK
     raid_status = self._get_raid_status(cmd_exec)
     msgs = []
     for raid_name in raid_status:
         raid_s = raid_status[raid_name]
         if raid_s['msg']:
             msgs.append('%s: %s' % (raid_name, raid_s['msg']))
             state = WARNING
         for disk_state in raid_s['status']:
             if disk_state != 'U':
                 state = CRITICAL
                 break
     return State(state, '\n'.join(msgs))
Пример #8
0
    def get_state(self, cmd_exec):
        data = self._get_version_details(cmd_exec)
        if data is None:
            return State(UNKNOWN, 'lsb_release not found !')
        if 'Description' not in data:
            return State(UNKNOWN, 'Version not found !')
        message = data['Description']
        if 'Distributor ID' not in data or 'Release' not in data or 'Codename' not in data:
            return State(UNKNOWN, message)
        distribution = data['Distributor ID']
        release = data['Release']
        codename = data['Codename']
        if distribution not in self.version_validity:
            return State(UNKNOWN, message)
        version_validities = self.version_validity[distribution]
        validity = None
        for version_validity in version_validities:
            if 'version' in version_validity:
                if version_validity['version'] != release:
                    continue
                validity = version_validity['validity']
                break
            if 'codename' in version_validity:
                if version_validity['codename'] != codename:
                    continue
                validity = version_validity['validity']
                break

        if validity is None:
            return State(UNKNOWN, message)
        message = '%s [%s]' % (message, validity)
        if validity == 'expired':
            return State(CRITICAL, message)
        validity_date = datetime.datetime.strptime(validity[:7],
                                                   '%Y-%m').date()
        today = datetime.date.today()
        if validity_date <= today:
            return State(CRITICAL, message)
        if (validity_date - today).days < self.warning_below_days:
            return State(WARNING, message)
        return State(OK, message)
Пример #9
0
    def get_state(self, cmd_exec):
        details = self._get_memory_details(cmd_exec)

        def get_amount(txt):
            return int(txt.split(' ', 1)[0])

        def human_readable(amount):
            i = 0
            while float(amount) / (1000**i) > 1:
                i += 1
            units = ['kB', 'MB', 'GB', 'TB', 'EB']
            if i > 0:
                i -= 1
                float(amount) / (1000**i)
            return '%i%s' % (int(float(amount) / (1000**i)), units[i])

        mem_total = get_amount(details['MemTotal'])
        mem_free = get_amount(details['MemFree'])
        mem_cached = get_amount(details['Cached'])
        mem_buffer = get_amount(details['Buffers'])
        mem_used = mem_total - mem_free - mem_cached - mem_buffer
        pc_used = mem_used / float(mem_total)

        swap_total = get_amount(details['SwapTotal'])
        swap_free = get_amount(details['SwapFree'])
        swap_used = swap_total - swap_free
        all_total = mem_total + swap_total
        all_used = mem_used + swap_used
        if swap_total > 0:
            pc_swap_used = swap_used / float(swap_total)

        state = OK
        if pc_used > 0.9 or ((all_used / float(all_total)) > 0.8):
            state = CRITICAL
        elif pc_used > 0.7:
            state = WARNING
        message = 'Mem: % 3i%% %s' % (round(
            pc_used * 100), human_readable(mem_total))
        if swap_total > 0:
            message += '\nSwap: % 3i%% %s' % (round(
                pc_swap_used * 100), human_readable(swap_total))
        return State(state, message)
Пример #10
0
 def __call__(self):
     for hostname in self.hostnames:
         if ping.__call__(self, hostname) == OK:
             return State(OK)
     return State(CRITICAL)
Пример #11
0
 def __call__(self, hostname):
     remote_ip = get_hostname_ip(hostname)
     response = os.system("ping -c 1 " + remote_ip + " > /dev/null")
     if response == 0:
         return State(OK)
     return State(CRITICAL)
Пример #12
0
 def get_state(self, cmd_exec):
     if cmd_exec.file_exists('/var/run/reboot-required'):
         return State(WARNING)
     return State(OK)
Пример #13
0
 def _parse_result(self, result):
     if len(result.split('\n')) > 3:
         return State(OK)
     return State(CRITICAL)