Fix to allow process names with spaces
This commit is contained in:
		
							parent
							
								
									1f087b7cd9
								
							
						
					
					
						commit
						e283ff2019
					
				@ -817,6 +817,7 @@ function read_and_display_file(file) {
 | 
			
		||||
    <ol>
 | 
			
		||||
        <li>Improve SVG chart colour palette</li>
 | 
			
		||||
        <li>Add Selenium based unit tests</li>
 | 
			
		||||
        <li>Fix to allow process names with spaces</li>
 | 
			
		||||
        <li>...</li>
 | 
			
		||||
    </ol>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -220,13 +220,24 @@ class OOMEntity(object):
 | 
			
		||||
        strip later.
 | 
			
		||||
        """
 | 
			
		||||
        to_strip = 0
 | 
			
		||||
 | 
			
		||||
        columns = first_line.split(" ")
 | 
			
		||||
 | 
			
		||||
        # Examples:
 | 
			
		||||
        # [11686.888109] sed invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0
 | 
			
		||||
        # Apr 01 14:13:32 mysrv kernel: sed invoked OOM-killer: gfp_mask=0x201da, order=0
 | 
			
		||||
        # Apr 01 14:13:32 mysrv kernel: [11686.888109] sed invoked oom-killer: gfp_mask=0x84d0, order=0, oom_adj=0, oom_score_adj=0
 | 
			
		||||
        try:
 | 
			
		||||
            # strip all before "<program name> invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
 | 
			
		||||
            to_strip = columns.index("invoked")
 | 
			
		||||
            # decrease to include <program name>
 | 
			
		||||
            to_strip -= 1
 | 
			
		||||
            # strip all incl. "kernel:"
 | 
			
		||||
            if 'kernel:' in first_line:
 | 
			
		||||
                to_strip = columns.index("kernel:")
 | 
			
		||||
                # increase to include "kernel:"
 | 
			
		||||
                to_strip += 1
 | 
			
		||||
 | 
			
		||||
            # check if next column is a timestamp like "[11686.888109]" and remove it too
 | 
			
		||||
            rec = re.compile('\[\d+\.\d+\]')
 | 
			
		||||
            if rec.match(columns[to_strip]):
 | 
			
		||||
                # increase to include timestamp
 | 
			
		||||
                to_strip += 1
 | 
			
		||||
        except ValueError:
 | 
			
		||||
            pass
 | 
			
		||||
 | 
			
		||||
@ -290,12 +301,6 @@ class OOMEntity(object):
 | 
			
		||||
            if cols_to_strip:
 | 
			
		||||
                # [-1] slicing needs Transcrypt operator overloading
 | 
			
		||||
                line = line.split(" ", cols_to_strip)[-1]  # __:opov
 | 
			
		||||
 | 
			
		||||
            # OOMs logged to /var/log/messages / journalctl may contain
 | 
			
		||||
            # "kernel:" at the begin of the content
 | 
			
		||||
            if line.startswith('kernel:'):
 | 
			
		||||
                line = line[7:]
 | 
			
		||||
 | 
			
		||||
            stripped_lines.append(line)
 | 
			
		||||
 | 
			
		||||
        return stripped_lines
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										40
									
								
								test.py
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								test.py
									
									
									
									
									
								
							@ -100,6 +100,12 @@ class TestInBrowser(TestBase):
 | 
			
		||||
        with self.assertRaises(NoSuchElementException):
 | 
			
		||||
            notify_box.find_element_by_class_name('js-notify_box__msg--error')
 | 
			
		||||
 | 
			
		||||
        for event in self.driver.get_log('browser'):
 | 
			
		||||
            # ignore favicon.ico errors
 | 
			
		||||
            if 'favicon.ico' in event['message']:
 | 
			
		||||
                continue
 | 
			
		||||
            self.fail('Error on browser console reported: %s' % event)
 | 
			
		||||
 | 
			
		||||
    def click_analyse(self):
 | 
			
		||||
        analyse = self.driver.find_element_by_xpath('//button[text()="Analyse"]')
 | 
			
		||||
        analyse.click()
 | 
			
		||||
@ -193,11 +199,27 @@ Killed process 6576 (java) total-vm:33914892kB, anon-rss:20629004kB, file-rss:0k
 | 
			
		||||
 | 
			
		||||
    def test_006_trigger_proc_space(self):
 | 
			
		||||
        """Test trigger process name contains a space"""
 | 
			
		||||
        pass
 | 
			
		||||
        example = OOMAnalyser.OOMDisplay.example
 | 
			
		||||
        example = example.replace('sed', 'VM Monitoring Task')
 | 
			
		||||
 | 
			
		||||
        self.analyse_oom(example)
 | 
			
		||||
 | 
			
		||||
        self.assert_on_warn_error()
 | 
			
		||||
 | 
			
		||||
        h3_summary = self.driver.find_element_by_xpath('//h3[text()="Summary"]')
 | 
			
		||||
        self.assertTrue(h3_summary.is_displayed(), "Analysis details incl. <h3>Summary</h3> should be displayed")
 | 
			
		||||
 | 
			
		||||
    def test_007_kill_proc_space(self):
 | 
			
		||||
        """Test killed process name contains a space"""
 | 
			
		||||
        pass
 | 
			
		||||
        example = OOMAnalyser.OOMDisplay.example
 | 
			
		||||
        example = example.replace('mysqld', 'VM Monitoring Task')
 | 
			
		||||
 | 
			
		||||
        self.analyse_oom(example)
 | 
			
		||||
 | 
			
		||||
        self.assert_on_warn_error()
 | 
			
		||||
 | 
			
		||||
        h3_summary = self.driver.find_element_by_xpath('//h3[text()="Summary"]')
 | 
			
		||||
        self.assertTrue(h3_summary.is_displayed(), "Analysis details incl. <h3>Summary</h3> should be displayed")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestPython(TestBase):
 | 
			
		||||
@ -228,8 +250,18 @@ class TestPython(TestBase):
 | 
			
		||||
        self.assertTrue(match, 'Error: re.search(REC_OOM_KILL_PROCESS) failed for process name '
 | 
			
		||||
                               'with space')
 | 
			
		||||
 | 
			
		||||
    def test_003_OOMEntity_number_of_columns_to_strip(self):
 | 
			
		||||
        """Test stripping useless / leading columns"""
 | 
			
		||||
        oom_entity = OOMAnalyser.OOMEntity(OOMAnalyser.OOMDisplay.example)
 | 
			
		||||
        for pos, line in [
 | 
			
		||||
            (1, '[11686.888109] sed invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0'),
 | 
			
		||||
            (5, 'Apr 01 14:13:32 mysrv kernel: sed invoked OOM-killer: gfp_mask=0x201da, order=0'),
 | 
			
		||||
            (6, 'Apr 01 14:13:32 mysrv kernel: [11686.888109] sed invoked oom-killer: gfp_mask=0x84d0, order=0, oom_adj=0, oom_score_adj=0'),
 | 
			
		||||
        ]:
 | 
			
		||||
            to_strip = oom_entity._number_of_columns_to_strip(line)
 | 
			
		||||
            self.assertEqual(to_strip, pos, 'Calc wrong number of colums to strip for "%s": got: %d, expect: %d' % (
 | 
			
		||||
                line, to_strip, pos))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    # import logging, sys
 | 
			
		||||
    # logging.basicConfig(stream=sys.stderr, level=logging.WARNING)
 | 
			
		||||
    unittest.main(verbosity=2)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user