Global parameters parsed from CLI, with sensible defaults
| 64 | # ----------------------------- Parameters & CLI ----------------------------- # |
| 65 | |
| 66 | class GlobalParameters: |
| 67 | """ |
| 68 | Global parameters parsed from CLI, with sensible defaults |
| 69 | """ |
| 70 | def __init__(self) -> None: |
| 71 | # Chart/window width (time axis) |
| 72 | self.num_latency_records: int = 90 |
| 73 | |
| 74 | # Buckets are log2(power-of-two value in the given latency unit). |
| 75 | # -1 means autotune min; 64 was used as a sentinel for autotune max. |
| 76 | self.min_latency_bkt: int = -1 # lower bucket (log2) |
| 77 | self.max_latency_bkt: int = 64 # upper bucket (log2), 64 => autotune |
| 78 | |
| 79 | # Auto scaling for colors unless overridden (>0 to fix scale) |
| 80 | self.frequency_maxval: float = -1 |
| 81 | self.intensity_maxval: float = -1 |
| 82 | |
| 83 | self.debug_level: int = 0 |
| 84 | self.print_legend: bool = True |
| 85 | self.frequency_map: bool = True |
| 86 | self.intensity_map: bool = True |
| 87 | |
| 88 | # Delay between frames (useful when replaying traces) |
| 89 | self.screen_delay: float = 0.1 |
| 90 | |
| 91 | # Unit of incoming bucket values (impacts labels & autotune min) |
| 92 | # Valid: 'millisec', 'microsec', 'nanosec' |
| 93 | self.latency_unit: str = 'millisec' |
| 94 | |
| 95 | # Tags/string constants (unchanged) |
| 96 | self.begin_tag: str = '<begin record>' |
| 97 | self.end_tag: str = '<end record>' |
| 98 | self.latencyunit_tag: str = 'latencyunit' |
| 99 | self.label_tag: str = 'label' |
| 100 | self.label_data_source: str = 'datasource' |
| 101 | self.default_data_source: str = 'bpf' # bpf, systemtap, dtrace, oracle |
| 102 | |
| 103 | def parse_cli(self, argv: list[str] | None = None) -> None: |
| 104 | parser = argparse.ArgumentParser( |
| 105 | prog="LatencyMap.py", |
| 106 | description="Plot CLI heatmaps (frequency & intensity) from latency histograms." |
| 107 | ) |
| 108 | parser.add_argument("--num_records", "-n", type=int, default=self.num_latency_records, |
| 109 | help="Number of time intervals displayed (default: 90).") |
| 110 | parser.add_argument("--min_bucket", type=int, default=self.min_latency_bkt, |
| 111 | help="Lower bucket exponent (log2). -1 = autotune (default).") |
| 112 | parser.add_argument("--max_bucket", type=int, default=self.max_latency_bkt, |
| 113 | help="Upper bucket exponent (log2). 64 = autotune (default).") |
| 114 | parser.add_argument("--frequency_maxval", type=float, default=self.frequency_maxval, |
| 115 | help="Max color scale for frequency map; -1 = auto (default).") |
| 116 | parser.add_argument("--intensity_maxval", type=float, default=self.intensity_maxval, |
| 117 | help="Max color scale for intensity map; -1 = auto (default).") |
| 118 | parser.add_argument("--screen_delay", type=float, default=self.screen_delay, |
| 119 | help="Delay (sec) between screens (default: 0.1).") |
| 120 | parser.add_argument("--debug_level", "-d", type=int, default=self.debug_level, |
| 121 | help="Debug level 0..5 (default: 0).") |
| 122 | |
| 123 | # Parse provided argv or default to sys.argv[1:] |