SYMBOL INDEX (205 symbols across 70 files) FILE: frontend/src/App.tsx function App (line 5) | function App() { FILE: frontend/src/Layout.tsx type MenuItem (line 40) | type MenuItem = Required['items'][number] function AppLayout (line 65) | function AppLayout(): JSX.Element { FILE: frontend/src/pages/AITools/AIToolsPage.tsx function AIToolsPage (line 6) | function AIToolsPage() { FILE: frontend/src/pages/AITools/NaturalLanguageQueryEditor.tsx type TableData (line 12) | interface TableData { function NaturalLanguageQueryEditor (line 17) | function NaturalLanguageQueryEditor() { FILE: frontend/src/pages/Backups/Backups.tsx type BackupRow (line 7) | interface BackupRow { type Backups (line 23) | interface Backups { type FieldType (line 27) | type FieldType = { function Backups (line 37) | function Backups() { FILE: frontend/src/pages/Backups/ScheduledBackups.tsx type ScheduleRow (line 25) | interface ScheduleRow { type Backups (line 41) | interface Backups { type FieldType (line 45) | type FieldType = { function ScheduledBackups (line 58) | function ScheduledBackups() { FILE: frontend/src/pages/Clusters/Clusters.tsx type ClusterNode (line 6) | interface ClusterNode { type Cluster (line 22) | interface Cluster { type Clusters (line 27) | interface Clusters { function Clusters (line 31) | function Clusters() { FILE: frontend/src/pages/DiskUsage/DiskUsage.tsx type NodeData (line 7) | interface NodeData { function DiskUsage (line 13) | function DiskUsage(): JSX.Element { FILE: frontend/src/pages/Errors/Errors.tsx type ErrorData (line 8) | interface ErrorData { function CollapsibleTable (line 14) | function CollapsibleTable() { FILE: frontend/src/pages/Logs/Logs.tsx function Logs (line 7) | function Logs() { FILE: frontend/src/pages/Operations/Operations.tsx constant OPERATION_STATUS_TO_HUMAN (line 16) | const OPERATION_STATUS_TO_HUMAN = { constant OPERATION_STATUS_TO_FONT_COLOR (line 28) | const OPERATION_STATUS_TO_FONT_COLOR = { type AsyncMigrationData (line 38) | interface AsyncMigrationData { function OperationControls (line 48) | function OperationControls({ function OperationsList (line 78) | function OperationsList(): JSX.Element { function CreateNewOperation (line 158) | function CreateNewOperation(): JSX.Element { function Operations (line 299) | function Operations(): JSX.Element { FILE: frontend/src/pages/Overview/Overview.tsx type MetricData (line 8) | interface MetricData { type QueryGraphsData (line 13) | interface QueryGraphsData { function Overview (line 20) | function Overview() { FILE: frontend/src/pages/QueryEditor/Benchmark.tsx type BenchmarkingData (line 11) | interface BenchmarkingData { constant DEFAULT_QUERY1 (line 23) | const DEFAULT_QUERY1 = `SELECT number FROM system.errors errors constant DEFAULT_QUERY2 (line 31) | const DEFAULT_QUERY2 = `SELECT number FROM system.errors errors function QueryBenchmarking (line 39) | function QueryBenchmarking() { FILE: frontend/src/pages/QueryEditor/QueryEditor.tsx function CreateSavedQueryModal (line 11) | function CreateSavedQueryModal({ function QueryEditor (line 36) | function QueryEditor() { FILE: frontend/src/pages/QueryEditor/QueryEditorPage.tsx function QueryEditorPage (line 8) | function QueryEditorPage({ match }: { match: { params: { tab: string; id... FILE: frontend/src/pages/QueryEditor/SavedQueries.tsx type SavedQueryData (line 9) | interface SavedQueryData { function SavedQueries (line 15) | function SavedQueries({ match }: { match: { params: { id: string } } }) { FILE: frontend/src/pages/QueryEditor/SavedQuery.tsx function SavedQuery (line 10) | function SavedQuery({ id, query, name }: SavedQueryData) { FILE: frontend/src/pages/RunningQueries/RunningQueries.tsx type RunningQueryData (line 8) | interface RunningQueryData { function KillQueryButton (line 19) | function KillQueryButton({ queryId }: any) { function RunningQueries (line 58) | function RunningQueries() { FILE: frontend/src/pages/SchemaStats/SchemaStats.tsx function Schema (line 8) | function Schema() { FILE: frontend/src/pages/SchemaStats/SchemaTable.tsx function TableTreeMap (line 9) | function TableTreeMap({ schema, dataIndex }) { function ColumnsData (line 50) | function ColumnsData({ table }: { table: string }): JSX.Element { function PartsData (line 89) | function PartsData({ table }: { table: string }): JSX.Element { function CollapsibleTable (line 122) | function CollapsibleTable({ match }) { FILE: frontend/src/pages/SlowQueries/ExampleQueriesTab.tsx function ExampleQueriesTab (line 12) | function ExampleQueriesTab({ query_hash }: { query_hash: string }) { FILE: frontend/src/pages/SlowQueries/ExplainTab.tsx function ExplainTab (line 12) | function ExplainTab({ query_hash }: { query_hash: string }) { FILE: frontend/src/pages/SlowQueries/MetricsTab.tsx function MetricsTab (line 8) | function MetricsTab({ query_hash }: { query_hash: string }) { FILE: frontend/src/pages/SlowQueries/NormalizedQueryTab.tsx function NormalizedQueryTab (line 13) | function NormalizedQueryTab({ query_hash }: { query_hash: string }) { FILE: frontend/src/pages/SlowQueries/QueryDetail.tsx type MetricData (line 10) | interface MetricData { type QueryDetailData (line 15) | interface QueryDetailData { function QueryDetail (line 45) | function QueryDetail({ match }: { match: { params: { query_hash: string ... FILE: frontend/src/pages/SlowQueries/SlowQueries.tsx type SlowQueryData (line 7) | interface SlowQueryData { function CollapsibleTable (line 18) | function CollapsibleTable() { FILE: frontend/src/utils/dateUtils.ts function isoTimestampToHumanReadable (line 6) | function isoTimestampToHumanReadable(isoDate: string): string { FILE: frontend/src/utils/usePollingEffect.tsx function usePollingEffect (line 3) | function usePollingEffect( FILE: housewatch/admin.py function html_link (line 4) | def html_link(url, text, new_tab=False): function error_span (line 10) | def error_span(text): FILE: housewatch/api/analyze.py class AnalyzeViewset (line 54) | class AnalyzeViewset(GenericViewSet): method list (line 55) | def list(self, request: Request) -> Response: method slow_queries (line 59) | def slow_queries(self, request: Request): method query_normalized (line 66) | def query_normalized(self, request: Request, pk: str): method query_metrics (line 77) | def query_metrics(self, request: Request, pk: str): method query_explain (line 90) | def query_explain(self, request: Request, pk: str): method query_examples (line 102) | def query_examples(self, request: Request, pk: str): method query_graphs (line 113) | def query_graphs(self, request: Request): method logs (line 124) | def logs(self, request: Request): method logs_frequency (line 133) | def logs_frequency(self, request: Request): method query (line 143) | def query(self, request: Request): method hostname (line 152) | def hostname(self, request: Request): method schema (line 156) | def schema(self, request: Request, pk: str): method parts (line 161) | def parts(self, request: Request, pk: str): method query_load (line 166) | def query_load(self, request: Request): method errors (line 180) | def errors(self, request: Request): method running_queries (line 188) | def running_queries(self, request: Request): method kill_query (line 194) | def kill_query(self, request: Request, pk: str): method cluster_overview (line 199) | def cluster_overview(self, request: Request): method benchmark (line 210) | def benchmark(self, request: Request): method ai_tools_available (line 253) | def ai_tools_available(self, request: Request): method tables (line 265) | def tables(self, request: Request): method natural_language_query (line 270) | def natural_language_query(self, request: Request): FILE: housewatch/api/async_migration.py class AsyncMigrationSerializer (line 12) | class AsyncMigrationSerializer(serializers.ModelSerializer): class Meta (line 13) | class Meta: method create (line 42) | def create(self, validated_data): class AsyncMigrationsViewset (line 49) | class AsyncMigrationsViewset(viewsets.ModelViewSet): method trigger (line 54) | def trigger(self, request, **kwargs): FILE: housewatch/api/backups.py class BackupViewset (line 14) | class BackupViewset(GenericViewSet): method list (line 15) | def list(self, request: Request) -> Response: method retrieve (line 19) | def retrieve(self, request: Request, pk: str) -> Response: method restore (line 24) | def restore(self, request: Request, pk: str) -> Response: method create (line 28) | def create(self, request: Request) -> Response: class ScheduledBackupSerializer (line 40) | class ScheduledBackupSerializer(serializers.ModelSerializer): class Meta (line 41) | class Meta: method validate (line 46) | def validate(self, data): class ScheduledBackupViewset (line 54) | class ScheduledBackupViewset(ModelViewSet): method run (line 59) | def run(self, request: Request, pk: str) -> Response: FILE: housewatch/api/cluster.py class ClusterViewset (line 12) | class ClusterViewset(GenericViewSet): method list (line 13) | def list(self, request: Request) -> Response: method retrieve (line 16) | def retrieve(self, request: Request, pk: str) -> Response: FILE: housewatch/api/instance.py class InstanceSerializer (line 14) | class InstanceSerializer(ModelSerializer): class Meta (line 15) | class Meta: class InstanceViewset (line 20) | class InstanceViewset(ModelViewSet): FILE: housewatch/api/saved_queries.py class SavedQuerySerializer (line 9) | class SavedQuerySerializer(serializers.ModelSerializer): class Meta (line 10) | class Meta: class SavedQueryViewset (line 16) | class SavedQueryViewset(viewsets.ModelViewSet): FILE: housewatch/apps.py class HouseWatchConfig (line 4) | class HouseWatchConfig(AppConfig): FILE: housewatch/async_migrations/async_migration_utils.py function execute_op (line 20) | def execute_op(sql: str, args=None, *, query_id: str, timeout_seconds: i... function mark_async_migration_as_running (line 31) | def mark_async_migration_as_running(migration: AsyncMigration) -> bool: function halt_starting_migration (line 46) | def halt_starting_migration(migration: AsyncMigration) -> bool: function update_async_migration (line 57) | def update_async_migration( function process_error (line 100) | def process_error( function trigger_migration (line 125) | def trigger_migration(migration: AsyncMigration, fresh_start: bool = True): function complete_migration (line 161) | def complete_migration(migration: AsyncMigration, email: bool = True): FILE: housewatch/async_migrations/runner.py function start_async_migration (line 27) | def start_async_migration(migration: AsyncMigration, ignore_posthog_vers... function run_async_migration_operations (line 57) | def run_async_migration_operations(migration: AsyncMigration) -> bool: function run_async_migration_next_op (line 64) | def run_async_migration_next_op(migration: AsyncMigration): function update_migration_progress (line 130) | def update_migration_progress(migration: AsyncMigration): function attempt_migration_rollback (line 145) | def attempt_migration_rollback(migration: AsyncMigration): FILE: housewatch/celery.py function setup_periodic_tasks (line 30) | def setup_periodic_tasks(sender: Celery, **kwargs): function run_backup (line 35) | def run_backup(backup_id: str, incremental: bool = False): function schedule_backups (line 44) | def schedule_backups(): function run_async_migration (line 87) | def run_async_migration(migration_name: str): FILE: housewatch/clickhouse/backups.py function execute_backup (line 19) | def execute_backup( function get_backups (line 77) | def get_backups(cluster=None): function get_backup (line 86) | def get_backup(backup, cluster=None): function create_table_backup (line 95) | def create_table_backup( function create_database_backup (line 122) | def create_database_backup(database, bucket, path, aws_key=None, aws_sec... function run_backup (line 146) | def run_backup(backup_id, incremental=False): function restore_backup (line 198) | def restore_backup(backup): FILE: housewatch/clickhouse/client.py function run_query_on_shards (line 26) | def run_query_on_shards( function run_query (line 64) | def run_query( FILE: housewatch/clickhouse/clusters.py function get_clusters (line 8) | def get_clusters(): function get_cluster (line 20) | def get_cluster(cluster): function get_shards (line 25) | def get_shards(cluster): function get_node_per_shard (line 33) | def get_node_per_shard(cluster): FILE: housewatch/clickhouse/table.py function is_replicated_table (line 4) | def is_replicated_table(database, table): function table_engine_full (line 9) | def table_engine_full(database, table): function parse_engine (line 14) | def parse_engine(engine_full): function is_sharded_table (line 20) | def is_sharded_table(database, table): FILE: housewatch/gunicorn.conf.py class CustomGunicornLogger (line 6) | class CustomGunicornLogger(glogging.Logger): method setup (line 7) | def setup(self, cfg): class HealthCheckFilter (line 15) | class HealthCheckFilter(logging.Filter): method filter (line 16) | def filter(self, record): FILE: housewatch/migrations/0001_initial.py class Migration (line 7) | class Migration(migrations.Migration): FILE: housewatch/migrations/0002_asyncmigration_asyncmigration_unique name.py class Migration (line 6) | class Migration(migrations.Migration): FILE: housewatch/migrations/0003_asyncmigration_operations_and_more.py class Migration (line 6) | class Migration(migrations.Migration): FILE: housewatch/migrations/0004_asyncmigration_last_error.py class Migration (line 6) | class Migration(migrations.Migration): FILE: housewatch/migrations/0005_asyncmigration_finished_at.py class Migration (line 6) | class Migration(migrations.Migration): FILE: housewatch/migrations/0006_savedquery.py class Migration (line 6) | class Migration(migrations.Migration): FILE: housewatch/migrations/0007_scheduledbackup_scheduledbackuprun.py class Migration (line 8) | class Migration(migrations.Migration): FILE: housewatch/migrations/0008_remove_scheduledbackup_aws_endpoint_url_and_more.py class Migration (line 8) | class Migration(migrations.Migration): FILE: housewatch/migrations/0009_scheduledbackup_cluster_alter_scheduledbackup_id.py class Migration (line 7) | class Migration(migrations.Migration): FILE: housewatch/migrations/0010_scheduledbackup_incremental_schedule_and_more.py class Migration (line 6) | class Migration(migrations.Migration): FILE: housewatch/migrations/0011_scheduledbackup_is_sharded_and_more.py class Migration (line 6) | class Migration(migrations.Migration): FILE: housewatch/migrations/0012_preferredreplica.py class Migration (line 7) | class Migration(migrations.Migration): FILE: housewatch/models/async_migration.py class MigrationStatus (line 4) | class MigrationStatus: class AsyncMigration (line 15) | class AsyncMigration(models.Model): class Meta (line 16) | class Meta: FILE: housewatch/models/backup.py class ScheduledBackup (line 8) | class ScheduledBackup(models.Model): method cron_schedule (line 31) | def cron_schedule(self): method minute (line 34) | def minute(self): method hour (line 37) | def hour(self): method day_of_week (line 40) | def day_of_week(self): method day_of_month (line 43) | def day_of_month(self): method month_of_year (line 46) | def month_of_year(self): method is_database_backup (line 49) | def is_database_backup(self): method is_table_backup (line 52) | def is_table_backup(self): method save (line 55) | def save(self, *args, **kwargs): class ScheduledBackupRun (line 63) | class ScheduledBackupRun(models.Model): FILE: housewatch/models/instance.py class Instance (line 5) | class Instance(models.Model): FILE: housewatch/models/preferred_replica.py class PreferredReplica (line 5) | class PreferredReplica(models.Model): FILE: housewatch/models/saved_queries.py class SavedQuery (line 4) | class SavedQuery(models.Model): FILE: housewatch/settings/__init__.py function get_from_env (line 51) | def get_from_env(key: str, default: Any = None, *, optional: bool = Fals... FILE: housewatch/settings/utils.py function get_from_env (line 11) | def get_from_env(key: str, default: Any = None, *, optional: bool = Fals... function get_list (line 25) | def get_list(text: str) -> List[str]: FILE: housewatch/tests/test_backup_table_fixture.sql type test_backup (line 1) | CREATE TABLE test_backup ( FILE: housewatch/urls.py class DefaultRouterPlusPlus (line 14) | class DefaultRouterPlusPlus(ExtendedDefaultRouter): method __init__ (line 17) | def __init__(self, *args, **kwargs): FILE: housewatch/utils/__init__.py function str_to_bool (line 4) | def str_to_bool(value: Any) -> bool: FILE: housewatch/utils/encrypted_fields/fields.py class EncryptedField (line 22) | class EncryptedField(models.Field): method __init__ (line 27) | def __init__(self, *args, **kwargs): method keys (line 37) | def keys(self): method fernet_keys (line 44) | def fernet_keys(self): method fernet (line 50) | def fernet(self): method get_internal_type (line 55) | def get_internal_type(self): method get_db_prep_save (line 58) | def get_db_prep_save(self, value, connection): method from_db_value (line 64) | def from_db_value(self, value, expression, connection, *args): method validators (line 70) | def validators(self): function get_prep_lookup (line 81) | def get_prep_lookup(self): class EncryptedTextField (line 94) | class EncryptedTextField(EncryptedField, models.TextField): class EncryptedCharField (line 98) | class EncryptedCharField(EncryptedField, models.CharField): class EncryptedEmailField (line 102) | class EncryptedEmailField(EncryptedField, models.EmailField): class EncryptedIntegerField (line 106) | class EncryptedIntegerField(EncryptedField, models.IntegerField): class EncryptedDateField (line 110) | class EncryptedDateField(EncryptedField, models.DateField): class EncryptedDateTimeField (line 114) | class EncryptedDateTimeField(EncryptedField, models.DateTimeField): FILE: housewatch/utils/encrypted_fields/hkdf.py function derive_fernet_key (line 14) | def derive_fernet_key(input_key): FILE: housewatch/views.py function homepage (line 9) | def homepage(request): function healthz (line 13) | def healthz(request): FILE: manage.py function main (line 7) | def main():