From 1a88d8a6450dad2da26c9b07cd6074ad95b2d1af Mon Sep 17 00:00:00 2001 From: Stefan Koegl Date: Sun, 30 May 2010 20:46:29 +0200 Subject: [PATCH] include, exclude processes based on the commandline --- bwmon/__init__.py | 13 +++++++++++++ runmonitor.py | 8 ++++++++ 2 files changed, 21 insertions(+) diff --git a/bwmon/__init__.py b/bwmon/__init__.py index 8520541..686321f 100644 --- a/bwmon/__init__.py +++ b/bwmon/__init__.py @@ -9,6 +9,7 @@ import time import sys import curses import copy +import re def clear(): curses.setupterm() @@ -22,6 +23,8 @@ class Monitor(object): self.last_conntrack = {} self.connections = {} self.tracking = {} + self.include_filter = [] + self.exclude_filter = [] def update(self): self.fd_map.update(proc.get_fd_map()) @@ -29,6 +32,10 @@ class Monitor(object): self.conntrack.update(proc.parse_ip_conntrack()) self.connections.update(proc.get_connections()) + def set_filter(self, include_filter, exclude_filter): + self.include_filter = [re.compile(f) for f in include_filter] if include_filter else [] + self.exclude_filter = [re.compile(f) for f in exclude_filter] if exclude_filter else [] + def convert(self): for con in self.connections.itervalues(): inode = con.get('inode', None) @@ -37,6 +44,12 @@ class Monitor(object): if process is None: continue + if self.include_filter and not any([f.search(process['cmd']) for f in self.include_filter]): + continue + + if self.exclude_filter and any([f.search(process['cmd']) for f in self.exclude_filter]): + continue + key_in = proc.ip_hash(con['remote'], con['local']) key_out = proc.ip_hash(con['local'], con['remote']) keys = {'in': key_in, 'out': key_out} diff --git a/runmonitor.py b/runmonitor.py index 08f5234..10c3cb8 100644 --- a/runmonitor.py +++ b/runmonitor.py @@ -5,12 +5,20 @@ from __future__ import absolute_import import os import sys +from optparse import OptionParser sys.path.insert(0, os.path.dirname(__file__) or '.') if __name__ == '__main__': import bwmon + parser = OptionParser() + parser.add_option('--include', dest='include_filter', type='string', action='append', help='include only processes that match the given regex') + parser.add_option('--exclude', dest='exclude_filter', type='string', action='append', help='exclude processes that match the given regex') + + (options, args) = parser.parse_args() + monitor = bwmon.Monitor() + monitor.set_filter(options.include_filter, options.exclude_filter) monitor.loop() -- 2.11.4.GIT