common args between irq and io scripts
authorJulien Desfossez <jdesfossez@efficios.com>
Thu, 29 Jan 2015 22:05:55 +0000 (17:05 -0500)
committerJulien Desfossez <jdesfossez@efficios.com>
Thu, 29 Jan 2015 22:05:55 +0000 (17:05 -0500)
Signed-off-by: Julien Desfossez <jdesfossez@efficios.com>
linuxautomaton/linuxautomaton/automaton.py
linuxautomaton/linuxautomaton/irq.py
lttnganalysescli/lttnganalysescli/command.py
lttnganalysescli/lttnganalysescli/irq.py

index 7f5a8b8c6c62585afe8bb6b73d59a24898080330..78e25fe41e84ab186916c5f6e910d6a284093a9c 100644 (file)
@@ -1,6 +1,7 @@
 from .sched import SchedStateProvider
 from .mem import MemStateProvider
 from .irq import IrqStateProvider
+from .syscalls import SyscallsStateProvider
 
 
 class State:
@@ -23,6 +24,7 @@ class Automaton:
             SchedStateProvider(self._state),
             MemStateProvider(self._state),
             IrqStateProvider(self._state),
+            SyscallsStateProvider(self._state),
         ]
 
     def process_event(self, ev):
index 823c6f00464d9973df59932d827b8b717a1c1167..55bfa6d293e5a2661e209c4cc74c5ab28ce77967 100644 (file)
@@ -104,9 +104,11 @@ class IrqStateProvider(sp.StateProvider):
 
         # filter out max/min
         duration = i.stop_ts - i.start_ts
-        if self.state.max and duration > self.state.max * 1000:
+        if hasattr(self.state, "max") and self.state.max is not None and \
+                duration > self.state.max * 1000:
             return False
-        if self.state.min and duration < self.state.min * 1000:
+        if hasattr(self.state, "min") and self.state.min is not None and \
+                duration < self.state.min * 1000:
             return False
         self.irq[irq_type][i.nr]["list"].append(i)
         self.compute_stats(self.irq[irq_type][i.nr], i)
index 4e8ae074ad7667554e9883bbee339bf6296191fa..4368271f0b1846e313f84c763e7d0b6bbdc059bf 100644 (file)
@@ -7,11 +7,20 @@ import sys
 
 
 class Command:
-    def __init__(self, add_arguments_cb, enable_proc_filter_args=False,
-                 enable_max_min_args=False):
+    def __init__(self, add_arguments_cb,
+                 enable_proc_filter_args=False,
+                 enable_max_min_args=False,
+                 enable_max_min_size_arg=False,
+                 enable_freq_arg=False,
+                 enable_log_arg=False,
+                 enable_stats_arg=False):
         self._add_arguments_cb = add_arguments_cb
         self._enable_proc_filter_args = enable_proc_filter_args
         self._enable_max_min_arg = enable_max_min_args
+        self._enable_max_min_size_arg = enable_max_min_size_arg
+        self._enable_freq_arg = enable_freq_arg
+        self._enable_log_arg = enable_log_arg
+        self._enable_stats_arg = enable_stats_arg
         self._create_automaton()
 
     def _error(self, msg, exit_code=1):
@@ -120,6 +129,26 @@ class Command:
             else:
                 self._arg_min = args.min
 
+        if self._enable_max_min_size_arg:
+            if args.maxsize == -1:
+                self._arg_maxsize = None
+            else:
+                self._arg_maxsize = args.maxsize
+            if args.minsize == -1:
+                self._arg_minsize = None
+            else:
+                self._arg_minsize = args.minsize
+
+        if self._enable_freq_arg:
+            self._arg_freq = args.freq
+            self._arg_freq_resolution = args.freq_resolution
+
+        if self._enable_log_arg:
+            self._arg_log = args.log
+
+        if self._enable_stats_arg:
+            self._arg_stats = args.stats
+
     def _parse_args(self):
         ap = argparse.ArgumentParser(description=self._DESC)
 
@@ -155,6 +184,31 @@ class Command:
             ap.add_argument('--min', type=float, default=-1,
                             help='Filter out, duration shorter than min usec')
 
+        if self._enable_max_min_size_arg:
+            ap.add_argument('--maxsize', type=float, default=-1,
+                            help='Filter out, I/O operations working with '
+                                 'more that maxsize bytes')
+            ap.add_argument('--minsize', type=float, default=-1,
+                            help='Filter out, I/O operations working with '
+                                 'less that minsize bytes')
+
+        if self._enable_freq_arg:
+            ap.add_argument('--freq', action="store_true",
+                            help='Show the frequency distribution of '
+                                 'handler duration')
+            ap.add_argument('--freq-resolution', type=int, default=20,
+                            help='Frequency distribution resolution '
+                                 '(default 20)')
+
+        if self._enable_log_arg:
+            ap.add_argument('--log', action="store_true",
+                            help='Display the events in the order they '
+                                 'appeared')
+
+        if self._enable_stats_arg:
+            ap.add_argument('--stats', action="store_true",
+                            help='Display the statistics')
+
         # specific arguments
         self._add_arguments_cb(ap)
 
index 8f2c677713b01e5418e72d8b90052080732ea774..0c594700a4b7696695aab0d49d817495850fc98c 100644 (file)
@@ -10,11 +10,17 @@ class IrqAnalysis(Command):
     _DESC = """The irq command."""
 
     def __init__(self):
-        super().__init__(self._add_arguments, enable_max_min_args=True)
+        super().__init__(self._add_arguments,
+                         enable_max_min_args=True,
+                         enable_freq_arg=True,
+                         enable_log_arg=True)
 
     def _validate_transform_args(self):
+        # We need the min/max in the automaton to filter
+        # at the source.
         self._automaton.state.max = self._arg_max
         self._automaton.state.min = self._arg_min
+
         self._arg_irq_filter_list = None
         self._arg_softirq_filter_list = None
         if self._args.irq:
@@ -25,9 +31,6 @@ class IrqAnalysis(Command):
                 self._arg_softirq_filter_list is None:
             self._arg_irq_filter_list = []
             self._arg_softirq_filter_list = []
-        self._arg_freq = self._args.freq
-        self._arg_freq_resolution = self._args.freq_resolution
-        self._arg_log = self._args.log
 
     def run(self):
         # parse arguments first
@@ -254,15 +257,6 @@ class IrqAnalysis(Command):
         ap.add_argument('--softirq', type=str, default=0,
                         help='Show results only for the list of '
                              'SoftIRQ')
-        ap.add_argument('--freq', action="store_true",
-                        help='Show the frequency distribution of '
-                             'handler duration')
-        ap.add_argument('--freq-resolution', type=int, default=20,
-                        help='Frequency distribution resolution '
-                             '(default 20)')
-        ap.add_argument('--log', action="store_true",
-                        help='Display the interrupt in the order they '
-                             'were handled')
 
 
 # entry point
This page took 0.028045 seconds and 5 git commands to generate.