MCPcopy Index your code
hub / github.com/tanelpoder/0xtools / _determine_required_sources

Method _determine_required_sources

xtop/core/query_engine.py:416–459  ·  view source on GitHub ↗

Determine which data sources are needed based on requested columns

(self, columns: Set[str])

Source from the content-addressed store, hash-verified

414 return result
415
416 def _determine_required_sources(self, columns: Set[str]) -> Set[str]:
417 """Determine which data sources are needed based on requested columns"""
418 required_sources = {'samples'} # Always need the base source
419 column_mapping = self.get_column_to_source_mapping()
420
421 # Check which sources are needed for the requested columns
422 for col in columns:
423 # Handle prefixed columns (e.g., "sc.duration_ns")
424 if '.' in col:
425 prefix = col.split('.')[0]
426 # Find source by alias
427 for src_name, src_info in self.DATA_SOURCES.items():
428 if src_info['alias'] == prefix:
429 required_sources.add(src_name)
430 # Add dependencies
431 for dep in src_info['depends_on']:
432 required_sources.add(dep)
433 break
434 else:
435 source = column_mapping.get(col)
436 if source:
437 required_sources.add(source)
438 # Add dependencies
439 for dep in self.DATA_SOURCES[source]['depends_on']:
440 required_sources.add(dep)
441
442 # Add computed columns dependencies
443 if 'kstack_current_func' in columns:
444 required_sources.add('kstacks')
445 if 'ustack_current_func' in columns:
446 required_sources.add('ustacks')
447
448 # Add dependencies for latency columns
449 syscall_latency_cols = {'sc.min_lat_us', 'sc.avg_lat_us', 'sc.max_lat_us',
450 'sc.p50_us', 'sc.p95_us', 'sc.p99_us', 'sc.p999_us', 'sclat_histogram'}
451 io_latency_cols = {'io.min_lat_us', 'io.avg_lat_us', 'io.max_lat_us',
452 'io.p50_us', 'io.p95_us', 'io.p99_us', 'io.p999_us', 'iolat_histogram'}
453
454 if any(col in columns for col in syscall_latency_cols):
455 required_sources.add('syscend')
456 if any(col in columns for col in io_latency_cols):
457 required_sources.add('iorqend')
458
459 return required_sources
460
461 def _load_fragment(self, source_name: str) -> str:
462 """Load SQL fragment for a data source"""

Callers 1

build_dynamic_queryMethod · 0.95

Calls 1

Tested by

no test coverage detected