SYMBOL INDEX (172 symbols across 12 files) FILE: src/pg_lock_tracer/animate_lock_graph.py class DOTModel (line 178) | class DOTModel: method __init__ (line 179) | def __init__(self, input_file, verbose) -> None: method calculate_graphs (line 186) | def calculate_graphs(self): method handle_json (line 195) | def handle_json(self, event): method generate_graph (line 282) | def generate_graph(self): method get_html (line 354) | def get_html(self): class StringHelper (line 366) | class StringHelper: method split_string (line 368) | def split_string(mystring, max_length): method get_tablename (line 387) | def get_tablename(event): function main (line 397) | def main(): FILE: src/pg_lock_tracer/bpf/pg_lock_tracer.c type PostgreSQLEvent (line 12) | struct PostgreSQLEvent { function fill_basic_data (line 36) | static void fill_basic_data(PostgreSQLEvent *event) { function handle_table_event (line 47) | static void handle_table_event(PostgreSQLEvent *event, struct pt_regs *c... function bpf_table_open (line 63) | int bpf_table_open(struct pt_regs *ctx) { type RangeVar (line 81) | typedef struct RangeVar { function bpf_table_openrv (line 93) | int bpf_table_openrv(struct pt_regs *ctx, RangeVar *relation) { function bpf_table_openrv_extended (line 112) | int bpf_table_openrv_extended(struct pt_regs *ctx, RangeVar *relation) { function bpf_table_close (line 125) | int bpf_table_close(struct pt_regs *ctx) { function fill_basic_data_and_submit (line 167) | static void fill_basic_data_and_submit(PostgreSQLEvent *event, function bpf_query_begin (line 178) | int bpf_query_begin(struct pt_regs *ctx) { function bpf_query_end (line 189) | int bpf_query_end(struct pt_regs *ctx) { function bpf_errstart (line 200) | int bpf_errstart(struct pt_regs *ctx) { function bpf_lock_relation_oid (line 224) | int bpf_lock_relation_oid(struct pt_regs *ctx) { function bpf_lock_relation_oid_end (line 240) | int bpf_lock_relation_oid_end(struct pt_regs *ctx) { function bpf_unlock_relation_oid (line 251) | int bpf_unlock_relation_oid(struct pt_regs *ctx) { function fill_lock_object (line 286) | static void fill_lock_object(PostgreSQLEvent *event, void *param) { function bpf_lock_grant (line 300) | int bpf_lock_grant(struct pt_regs *ctx) { function bpf_lock_fastpath_grant (line 316) | int bpf_lock_fastpath_grant(struct pt_regs *ctx) { function fill_locallock_object (line 352) | static void fill_locallock_object(PostgreSQLEvent *event, void *param) { function bpf_lock_local_grant (line 366) | int bpf_lock_local_grant(struct pt_regs *ctx) { function bpf_lock_ungrant (line 380) | int bpf_lock_ungrant(struct pt_regs *ctx) { function bpf_lock_fastpath_ungrant (line 400) | int bpf_lock_fastpath_ungrant(struct pt_regs *ctx) { function bfp_local_lock_ungrant (line 420) | int bfp_local_lock_ungrant(struct pt_regs *ctx) { function bpf_deadlock (line 433) | int bpf_deadlock(struct pt_regs *ctx) { function bpf_transaction_begin (line 451) | int bpf_transaction_begin(struct pt_regs *ctx) { function bpf_transaction_commit (line 460) | int bpf_transaction_commit(struct pt_regs *ctx) { function bpf_transaction_abort (line 469) | int bpf_transaction_abort(struct pt_regs *ctx) { function bpf_accept_invalidation_messages (line 484) | int bpf_accept_invalidation_messages(struct pt_regs *ctx) { FILE: src/pg_lock_tracer/bpf/pg_lw_lock_tracer.c type LWLockMode (line 3) | typedef enum LWLockMode { type LockEvent_t (line 14) | struct LockEvent_t { function fill_and_submit (line 29) | static void fill_and_submit(struct pt_regs *ctx, LockEvent *event, function lwlock_acquire (line 46) | int lwlock_acquire(struct pt_regs *ctx) { function lwlock_release (line 67) | int lwlock_release(struct pt_regs *ctx) { function lwlock_wait_start (line 82) | int lwlock_wait_start(struct pt_regs *ctx) { function lwlock_wait_done (line 103) | int lwlock_wait_done(struct pt_regs *ctx) { function lwlock_condacquire (line 122) | int lwlock_condacquire(struct pt_regs *ctx) { function lwlock_condacquire_fail (line 141) | int lwlock_condacquire_fail(struct pt_regs *ctx) { function lwlock_acquire_or_wait (line 160) | int lwlock_acquire_or_wait(struct pt_regs *ctx) { function lwlock_acquire_or_wait_fail (line 179) | int lwlock_acquire_or_wait_fail(struct pt_regs *ctx) { FILE: src/pg_lock_tracer/bpf/pg_row_lock_tracer.c type RowLockEvent_t (line 6) | struct RowLockEvent_t { function fill_and_submit (line 32) | static void fill_and_submit(struct pt_regs *ctx, RowLockEvent *event) { function heapam_tuple_lock (line 57) | int heapam_tuple_lock(struct pt_regs *ctx) { function heapam_tuple_lock_end (line 114) | int heapam_tuple_lock_end(struct pt_regs *ctx) { FILE: src/pg_lock_tracer/bpf/pg_spinlock_delay_tracer.c type SpinDelayStatus (line 5) | typedef struct SpinDelayStatus_t { type SpinDelayEvent (line 14) | typedef struct SpinDelayEvent_t { function spin_delay (line 27) | int spin_delay(struct pt_regs *ctx) { FILE: src/pg_lock_tracer/helper.py class PostgreSQLLockHelper (line 12) | class PostgreSQLLockHelper: method encode_locks_into_value (line 44) | def encode_locks_into_value(locks): method decode_locks_from_value (line 57) | def decode_locks_from_value(encoded_value): method lock_type_to_str (line 72) | def lock_type_to_str(lock_type): method lock_type_to_int (line 83) | def lock_type_to_int(lock_name): class BPFHelper (line 94) | class BPFHelper: method enum_to_defines (line 99) | def enum_to_defines(enum_instance, prefix): method read_bpf_program (line 111) | def read_bpf_program(program_name): method check_pid_exe (line 124) | def check_pid_exe(pids, executable): method register_ebpf_probe (line 145) | def register_ebpf_probe( FILE: src/pg_lock_tracer/oid_resolver.py class OIDResolver (line 10) | class OIDResolver: method __init__ (line 11) | def __init__(self, connection_url): method connect (line 18) | def connect(self): method disconnect (line 47) | def disconnect(self): method fetch_all_oids (line 59) | def fetch_all_oids(self): method fetch_oid_from_db (line 86) | def fetch_oid_from_db(self, oid): method resolve_oid (line 126) | def resolve_oid(self, oid): FILE: src/pg_lock_tracer/pg_lock_tracer.py class TraceEvents (line 61) | class TraceEvents(IntEnum): class Events (line 159) | class Events(IntEnum): class PGError (line 187) | class PGError(IntEnum): class LockStatisticsEntry (line 193) | class LockStatisticsEntry: method __init__ (line 194) | def __init__(self) -> None: method lock_count (line 205) | def lock_count(self): method lock_count (line 209) | def lock_count(self, value): method lock_time_ns (line 213) | def lock_time_ns(self): method lock_time_ns (line 217) | def lock_time_ns(self, value): method requested_locks (line 221) | def requested_locks(self): method requested_locks (line 225) | def requested_locks(self, lock_type): class PGLockTraceOutput (line 229) | class PGLockTraceOutput(ABC): method __init__ (line 230) | def __init__(self) -> None: method set_context (line 242) | def set_context( method print_event (line 254) | def print_event(self, _cpu, data, _size): method update_statistics (line 260) | def update_statistics(self, event, oid_value): method get_lock_wait_time (line 281) | def get_lock_wait_time(self, event): method print_statistics (line 293) | def print_statistics(self): method handle_output_line (line 336) | def handle_output_line(self, line): class PGLockTraceOutputHuman (line 346) | class PGLockTraceOutputHuman(PGLockTraceOutput): method print_event (line 348) | def print_event(self, _cpu, data, _size): method print_stacktace_if_available (line 455) | def print_stacktace_if_available(self, event): class PGLockTraceOutputJSON (line 477) | class PGLockTraceOutputJSON(PGLockTraceOutput): method print_event (line 478) | def print_event(self, _cpu, data, _size): method add_stacktrace_if_available (line 545) | def add_stacktrace_if_available(self, output, event): class PGLockTracer (line 569) | class PGLockTracer: method __init__ (line 570) | def __init__(self, prog_args): method generate_c_defines (line 611) | def generate_c_defines(stacktrace_events, verbose): method init (line 639) | def init(self): method attach_probes (line 695) | def attach_probes(self): method run (line 866) | def run(self): function main (line 884) | def main(): FILE: src/pg_lock_tracer/pg_lw_lock_tracer.py class Events (line 69) | class Events(IntEnum): class LWLockMode (line 81) | class LWLockMode(IntEnum): class LockStatisticsEntry (line 87) | class LockStatisticsEntry: method __init__ (line 88) | def __init__(self) -> None: method direct_lock_count (line 114) | def direct_lock_count(self): method direct_lock_count (line 118) | def direct_lock_count(self, value): method acquire_or_wait_count (line 122) | def acquire_or_wait_count(self): method acquire_or_wait_count (line 126) | def acquire_or_wait_count(self, value): method acquire_or_wait_failed_count (line 130) | def acquire_or_wait_failed_count(self): method acquire_or_wait_failed_count (line 134) | def acquire_or_wait_failed_count(self, value): method wait_lock_count (line 138) | def wait_lock_count(self): method wait_lock_count (line 142) | def wait_lock_count(self, value): method lock_cond_count (line 146) | def lock_cond_count(self): method lock_cond_count (line 150) | def lock_cond_count(self, value): method lock_cond_failed_count (line 154) | def lock_cond_failed_count(self): method lock_cond_failed_count (line 158) | def lock_cond_failed_count(self, value): method lock_wait_time_ns (line 162) | def lock_wait_time_ns(self): method lock_wait_time_ns (line 166) | def lock_wait_time_ns(self, value): method requested_locks (line 170) | def requested_locks(self): method requested_locks (line 174) | def requested_locks(self, lock_type): class PGLWLockTracer (line 178) | class PGLWLockTracer: method __init__ (line 179) | def __init__(self, prog_args): method update_statistics (line 188) | def update_statistics(self, event, tranche, lock_mode): method get_lock_wait_time (line 240) | def get_lock_wait_time(self, event): method print_lock_event (line 250) | def print_lock_event(self, _cpu, data, _size): method init (line 300) | def init(self): method print_statistics (line 346) | def print_statistics(self): method run (line 402) | def run(self): function main (line 416) | def main(): FILE: src/pg_lock_tracer/pg_row_lock_tracer.py class Events (line 77) | class Events(IntEnum): class TMResult (line 84) | class TMResult(IntEnum): class LockWaitPolicy (line 96) | class LockWaitPolicy(IntEnum): class LockTupleMode (line 104) | class LockTupleMode(IntEnum): class LockStatisticsEntry (line 111) | class LockStatisticsEntry: method __init__ (line 112) | def __init__(self) -> None: method lock_modes (line 123) | def lock_modes(self): method lock_modes (line 127) | def lock_modes(self, value): method lock_policies (line 131) | def lock_policies(self): method lock_policies (line 135) | def lock_policies(self, value): method lock_results (line 139) | def lock_results(self): method lock_results (line 143) | def lock_results(self, value): class PGRowLockTracer (line 147) | class PGRowLockTracer: method __init__ (line 148) | def __init__(self, prog_args): method get_lock_wait_time (line 159) | def get_lock_wait_time(self, event): method update_statistics (line 169) | def update_statistics(self, event): method print_lock_event (line 208) | def print_lock_event(self, _cpu, data, _size): method init (line 240) | def init(self): method attach_probes (line 267) | def attach_probes(self): method print_statistics (line 287) | def print_statistics(self): method run (line 344) | def run(self): function main (line 358) | def main(): FILE: src/pg_lock_tracer/pg_spinlock_delay_tracer.py class PGSpinDelayTracer (line 67) | class PGSpinDelayTracer: method __init__ (line 68) | def __init__(self, prog_args): method _decode_field (line 76) | def _decode_field(value): method print_lock_event (line 79) | def print_lock_event(self, _cpu, data, _size): method init (line 97) | def init(self): method attach_probes (line 121) | def attach_probes(self): method run (line 133) | def run(self): function main (line 145) | def main(): FILE: tests/test_helper.py class UNITTests (line 8) | class UNITTests(unittest.TestCase): method test_encode_locks (line 9) | def test_encode_locks(self): method encode_and_decode_locks (line 25) | def encode_and_decode_locks(self, locks): method test_parse_lock_decoding_and_encoding0 (line 42) | def test_parse_lock_decoding_and_encoding0(self): method test_parse_lock_decoding_and_encoding1 (line 53) | def test_parse_lock_decoding_and_encoding1(self): method test_parse_lock_decoding_and_encoding2 (line 67) | def test_parse_lock_decoding_and_encoding2(self): method test_parse_lock_decoding_and_encoding3 (line 76) | def test_parse_lock_decoding_and_encoding3(self): method test_parse_lock_decoding_and_encoding_dup (line 85) | def test_parse_lock_decoding_and_encoding_dup(self):