micromegas 0.11.0__py3-none-any.whl → 0.12.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- micromegas/flightsql/FlightSql_pb2.py +148 -140
- micromegas/flightsql/__init__.py +1 -0
- micromegas/flightsql/client.py +473 -3
- micromegas/flightsql/time.py +1 -0
- micromegas/perfetto.py +100 -187
- micromegas/time.py +97 -1
- micromegas-0.12.0.dist-info/METADATA +120 -0
- micromegas-0.12.0.dist-info/RECORD +10 -0
- micromegas/thirdparty/perfetto/protos/perfetto/common/android_energy_consumer_descriptor_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/common/android_log_constants_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/common/builtin_clock_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/common/descriptor_pb2.py +0 -62
- micromegas/thirdparty/perfetto/protos/perfetto/common/gpu_counter_descriptor_pb2.py +0 -44
- micromegas/thirdparty/perfetto/protos/perfetto/common/perf_events_pb2.py +0 -46
- micromegas/thirdparty/perfetto/protos/perfetto/common/protolog_common_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/common/sys_stats_counters_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/common/trace_stats_pb2.py +0 -48
- micromegas/thirdparty/perfetto/protos/perfetto/config/android/android_game_intervention_list_config_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/config/android/android_input_event_config_pb2.py +0 -42
- micromegas/thirdparty/perfetto/protos/perfetto/config/android/android_log_config_pb2.py +0 -37
- micromegas/thirdparty/perfetto/protos/perfetto/config/android/android_polled_state_config_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/config/android/android_sdk_sysprop_guard_config_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/config/android/android_system_property_config_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/config/android/network_trace_config_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/config/android/packages_list_config_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/config/android/pixel_modem_config_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/config/android/protolog_config_pb2.py +0 -41
- micromegas/thirdparty/perfetto/protos/perfetto/config/android/surfaceflinger_layers_config_pb2.py +0 -40
- micromegas/thirdparty/perfetto/protos/perfetto/config/android/surfaceflinger_transactions_config_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/config/chrome/chrome_config_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/config/chrome/v8_config_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/config/data_source_config_pb2.py +0 -120
- micromegas/thirdparty/perfetto/protos/perfetto/config/etw/etw_config_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/config/ftrace/ftrace_config_pb2.py +0 -48
- micromegas/thirdparty/perfetto/protos/perfetto/config/gpu/gpu_counter_config_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/config/gpu/vulkan_memory_config_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/config/inode_file/inode_file_config_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/config/interceptor_config_pb2.py +0 -37
- micromegas/thirdparty/perfetto/protos/perfetto/config/interceptors/console_config_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/config/power/android_power_config_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/config/process_stats/process_stats_config_pb2.py +0 -40
- micromegas/thirdparty/perfetto/protos/perfetto/config/profiling/heapprofd_config_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/config/profiling/java_hprof_config_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/config/profiling/perf_event_config_pb2.py +0 -43
- micromegas/thirdparty/perfetto/protos/perfetto/config/statsd/atom_ids_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/config/statsd/statsd_tracing_config_pb2.py +0 -39
- micromegas/thirdparty/perfetto/protos/perfetto/config/sys_stats/sys_stats_config_pb2.py +0 -39
- micromegas/thirdparty/perfetto/protos/perfetto/config/system_info/system_info_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/config/test_config_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/config/trace_config_pb2.py +0 -90
- micromegas/thirdparty/perfetto/protos/perfetto/config/track_event/track_event_config_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/android/android_game_intervention_list_pb2.py +0 -40
- micromegas/thirdparty/perfetto/protos/perfetto/trace/android/android_log_pb2.py +0 -43
- micromegas/thirdparty/perfetto/protos/perfetto/trace/android/android_system_property_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/android/camera_event_pb2.py +0 -48
- micromegas/thirdparty/perfetto/protos/perfetto/trace/android/frame_timeline_event_pb2.py +0 -54
- micromegas/thirdparty/perfetto/protos/perfetto/trace/android/gpu_mem_event_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/android/graphics/rect_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/android/graphics_frame_event_pb2.py +0 -40
- micromegas/thirdparty/perfetto/protos/perfetto/trace/android/initial_display_state_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/android/network_trace_pb2.py +0 -46
- micromegas/thirdparty/perfetto/protos/perfetto/trace/android/packages_list_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/android/pixel_modem_events_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/android/protolog_pb2.py +0 -43
- micromegas/thirdparty/perfetto/protos/perfetto/trace/android/shell_transition_pb2.py +0 -42
- micromegas/thirdparty/perfetto/protos/perfetto/trace/android/surfaceflinger_common_pb2.py +0 -59
- micromegas/thirdparty/perfetto/protos/perfetto/trace/android/surfaceflinger_layers_pb2.py +0 -72
- micromegas/thirdparty/perfetto/protos/perfetto/trace/android/surfaceflinger_transactions_pb2.py +0 -76
- micromegas/thirdparty/perfetto/protos/perfetto/trace/android/winscope_extensions_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/chrome/chrome_benchmark_metadata_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/chrome/chrome_metadata_pb2.py +0 -50
- micromegas/thirdparty/perfetto/protos/perfetto/trace/chrome/chrome_trace_event_pb2.py +0 -56
- micromegas/thirdparty/perfetto/protos/perfetto/trace/chrome/chrome_trigger_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/chrome/v8_pb2.py +0 -70
- micromegas/thirdparty/perfetto/protos/perfetto/trace/clock_snapshot_pb2.py +0 -41
- micromegas/thirdparty/perfetto/protos/perfetto/trace/etw/etw_event_bundle_pb2.py +0 -37
- micromegas/thirdparty/perfetto/protos/perfetto/trace/etw/etw_event_pb2.py +0 -37
- micromegas/thirdparty/perfetto/protos/perfetto/trace/etw/etw_pb2.py +0 -48
- micromegas/thirdparty/perfetto/protos/perfetto/trace/extension_descriptor_pb2.py +0 -37
- micromegas/thirdparty/perfetto/protos/perfetto/trace/filesystem/inode_file_map_pb2.py +0 -40
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/android_fs_pb2.py +0 -46
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/binder_pb2.py +0 -52
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/block_pb2.py +0 -72
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/cgroup_pb2.py +0 -52
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/clk_pb2.py +0 -40
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/cma_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/compaction_pb2.py +0 -62
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/cpuhp_pb2.py +0 -44
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/cros_ec_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/dcvsh_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/dma_fence_pb2.py +0 -44
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/dmabuf_heap_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/dpu_pb2.py +0 -42
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/drm_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/ext4_pb2.py +0 -224
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/f2fs_pb2.py +0 -106
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/fastrpc_pb2.py +0 -44
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/fence_pb2.py +0 -42
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/filemap_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/ftrace_event_bundle_pb2.py +0 -66
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/ftrace_event_pb2.py +0 -105
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/ftrace_pb2.py +0 -40
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/ftrace_stats_pb2.py +0 -42
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/g2d_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/generic_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/google_icc_trace_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/google_irm_trace_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/gpu_mem_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/gpu_scheduler_pb2.py +0 -40
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/hyp_pb2.py +0 -44
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/i2c_pb2.py +0 -50
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/ion_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/ipi_pb2.py +0 -40
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/irq_pb2.py +0 -44
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/kgsl_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/kmem_pb2.py +0 -122
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/kvm_pb2.py +0 -106
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/lowmemorykiller_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/lwis_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/mali_pb2.py +0 -98
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/mdss_pb2.py +0 -76
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/mm_event_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/net_pb2.py +0 -42
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/oom_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/panel_pb2.py +0 -42
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/perf_trace_counters_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/power_pb2.py +0 -60
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/printk_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/raw_syscalls_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/regulator_pb2.py +0 -48
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/rpm_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/samsung_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/sched_pb2.py +0 -64
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/scm_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/sde_pb2.py +0 -46
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/signal_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/skb_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/sock_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/sync_pb2.py +0 -40
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/synthetic_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/systrace_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/task_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/tcp_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/thermal_exynos_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/thermal_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/trusty_pb2.py +0 -70
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/ufs_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/v4l2_pb2.py +0 -46
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/virtio_gpu_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/virtio_video_pb2.py +0 -42
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/vmscan_pb2.py +0 -46
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ftrace/workqueue_pb2.py +0 -42
- micromegas/thirdparty/perfetto/protos/perfetto/trace/gpu/gpu_counter_event_pb2.py +0 -39
- micromegas/thirdparty/perfetto/protos/perfetto/trace/gpu/gpu_log_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/gpu/gpu_render_stage_event_pb2.py +0 -58
- micromegas/thirdparty/perfetto/protos/perfetto/trace/gpu/vulkan_api_event_pb2.py +0 -40
- micromegas/thirdparty/perfetto/protos/perfetto/trace/gpu/vulkan_memory_event_pb2.py +0 -44
- micromegas/thirdparty/perfetto/protos/perfetto/trace/interned_data/interned_data_pb2.py +0 -45
- micromegas/thirdparty/perfetto/protos/perfetto/trace/memory_graph_pb2.py +0 -48
- micromegas/thirdparty/perfetto/protos/perfetto/trace/perfetto/perfetto_metatrace_pb2.py +0 -40
- micromegas/thirdparty/perfetto/protos/perfetto/trace/perfetto/tracing_service_event_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/power/android_energy_estimation_breakdown_pb2.py +0 -39
- micromegas/thirdparty/perfetto/protos/perfetto/trace/power/android_entity_state_residency_pb2.py +0 -40
- micromegas/thirdparty/perfetto/protos/perfetto/trace/power/battery_counters_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/power/power_rails_pb2.py +0 -40
- micromegas/thirdparty/perfetto/protos/perfetto/trace/profiling/deobfuscation_pb2.py +0 -40
- micromegas/thirdparty/perfetto/protos/perfetto/trace/profiling/heap_graph_pb2.py +0 -57
- micromegas/thirdparty/perfetto/protos/perfetto/trace/profiling/profile_common_pb2.py +0 -50
- micromegas/thirdparty/perfetto/protos/perfetto/trace/profiling/profile_packet_pb2.py +0 -72
- micromegas/thirdparty/perfetto/protos/perfetto/trace/profiling/smaps_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ps/process_stats_pb2.py +0 -42
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ps/process_tree_pb2.py +0 -40
- micromegas/thirdparty/perfetto/protos/perfetto/trace/remote_clock_sync_pb2.py +0 -39
- micromegas/thirdparty/perfetto/protos/perfetto/trace/statsd/statsd_atom_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/sys_stats/sys_stats_pb2.py +0 -55
- micromegas/thirdparty/perfetto/protos/perfetto/trace/system_info/cpu_info_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/system_info_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/test_event_pb2.py +0 -39
- micromegas/thirdparty/perfetto/protos/perfetto/trace/trace_packet_defaults_pb2.py +0 -39
- micromegas/thirdparty/perfetto/protos/perfetto/trace/trace_packet_pb2.py +0 -107
- micromegas/thirdparty/perfetto/protos/perfetto/trace/trace_pb2.py +0 -37
- micromegas/thirdparty/perfetto/protos/perfetto/trace/trace_uuid_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/chrome_active_processes_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/chrome_application_state_info_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/chrome_compositor_scheduler_state_pb2.py +0 -75
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/chrome_content_settings_event_info_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/chrome_frame_reporter_pb2.py +0 -44
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/chrome_histogram_sample_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/chrome_keyed_service_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/chrome_latency_info_pb2.py +0 -42
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/chrome_legacy_ipc_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/chrome_message_pump_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/chrome_mojo_event_info_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/chrome_process_descriptor_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/chrome_renderer_scheduler_state_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/chrome_thread_descriptor_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/chrome_user_event_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/chrome_window_handle_event_info_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/counter_descriptor_pb2.py +0 -40
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/debug_annotation_pb2.py +0 -44
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/log_message_pb2.py +0 -40
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/pixel_modem_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/process_descriptor_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/range_of_interest_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/screenshot_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/source_location_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/task_execution_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/thread_descriptor_pb2.py +0 -38
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/track_descriptor_pb2.py +0 -41
- micromegas/thirdparty/perfetto/protos/perfetto/trace/track_event/track_event_pb2.py +0 -74
- micromegas/thirdparty/perfetto/protos/perfetto/trace/translation/translation_table_pb2.py +0 -70
- micromegas/thirdparty/perfetto/protos/perfetto/trace/trigger_pb2.py +0 -36
- micromegas/thirdparty/perfetto/protos/perfetto/trace/ui_state_pb2.py +0 -38
- micromegas-0.11.0.dist-info/METADATA +0 -251
- micromegas-0.11.0.dist-info/RECORD +0 -215
- {micromegas-0.11.0.dist-info → micromegas-0.12.0.dist-info}/WHEEL +0 -0
micromegas/perfetto.py
CHANGED
@@ -1,198 +1,111 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
def write_process_trace_from_chunks(
|
2
|
+
client, process_id, begin, end, span_types, trace_filepath
|
3
|
+
):
|
4
|
+
"""
|
5
|
+
Generate Perfetto trace using server-side perfetto_trace_chunks table function.
|
6
|
+
This replaces the old duplicate Python implementation with server-side generation.
|
7
|
+
|
8
|
+
Args:
|
9
|
+
client: FlightSQL client
|
10
|
+
process_id: Process UUID
|
11
|
+
begin: Start time (datetime)
|
12
|
+
end: End time (datetime)
|
13
|
+
span_types: 'thread', 'async', or 'both'
|
14
|
+
trace_filepath: Output file path
|
15
|
+
"""
|
16
|
+
# Convert datetime objects to ISO format strings for SQL
|
17
|
+
begin_str = begin.isoformat()
|
18
|
+
end_str = end.isoformat()
|
19
|
+
|
20
|
+
# Query chunks using the server-side table function
|
21
|
+
# Note: ORDER BY not needed since chunks are naturally produced in order (0, 1, 2, ...)
|
22
|
+
sql = f"""
|
23
|
+
SELECT chunk_id, chunk_data
|
24
|
+
FROM perfetto_trace_chunks(
|
25
|
+
'{process_id}',
|
26
|
+
'{span_types}',
|
27
|
+
TIMESTAMP '{begin_str}',
|
28
|
+
TIMESTAMP '{end_str}'
|
29
|
+
)
|
30
|
+
"""
|
4
31
|
|
32
|
+
print(f"Generating {span_types} spans for process {process_id}...")
|
5
33
|
|
6
|
-
#
|
7
|
-
|
8
|
-
def load_perfetto_protos():
|
9
|
-
import sys
|
10
|
-
import pathlib
|
34
|
+
# Use streaming interface to process chunks as they arrive
|
35
|
+
from tqdm import tqdm
|
11
36
|
|
12
|
-
|
13
|
-
|
37
|
+
trace_chunks = []
|
38
|
+
expected_chunk_id = 0
|
39
|
+
chunk_count = 0
|
14
40
|
|
41
|
+
# We don't know the total number of chunks upfront, so use indeterminate progress
|
42
|
+
pbar = tqdm(desc="Processing chunks", unit=" chunks")
|
15
43
|
|
16
|
-
|
17
|
-
|
18
|
-
|
44
|
+
try:
|
45
|
+
for record_batch in client.query_stream(sql, begin, end):
|
46
|
+
# Convert to pandas for easier access
|
47
|
+
df = record_batch.to_pandas()
|
19
48
|
|
49
|
+
# Process each row in the batch
|
50
|
+
for _, row in df.iterrows():
|
51
|
+
chunk_id = row["chunk_id"]
|
52
|
+
chunk_data = row["chunk_data"]
|
20
53
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
54
|
+
# Verify chunk ID is the expected sequential value
|
55
|
+
if chunk_id != expected_chunk_id:
|
56
|
+
pbar.close()
|
57
|
+
print(
|
58
|
+
f"ERROR: Chunk {chunk_id} received, expected {expected_chunk_id}"
|
59
|
+
)
|
60
|
+
print(f"Chunks may be out of order or missing!")
|
61
|
+
return
|
26
62
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
self.source_locations = {}
|
34
|
-
self.first = True
|
35
|
-
self.client = client
|
36
|
-
self.trace = trace_pb2.Trace()
|
37
|
-
self.packets = self.trace.packet
|
38
|
-
self.process_uuid = crc64_str(process_id)
|
39
|
-
self.begin = begin
|
40
|
-
self.end = end
|
41
|
-
|
42
|
-
packet = trace_packet_pb2.TracePacket()
|
43
|
-
packet.track_descriptor.uuid = self.process_uuid
|
44
|
-
packet.track_descriptor.process.pid = 1
|
45
|
-
packet.track_descriptor.process.process_name = exe
|
46
|
-
self.packets.append(packet)
|
47
|
-
|
48
|
-
def get_name_iid(self, name):
|
49
|
-
iid = self.names.get(name)
|
50
|
-
is_new = False
|
51
|
-
if iid is None:
|
52
|
-
is_new = True
|
53
|
-
iid = len(self.names) + 1
|
54
|
-
self.names[name] = iid
|
55
|
-
return iid, is_new
|
56
|
-
|
57
|
-
def get_category_iid(self, cat):
|
58
|
-
iid = self.categories.get(cat)
|
59
|
-
is_new = False
|
60
|
-
if iid is None:
|
61
|
-
is_new = True
|
62
|
-
iid = len(self.categories) + 1
|
63
|
-
self.categories[cat] = iid
|
64
|
-
return iid, is_new
|
65
|
-
|
66
|
-
def get_location_iid(self, loc):
|
67
|
-
iid = self.source_locations.get(loc)
|
68
|
-
is_new = False
|
69
|
-
if iid is None:
|
70
|
-
is_new = True
|
71
|
-
iid = len(self.source_locations) + 1
|
72
|
-
self.source_locations[loc] = iid
|
73
|
-
return iid, is_new
|
74
|
-
|
75
|
-
def append_thread(self, stream_id, thread_name, thread_id):
|
76
|
-
from protos.perfetto.trace import trace_pb2, trace_packet_pb2, track_event
|
77
|
-
|
78
|
-
packet = trace_packet_pb2.TracePacket()
|
79
|
-
thread_uuid = crc64_str(stream_id)
|
80
|
-
packet.track_descriptor.uuid = thread_uuid
|
81
|
-
packet.track_descriptor.parent_uuid = self.process_uuid
|
82
|
-
packet.track_descriptor.thread.pid = 1
|
83
|
-
packet.track_descriptor.thread.tid = thread_id
|
84
|
-
packet.track_descriptor.thread.thread_name = thread_name
|
85
|
-
self.packets.append(packet)
|
86
|
-
trusted_packet_sequence_id = 1
|
87
|
-
|
88
|
-
sql = """
|
89
|
-
SELECT *
|
90
|
-
FROM view_instance('thread_spans', '{stream_id}');
|
91
|
-
""".format(
|
92
|
-
stream_id=stream_id
|
93
|
-
)
|
94
|
-
|
95
|
-
for rb_spans in self.client.query_stream(sql, self.begin, self.end):
|
96
|
-
df_spans = pyarrow.Table.from_batches([rb_spans]).to_pandas()
|
97
|
-
begin_ns = df_spans["begin"].astype("int64")
|
98
|
-
end_ns = df_spans["end"].astype("int64")
|
99
|
-
for index, span in df_spans.iterrows():
|
100
|
-
packet = trace_packet_pb2.TracePacket()
|
101
|
-
packet.timestamp = begin_ns[index]
|
102
|
-
packet.track_event.type = (
|
103
|
-
track_event.track_event_pb2.TrackEvent.Type.TYPE_SLICE_BEGIN
|
104
|
-
)
|
105
|
-
packet.track_event.track_uuid = thread_uuid
|
106
|
-
span_name = span["name"]
|
107
|
-
name_iid, new_name = self.get_name_iid(span_name)
|
108
|
-
packet.track_event.name_iid = name_iid
|
109
|
-
category_iid, new_category = self.get_category_iid(span["target"])
|
110
|
-
packet.track_event.category_iids.append(category_iid)
|
111
|
-
|
112
|
-
source_location = (span["filename"], span["line"])
|
113
|
-
source_location_iid, new_source_location = self.get_location_iid(
|
114
|
-
source_location
|
115
|
-
)
|
116
|
-
packet.track_event.source_location_iid = source_location_iid
|
117
|
-
if self.first:
|
118
|
-
# this is necessary for interning to work
|
119
|
-
self.first = False
|
120
|
-
packet.first_packet_on_sequence = True
|
121
|
-
packet.sequence_flags = 3
|
122
|
-
else:
|
123
|
-
packet.sequence_flags = 2
|
124
|
-
|
125
|
-
if new_name:
|
126
|
-
event_name = packet.interned_data.event_names.add()
|
127
|
-
event_name.iid = name_iid
|
128
|
-
event_name.name = span_name
|
129
|
-
if new_category:
|
130
|
-
cat_name = packet.interned_data.event_categories.add()
|
131
|
-
cat_name.iid = category_iid
|
132
|
-
cat_name.name = span["target"]
|
133
|
-
if new_source_location:
|
134
|
-
loc = packet.interned_data.source_locations.add()
|
135
|
-
loc.iid = source_location_iid
|
136
|
-
loc.file_name = source_location[0]
|
137
|
-
loc.line_number = source_location[1]
|
138
|
-
|
139
|
-
packet.trusted_packet_sequence_id = trusted_packet_sequence_id
|
140
|
-
self.packets.append(packet)
|
141
|
-
|
142
|
-
packet = trace_packet_pb2.TracePacket()
|
143
|
-
packet.timestamp = end_ns[index]
|
144
|
-
packet.track_event.type = (
|
145
|
-
track_event.track_event_pb2.TrackEvent.Type.TYPE_SLICE_END
|
146
|
-
)
|
147
|
-
packet.track_event.track_uuid = thread_uuid
|
148
|
-
packet.track_event.name_iid = name_iid
|
149
|
-
packet.track_event.category_iids.append(category_iid)
|
150
|
-
packet.track_event.source_location_iid = source_location_iid
|
151
|
-
packet.sequence_flags = 2
|
152
|
-
packet.trusted_packet_sequence_id = trusted_packet_sequence_id
|
153
|
-
|
154
|
-
self.packets.append(packet)
|
155
|
-
|
156
|
-
def write_file(self, filename):
|
157
|
-
with open(filename, "wb") as f:
|
158
|
-
f.write(self.trace.SerializeToString())
|
159
|
-
|
160
|
-
|
161
|
-
def get_process_cpu_streams(client, process_id, begin, end):
|
162
|
-
sql = """
|
163
|
-
SELECT stream_id,
|
164
|
-
property_get("streams.properties", 'thread-name') as thread_name,
|
165
|
-
property_get("streams.properties", 'thread-id') as thread_id
|
166
|
-
FROM blocks
|
167
|
-
WHERE process_id = '{process_id}'
|
168
|
-
AND array_has("streams.tags", 'cpu')
|
169
|
-
GROUP BY stream_id, thread_name, thread_id
|
170
|
-
""".format(
|
171
|
-
process_id=process_id
|
172
|
-
)
|
173
|
-
df_streams = client.query(sql)
|
174
|
-
return df_streams
|
63
|
+
trace_chunks.append(chunk_data)
|
64
|
+
expected_chunk_id += 1
|
65
|
+
chunk_count += 1
|
66
|
+
pbar.update(1)
|
67
|
+
|
68
|
+
pbar.close()
|
175
69
|
|
70
|
+
if chunk_count == 0:
|
71
|
+
print(f"No trace data found for process {process_id}")
|
72
|
+
return
|
73
|
+
except KeyboardInterrupt:
|
74
|
+
pbar.close()
|
75
|
+
print(f"\nTrace generation interrupted by user after {chunk_count} chunks")
|
76
|
+
return
|
77
|
+
except Exception as e:
|
78
|
+
pbar.close()
|
79
|
+
raise
|
176
80
|
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
81
|
+
# Reassemble binary chunks into complete trace
|
82
|
+
print(f"Assembling {chunk_count} chunks into trace...")
|
83
|
+
trace_bytes = b"".join(trace_chunks)
|
84
|
+
|
85
|
+
print(f"Generated trace with {chunk_count} chunks ({len(trace_bytes)} bytes)")
|
86
|
+
|
87
|
+
# Write to file
|
88
|
+
with open(trace_filepath, "wb") as f:
|
89
|
+
f.write(trace_bytes)
|
90
|
+
|
91
|
+
print(f"Trace written to {trace_filepath}")
|
92
|
+
|
93
|
+
|
94
|
+
# Main API function with span type selection
|
95
|
+
def write_process_trace(
|
96
|
+
client, process_id, begin, end, trace_filepath, span_types="both"
|
97
|
+
):
|
98
|
+
"""
|
99
|
+
Generate Perfetto trace with configurable span types.
|
100
|
+
|
101
|
+
Args:
|
102
|
+
client: FlightSQL client
|
103
|
+
process_id: Process UUID
|
104
|
+
begin: Start time (datetime)
|
105
|
+
end: End time (datetime)
|
106
|
+
trace_filepath: Output file path
|
107
|
+
span_types: 'thread', 'async', or 'both' (default: 'both')
|
108
|
+
"""
|
109
|
+
write_process_trace_from_chunks(
|
110
|
+
client, process_id, begin, end, span_types, trace_filepath
|
184
111
|
)
|
185
|
-
return client.query(sql, begin, end).iloc[0]["exe"]
|
186
|
-
|
187
|
-
|
188
|
-
def write_process_trace(client, process_id, begin, end, trace_filepath):
|
189
|
-
exe = get_exe(client, process_id, begin, end)
|
190
|
-
print(exe)
|
191
|
-
streams = get_process_cpu_streams(client, process_id, begin, end)
|
192
|
-
writer = Writer(client, process_id, begin, end, exe)
|
193
|
-
progress_bar = tqdm(list(streams.iterrows()), unit="threads")
|
194
|
-
for index, stream in progress_bar:
|
195
|
-
progress_bar.set_description(stream["thread_name"])
|
196
|
-
stream_id = int(stream["thread_id"])
|
197
|
-
writer.append_thread(stream["stream_id"], stream["thread_name"], stream_id)
|
198
|
-
writer.write_file(trace_filepath)
|
micromegas/time.py
CHANGED
@@ -1,8 +1,58 @@
|
|
1
|
+
"""Time utility functions for Micromegas Python client.
|
2
|
+
|
3
|
+
This module provides utilities for formatting and parsing time values
|
4
|
+
used in queries and API calls.
|
5
|
+
"""
|
6
|
+
|
1
7
|
import datetime
|
2
8
|
import pandas
|
3
9
|
import re
|
4
10
|
|
11
|
+
|
5
12
|
def format_datetime(value):
|
13
|
+
"""Format various datetime types into RFC3339/ISO8601 strings for queries.
|
14
|
+
|
15
|
+
Converts Python datetime objects, pandas Timestamps, or datetime strings
|
16
|
+
into a standardized RFC3339 format that the Micromegas server expects.
|
17
|
+
Ensures all datetime values have timezone information.
|
18
|
+
|
19
|
+
Args:
|
20
|
+
value: The datetime value to format. Can be:
|
21
|
+
- datetime.datetime: Must be timezone-aware
|
22
|
+
- pandas.Timestamp: Will use its timezone information
|
23
|
+
- str: ISO format string that will be parsed and reformatted
|
24
|
+
- None: Returns None without modification
|
25
|
+
|
26
|
+
Returns:
|
27
|
+
str: RFC3339/ISO8601 formatted datetime string (e.g., "2024-01-01T12:00:00+00:00")
|
28
|
+
None: If input value is None
|
29
|
+
|
30
|
+
Raises:
|
31
|
+
RuntimeError: If datetime is missing timezone information or value type is unsupported.
|
32
|
+
|
33
|
+
Example:
|
34
|
+
>>> import datetime
|
35
|
+
>>> from datetime import timezone
|
36
|
+
>>>
|
37
|
+
>>> # Format timezone-aware datetime
|
38
|
+
>>> dt = datetime.datetime(2024, 1, 1, 12, 0, 0, tzinfo=timezone.utc)
|
39
|
+
>>> format_datetime(dt)
|
40
|
+
'2024-01-01T12:00:00+00:00'
|
41
|
+
>>>
|
42
|
+
>>> # Format pandas Timestamp
|
43
|
+
>>> import pandas as pd
|
44
|
+
>>> ts = pd.Timestamp('2024-01-01 12:00:00', tz='UTC')
|
45
|
+
>>> format_datetime(ts)
|
46
|
+
'2024-01-01T12:00:00+00:00'
|
47
|
+
>>>
|
48
|
+
>>> # Parse and format string
|
49
|
+
>>> format_datetime('2024-01-01T12:00:00Z')
|
50
|
+
'2024-01-01T12:00:00+00:00'
|
51
|
+
|
52
|
+
Note:
|
53
|
+
Always use timezone-aware datetime objects to avoid ambiguity.
|
54
|
+
The server requires RFC3339 format for all time-based queries.
|
55
|
+
"""
|
6
56
|
nonetype = type(None)
|
7
57
|
value_type = type(value)
|
8
58
|
if value_type == datetime.datetime:
|
@@ -17,9 +67,55 @@ def format_datetime(value):
|
|
17
67
|
return None
|
18
68
|
raise RuntimeError("value of unknown type in format_datetime")
|
19
69
|
|
70
|
+
|
20
71
|
def parse_time_delta(user_string):
|
21
|
-
|
72
|
+
"""Parse human-readable time delta strings into timedelta objects.
|
73
|
+
|
74
|
+
Converts simple time duration strings like "1h", "30m", or "7d" into
|
75
|
+
Python timedelta objects for use in time calculations.
|
76
|
+
|
77
|
+
Args:
|
78
|
+
user_string (str): Time delta string with format "<number><unit>" where:
|
79
|
+
- number: Positive integer
|
80
|
+
- unit: 'm' for minutes, 'h' for hours, 'd' for days
|
81
|
+
|
82
|
+
Returns:
|
83
|
+
datetime.timedelta: The parsed time duration.
|
84
|
+
|
85
|
+
Raises:
|
86
|
+
RuntimeError: If the string format is invalid or uses unsupported units.
|
87
|
+
|
88
|
+
Example:
|
89
|
+
>>> # Parse various time deltas
|
90
|
+
>>> parse_time_delta('30m') # 30 minutes
|
91
|
+
datetime.timedelta(seconds=1800)
|
92
|
+
>>>
|
93
|
+
>>> parse_time_delta('2h') # 2 hours
|
94
|
+
datetime.timedelta(seconds=7200)
|
95
|
+
>>>
|
96
|
+
>>> parse_time_delta('7d') # 7 days
|
97
|
+
datetime.timedelta(days=7)
|
98
|
+
>>>
|
99
|
+
>>> # Use in time calculations
|
100
|
+
>>> import datetime
|
101
|
+
>>> now = datetime.datetime.now(datetime.timezone.utc)
|
102
|
+
>>> one_hour_ago = now - parse_time_delta('1h')
|
103
|
+
|
104
|
+
Supported Units:
|
105
|
+
- 'm': minutes
|
106
|
+
- 'h': hours
|
107
|
+
- 'd': days
|
108
|
+
|
109
|
+
Note:
|
110
|
+
For more complex time expressions, use datetime.timedelta directly.
|
111
|
+
This function is designed for simple, common time durations.
|
112
|
+
"""
|
113
|
+
parser = re.compile(r"(\d+)([mhd])")
|
22
114
|
m = parser.match(user_string)
|
115
|
+
if not m:
|
116
|
+
raise RuntimeError(
|
117
|
+
f"invalid time delta format: '{user_string}'. Expected format: '<number><unit>' where unit is m/h/d"
|
118
|
+
)
|
23
119
|
nbr = int(m.group(1))
|
24
120
|
unit = m.group(2)
|
25
121
|
if unit == "m":
|
@@ -0,0 +1,120 @@
|
|
1
|
+
Metadata-Version: 2.3
|
2
|
+
Name: micromegas
|
3
|
+
Version: 0.12.0
|
4
|
+
Summary: Python analytics client for https://github.com/madesroches/micromegas/
|
5
|
+
Author: Marc-Antoine Desroches
|
6
|
+
Author-email: madesroches@gmail.com
|
7
|
+
Requires-Python: >=3.10,<4.0
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
9
|
+
Classifier: Programming Language :: Python :: 3.10
|
10
|
+
Classifier: Programming Language :: Python :: 3.11
|
11
|
+
Classifier: Programming Language :: Python :: 3.12
|
12
|
+
Classifier: Programming Language :: Python :: 3.13
|
13
|
+
Requires-Dist: certifi (>=2025.4.26,<2026.0.0)
|
14
|
+
Requires-Dist: grpcio (>=1.69.0,<2.0.0)
|
15
|
+
Requires-Dist: numpy (>=2.2.6,<3.0.0)
|
16
|
+
Requires-Dist: pandas (>=2.2.2,<3.0.0)
|
17
|
+
Requires-Dist: protobuf (>=5.29.0,<6.0.0)
|
18
|
+
Requires-Dist: pyarrow (>=20.0.0,<21.0.0)
|
19
|
+
Requires-Dist: tabulate (>=0.9.0,<0.10.0)
|
20
|
+
Requires-Dist: tqdm (>=4.66.0,<5.0.0)
|
21
|
+
Description-Content-Type: text/markdown
|
22
|
+
|
23
|
+
# Micromegas
|
24
|
+
|
25
|
+
Python analytics client for https://github.com/madesroches/micromegas/
|
26
|
+
|
27
|
+
📖 **[Complete Python API Documentation](https://madesroches.github.io/micromegas/docs/query-guide/python-api/)** - Comprehensive guide with all methods, examples, and advanced patterns
|
28
|
+
|
29
|
+
## Example usage
|
30
|
+
|
31
|
+
Query the 2 most recent log entries from the flightsql service
|
32
|
+
|
33
|
+
```python
|
34
|
+
import datetime
|
35
|
+
import micromegas
|
36
|
+
|
37
|
+
# Connect to local server
|
38
|
+
client = micromegas.connect()
|
39
|
+
sql = """
|
40
|
+
SELECT time, process_id, level, target, msg
|
41
|
+
FROM log_entries
|
42
|
+
WHERE level <= 4
|
43
|
+
AND exe LIKE '%flight%'
|
44
|
+
ORDER BY time DESC
|
45
|
+
LIMIT 2
|
46
|
+
"""
|
47
|
+
|
48
|
+
now = datetime.datetime.now(datetime.timezone.utc)
|
49
|
+
begin = now - datetime.timedelta(minutes=2)
|
50
|
+
end = now
|
51
|
+
df = client.query(sql, begin, end)
|
52
|
+
print(df)
|
53
|
+
```
|
54
|
+
|
55
|
+
| | time | process_id | level | target | msg |
|
56
|
+
|---:|:------------------------------------|:-------------------------------------|--------:|:---------------------------------------|:--------------------------------------------|
|
57
|
+
| 0 | 2024-10-03 18:17:56.087543714+00:00 | 1db06afc-1c88-47d1-81b3-f398c5f93616 | 4 | acme_telemetry::trace_middleware | response status=200 OK uri=/analytics/query |
|
58
|
+
| 1 | 2024-10-03 18:17:53.924037729+00:00 | 1db06afc-1c88-47d1-81b3-f398c5f93616 | 4 | micromegas_analytics::lakehouse::query | query sql= |
|
59
|
+
| | | | | | SELECT time, process_id, level, target, msg |
|
60
|
+
| | | | | | FROM log_entries |
|
61
|
+
| | | | | | WHERE level <= 4 |
|
62
|
+
| | | | | | AND exe LIKE '%analytics%' |
|
63
|
+
| | | | | | ORDER BY time DESC |
|
64
|
+
| | | | | | LIMIT 2 |
|
65
|
+
|
66
|
+
|
67
|
+
Query the 10 slowest top level spans in a trace within a specified time window
|
68
|
+
|
69
|
+
```python
|
70
|
+
import datetime
|
71
|
+
import micromegas
|
72
|
+
|
73
|
+
client = micromegas.connect()
|
74
|
+
|
75
|
+
# First find a stream ID
|
76
|
+
end = datetime.datetime.now(datetime.timezone.utc)
|
77
|
+
begin = end - datetime.timedelta(hours=1)
|
78
|
+
streams = client.query_streams(begin, end, limit=1)
|
79
|
+
|
80
|
+
if not streams.empty:
|
81
|
+
stream_id = streams['stream_id'].iloc[0]
|
82
|
+
|
83
|
+
sql = """
|
84
|
+
SELECT begin, end, duration, name
|
85
|
+
FROM view_instance('thread_spans', '{}')
|
86
|
+
WHERE depth=1
|
87
|
+
ORDER BY duration DESC
|
88
|
+
LIMIT 10
|
89
|
+
""".format(stream_id)
|
90
|
+
|
91
|
+
spans = client.query(sql, begin, end)
|
92
|
+
print(spans)
|
93
|
+
```
|
94
|
+
|
95
|
+
| | begin | end | duration | name |
|
96
|
+
|---:|:------------------------------------|:------------------------------------|-----------:|:------------------|
|
97
|
+
| 0 | 2024-10-03 18:00:59.308952900+00:00 | 2024-10-03 18:00:59.371890+00:00 | 62937100 | FEngineLoop::Tick |
|
98
|
+
| 1 | 2024-10-03 18:00:58.752476800+00:00 | 2024-10-03 18:00:58.784389+00:00 | 31912200 | FEngineLoop::Tick |
|
99
|
+
| 2 | 2024-10-03 18:00:58.701507300+00:00 | 2024-10-03 18:00:58.731479500+00:00 | 29972200 | FEngineLoop::Tick |
|
100
|
+
| 3 | 2024-10-03 18:00:59.766343100+00:00 | 2024-10-03 18:00:59.792513700+00:00 | 26170600 | FEngineLoop::Tick |
|
101
|
+
| 4 | 2024-10-03 18:00:59.282902100+00:00 | 2024-10-03 18:00:59.308952500+00:00 | 26050400 | FEngineLoop::Tick |
|
102
|
+
| 5 | 2024-10-03 18:00:59.816034500+00:00 | 2024-10-03 18:00:59.841376900+00:00 | 25342400 | FEngineLoop::Tick |
|
103
|
+
| 6 | 2024-10-03 18:00:58.897813100+00:00 | 2024-10-03 18:00:58.922769700+00:00 | 24956600 | FEngineLoop::Tick |
|
104
|
+
| 7 | 2024-10-03 18:00:59.860637+00:00 | 2024-10-03 18:00:59.885523700+00:00 | 24886700 | FEngineLoop::Tick |
|
105
|
+
| 8 | 2024-10-03 18:00:58.630051300+00:00 | 2024-10-03 18:00:58.654871500+00:00 | 24820200 | FEngineLoop::Tick |
|
106
|
+
| 9 | 2024-10-03 18:00:57.952279800+00:00 | 2024-10-03 18:00:57.977024+00:00 | 24744200 | FEngineLoop::Tick |
|
107
|
+
|
108
|
+
## Quick Start
|
109
|
+
|
110
|
+
For a complete getting started guide, see the [Python API Documentation](https://madesroches.github.io/micromegas/docs/query-guide/python-api/).
|
111
|
+
|
112
|
+
## Schema Reference
|
113
|
+
|
114
|
+
For complete schema information including all available tables, columns, and data types, see the [Schema Reference](https://madesroches.github.io/micromegas/docs/query-guide/schema-reference/).
|
115
|
+
|
116
|
+
## SQL Reference
|
117
|
+
|
118
|
+
The Micromegas analytics service is built on Apache DataFusion. For SQL syntax and functions, see the [Apache DataFusion SQL Reference](https://datafusion.apache.org/user-guide/sql/index.html).
|
119
|
+
|
120
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
micromegas/__init__.py,sha256=oh0BAfNUVpHtFgufYWxvPwRfnqBTXY_nTPrNW1cwn-s,225
|
2
|
+
micromegas/flightsql/FlightSql_pb2.py,sha256=3L_CtRVjjNppQE5gfXKF2AxgST7_kDc6dQEnA7fr_9A,28725
|
3
|
+
micromegas/flightsql/__init__.py,sha256=So1GnY60k8QQPDOqocXbvr5KxWWn4KqJrXr2Q8zYOow,75
|
4
|
+
micromegas/flightsql/client.py,sha256=SET-NVGzUkF9jmB72-sMH5cwr0B0HBlTBqi-ifPLhig,28590
|
5
|
+
micromegas/flightsql/time.py,sha256=k2jYOT3Vab7l6A8hxBmwZP69olKjELNw9xBjALYde0I,583
|
6
|
+
micromegas/perfetto.py,sha256=-IwcZ3PB4Dm6odHYW2w2ZUzxr9gtE9SCPHxzA3I7csg,3576
|
7
|
+
micromegas/time.py,sha256=h4xv180XQh7z7LIYGmHjIp5vqC1tNw87fFE8kbeDixg,4358
|
8
|
+
micromegas-0.12.0.dist-info/METADATA,sha256=LhnS-XplCTAxcGDpQv3PI_S3drN8EW-ojwf7hk7A5mM,6055
|
9
|
+
micromegas-0.12.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
10
|
+
micromegas-0.12.0.dist-info/RECORD,,
|
micromegas/thirdparty/perfetto/protos/perfetto/common/android_energy_consumer_descriptor_pb2.py
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
3
|
-
# NO CHECKED-IN PROTOBUF GENCODE
|
4
|
-
# source: protos/perfetto/common/android_energy_consumer_descriptor.proto
|
5
|
-
# Protobuf Python Version: 5.27.1
|
6
|
-
"""Generated protocol buffer code."""
|
7
|
-
from google.protobuf import descriptor as _descriptor
|
8
|
-
from google.protobuf import descriptor_pool as _descriptor_pool
|
9
|
-
from google.protobuf import runtime_version as _runtime_version
|
10
|
-
from google.protobuf import symbol_database as _symbol_database
|
11
|
-
from google.protobuf.internal import builder as _builder
|
12
|
-
_runtime_version.ValidateProtobufRuntimeVersion(
|
13
|
-
_runtime_version.Domain.PUBLIC,
|
14
|
-
5,
|
15
|
-
27,
|
16
|
-
1,
|
17
|
-
'',
|
18
|
-
'protos/perfetto/common/android_energy_consumer_descriptor.proto'
|
19
|
-
)
|
20
|
-
# @@protoc_insertion_point(imports)
|
21
|
-
|
22
|
-
_sym_db = _symbol_database.Default()
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n?protos/perfetto/common/android_energy_consumer_descriptor.proto\x12\x0fperfetto.protos\"`\n\x15\x41ndroidEnergyConsumer\x12\x1a\n\x12\x65nergy_consumer_id\x18\x01 \x01(\x05\x12\x0f\n\x07ordinal\x18\x02 \x01(\x05\x12\x0c\n\x04type\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\"c\n\x1f\x41ndroidEnergyConsumerDescriptor\x12@\n\x10\x65nergy_consumers\x18\x01 \x03(\x0b\x32&.perfetto.protos.AndroidEnergyConsumer')
|
28
|
-
|
29
|
-
_globals = globals()
|
30
|
-
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
31
|
-
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'protos.perfetto.common.android_energy_consumer_descriptor_pb2', _globals)
|
32
|
-
if not _descriptor._USE_C_DESCRIPTORS:
|
33
|
-
DESCRIPTOR._loaded_options = None
|
34
|
-
_globals['_ANDROIDENERGYCONSUMER']._serialized_start=84
|
35
|
-
_globals['_ANDROIDENERGYCONSUMER']._serialized_end=180
|
36
|
-
_globals['_ANDROIDENERGYCONSUMERDESCRIPTOR']._serialized_start=182
|
37
|
-
_globals['_ANDROIDENERGYCONSUMERDESCRIPTOR']._serialized_end=281
|
38
|
-
# @@protoc_insertion_point(module_scope)
|
@@ -1,38 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
3
|
-
# NO CHECKED-IN PROTOBUF GENCODE
|
4
|
-
# source: protos/perfetto/common/android_log_constants.proto
|
5
|
-
# Protobuf Python Version: 5.27.1
|
6
|
-
"""Generated protocol buffer code."""
|
7
|
-
from google.protobuf import descriptor as _descriptor
|
8
|
-
from google.protobuf import descriptor_pool as _descriptor_pool
|
9
|
-
from google.protobuf import runtime_version as _runtime_version
|
10
|
-
from google.protobuf import symbol_database as _symbol_database
|
11
|
-
from google.protobuf.internal import builder as _builder
|
12
|
-
_runtime_version.ValidateProtobufRuntimeVersion(
|
13
|
-
_runtime_version.Domain.PUBLIC,
|
14
|
-
5,
|
15
|
-
27,
|
16
|
-
1,
|
17
|
-
'',
|
18
|
-
'protos/perfetto/common/android_log_constants.proto'
|
19
|
-
)
|
20
|
-
# @@protoc_insertion_point(imports)
|
21
|
-
|
22
|
-
_sym_db = _symbol_database.Default()
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2protos/perfetto/common/android_log_constants.proto\x12\x0fperfetto.protos*\x8e\x01\n\x0c\x41ndroidLogId\x12\x0f\n\x0bLID_DEFAULT\x10\x00\x12\r\n\tLID_RADIO\x10\x01\x12\x0e\n\nLID_EVENTS\x10\x02\x12\x0e\n\nLID_SYSTEM\x10\x03\x12\r\n\tLID_CRASH\x10\x04\x12\r\n\tLID_STATS\x10\x05\x12\x10\n\x0cLID_SECURITY\x10\x06\x12\x0e\n\nLID_KERNEL\x10\x07*\x9b\x01\n\x12\x41ndroidLogPriority\x12\x14\n\x10PRIO_UNSPECIFIED\x10\x00\x12\x0f\n\x0bPRIO_UNUSED\x10\x01\x12\x10\n\x0cPRIO_VERBOSE\x10\x02\x12\x0e\n\nPRIO_DEBUG\x10\x03\x12\r\n\tPRIO_INFO\x10\x04\x12\r\n\tPRIO_WARN\x10\x05\x12\x0e\n\nPRIO_ERROR\x10\x06\x12\x0e\n\nPRIO_FATAL\x10\x07')
|
28
|
-
|
29
|
-
_globals = globals()
|
30
|
-
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
31
|
-
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'protos.perfetto.common.android_log_constants_pb2', _globals)
|
32
|
-
if not _descriptor._USE_C_DESCRIPTORS:
|
33
|
-
DESCRIPTOR._loaded_options = None
|
34
|
-
_globals['_ANDROIDLOGID']._serialized_start=72
|
35
|
-
_globals['_ANDROIDLOGID']._serialized_end=214
|
36
|
-
_globals['_ANDROIDLOGPRIORITY']._serialized_start=217
|
37
|
-
_globals['_ANDROIDLOGPRIORITY']._serialized_end=372
|
38
|
-
# @@protoc_insertion_point(module_scope)
|
@@ -1,36 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
3
|
-
# NO CHECKED-IN PROTOBUF GENCODE
|
4
|
-
# source: protos/perfetto/common/builtin_clock.proto
|
5
|
-
# Protobuf Python Version: 5.27.1
|
6
|
-
"""Generated protocol buffer code."""
|
7
|
-
from google.protobuf import descriptor as _descriptor
|
8
|
-
from google.protobuf import descriptor_pool as _descriptor_pool
|
9
|
-
from google.protobuf import runtime_version as _runtime_version
|
10
|
-
from google.protobuf import symbol_database as _symbol_database
|
11
|
-
from google.protobuf.internal import builder as _builder
|
12
|
-
_runtime_version.ValidateProtobufRuntimeVersion(
|
13
|
-
_runtime_version.Domain.PUBLIC,
|
14
|
-
5,
|
15
|
-
27,
|
16
|
-
1,
|
17
|
-
'',
|
18
|
-
'protos/perfetto/common/builtin_clock.proto'
|
19
|
-
)
|
20
|
-
# @@protoc_insertion_point(imports)
|
21
|
-
|
22
|
-
_sym_db = _symbol_database.Default()
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n*protos/perfetto/common/builtin_clock.proto\x12\x0fperfetto.protos*\xa3\x02\n\x0c\x42uiltinClock\x12\x19\n\x15\x42UILTIN_CLOCK_UNKNOWN\x10\x00\x12\x1a\n\x16\x42UILTIN_CLOCK_REALTIME\x10\x01\x12!\n\x1d\x42UILTIN_CLOCK_REALTIME_COARSE\x10\x02\x12\x1b\n\x17\x42UILTIN_CLOCK_MONOTONIC\x10\x03\x12\"\n\x1e\x42UILTIN_CLOCK_MONOTONIC_COARSE\x10\x04\x12\x1f\n\x1b\x42UILTIN_CLOCK_MONOTONIC_RAW\x10\x05\x12\x1a\n\x16\x42UILTIN_CLOCK_BOOTTIME\x10\x06\x12\x15\n\x11\x42UILTIN_CLOCK_TSC\x10\t\x12\x18\n\x14\x42UILTIN_CLOCK_MAX_ID\x10?\"\x04\x08\x07\x10\x07\"\x04\x08\x08\x10\x08')
|
28
|
-
|
29
|
-
_globals = globals()
|
30
|
-
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
31
|
-
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'protos.perfetto.common.builtin_clock_pb2', _globals)
|
32
|
-
if not _descriptor._USE_C_DESCRIPTORS:
|
33
|
-
DESCRIPTOR._loaded_options = None
|
34
|
-
_globals['_BUILTINCLOCK']._serialized_start=64
|
35
|
-
_globals['_BUILTINCLOCK']._serialized_end=355
|
36
|
-
# @@protoc_insertion_point(module_scope)
|