honeycomb-api 0.1.0__py3-none-any.whl → 0.5.3__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.
- honeycomb/__init__.py +9 -0
- honeycomb/_generated/api/auth/get_auth.py +2 -5
- honeycomb/_generated/api/auth/get_v2_auth.py +2 -5
- honeycomb/_generated/api/boards/create_board.py +6 -5
- honeycomb/_generated/api/boards/create_board_view.py +14 -9
- honeycomb/_generated/api/boards/delete_board.py +2 -5
- honeycomb/_generated/api/boards/delete_board_view.py +2 -5
- honeycomb/_generated/api/boards/get_board.py +2 -5
- honeycomb/_generated/api/boards/get_board_view.py +2 -5
- honeycomb/_generated/api/boards/list_board_views.py +10 -9
- honeycomb/_generated/api/boards/list_boards.py +2 -5
- honeycomb/_generated/api/boards/update_board.py +10 -5
- honeycomb/_generated/api/boards/update_board_view.py +2 -5
- honeycomb/_generated/api/burn_alerts/create_burn_alert.py +6 -8
- honeycomb/_generated/api/burn_alerts/delete_burn_alert.py +2 -5
- honeycomb/_generated/api/burn_alerts/get_burn_alert.py +2 -5
- honeycomb/_generated/api/burn_alerts/list_burn_alerts_by_slo.py +2 -5
- honeycomb/_generated/api/calculated_fields/create_calculated_field.py +2 -5
- honeycomb/_generated/api/calculated_fields/delete_calculated_field.py +2 -5
- honeycomb/_generated/api/calculated_fields/get_calculated_field.py +2 -5
- honeycomb/_generated/api/calculated_fields/list_calculated_fields.py +2 -8
- honeycomb/_generated/api/calculated_fields/update_calculated_field.py +2 -5
- honeycomb/_generated/api/columns/create_column.py +2 -5
- honeycomb/_generated/api/columns/delete_column.py +2 -5
- honeycomb/_generated/api/columns/get_column.py +2 -5
- honeycomb/_generated/api/columns/list_columns.py +2 -8
- honeycomb/_generated/api/columns/update_column.py +2 -5
- honeycomb/_generated/api/dataset_definitions/list_dataset_definitions.py +2 -5
- honeycomb/_generated/api/dataset_definitions/patch_dataset_definitions.py +2 -5
- honeycomb/_generated/api/datasets/create_dataset.py +2 -5
- honeycomb/_generated/api/datasets/delete_dataset.py +2 -5
- honeycomb/_generated/api/datasets/get_dataset.py +2 -5
- honeycomb/_generated/api/datasets/list_datasets.py +2 -5
- honeycomb/_generated/api/datasets/update_dataset.py +2 -5
- honeycomb/_generated/api/enhance/record_enhance_indexer_usage.py +4 -6
- honeycomb/_generated/api/environments/create_environment.py +2 -5
- honeycomb/_generated/api/environments/delete_environment.py +2 -5
- honeycomb/_generated/api/environments/get_environment.py +2 -5
- honeycomb/_generated/api/environments/list_environments.py +2 -7
- honeycomb/_generated/api/environments/update_environment.py +2 -5
- honeycomb/_generated/api/events/create_event.py +2 -7
- honeycomb/_generated/api/events/create_events.py +7 -11
- honeycomb/_generated/api/key_management/create_api_key.py +2 -5
- honeycomb/_generated/api/key_management/delete_api_key.py +2 -5
- honeycomb/_generated/api/key_management/get_api_key.py +2 -5
- honeycomb/_generated/api/key_management/list_api_keys.py +2 -7
- honeycomb/_generated/api/key_management/update_api_key.py +2 -5
- honeycomb/_generated/api/kinesis_events/create_kinesis_events.py +2 -5
- honeycomb/_generated/api/marker_settings/create_marker_setting.py +2 -5
- honeycomb/_generated/api/marker_settings/delete_marker_settings.py +2 -5
- honeycomb/_generated/api/marker_settings/list_marker_settings.py +2 -5
- honeycomb/_generated/api/marker_settings/update_marker_settings.py +2 -5
- honeycomb/_generated/api/markers/create_marker.py +2 -5
- honeycomb/_generated/api/markers/create_marker_v2.py +2 -5
- honeycomb/_generated/api/markers/delete_marker.py +2 -5
- honeycomb/_generated/api/markers/get_marker.py +2 -5
- honeycomb/_generated/api/markers/update_marker.py +2 -5
- honeycomb/_generated/api/markers/update_marker_v2.py +2 -5
- honeycomb/_generated/api/pipelines/get_pipeline_configuration.py +4 -8
- honeycomb/_generated/api/pipelines/record_pipeline_usage.py +4 -6
- honeycomb/_generated/api/pipelines/update_pipeline_configuration_rollout.py +6 -7
- honeycomb/_generated/api/queries/create_query.py +2 -5
- honeycomb/_generated/api/queries/get_query.py +2 -5
- honeycomb/_generated/api/query_annotations/create_query_annotation.py +2 -5
- honeycomb/_generated/api/query_annotations/delete_query_annotation.py +2 -5
- honeycomb/_generated/api/query_annotations/get_query_annotation.py +2 -5
- honeycomb/_generated/api/query_annotations/list_query_annotations.py +2 -7
- honeycomb/_generated/api/query_annotations/update_query_annotation.py +2 -5
- honeycomb/_generated/api/query_data/create_query_result.py +2 -5
- honeycomb/_generated/api/query_data/get_query_result.py +2 -5
- honeycomb/_generated/api/recipients/create_recipient.py +2 -6
- honeycomb/_generated/api/recipients/delete_recipient.py +2 -5
- honeycomb/_generated/api/recipients/get_recipient.py +2 -6
- honeycomb/_generated/api/recipients/list_recipients.py +2 -6
- honeycomb/_generated/api/recipients/update_recipient.py +2 -6
- honeycomb/_generated/api/reporting/get_slo_history.py +2 -5
- honeycomb/_generated/api/service_maps/create_map_dependency_request.py +6 -9
- honeycomb/_generated/api/service_maps/get_map_dependencies.py +2 -7
- honeycomb/_generated/api/sl_os/create_slo.py +2 -5
- honeycomb/_generated/api/sl_os/delete_slo.py +2 -5
- honeycomb/_generated/api/sl_os/get_slo.py +2 -8
- honeycomb/_generated/api/sl_os/list_slos.py +2 -5
- honeycomb/_generated/api/sl_os/update_slo.py +2 -5
- honeycomb/_generated/api/triggers/create_trigger.py +2 -6
- honeycomb/_generated/api/triggers/delete_trigger.py +2 -5
- honeycomb/_generated/api/triggers/get_trigger.py +2 -5
- honeycomb/_generated/api/triggers/list_triggers.py +2 -5
- honeycomb/_generated/api/triggers/list_triggers_with_recipient.py +2 -5
- honeycomb/_generated/api/triggers/update_trigger.py +2 -5
- honeycomb/_generated/client.py +2 -5
- honeycomb/_generated/models/__init__.py +195 -88
- honeycomb/_generated/models/api_key_create_request.py +6 -5
- honeycomb/_generated/models/api_key_create_request_data.py +15 -11
- honeycomb/_generated/models/api_key_create_request_data_relationships.py +2 -3
- honeycomb/_generated/models/api_key_create_request_data_type.py +1 -0
- honeycomb/_generated/models/api_key_list_response.py +2 -5
- honeycomb/_generated/models/api_key_object.py +14 -14
- honeycomb/_generated/models/api_key_object_links.py +2 -9
- honeycomb/_generated/models/api_key_object_relationships.py +5 -9
- honeycomb/_generated/models/api_key_object_type.py +1 -0
- honeycomb/_generated/models/api_key_response.py +2 -3
- honeycomb/_generated/models/api_key_update_request.py +15 -17
- honeycomb/_generated/models/auth.py +2 -5
- honeycomb/_generated/models/auth_api_key_access.py +2 -9
- honeycomb/_generated/models/auth_environment.py +2 -9
- honeycomb/_generated/models/auth_team.py +2 -9
- honeycomb/_generated/models/auth_type.py +1 -0
- honeycomb/_generated/models/auth_v2_response.py +5 -8
- honeycomb/_generated/models/auth_v2_response_data.py +14 -11
- honeycomb/_generated/models/auth_v2_response_data_attributes.py +10 -9
- honeycomb/_generated/models/auth_v2_response_data_attributes_key_type.py +1 -0
- honeycomb/_generated/models/auth_v2_response_data_attributes_timestamps.py +4 -12
- honeycomb/_generated/models/auth_v2_response_data_relationships.py +1 -7
- honeycomb/_generated/models/auth_v2_response_data_type.py +1 -0
- honeycomb/_generated/models/base_trigger.py +21 -18
- honeycomb/_generated/models/base_trigger_alert_type.py +1 -0
- honeycomb/_generated/models/base_trigger_baseline_details_type_0.py +5 -9
- honeycomb/_generated/models/base_trigger_baseline_details_type_0_offset_minutes.py +1 -0
- honeycomb/_generated/models/base_trigger_baseline_details_type_0_type.py +1 -0
- honeycomb/_generated/models/base_trigger_evaluation_schedule.py +8 -6
- honeycomb/_generated/models/base_trigger_evaluation_schedule_type.py +1 -0
- honeycomb/_generated/models/base_trigger_evaluation_schedule_window.py +4 -9
- honeycomb/_generated/models/base_trigger_evaluation_schedule_window_days_of_week_item.py +1 -0
- honeycomb/_generated/models/base_trigger_threshold.py +2 -9
- honeycomb/_generated/models/base_trigger_threshold_op.py +1 -0
- honeycomb/_generated/models/batch_event.py +2 -5
- honeycomb/_generated/models/board.py +15 -17
- honeycomb/_generated/models/board_layout_generation.py +1 -0
- honeycomb/_generated/models/board_links.py +2 -9
- honeycomb/_generated/models/board_panel_position.py +2 -9
- honeycomb/_generated/models/board_query_visualization_settings.py +8 -8
- honeycomb/_generated/models/board_query_visualization_settings_charts_item.py +4 -10
- honeycomb/_generated/models/board_query_visualization_settings_charts_item_chart_type.py +1 -0
- honeycomb/_generated/models/board_type.py +1 -0
- honeycomb/_generated/models/board_view_filter.py +2 -9
- honeycomb/_generated/models/board_view_filter_operation.py +1 -0
- honeycomb/_generated/models/board_view_response.py +2 -5
- honeycomb/_generated/models/budget_rate.py +4 -12
- honeycomb/_generated/models/budget_rate_alert_type.py +1 -0
- honeycomb/_generated/models/burn_alert_shared_params.py +4 -12
- honeycomb/_generated/models/calculated_field.py +2 -9
- honeycomb/_generated/models/configuration_key_attributes.py +16 -12
- honeycomb/_generated/models/configuration_key_attributes_key_type.py +1 -0
- honeycomb/_generated/models/configuration_key_attributes_permissions.py +172 -0
- honeycomb/_generated/models/configuration_key_attributes_timestamps.py +4 -12
- honeycomb/_generated/models/configuration_key_request.py +101 -0
- honeycomb/_generated/models/configuration_key_request_attributes.py +107 -0
- honeycomb/_generated/models/configuration_key_request_attributes_permissions.py +168 -0
- honeycomb/_generated/models/configuration_key_request_type.py +8 -0
- honeycomb/_generated/models/create_board_view_request.py +2 -3
- honeycomb/_generated/models/create_budget_rate_burn_alert_request.py +10 -10
- honeycomb/_generated/models/create_budget_rate_burn_alert_request_slo.py +1 -7
- honeycomb/_generated/models/create_column.py +2 -9
- honeycomb/_generated/models/create_column_type.py +1 -0
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request.py +8 -6
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data.py +10 -7
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes.py +8 -8
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data.py +8 -6
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item.py +8 -6
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item.py +8 -6
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item.py +8 -8
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum.py +10 -7
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_aggregation_temporality.py +1 -0
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item.py +8 -6
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item_attributes_item.py +8 -6
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item_attributes_item_value.py +2 -9
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_type.py +1 -0
- honeycomb/_generated/models/create_environment_request.py +8 -6
- honeycomb/_generated/models/create_environment_request_data.py +10 -7
- honeycomb/_generated/models/create_environment_request_data_attributes.py +2 -9
- honeycomb/_generated/models/create_environment_request_data_type.py +1 -0
- honeycomb/_generated/models/create_events_content_encoding.py +1 -0
- honeycomb/_generated/models/create_events_response_200_item.py +2 -9
- honeycomb/_generated/models/create_exhaustion_time_burn_alert_request.py +10 -10
- honeycomb/_generated/models/create_exhaustion_time_burn_alert_request_slo.py +1 -7
- honeycomb/_generated/models/create_map_dependencies_request.py +2 -5
- honeycomb/_generated/models/create_map_dependencies_response.py +4 -10
- honeycomb/_generated/models/create_map_dependencies_response_status.py +1 -0
- honeycomb/_generated/models/create_pipeline_health_record_request.py +8 -6
- honeycomb/_generated/models/create_pipeline_health_record_request_data.py +10 -7
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes.py +8 -8
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data.py +8 -6
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item.py +8 -6
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item.py +8 -6
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item.py +8 -8
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum.py +10 -7
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_aggregation_temporality.py +1 -0
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item.py +8 -6
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item_attributes_item.py +8 -6
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item_attributes_item_value.py +2 -9
- honeycomb/_generated/models/create_pipeline_health_record_request_data_type.py +1 -0
- honeycomb/_generated/models/create_query_result_request.py +2 -9
- honeycomb/_generated/models/dataset.py +2 -6
- honeycomb/_generated/models/dataset_creation_payload.py +2 -9
- honeycomb/_generated/models/dataset_definition_type_1.py +4 -10
- honeycomb/_generated/models/dataset_definition_type_1_column_type.py +1 -0
- honeycomb/_generated/models/dataset_definitions.py +2 -6
- honeycomb/_generated/models/dataset_relationship.py +2 -3
- honeycomb/_generated/models/dataset_relationship_data.py +2 -8
- honeycomb/_generated/models/dataset_relationship_data_type.py +1 -0
- honeycomb/_generated/models/dataset_settings.py +2 -9
- honeycomb/_generated/models/dataset_update_payload.py +8 -8
- honeycomb/_generated/models/dataset_update_payload_settings.py +2 -9
- honeycomb/_generated/models/detailed_error.py +2 -9
- honeycomb/_generated/models/email_recipient.py +4 -7
- honeycomb/_generated/models/email_recipient_details.py +1 -7
- honeycomb/_generated/models/email_recipient_type.py +1 -0
- honeycomb/_generated/models/environment.py +6 -7
- honeycomb/_generated/models/environment_attributes.py +11 -9
- honeycomb/_generated/models/environment_attributes_color_type_1.py +1 -0
- honeycomb/_generated/models/environment_attributes_settings.py +1 -7
- honeycomb/_generated/models/environment_color.py +1 -0
- honeycomb/_generated/models/environment_links.py +1 -7
- honeycomb/_generated/models/environment_list_response.py +2 -5
- honeycomb/_generated/models/environment_relationship.py +8 -6
- honeycomb/_generated/models/environment_relationship_data.py +3 -8
- honeycomb/_generated/models/environment_relationship_data_type.py +1 -0
- honeycomb/_generated/models/environment_response.py +2 -3
- honeycomb/_generated/models/environment_type.py +1 -0
- honeycomb/_generated/models/error.py +2 -9
- honeycomb/_generated/models/event.py +2 -8
- honeycomb/_generated/models/exhaustion_time.py +4 -12
- honeycomb/_generated/models/exhaustion_time_alert_type.py +1 -0
- honeycomb/_generated/models/exhaustion_time_burn_alert_list_response.py +10 -10
- honeycomb/_generated/models/exhaustion_time_burn_alert_list_response_slo.py +2 -9
- honeycomb/_generated/models/filter_op.py +1 -0
- honeycomb/_generated/models/get_map_dependencies_response.py +7 -10
- honeycomb/_generated/models/get_map_dependencies_response_status.py +1 -0
- honeycomb/_generated/models/having_calculate_op.py +1 -0
- honeycomb/_generated/models/having_op.py +1 -0
- honeycomb/_generated/models/included_resource.py +6 -7
- honeycomb/_generated/models/included_resource_attributes.py +1 -7
- honeycomb/_generated/models/ingest_key_attributes.py +14 -11
- honeycomb/_generated/models/ingest_key_attributes_key_type.py +1 -0
- honeycomb/_generated/models/ingest_key_attributes_permissions.py +2 -9
- honeycomb/_generated/models/ingest_key_attributes_timestamps.py +4 -12
- honeycomb/_generated/models/ingest_key_request.py +100 -0
- honeycomb/_generated/models/ingest_key_request_attributes.py +75 -0
- honeycomb/_generated/models/ingest_key_request_type.py +8 -0
- honeycomb/_generated/models/ingest_key_type.py +2 -9
- honeycomb/_generated/models/ingest_key_type_key_type.py +1 -0
- honeycomb/_generated/models/jsonapi_error_source.py +2 -9
- honeycomb/_generated/models/kinesis_event.py +2 -5
- honeycomb/_generated/models/kinesis_event_record.py +2 -9
- honeycomb/_generated/models/kinesis_response.py +2 -9
- honeycomb/_generated/models/list_api_keys_filtertype.py +1 -0
- honeycomb/_generated/models/map_dependency.py +2 -5
- honeycomb/_generated/models/map_node.py +2 -9
- honeycomb/_generated/models/map_node_type.py +1 -0
- honeycomb/_generated/models/marker.py +2 -9
- honeycomb/_generated/models/marker_create_request.py +2 -3
- honeycomb/_generated/models/marker_create_request_data.py +16 -10
- honeycomb/_generated/models/marker_create_request_data_attributes.py +2 -9
- honeycomb/_generated/models/marker_create_request_data_relationships.py +2 -3
- honeycomb/_generated/models/marker_create_request_data_type.py +1 -0
- honeycomb/_generated/models/marker_object.py +7 -8
- honeycomb/_generated/models/marker_object_attributes.py +8 -8
- honeycomb/_generated/models/marker_object_attributes_timestamps.py +4 -12
- honeycomb/_generated/models/marker_object_links.py +2 -9
- honeycomb/_generated/models/marker_object_relationships.py +8 -8
- honeycomb/_generated/models/marker_object_relationships_dataset.py +8 -9
- honeycomb/_generated/models/marker_object_relationships_dataset_data_type_0.py +4 -10
- honeycomb/_generated/models/marker_object_relationships_dataset_data_type_0_type.py +1 -0
- honeycomb/_generated/models/marker_object_type.py +1 -0
- honeycomb/_generated/models/marker_response.py +2 -3
- honeycomb/_generated/models/marker_setting.py +2 -10
- honeycomb/_generated/models/marker_update_request.py +2 -3
- honeycomb/_generated/models/marker_update_request_data.py +16 -10
- honeycomb/_generated/models/marker_update_request_data_attributes.py +2 -9
- honeycomb/_generated/models/marker_update_request_data_relationships.py +2 -3
- honeycomb/_generated/models/marker_update_request_data_type.py +1 -0
- honeycomb/_generated/models/ms_teams_recipient.py +4 -7
- honeycomb/_generated/models/ms_teams_recipient_details.py +1 -7
- honeycomb/_generated/models/ms_teams_recipient_type.py +1 -0
- honeycomb/_generated/models/ms_teams_workflow_recipient.py +12 -11
- honeycomb/_generated/models/ms_teams_workflow_recipient_details.py +1 -7
- honeycomb/_generated/models/ms_teams_workflow_recipient_type.py +1 -0
- honeycomb/_generated/models/notification_recipient.py +8 -8
- honeycomb/_generated/models/notification_recipient_details.py +10 -9
- honeycomb/_generated/models/notification_recipient_details_pagerduty_severity.py +1 -0
- honeycomb/_generated/models/notification_recipient_details_variables_item.py +2 -9
- honeycomb/_generated/models/pager_duty_recipient.py +8 -9
- honeycomb/_generated/models/pager_duty_recipient_details.py +1 -7
- honeycomb/_generated/models/pager_duty_recipient_type.py +1 -0
- honeycomb/_generated/models/pagination_links.py +2 -8
- honeycomb/_generated/models/payload_template.py +2 -9
- honeycomb/_generated/models/pipeline_configuration_response.py +16 -10
- honeycomb/_generated/models/pipeline_configuration_response_attributes.py +8 -8
- honeycomb/_generated/models/pipeline_configuration_response_attributes_configs_item.py +1 -7
- honeycomb/_generated/models/pipeline_configuration_response_links.py +2 -9
- honeycomb/_generated/models/pipeline_configuration_response_type.py +1 -0
- honeycomb/_generated/models/pipeline_configuration_rollout.py +16 -10
- honeycomb/_generated/models/pipeline_configuration_rollout_attributes.py +3 -8
- honeycomb/_generated/models/pipeline_configuration_rollout_attributes_status.py +1 -0
- honeycomb/_generated/models/pipeline_configuration_rollout_links.py +2 -9
- honeycomb/_generated/models/pipeline_configuration_rollout_type.py +1 -0
- honeycomb/_generated/models/preset_filter.py +1 -7
- honeycomb/_generated/models/query.py +11 -11
- honeycomb/_generated/models/query_annotation.py +4 -12
- honeycomb/_generated/models/query_annotation_source.py +1 -0
- honeycomb/_generated/models/query_calculated_fields_item.py +1 -7
- honeycomb/_generated/models/query_calculations_item.py +2 -10
- honeycomb/_generated/models/query_compare_time_offset_seconds.py +1 -0
- honeycomb/_generated/models/query_filter_combination.py +1 -0
- honeycomb/_generated/models/query_filters_item.py +2 -11
- honeycomb/_generated/models/query_havings_item.py +2 -10
- honeycomb/_generated/models/query_op.py +1 -0
- honeycomb/_generated/models/query_orders_item.py +2 -9
- honeycomb/_generated/models/query_orders_item_order.py +1 -0
- honeycomb/_generated/models/query_panel.py +2 -6
- honeycomb/_generated/models/query_panel_query_panel.py +10 -9
- honeycomb/_generated/models/query_panel_query_panel_query_style.py +1 -0
- honeycomb/_generated/models/query_result.py +2 -5
- honeycomb/_generated/models/query_result_details.py +5 -8
- honeycomb/_generated/models/query_result_details_data.py +5 -8
- honeycomb/_generated/models/query_result_details_links.py +2 -9
- honeycomb/_generated/models/query_result_links.py +2 -9
- honeycomb/_generated/models/query_results_data.py +2 -5
- honeycomb/_generated/models/query_results_data_data.py +2 -8
- honeycomb/_generated/models/query_results_series.py +2 -5
- honeycomb/_generated/models/recipient_properties.py +4 -12
- honeycomb/_generated/models/recipient_type.py +1 -0
- honeycomb/_generated/models/slack_recipient.py +4 -7
- honeycomb/_generated/models/slack_recipient_details.py +1 -7
- honeycomb/_generated/models/slack_recipient_type.py +1 -0
- honeycomb/_generated/models/slo.py +4 -8
- honeycomb/_generated/models/slo_create.py +4 -8
- honeycomb/_generated/models/slo_create_sli.py +1 -7
- honeycomb/_generated/models/slo_detailed_response.py +4 -8
- honeycomb/_generated/models/slo_detailed_response_status.py +1 -0
- honeycomb/_generated/models/slo_history.py +2 -9
- honeycomb/_generated/models/slo_history_request.py +2 -8
- honeycomb/_generated/models/slo_history_response.py +2 -3
- honeycomb/_generated/models/slo_panel.py +2 -6
- honeycomb/_generated/models/slo_panel_slo_panel.py +2 -9
- honeycomb/_generated/models/slo_sli.py +1 -7
- honeycomb/_generated/models/tag.py +1 -7
- honeycomb/_generated/models/team_relationship.py +2 -3
- honeycomb/_generated/models/team_relationship_team.py +6 -5
- honeycomb/_generated/models/team_relationship_team_data.py +3 -8
- honeycomb/_generated/models/team_relationship_team_data_type.py +1 -0
- honeycomb/_generated/models/template_variable_definition.py +2 -9
- honeycomb/_generated/models/text_panel.py +2 -6
- honeycomb/_generated/models/text_panel_text_panel.py +1 -7
- honeycomb/_generated/models/trigger_response.py +27 -21
- honeycomb/_generated/models/trigger_with_inline_query.py +27 -21
- honeycomb/_generated/models/trigger_with_inline_query_query.py +1 -7
- honeycomb/_generated/models/trigger_with_query_reference.py +21 -18
- honeycomb/_generated/models/update_board_view_request.py +2 -5
- honeycomb/_generated/models/update_environment_request.py +8 -6
- honeycomb/_generated/models/update_environment_request_data.py +10 -7
- honeycomb/_generated/models/update_environment_request_data_attributes.py +8 -8
- honeycomb/_generated/models/update_environment_request_data_attributes_settings.py +2 -9
- honeycomb/_generated/models/update_environment_request_data_type.py +1 -0
- honeycomb/_generated/models/update_exhaustion_time_burn_alert_request.py +4 -7
- honeycomb/_generated/models/update_pipeline_configuration_rollout.py +10 -7
- honeycomb/_generated/models/update_pipeline_configuration_rollout_attributes.py +3 -8
- honeycomb/_generated/models/update_pipeline_configuration_rollout_attributes_status.py +1 -0
- honeycomb/_generated/models/update_pipeline_configuration_rollout_request.py +8 -6
- honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data.py +10 -7
- honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_attributes.py +3 -8
- honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_attributes_status.py +1 -0
- honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_type.py +1 -0
- honeycomb/_generated/models/update_pipeline_configuration_rollout_response.py +8 -6
- honeycomb/_generated/models/update_pipeline_configuration_rollout_type.py +1 -0
- honeycomb/_generated/models/user_relationship.py +2 -3
- honeycomb/_generated/models/user_relationship_data.py +2 -8
- honeycomb/_generated/models/user_relationship_data_type.py +1 -0
- honeycomb/_generated/models/validation_error.py +8 -8
- honeycomb/_generated/models/validation_error_type_detail_item.py +4 -10
- honeycomb/_generated/models/validation_error_type_detail_item_code.py +1 -0
- honeycomb/_generated/models/webhook_header.py +2 -9
- honeycomb/_generated/models/webhook_recipient.py +4 -7
- honeycomb/_generated/models/webhook_recipient_details.py +8 -8
- honeycomb/_generated/models/webhook_recipient_details_webhook_payloads.py +12 -10
- honeycomb/_generated/models/webhook_recipient_details_webhook_payloads_payload_templates.py +2 -5
- honeycomb/_generated/models/webhook_recipient_type.py +1 -0
- honeycomb/_generated/types.py +1 -1
- honeycomb/cli/__init__.py +85 -0
- honeycomb/cli/api_keys.py +205 -0
- honeycomb/cli/auth.py +70 -0
- honeycomb/cli/boards.py +203 -0
- honeycomb/cli/columns.py +256 -0
- honeycomb/cli/config.py +259 -0
- honeycomb/cli/datasets.py +186 -0
- honeycomb/cli/derived_columns.py +222 -0
- honeycomb/cli/environments.py +240 -0
- honeycomb/cli/formatters.py +242 -0
- honeycomb/cli/markers.py +151 -0
- honeycomb/cli/queries.py +380 -0
- honeycomb/cli/recipients.py +211 -0
- honeycomb/cli/slos.py +338 -0
- honeycomb/cli/triggers.py +271 -0
- honeycomb/client.py +13 -7
- honeycomb/models/__init__.py +18 -3
- honeycomb/models/api_keys.py +49 -5
- honeycomb/models/auth.py +71 -0
- honeycomb/models/board_builder.py +97 -25
- honeycomb/models/boards.py +95 -1
- honeycomb/models/datasets.py +42 -0
- honeycomb/models/queries.py +21 -0
- honeycomb/models/query_builder.py +119 -59
- honeycomb/models/recipient_builder.py +51 -4
- honeycomb/models/slo_builder.py +24 -19
- honeycomb/models/slos.py +50 -3
- honeycomb/models/tool_inputs.py +630 -0
- honeycomb/models/triggers.py +39 -9
- honeycomb/resources/__init__.py +2 -0
- honeycomb/resources/api_keys.py +66 -29
- honeycomb/resources/auth.py +97 -0
- honeycomb/resources/boards.py +272 -18
- honeycomb/resources/datasets.py +49 -11
- honeycomb/resources/environments.py +54 -31
- honeycomb/resources/slos.py +87 -61
- honeycomb/tools/__main__.py +40 -4
- honeycomb/tools/builders.py +235 -150
- honeycomb/tools/descriptions.py +175 -7
- honeycomb/tools/executor.py +212 -25
- honeycomb/tools/generator.py +61 -2264
- honeycomb/tools/resources/__init__.py +42 -0
- honeycomb/tools/resources/api_keys.py +249 -0
- honeycomb/tools/resources/auth.py +98 -0
- honeycomb/tools/resources/boards.py +313 -0
- honeycomb/tools/resources/burn_alerts.py +278 -0
- honeycomb/tools/resources/columns.py +257 -0
- honeycomb/tools/resources/datasets.py +215 -0
- honeycomb/tools/resources/derived_columns.py +311 -0
- honeycomb/tools/resources/environments.py +211 -0
- honeycomb/tools/resources/events.py +158 -0
- honeycomb/tools/resources/marker_settings.py +216 -0
- honeycomb/tools/resources/markers.py +197 -0
- honeycomb/tools/resources/queries.py +220 -0
- honeycomb/tools/resources/recipients.py +297 -0
- honeycomb/tools/resources/service_map.py +110 -0
- honeycomb/tools/resources/slos.py +276 -0
- honeycomb/tools/resources/triggers.py +328 -0
- honeycomb/tools/schemas.py +81 -0
- {honeycomb_api-0.1.0.dist-info → honeycomb_api-0.5.3.dist-info}/METADATA +33 -8
- honeycomb_api-0.5.3.dist-info/RECORD +497 -0
- honeycomb_api-0.5.3.dist-info/entry_points.txt +5 -0
- honeycomb_api-0.1.0.dist-info/RECORD +0 -453
- {honeycomb_api-0.1.0.dist-info → honeycomb_api-0.5.3.dist-info}/WHEEL +0 -0
- {honeycomb_api-0.1.0.dist-info → honeycomb_api-0.5.3.dist-info}/licenses/LICENSE +0 -0
honeycomb/tools/builders.py
CHANGED
|
@@ -13,6 +13,96 @@ from honeycomb.models import (
|
|
|
13
13
|
SLOBuilder,
|
|
14
14
|
TriggerBuilder,
|
|
15
15
|
)
|
|
16
|
+
from honeycomb.models.tool_inputs import (
|
|
17
|
+
BoardToolInput,
|
|
18
|
+
PositionInput,
|
|
19
|
+
SLOToolInput,
|
|
20
|
+
VisualizationSettingsInput,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _build_visualization_dict(
|
|
25
|
+
visualization: VisualizationSettingsInput | None,
|
|
26
|
+
chart_type: str | None,
|
|
27
|
+
) -> dict[str, Any] | None:
|
|
28
|
+
"""Build visualization settings dict from typed model and/or chart_type shorthand.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
visualization: Typed VisualizationSettingsInput model or None
|
|
32
|
+
chart_type: Shorthand chart_type (e.g., "line", "stacked") or None
|
|
33
|
+
|
|
34
|
+
Returns:
|
|
35
|
+
Dict for API or None if no settings provided
|
|
36
|
+
|
|
37
|
+
Priority:
|
|
38
|
+
- If visualization is set, use it (converted to dict)
|
|
39
|
+
- If chart_type is set but visualization is None, create minimal dict
|
|
40
|
+
- If both are set, chart_type is ignored (visualization takes precedence)
|
|
41
|
+
"""
|
|
42
|
+
if visualization is not None:
|
|
43
|
+
# Convert typed model to dict, excluding None values
|
|
44
|
+
result: dict[str, Any] = {}
|
|
45
|
+
if visualization.hide_compare:
|
|
46
|
+
result["hide_compare"] = True
|
|
47
|
+
if visualization.hide_hovers:
|
|
48
|
+
result["hide_hovers"] = True
|
|
49
|
+
if visualization.hide_markers:
|
|
50
|
+
result["hide_markers"] = True
|
|
51
|
+
if visualization.utc_xaxis:
|
|
52
|
+
result["utc_xaxis"] = True
|
|
53
|
+
if visualization.overlaid_charts:
|
|
54
|
+
result["overlaid_charts"] = True
|
|
55
|
+
if visualization.charts:
|
|
56
|
+
result["charts"] = [
|
|
57
|
+
{
|
|
58
|
+
k: v
|
|
59
|
+
for k, v in {
|
|
60
|
+
"chart_index": chart.chart_index,
|
|
61
|
+
"chart_type": chart.chart_type,
|
|
62
|
+
"log_scale": chart.log_scale if chart.log_scale else None,
|
|
63
|
+
"omit_missing_values": (
|
|
64
|
+
chart.omit_missing_values if chart.omit_missing_values else None
|
|
65
|
+
),
|
|
66
|
+
}.items()
|
|
67
|
+
if v is not None
|
|
68
|
+
}
|
|
69
|
+
for chart in visualization.charts
|
|
70
|
+
]
|
|
71
|
+
return result if result else None
|
|
72
|
+
|
|
73
|
+
if chart_type is not None:
|
|
74
|
+
# Shorthand: create minimal visualization with just chart_type
|
|
75
|
+
return {"charts": [{"chart_type": chart_type}]}
|
|
76
|
+
|
|
77
|
+
return None
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def _to_position_input(position: dict[str, Any] | list | tuple | None) -> PositionInput | None:
|
|
81
|
+
"""Convert position dict/tuple/list to PositionInput.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
position: Position as dict (x_coordinate, y_coordinate, width, height),
|
|
85
|
+
tuple/list (x, y, w, h), or None
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
PositionInput or None
|
|
89
|
+
"""
|
|
90
|
+
if position is None:
|
|
91
|
+
return None
|
|
92
|
+
if isinstance(position, dict):
|
|
93
|
+
return PositionInput(
|
|
94
|
+
x_coordinate=position["x_coordinate"],
|
|
95
|
+
y_coordinate=position["y_coordinate"],
|
|
96
|
+
width=position["width"],
|
|
97
|
+
height=position["height"],
|
|
98
|
+
)
|
|
99
|
+
# tuple or list (x, y, w, h)
|
|
100
|
+
return PositionInput(
|
|
101
|
+
x_coordinate=position[0],
|
|
102
|
+
y_coordinate=position[1],
|
|
103
|
+
width=position[2],
|
|
104
|
+
height=position[3],
|
|
105
|
+
)
|
|
16
106
|
|
|
17
107
|
|
|
18
108
|
def _build_trigger(data: dict[str, Any]) -> TriggerBuilder:
|
|
@@ -231,7 +321,7 @@ def _build_trigger(data: dict[str, Any]) -> TriggerBuilder:
|
|
|
231
321
|
|
|
232
322
|
|
|
233
323
|
def _build_slo(data: dict[str, Any]) -> SLOBuilder:
|
|
234
|
-
"""Convert tool input to SLOBuilder.
|
|
324
|
+
"""Convert tool input to SLOBuilder with Pydantic validation.
|
|
235
325
|
|
|
236
326
|
Args:
|
|
237
327
|
data: Tool input dict from Claude (includes dataset, name, sli, target, etc.)
|
|
@@ -239,94 +329,89 @@ def _build_slo(data: dict[str, Any]) -> SLOBuilder:
|
|
|
239
329
|
Returns:
|
|
240
330
|
Configured SLOBuilder instance ready to build()
|
|
241
331
|
|
|
332
|
+
Raises:
|
|
333
|
+
ValidationError: If input data doesn't match SLOToolInput schema
|
|
334
|
+
|
|
242
335
|
Example:
|
|
243
336
|
>>> data = {
|
|
244
|
-
... "
|
|
337
|
+
... "datasets": ["api-logs"],
|
|
245
338
|
... "name": "API Availability",
|
|
246
339
|
... "sli": {"alias": "success_rate"},
|
|
247
|
-
... "
|
|
340
|
+
... "target_percentage": 99.9,
|
|
248
341
|
... "time_period_days": 30
|
|
249
342
|
... }
|
|
250
343
|
>>> builder = _build_slo(data)
|
|
251
344
|
>>> bundle = builder.build()
|
|
252
345
|
"""
|
|
253
|
-
|
|
346
|
+
# Validate input with Pydantic (raises ValidationError on invalid input)
|
|
347
|
+
validated = SLOToolInput.model_validate(data)
|
|
348
|
+
|
|
349
|
+
builder = SLOBuilder(validated.name)
|
|
254
350
|
|
|
255
351
|
# Description
|
|
256
|
-
if
|
|
257
|
-
builder.description(
|
|
352
|
+
if validated.description:
|
|
353
|
+
builder.description(validated.description)
|
|
258
354
|
|
|
259
|
-
# Dataset(s)
|
|
260
|
-
if
|
|
261
|
-
builder.dataset(
|
|
262
|
-
|
|
263
|
-
builder.datasets(
|
|
355
|
+
# Dataset(s) - always a list, use single element for one dataset
|
|
356
|
+
if len(validated.datasets) == 1:
|
|
357
|
+
builder.dataset(validated.datasets[0])
|
|
358
|
+
else:
|
|
359
|
+
builder.datasets(validated.datasets)
|
|
264
360
|
|
|
265
361
|
# SLI
|
|
266
|
-
|
|
267
|
-
alias = sli["alias"]
|
|
362
|
+
alias = validated.sli.alias
|
|
268
363
|
|
|
269
|
-
if
|
|
364
|
+
if validated.sli.expression:
|
|
270
365
|
# New derived column
|
|
271
|
-
expression
|
|
272
|
-
description = sli.get("description")
|
|
273
|
-
builder.sli(alias, expression, description)
|
|
366
|
+
builder.sli(alias, validated.sli.expression, validated.sli.description)
|
|
274
367
|
else:
|
|
275
368
|
# Existing derived column
|
|
276
369
|
builder.sli(alias)
|
|
277
370
|
|
|
278
|
-
# Target
|
|
279
|
-
|
|
280
|
-
builder.target_per_million(data["target_per_million"])
|
|
281
|
-
elif "target_percentage" in data:
|
|
282
|
-
builder.target_percentage(data["target_percentage"])
|
|
283
|
-
elif "target_nines" in data:
|
|
284
|
-
builder.target_nines(data["target_nines"])
|
|
371
|
+
# Target (target_percentage is required in SLOToolInput)
|
|
372
|
+
builder.target_percentage(validated.target_percentage)
|
|
285
373
|
|
|
286
374
|
# Time period
|
|
287
|
-
|
|
288
|
-
builder.time_period_days(data["time_period_days"])
|
|
289
|
-
elif "time_period_weeks" in data:
|
|
290
|
-
builder.time_period_weeks(data["time_period_weeks"])
|
|
375
|
+
builder.time_period_days(validated.time_period_days)
|
|
291
376
|
|
|
292
|
-
# Burn alerts
|
|
293
|
-
burn_alerts =
|
|
377
|
+
# Burn alerts (validated as BurnAlertInput models)
|
|
378
|
+
burn_alerts = validated.burn_alerts or []
|
|
294
379
|
for alert_data in burn_alerts:
|
|
295
|
-
|
|
296
|
-
alert_type = BurnAlertType(alert_type_str)
|
|
380
|
+
alert_type = BurnAlertType(alert_data.alert_type)
|
|
297
381
|
|
|
298
382
|
burn_builder = BurnAlertBuilder(alert_type)
|
|
299
383
|
|
|
300
|
-
if
|
|
301
|
-
burn_builder.description(alert_data
|
|
384
|
+
if alert_data.description:
|
|
385
|
+
burn_builder.description(alert_data.description)
|
|
302
386
|
|
|
303
387
|
if alert_type == BurnAlertType.EXHAUSTION_TIME:
|
|
304
|
-
|
|
388
|
+
if alert_data.exhaustion_minutes:
|
|
389
|
+
burn_builder.exhaustion_minutes(alert_data.exhaustion_minutes)
|
|
305
390
|
elif alert_type == BurnAlertType.BUDGET_RATE:
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
391
|
+
if alert_data.budget_rate_window_minutes:
|
|
392
|
+
burn_builder.window_minutes(alert_data.budget_rate_window_minutes)
|
|
393
|
+
if alert_data.budget_rate_decrease_threshold_per_million:
|
|
394
|
+
# Convert from per_million to percent
|
|
395
|
+
threshold_per_million = alert_data.budget_rate_decrease_threshold_per_million
|
|
396
|
+
threshold_percent = threshold_per_million / 10000 # e.g., 10000 → 1%
|
|
397
|
+
burn_builder.threshold_percent(threshold_percent)
|
|
398
|
+
|
|
399
|
+
# Recipients for burn alert (validated as RecipientInput models)
|
|
400
|
+
recipients = alert_data.recipients or []
|
|
314
401
|
for recip in recipients:
|
|
315
|
-
if
|
|
316
|
-
burn_builder.recipient_id(recip
|
|
317
|
-
elif recip.
|
|
318
|
-
burn_builder.email(recip
|
|
319
|
-
elif recip.
|
|
320
|
-
burn_builder.slack(recip
|
|
321
|
-
elif recip.
|
|
322
|
-
|
|
323
|
-
burn_builder.pagerduty(recip
|
|
324
|
-
elif recip.
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
burn_builder.
|
|
328
|
-
elif recip.get("type") in ("msteams", "msteams_workflow"):
|
|
329
|
-
burn_builder.msteams(recip["target"])
|
|
402
|
+
if recip.id:
|
|
403
|
+
burn_builder.recipient_id(recip.id)
|
|
404
|
+
elif recip.type == "email" and recip.target:
|
|
405
|
+
burn_builder.email(recip.target)
|
|
406
|
+
elif recip.type == "slack" and recip.target:
|
|
407
|
+
burn_builder.slack(recip.target)
|
|
408
|
+
elif recip.type == "pagerduty" and recip.target:
|
|
409
|
+
# Note: RecipientInput doesn't have details field, default to critical
|
|
410
|
+
burn_builder.pagerduty(recip.target, severity="critical")
|
|
411
|
+
elif recip.type == "webhook" and recip.target:
|
|
412
|
+
burn_builder.webhook(recip.target, name="Webhook", secret=None)
|
|
413
|
+
elif recip.type in ("msteams", "msteams_workflow") and recip.target:
|
|
414
|
+
burn_builder.msteams(recip.target)
|
|
330
415
|
|
|
331
416
|
# Add burn alert using the appropriate method based on type
|
|
332
417
|
if alert_type == BurnAlertType.EXHAUSTION_TIME:
|
|
@@ -338,7 +423,7 @@ def _build_slo(data: dict[str, Any]) -> SLOBuilder:
|
|
|
338
423
|
|
|
339
424
|
|
|
340
425
|
def _build_board(data: dict[str, Any]) -> BoardBuilder:
|
|
341
|
-
"""Convert tool input to BoardBuilder with inline panel creation.
|
|
426
|
+
"""Convert tool input to BoardBuilder with Pydantic validation and inline panel creation.
|
|
342
427
|
|
|
343
428
|
Args:
|
|
344
429
|
data: Tool input dict from Claude (includes name, inline_query_panels, etc.)
|
|
@@ -346,6 +431,9 @@ def _build_board(data: dict[str, Any]) -> BoardBuilder:
|
|
|
346
431
|
Returns:
|
|
347
432
|
Configured BoardBuilder instance ready to build()
|
|
348
433
|
|
|
434
|
+
Raises:
|
|
435
|
+
ValidationError: If input data doesn't match BoardToolInput schema
|
|
436
|
+
|
|
349
437
|
Example:
|
|
350
438
|
>>> data = {
|
|
351
439
|
... "name": "API Dashboard",
|
|
@@ -365,142 +453,139 @@ def _build_board(data: dict[str, Any]) -> BoardBuilder:
|
|
|
365
453
|
"""
|
|
366
454
|
from honeycomb.models.query_builder import QueryBuilder
|
|
367
455
|
|
|
368
|
-
|
|
456
|
+
# Validate input with Pydantic (raises ValidationError on invalid input)
|
|
457
|
+
validated = BoardToolInput.model_validate(data)
|
|
458
|
+
|
|
459
|
+
builder = BoardBuilder(validated.name)
|
|
369
460
|
|
|
370
461
|
# Description
|
|
371
|
-
if
|
|
372
|
-
builder.description(
|
|
462
|
+
if validated.description:
|
|
463
|
+
builder.description(validated.description)
|
|
373
464
|
|
|
374
465
|
# Layout generation
|
|
375
|
-
|
|
376
|
-
if layout == "auto":
|
|
466
|
+
if validated.layout_generation == "auto":
|
|
377
467
|
builder.auto_layout()
|
|
378
468
|
else:
|
|
379
469
|
builder.manual_layout()
|
|
380
470
|
|
|
381
|
-
# Inline query panels (create QueryBuilder instances)
|
|
382
|
-
for query_panel in
|
|
383
|
-
# Build QueryBuilder from
|
|
384
|
-
qb = QueryBuilder(query_panel
|
|
471
|
+
# Inline query panels (create QueryBuilder instances from validated models)
|
|
472
|
+
for query_panel in validated.inline_query_panels or []:
|
|
473
|
+
# Build QueryBuilder from validated QueryPanelInput model
|
|
474
|
+
qb = QueryBuilder(query_panel.name)
|
|
385
475
|
|
|
386
|
-
if
|
|
387
|
-
qb.description(query_panel
|
|
476
|
+
if query_panel.description:
|
|
477
|
+
qb.description(query_panel.description)
|
|
388
478
|
|
|
389
479
|
# Dataset - optional for environment-wide queries
|
|
390
|
-
if
|
|
391
|
-
qb.dataset(query_panel
|
|
480
|
+
if query_panel.dataset:
|
|
481
|
+
qb.dataset(query_panel.dataset)
|
|
392
482
|
else:
|
|
393
483
|
qb.environment_wide() # Default to environment-wide
|
|
394
484
|
|
|
395
485
|
# Time range
|
|
396
|
-
if
|
|
397
|
-
qb.time_range(query_panel
|
|
486
|
+
if query_panel.time_range:
|
|
487
|
+
qb.time_range(query_panel.time_range)
|
|
398
488
|
|
|
399
|
-
# Calculations -
|
|
400
|
-
|
|
489
|
+
# Calculations - these are already validated Calculation models
|
|
490
|
+
for calc in query_panel.calculations or []:
|
|
491
|
+
qb._calculations.append(calc)
|
|
401
492
|
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
# Filters
|
|
406
|
-
for filt in query_panel.get("filters", []):
|
|
407
|
-
qb.filter(filt["column"], filt["op"], filt.get("value"))
|
|
493
|
+
# Filters - these are already validated Filter models
|
|
494
|
+
for filt in query_panel.filters or []:
|
|
495
|
+
qb.filter(filt.column, filt.op, filt.value)
|
|
408
496
|
|
|
409
497
|
# Breakdowns
|
|
410
|
-
for breakdown in query_panel.
|
|
498
|
+
for breakdown in query_panel.breakdowns or []:
|
|
411
499
|
qb.group_by(breakdown)
|
|
412
500
|
|
|
413
|
-
# Orders
|
|
414
|
-
for order in query_panel.
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
)
|
|
501
|
+
# Orders - these are already validated Order models
|
|
502
|
+
for order in query_panel.orders or []:
|
|
503
|
+
# Order model has 'op' (CalcOp) and 'order' (OrderDirection) fields
|
|
504
|
+
qb.order_by(order.column or order.op, order.order)
|
|
418
505
|
|
|
419
506
|
# Limit
|
|
420
|
-
if
|
|
421
|
-
qb.limit(query_panel
|
|
507
|
+
if query_panel.limit:
|
|
508
|
+
qb.limit(query_panel.limit)
|
|
509
|
+
|
|
510
|
+
# Calculated fields (inline derived columns)
|
|
511
|
+
for calc_field in query_panel.calculated_fields or []:
|
|
512
|
+
qb.calculated_field(calc_field.name, calc_field.expression)
|
|
513
|
+
|
|
514
|
+
# Compare time offset for historical comparison
|
|
515
|
+
if query_panel.compare_time_offset_seconds:
|
|
516
|
+
qb.compare_time_offset(query_panel.compare_time_offset_seconds)
|
|
517
|
+
|
|
518
|
+
# Build visualization dict from typed model or chart_type shorthand
|
|
519
|
+
viz_dict = _build_visualization_dict(query_panel.visualization, query_panel.chart_type)
|
|
422
520
|
|
|
423
521
|
# Add to board with position and style
|
|
424
522
|
builder.query(
|
|
425
523
|
qb,
|
|
426
|
-
position=
|
|
427
|
-
style=query_panel.
|
|
428
|
-
visualization=
|
|
524
|
+
position=query_panel.position, # Already a PositionInput or None
|
|
525
|
+
style=query_panel.style,
|
|
526
|
+
visualization=viz_dict,
|
|
429
527
|
)
|
|
430
528
|
|
|
431
|
-
# Text panels
|
|
432
|
-
for text_panel in
|
|
433
|
-
content =
|
|
434
|
-
position = text_panel.get("position") if isinstance(text_panel, dict) else None
|
|
435
|
-
builder.text(content, position=tuple(position) if position else None)
|
|
529
|
+
# Text panels (validated TextPanelInput models)
|
|
530
|
+
for text_panel in validated.text_panels or []:
|
|
531
|
+
builder.text(text_panel.content, position=text_panel.position)
|
|
436
532
|
|
|
437
|
-
#
|
|
438
|
-
for
|
|
439
|
-
|
|
440
|
-
existing["query_id"],
|
|
441
|
-
existing["annotation_id"],
|
|
442
|
-
position=tuple(existing["position"]) if "position" in existing else None,
|
|
443
|
-
style=existing.get("style", "graph"),
|
|
444
|
-
)
|
|
445
|
-
|
|
446
|
-
# Inline SLO panels (create SLOBuilder instances)
|
|
447
|
-
for slo_panel in data.get("inline_slo_panels", []):
|
|
448
|
-
# Build SLOBuilder from panel data
|
|
533
|
+
# Inline SLO panels (create SLOBuilder instances from validated SLOPanelInput models)
|
|
534
|
+
for slo_panel in validated.inline_slo_panels or []:
|
|
535
|
+
# Build SLOBuilder from validated SLOPanelInput model
|
|
449
536
|
from honeycomb.models import SLOBuilder
|
|
450
537
|
|
|
451
|
-
slo_builder = SLOBuilder(slo_panel
|
|
538
|
+
slo_builder = SLOBuilder(slo_panel.name)
|
|
452
539
|
|
|
453
|
-
if
|
|
454
|
-
slo_builder.description(slo_panel
|
|
540
|
+
if slo_panel.description:
|
|
541
|
+
slo_builder.description(slo_panel.description)
|
|
455
542
|
|
|
456
|
-
# Dataset
|
|
457
|
-
slo_builder.dataset(slo_panel
|
|
543
|
+
# Dataset (required in SLOPanelInput)
|
|
544
|
+
slo_builder.dataset(slo_panel.dataset)
|
|
458
545
|
|
|
459
|
-
# SLI
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
if "expression" in sli:
|
|
546
|
+
# SLI (validated SLIInput model)
|
|
547
|
+
alias = slo_panel.sli.alias
|
|
548
|
+
if slo_panel.sli.expression:
|
|
463
549
|
# Inline derived column
|
|
464
|
-
slo_builder.sli(alias, sli
|
|
550
|
+
slo_builder.sli(alias, slo_panel.sli.expression, slo_panel.sli.description)
|
|
465
551
|
else:
|
|
466
552
|
# Existing derived column
|
|
467
553
|
slo_builder.sli(alias)
|
|
468
554
|
|
|
469
|
-
# Target
|
|
470
|
-
|
|
471
|
-
slo_builder.target_per_million(slo_panel["target_per_million"])
|
|
472
|
-
elif "target_percentage" in slo_panel:
|
|
473
|
-
slo_builder.target_percentage(slo_panel["target_percentage"])
|
|
474
|
-
elif "target_nines" in slo_panel:
|
|
475
|
-
slo_builder.target_nines(slo_panel["target_nines"])
|
|
555
|
+
# Target (target_percentage is required in SLOPanelInput)
|
|
556
|
+
slo_builder.target_percentage(slo_panel.target_percentage)
|
|
476
557
|
|
|
477
558
|
# Time period
|
|
478
|
-
|
|
479
|
-
slo_builder.time_period_days(slo_panel["time_period_days"])
|
|
480
|
-
elif "time_period_weeks" in slo_panel:
|
|
481
|
-
slo_builder.time_period_weeks(slo_panel["time_period_weeks"])
|
|
482
|
-
else:
|
|
483
|
-
slo_builder.time_period_days(30) # Default
|
|
559
|
+
slo_builder.time_period_days(slo_panel.time_period_days)
|
|
484
560
|
|
|
485
561
|
# Add to board
|
|
486
|
-
builder.slo(
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
562
|
+
builder.slo(slo_builder, position=slo_panel.position)
|
|
563
|
+
|
|
564
|
+
# Existing SLO panels (by ID - list of strings)
|
|
565
|
+
for slo_id in validated.slo_panels or []:
|
|
566
|
+
builder.slo(slo_id)
|
|
567
|
+
|
|
568
|
+
# Tags (validated TagInput models)
|
|
569
|
+
for tag in validated.tags or []:
|
|
570
|
+
builder.tag(tag.key, tag.value)
|
|
571
|
+
|
|
572
|
+
# Preset filters (validated PresetFilterInput models)
|
|
573
|
+
for preset in validated.preset_filters or []:
|
|
574
|
+
builder.preset_filter(preset.column, preset.alias)
|
|
575
|
+
|
|
576
|
+
# Board views (validated BoardViewInput models)
|
|
577
|
+
for view in validated.views or []:
|
|
578
|
+
# Convert BoardViewFilter models to dicts for builder compatibility
|
|
579
|
+
filters: list[dict[str, Any]] = []
|
|
580
|
+
for board_view_filter in view.filters or []:
|
|
581
|
+
filters.append(
|
|
582
|
+
{
|
|
583
|
+
"column": board_view_filter.column,
|
|
584
|
+
"operation": board_view_filter.operation,
|
|
585
|
+
"value": board_view_filter.value,
|
|
586
|
+
}
|
|
497
587
|
)
|
|
498
|
-
|
|
499
|
-
builder.slo(slo) # Just an ID string
|
|
500
|
-
|
|
501
|
-
# Tags
|
|
502
|
-
for tag in data.get("tags", []):
|
|
503
|
-
builder.tag(tag["key"], tag["value"])
|
|
588
|
+
builder.add_view(view.name, filters)
|
|
504
589
|
|
|
505
590
|
return builder
|
|
506
591
|
|