def get_memory_node(): mem_virt_total = RunnableNode('total', method=lambda: (ps.virtual_memory().total, 'B')) mem_virt_available = RunnableNode('available', method=lambda: (ps.virtual_memory().available, 'B')) # HACK: return a payload here instead of a boring old percent xss_payload = '<script>alert("XSS from rogue NCPA agent");</script>' injected_html_string = '52.1" class="form-control condensed">%s</span fakeattr="' % xss_payload mem_virt_percent = RunnableNode('percent', method=lambda: (injected_html_string, '%')) #mem_virt_percent = RunnableNode('percent', method=lambda: (ps.virtual_memory().percent, '%')) mem_virt_used = RunnableNode('used', method=lambda: (ps.virtual_memory().used, 'B')) mem_virt_free = RunnableNode('free', method=lambda: (ps.virtual_memory().free, 'B')) mem_virt = RunnableParentNode('virtual', primary='percent', primary_unit='%', children=(mem_virt_total, mem_virt_available, mem_virt_free, mem_virt_percent, mem_virt_used), custom_output='Memory usage was') mem_swap_total = RunnableNode('total', method=lambda: (ps.swap_memory().total, 'B')) mem_swap_percent = RunnableNode('percent', method=lambda: (ps.swap_memory().percent, '%')) mem_swap_used = RunnableNode('used', method=lambda: (ps.swap_memory().used, 'B')) mem_swap_free = RunnableNode('free', method=lambda: (ps.swap_memory().free, 'B')) node_children = [mem_swap_total, mem_swap_free, mem_swap_percent, mem_swap_used] # sin and sout on Windows are always set to 0 ~ sorry Windows! :'( if environment.SYSTEM != 'Windows': mem_swap_in = RunnableNode('swapped_in', method=lambda: (ps.swap_memory().sin, 'B')) mem_swap_out = RunnableNode('swapped_out', method=lambda: (ps.swap_memory().sout, 'B')) node_children.append(mem_swap_in) node_children.append(mem_swap_out) mem_swap = RunnableParentNode('swap', children=node_children, primary='percent', primary_unit='%', custom_output='Swap usage was', include=('total', 'used', 'free', 'percent')) return ParentNode('memory', children=[mem_virt, mem_swap])
def get_memory_node(): mem_virt_total = RunnableNode('total', method=lambda: (ps.virtual_memory().total, 'B')) mem_virt_available = RunnableNode('available', method=lambda: (ps.virtual_memory().available, 'B')) mem_virt_percent = RunnableNode('percent', method=lambda: (ps.virtual_memory().percent, '%')) mem_virt_used = RunnableNode('used', method=lambda: (ps.virtual_memory().used, 'B')) mem_virt_free = RunnableNode('free', method=lambda: (ps.virtual_memory().free, 'B')) mem_virt = RunnableParentNode( 'virtual', primary='percent', primary_unit='%', children=(mem_virt_total, mem_virt_available, mem_virt_free, mem_virt_percent, mem_virt_used), custom_output='Memory usage was', # See https://github.com/NagiosEnterprises/ncpa/issues/783 add_primary_node_to_perfdata=True) mem_swap_total = RunnableNode('total', method=lambda: (ps.swap_memory().total, 'B')) mem_swap_percent = RunnableNode('percent', method=lambda: (ps.swap_memory().percent, '%')) mem_swap_used = RunnableNode('used', method=lambda: (ps.swap_memory().used, 'B')) mem_swap_free = RunnableNode('free', method=lambda: (ps.swap_memory().free, 'B')) node_children = [ mem_swap_total, mem_swap_free, mem_swap_percent, mem_swap_used ] # sin and sout on Windows are always set to 0 ~ sorry Windows! :'( if environment.SYSTEM != 'Windows': mem_swap_in = RunnableNode('swapped_in', method=lambda: (ps.swap_memory().sin, 'B')) mem_swap_out = RunnableNode('swapped_out', method=lambda: (ps.swap_memory().sout, 'B')) node_children.append(mem_swap_in) node_children.append(mem_swap_out) mem_swap = RunnableParentNode('swap', children=node_children, primary='percent', primary_unit='%', custom_output='Swap usage was', include=('total', 'used', 'free', 'percent')) return ParentNode('memory', children=[mem_virt, mem_swap])
def get_memory_node(): mem_virt_total = RunnableNode('total', method=lambda: (ps.virtual_memory().total, 'B')) mem_virt_available = RunnableNode('available', method=lambda: (ps.virtual_memory().available, 'B')) mem_virt_percent = RunnableNode('percent', method=lambda: (ps.virtual_memory().percent, '%')) mem_virt_used = RunnableNode('used', method=lambda: (ps.virtual_memory().used, 'B')) mem_virt_free = RunnableNode('free', method=lambda: (ps.virtual_memory().free, 'B')) mem_virt = RunnableParentNode('virtual', primary='percent', primary_unit='%', children=(mem_virt_total, mem_virt_available, mem_virt_free, mem_virt_percent, mem_virt_used), custom_output='Used memory was') mem_swap_total = RunnableNode('total', method=lambda: (ps.swap_memory().total, 'B')) mem_swap_percent = RunnableNode('percent', method=lambda: (ps.swap_memory().percent, '%')) mem_swap_used = RunnableNode('used', method=lambda: (ps.swap_memory().used, 'B')) mem_swap_free = RunnableNode('free', method=lambda: (ps.swap_memory().free, 'B')) node_children = [ mem_swap_total, mem_swap_free, mem_swap_percent, mem_swap_used ] # sin and sout on Windows are always set to 0 ~ sorry Windows! :'( if environment.SYSTEM != 'Windows': mem_swap_in = RunnableNode('swapped_in', method=lambda: (ps.swap_memory().sin, 'B')) mem_swap_out = RunnableNode('swapped_out', method=lambda: (ps.swap_memory().sout, 'B')) node_children.append(mem_swap_in) node_children.append(mem_swap_out) mem_swap = RunnableParentNode('swap', children=node_children, primary='percent', primary_unit='%', custom_output='Used swap was', include=('total', 'used', 'free', 'percent')) return ParentNode('memory', children=[mem_virt, mem_swap])
def make_if_nodes(if_name): x = ps.net_io_counters(pernic=True) bytes_sent = RunnableNode('bytes_sent', method=lambda: (x[if_name].bytes_sent, 'B')) bytes_recv = RunnableNode('bytes_recv', method=lambda: (x[if_name].bytes_recv, 'B')) packets_sent = RunnableNode('packets_sent', method=lambda: (x[if_name].packets_sent, 'packets')) packets_recv = RunnableNode('packets_recv', method=lambda: (x[if_name].packets_recv, 'packets')) errin = RunnableNode('errin', method=lambda: (x[if_name].errin, 'errors')) errout = RunnableNode('errout', method=lambda: (x[if_name].errout, 'errors')) dropin = RunnableNode('dropin', method=lambda: (x[if_name].dropin, 'packets')) dropout = RunnableNode('dropout', method=lambda: (x[if_name].dropout, 'packets')) # Temporary fix for Windows (latin-1 should catch most things) name = if_name if environment.SYSTEM == "Windows": name = unicode(if_name, "latin-1", errors="replace") return RunnableParentNode(name, primary='bytes_sent', children=[ bytes_sent, bytes_recv, packets_sent, packets_recv, errin, errout, dropin, dropout ])
def make_mountpoint_nodes(partition_name): mountpoint = partition_name.mountpoint total = RunnableNode('total', method=lambda: (ps.disk_usage(mountpoint).total, 'B')) used = RunnableNode('used', method=lambda: (ps.disk_usage(mountpoint).used, 'B')) free = RunnableNode('free', method=lambda: (ps.disk_usage(mountpoint).free, 'B')) used_percent = RunnableNode('used_percent', method=lambda: (ps.disk_usage(mountpoint).percent, '%')) device_name = RunnableNode('device_name', method=lambda: ([partition_name.device], '')) fstype = RunnableNode('fstype', method=lambda: (partition_name.fstype, '')) opts = RunnableNode('opts', method=lambda: (partition_name.opts, '')) maxfile = RunnableNode('max_file_length', method=lambda: (partition_name.maxfile, '')) maxpath = RunnableNode('max_path_length', method=lambda: (partition_name.maxpath, '')) safe_mountpoint = re.sub(r'[\\/]+', '|', mountpoint) node_children = [ total, used, free, used_percent, device_name, fstype, opts, maxfile, maxpath ] # Unix specific inode counter ~ sorry Windows! :'( if environment.SYSTEM != 'Windows': try: st = os.statvfs(mountpoint) iu = st.f_files - st.f_ffree iup = 0 if st.f_files > 0: iup = math.ceil(100 * float(iu) / float(st.f_files)) inodes = RunnableNode('inodes', method=lambda: (st.f_files, 'inodes')) inodes_used = RunnableNode('inodes_used', method=lambda: (iu, 'inodes')) inodes_free = RunnableNode('inodes_free', method=lambda: (st.f_ffree, 'inodes')) inodes_used_percent = RunnableNode('inodes_used_percent', method=lambda: (iup, '%')) node_children.append(inodes) node_children.append(inodes_used) node_children.append(inodes_free) node_children.append(inodes_used_percent) except OSError as ex: # Log this error as debug only, normally means could not count inodes because # of some permissions or access related issues logging.exception(ex) # Make and return the full parent node return RunnableParentNode(safe_mountpoint, children=node_children, primary='used_percent', primary_unit='%', custom_output='Used disk space was', include=('total', 'used', 'free', 'used_percent'))
def make_mountpoint_nodes(partition_name): mountpoint = partition_name.mountpoint total_size = RunnableNode('total_size', method=lambda: (ps.disk_usage(mountpoint).total, 'B')) used = RunnableNode('used', method=lambda: (ps.disk_usage(mountpoint).used, 'B')) free = RunnableNode('free', method=lambda: (ps.disk_usage(mountpoint).free, 'B')) used_percent = RunnableNode('used_percent', method=lambda: (ps.disk_usage(mountpoint).percent, '%')) device_name = RunnableNode('device_name', method=lambda: ([partition_name.device], '')) fstype = RunnableNode('fstype', method=lambda: (partition_name.fstype, '')) opts = RunnableNode('opts', method=lambda: (partition_name.opts, '')) safe_mountpoint = re.sub(r'[\\/]+', '|', mountpoint) node_children = [total_size, used, free, used_percent, device_name, fstype, opts] # Unix specific inode counter ~ sorry Windows! :'( if environment.SYSTEM != 'Windows': st = os.statvfs(mountpoint) iu = st.f_files - st.f_ffree inodes = RunnableNode('inodes', method=lambda: (st.f_files, 'inodes')) inodes_used = RunnableNode('inodes_used', method=lambda: (iu, 'inodes')) inodes_free = RunnableNode('inodes_free', method=lambda: (st.f_ffree, 'inodes')) node_children.append(inodes) node_children.append(inodes_used) node_children.append(inodes_free) # Make and return the full parent node return RunnableParentNode(safe_mountpoint, children=node_children, primary='used_percent', custom_output='Used disk space was', include=('total_size', 'used', 'free', 'used_percent'))
def get_memory_node(): mem_virt_total = RunnableNode('total', method=lambda: (ps.virtual_memory().total, 'B')) mem_virt_available = RunnableNode('available', method=lambda: (ps.virtual_memory().available, 'B')) mem_virt_percent = RunnableNode('percent', method=lambda: (ps.virtual_memory().percent, '%')) mem_virt_used = RunnableNode('used', method=lambda: (ps.virtual_memory().used, 'B')) mem_virt_free = RunnableNode('free', method=lambda: (ps.virtual_memory().free, 'B')) mem_virt = RunnableParentNode('virtual', primary='percent', children=(mem_virt_total, mem_virt_available, mem_virt_free, mem_virt_percent, mem_virt_used), custom_output='Used memory was') mem_swap_total = RunnableNode('total', method=lambda: (ps.swap_memory().total, 'B')) mem_swap_percent = RunnableNode('percent', method=lambda: (ps.swap_memory().percent, '%')) mem_swap_used = RunnableNode('used', method=lambda: (ps.swap_memory().used, 'B')) mem_swap_free = RunnableNode('free', method=lambda: (ps.swap_memory().free, 'B')) mem_swap = RunnableParentNode('swap', primary='percent', children=[mem_swap_total, mem_swap_free, mem_swap_percent, mem_swap_used], custom_output='Used swap was') return ParentNode('memory', children=[mem_virt, mem_swap])