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
|
@@ -20,6 +20,7 @@ class EnvironmentsResource(BaseResource):
|
|
|
20
20
|
|
|
21
21
|
This resource requires Management Key authentication and operates
|
|
22
22
|
on a specific team. Environments help organize your data and API keys.
|
|
23
|
+
The team slug is automatically detected from the management key.
|
|
23
24
|
|
|
24
25
|
Note:
|
|
25
26
|
The list methods automatically paginate through all results. For teams
|
|
@@ -32,9 +33,8 @@ class EnvironmentsResource(BaseResource):
|
|
|
32
33
|
... management_key="hcamk_xxx",
|
|
33
34
|
... management_secret="xxx"
|
|
34
35
|
... ) as client:
|
|
35
|
-
... envs = await client.environments.list_async(
|
|
36
|
+
... envs = await client.environments.list_async()
|
|
36
37
|
... env = await client.environments.create_async(
|
|
37
|
-
... team="my-team",
|
|
38
38
|
... environment=EnvironmentCreate(
|
|
39
39
|
... name="Production",
|
|
40
40
|
... description="Production environment",
|
|
@@ -48,11 +48,40 @@ class EnvironmentsResource(BaseResource):
|
|
|
48
48
|
... management_secret="xxx",
|
|
49
49
|
... sync=True
|
|
50
50
|
... ) as client:
|
|
51
|
-
... envs = client.environments.list(
|
|
51
|
+
... envs = client.environments.list()
|
|
52
52
|
"""
|
|
53
53
|
|
|
54
54
|
def __init__(self, client: HoneycombClient) -> None:
|
|
55
55
|
super().__init__(client)
|
|
56
|
+
self._cached_team_slug: str | None = None
|
|
57
|
+
|
|
58
|
+
async def _get_team_slug_async(self) -> str:
|
|
59
|
+
"""Get team slug, auto-detecting from auth."""
|
|
60
|
+
# Use cached value if available
|
|
61
|
+
if self._cached_team_slug:
|
|
62
|
+
return self._cached_team_slug
|
|
63
|
+
|
|
64
|
+
# Auto-detect from auth endpoint
|
|
65
|
+
auth_info = await self._client.auth.get_async()
|
|
66
|
+
if not hasattr(auth_info, "team_slug") or not auth_info.team_slug:
|
|
67
|
+
raise ValueError("Cannot auto-detect team slug from management key credentials.")
|
|
68
|
+
|
|
69
|
+
self._cached_team_slug = auth_info.team_slug
|
|
70
|
+
return self._cached_team_slug
|
|
71
|
+
|
|
72
|
+
def _get_team_slug(self) -> str:
|
|
73
|
+
"""Get team slug (sync), auto-detecting from auth."""
|
|
74
|
+
# Use cached value if available
|
|
75
|
+
if self._cached_team_slug:
|
|
76
|
+
return self._cached_team_slug
|
|
77
|
+
|
|
78
|
+
# Auto-detect from auth endpoint
|
|
79
|
+
auth_info = self._client.auth.get()
|
|
80
|
+
if not hasattr(auth_info, "team_slug") or not auth_info.team_slug:
|
|
81
|
+
raise ValueError("Cannot auto-detect team slug from management key credentials.")
|
|
82
|
+
|
|
83
|
+
self._cached_team_slug = auth_info.team_slug
|
|
84
|
+
return self._cached_team_slug
|
|
56
85
|
|
|
57
86
|
def _build_path(self, team: str, env_id: str | None = None) -> str:
|
|
58
87
|
"""Build API path for environments."""
|
|
@@ -85,15 +114,12 @@ class EnvironmentsResource(BaseResource):
|
|
|
85
114
|
# Async methods
|
|
86
115
|
# -------------------------------------------------------------------------
|
|
87
116
|
|
|
88
|
-
async def list_async(self
|
|
89
|
-
"""List all environments for
|
|
117
|
+
async def list_async(self) -> list[Environment]:
|
|
118
|
+
"""List all environments for the authenticated team (async).
|
|
90
119
|
|
|
91
120
|
Automatically paginates through all results. For teams with many environments,
|
|
92
121
|
this may result in multiple API requests.
|
|
93
122
|
|
|
94
|
-
Args:
|
|
95
|
-
team: Team slug.
|
|
96
|
-
|
|
97
123
|
Returns:
|
|
98
124
|
List of Environment objects.
|
|
99
125
|
|
|
@@ -101,6 +127,7 @@ class EnvironmentsResource(BaseResource):
|
|
|
101
127
|
The default rate limit is 100 requests per minute per operation.
|
|
102
128
|
Contact Honeycomb support for higher limits: https://www.honeycomb.io/support
|
|
103
129
|
"""
|
|
130
|
+
team = await self._get_team_slug_async()
|
|
104
131
|
results: list[Environment] = []
|
|
105
132
|
cursor: str | None = None
|
|
106
133
|
path = self._build_path(team)
|
|
@@ -124,29 +151,29 @@ class EnvironmentsResource(BaseResource):
|
|
|
124
151
|
|
|
125
152
|
return results
|
|
126
153
|
|
|
127
|
-
async def get_async(self,
|
|
154
|
+
async def get_async(self, env_id: str) -> Environment:
|
|
128
155
|
"""Get a specific environment (async).
|
|
129
156
|
|
|
130
157
|
Args:
|
|
131
|
-
team: Team slug.
|
|
132
158
|
env_id: Environment ID.
|
|
133
159
|
|
|
134
160
|
Returns:
|
|
135
161
|
Environment object.
|
|
136
162
|
"""
|
|
163
|
+
team = await self._get_team_slug_async()
|
|
137
164
|
data = await self._get_async(self._build_path(team, env_id))
|
|
138
165
|
return Environment.from_jsonapi(data)
|
|
139
166
|
|
|
140
|
-
async def create_async(self,
|
|
167
|
+
async def create_async(self, environment: EnvironmentCreate) -> Environment:
|
|
141
168
|
"""Create a new environment (async).
|
|
142
169
|
|
|
143
170
|
Args:
|
|
144
|
-
team: Team slug.
|
|
145
171
|
environment: Environment configuration.
|
|
146
172
|
|
|
147
173
|
Returns:
|
|
148
174
|
Created Environment object.
|
|
149
175
|
"""
|
|
176
|
+
team = await self._get_team_slug_async()
|
|
150
177
|
data = await self._post_async(
|
|
151
178
|
self._build_path(team),
|
|
152
179
|
json=environment.to_jsonapi(),
|
|
@@ -154,19 +181,17 @@ class EnvironmentsResource(BaseResource):
|
|
|
154
181
|
)
|
|
155
182
|
return Environment.from_jsonapi(data)
|
|
156
183
|
|
|
157
|
-
async def update_async(
|
|
158
|
-
self, team: str, env_id: str, environment: EnvironmentUpdate
|
|
159
|
-
) -> Environment:
|
|
184
|
+
async def update_async(self, env_id: str, environment: EnvironmentUpdate) -> Environment:
|
|
160
185
|
"""Update an existing environment (async).
|
|
161
186
|
|
|
162
187
|
Args:
|
|
163
|
-
team: Team slug.
|
|
164
188
|
env_id: Environment ID.
|
|
165
189
|
environment: Updated environment configuration.
|
|
166
190
|
|
|
167
191
|
Returns:
|
|
168
192
|
Updated Environment object.
|
|
169
193
|
"""
|
|
194
|
+
team = await self._get_team_slug_async()
|
|
170
195
|
data = await self._patch_async(
|
|
171
196
|
self._build_path(team, env_id),
|
|
172
197
|
json=environment.to_jsonapi(env_id),
|
|
@@ -174,28 +199,25 @@ class EnvironmentsResource(BaseResource):
|
|
|
174
199
|
)
|
|
175
200
|
return Environment.from_jsonapi(data)
|
|
176
201
|
|
|
177
|
-
async def delete_async(self,
|
|
202
|
+
async def delete_async(self, env_id: str) -> None:
|
|
178
203
|
"""Delete an environment (async).
|
|
179
204
|
|
|
180
205
|
Args:
|
|
181
|
-
team: Team slug.
|
|
182
206
|
env_id: Environment ID.
|
|
183
207
|
"""
|
|
208
|
+
team = await self._get_team_slug_async()
|
|
184
209
|
await self._delete_async(self._build_path(team, env_id))
|
|
185
210
|
|
|
186
211
|
# -------------------------------------------------------------------------
|
|
187
212
|
# Sync methods
|
|
188
213
|
# -------------------------------------------------------------------------
|
|
189
214
|
|
|
190
|
-
def list(self
|
|
191
|
-
"""List all environments for
|
|
215
|
+
def list(self) -> list[Environment]:
|
|
216
|
+
"""List all environments for the authenticated team.
|
|
192
217
|
|
|
193
218
|
Automatically paginates through all results. For teams with many environments,
|
|
194
219
|
this may result in multiple API requests.
|
|
195
220
|
|
|
196
|
-
Args:
|
|
197
|
-
team: Team slug.
|
|
198
|
-
|
|
199
221
|
Returns:
|
|
200
222
|
List of Environment objects.
|
|
201
223
|
|
|
@@ -206,6 +228,7 @@ class EnvironmentsResource(BaseResource):
|
|
|
206
228
|
if not self._client.is_sync:
|
|
207
229
|
raise RuntimeError("Use list_async() for async mode, or pass sync=True to client")
|
|
208
230
|
|
|
231
|
+
team = self._get_team_slug()
|
|
209
232
|
results: list[Environment] = []
|
|
210
233
|
cursor: str | None = None
|
|
211
234
|
path = self._build_path(team)
|
|
@@ -229,11 +252,10 @@ class EnvironmentsResource(BaseResource):
|
|
|
229
252
|
|
|
230
253
|
return results
|
|
231
254
|
|
|
232
|
-
def get(self,
|
|
255
|
+
def get(self, env_id: str) -> Environment:
|
|
233
256
|
"""Get a specific environment.
|
|
234
257
|
|
|
235
258
|
Args:
|
|
236
|
-
team: Team slug.
|
|
237
259
|
env_id: Environment ID.
|
|
238
260
|
|
|
239
261
|
Returns:
|
|
@@ -241,14 +263,14 @@ class EnvironmentsResource(BaseResource):
|
|
|
241
263
|
"""
|
|
242
264
|
if not self._client.is_sync:
|
|
243
265
|
raise RuntimeError("Use get_async() for async mode, or pass sync=True to client")
|
|
266
|
+
team = self._get_team_slug()
|
|
244
267
|
data = self._get_sync(self._build_path(team, env_id))
|
|
245
268
|
return Environment.from_jsonapi(data)
|
|
246
269
|
|
|
247
|
-
def create(self,
|
|
270
|
+
def create(self, environment: EnvironmentCreate) -> Environment:
|
|
248
271
|
"""Create a new environment.
|
|
249
272
|
|
|
250
273
|
Args:
|
|
251
|
-
team: Team slug.
|
|
252
274
|
environment: Environment configuration.
|
|
253
275
|
|
|
254
276
|
Returns:
|
|
@@ -256,6 +278,7 @@ class EnvironmentsResource(BaseResource):
|
|
|
256
278
|
"""
|
|
257
279
|
if not self._client.is_sync:
|
|
258
280
|
raise RuntimeError("Use create_async() for async mode, or pass sync=True to client")
|
|
281
|
+
team = self._get_team_slug()
|
|
259
282
|
data = self._post_sync(
|
|
260
283
|
self._build_path(team),
|
|
261
284
|
json=environment.to_jsonapi(),
|
|
@@ -263,11 +286,10 @@ class EnvironmentsResource(BaseResource):
|
|
|
263
286
|
)
|
|
264
287
|
return Environment.from_jsonapi(data)
|
|
265
288
|
|
|
266
|
-
def update(self,
|
|
289
|
+
def update(self, env_id: str, environment: EnvironmentUpdate) -> Environment:
|
|
267
290
|
"""Update an existing environment.
|
|
268
291
|
|
|
269
292
|
Args:
|
|
270
|
-
team: Team slug.
|
|
271
293
|
env_id: Environment ID.
|
|
272
294
|
environment: Updated environment configuration.
|
|
273
295
|
|
|
@@ -276,6 +298,7 @@ class EnvironmentsResource(BaseResource):
|
|
|
276
298
|
"""
|
|
277
299
|
if not self._client.is_sync:
|
|
278
300
|
raise RuntimeError("Use update_async() for async mode, or pass sync=True to client")
|
|
301
|
+
team = self._get_team_slug()
|
|
279
302
|
data = self._patch_sync(
|
|
280
303
|
self._build_path(team, env_id),
|
|
281
304
|
json=environment.to_jsonapi(env_id),
|
|
@@ -283,13 +306,13 @@ class EnvironmentsResource(BaseResource):
|
|
|
283
306
|
)
|
|
284
307
|
return Environment.from_jsonapi(data)
|
|
285
308
|
|
|
286
|
-
def delete(self,
|
|
309
|
+
def delete(self, env_id: str) -> None:
|
|
287
310
|
"""Delete an environment.
|
|
288
311
|
|
|
289
312
|
Args:
|
|
290
|
-
team: Team slug.
|
|
291
313
|
env_id: Environment ID.
|
|
292
314
|
"""
|
|
293
315
|
if not self._client.is_sync:
|
|
294
316
|
raise RuntimeError("Use delete_async() for async mode, or pass sync=True to client")
|
|
317
|
+
team = self._get_team_slug()
|
|
295
318
|
self._delete_sync(self._build_path(team, env_id))
|
honeycomb/resources/slos.py
CHANGED
|
@@ -115,14 +115,16 @@ class SLOsResource(BaseResource):
|
|
|
115
115
|
|
|
116
116
|
This method handles the full orchestration of creating an SLO bundle:
|
|
117
117
|
1. Creates derived column if needed (environment-wide or dataset-scoped)
|
|
118
|
-
2. Creates SLO
|
|
119
|
-
3. Creates burn alerts for
|
|
118
|
+
2. Creates SLO (single-dataset or multi-dataset)
|
|
119
|
+
3. Creates burn alerts for the SLO (if configured)
|
|
120
120
|
|
|
121
121
|
Args:
|
|
122
122
|
bundle: SLOBundle from SLOBuilder.build()
|
|
123
123
|
|
|
124
124
|
Returns:
|
|
125
|
-
Dictionary mapping dataset slugs to created SLO objects
|
|
125
|
+
Dictionary mapping dataset slugs to created SLO objects.
|
|
126
|
+
For single-dataset SLOs: {"dataset": slo}
|
|
127
|
+
For multi-dataset SLOs: {"dataset1": slo, "dataset2": slo, ...} (same SLO object)
|
|
126
128
|
|
|
127
129
|
Example:
|
|
128
130
|
>>> bundle = (
|
|
@@ -153,39 +155,50 @@ class SLOsResource(BaseResource):
|
|
|
153
155
|
bundle.datasets[0], bundle.derived_column
|
|
154
156
|
)
|
|
155
157
|
|
|
156
|
-
# Step 2: Create SLO
|
|
157
|
-
|
|
158
|
+
# Step 2: Create SLO
|
|
159
|
+
is_multi_dataset = bundle.slo.dataset_slugs is not None
|
|
160
|
+
if is_multi_dataset:
|
|
161
|
+
# Multi-dataset SLO: create once via __all__ endpoint
|
|
162
|
+
slo = await self.create_async("__all__", bundle.slo)
|
|
163
|
+
# Add to dict for each dataset
|
|
164
|
+
for dataset in bundle.datasets:
|
|
165
|
+
created_slos[dataset] = slo
|
|
166
|
+
else:
|
|
167
|
+
# Single-dataset SLO: create in the specified dataset
|
|
168
|
+
dataset = bundle.datasets[0]
|
|
158
169
|
slo = await self.create_async(dataset, bundle.slo)
|
|
159
170
|
created_slos[dataset] = slo
|
|
160
171
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
172
|
+
# Step 3: Create burn alerts for the SLO
|
|
173
|
+
# For multi-dataset SLOs, create burn alerts in the first dataset
|
|
174
|
+
burn_alert_dataset = bundle.datasets[0]
|
|
175
|
+
for alert_def in bundle.burn_alerts:
|
|
176
|
+
# Process inline recipients with idempotent handling
|
|
177
|
+
from ._recipient_utils import process_inline_recipients
|
|
165
178
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
179
|
+
processed_recipients = await process_inline_recipients(
|
|
180
|
+
self._client, alert_def.recipients.copy()
|
|
181
|
+
)
|
|
169
182
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
183
|
+
# Convert recipients to BurnAlertRecipient format
|
|
184
|
+
recipients = [BurnAlertRecipient(**recipient) for recipient in processed_recipients]
|
|
185
|
+
|
|
186
|
+
# Convert budget rate percent to per-million if needed
|
|
187
|
+
budget_rate_threshold = None
|
|
188
|
+
if alert_def.budget_rate_decrease_percent is not None:
|
|
189
|
+
budget_rate_threshold = int(alert_def.budget_rate_decrease_percent * 10000)
|
|
190
|
+
|
|
191
|
+
burn_alert = BurnAlertCreate(
|
|
192
|
+
alert_type=alert_def.alert_type,
|
|
193
|
+
slo_id=slo.id,
|
|
194
|
+
description=alert_def.description,
|
|
195
|
+
exhaustion_minutes=alert_def.exhaustion_minutes,
|
|
196
|
+
budget_rate_window_minutes=alert_def.budget_rate_window_minutes,
|
|
197
|
+
budget_rate_decrease_threshold_per_million=budget_rate_threshold,
|
|
198
|
+
recipients=recipients if recipients else [],
|
|
199
|
+
)
|
|
187
200
|
|
|
188
|
-
|
|
201
|
+
await self._client.burn_alerts.create_async(burn_alert_dataset, burn_alert)
|
|
189
202
|
|
|
190
203
|
return created_slos
|
|
191
204
|
|
|
@@ -273,14 +286,16 @@ class SLOsResource(BaseResource):
|
|
|
273
286
|
|
|
274
287
|
This method handles the full orchestration of creating an SLO bundle:
|
|
275
288
|
1. Creates derived column if needed (environment-wide or dataset-scoped)
|
|
276
|
-
2. Creates SLO
|
|
277
|
-
3. Creates burn alerts for
|
|
289
|
+
2. Creates SLO (single-dataset or multi-dataset)
|
|
290
|
+
3. Creates burn alerts for the SLO (if configured)
|
|
278
291
|
|
|
279
292
|
Args:
|
|
280
293
|
bundle: SLOBundle from SLOBuilder.build()
|
|
281
294
|
|
|
282
295
|
Returns:
|
|
283
|
-
Dictionary mapping dataset slugs to created SLO objects
|
|
296
|
+
Dictionary mapping dataset slugs to created SLO objects.
|
|
297
|
+
For single-dataset SLOs: {"dataset": slo}
|
|
298
|
+
For multi-dataset SLOs: {"dataset1": slo, "dataset2": slo, ...} (same SLO object)
|
|
284
299
|
|
|
285
300
|
Example:
|
|
286
301
|
>>> bundle = (
|
|
@@ -314,40 +329,51 @@ class SLOsResource(BaseResource):
|
|
|
314
329
|
# Create in first dataset (single-dataset SLO)
|
|
315
330
|
self._client.derived_columns.create(bundle.datasets[0], bundle.derived_column)
|
|
316
331
|
|
|
317
|
-
# Step 2: Create SLO
|
|
318
|
-
|
|
332
|
+
# Step 2: Create SLO
|
|
333
|
+
is_multi_dataset = bundle.slo.dataset_slugs is not None
|
|
334
|
+
if is_multi_dataset:
|
|
335
|
+
# Multi-dataset SLO: create once via __all__ endpoint
|
|
336
|
+
slo = self.create("__all__", bundle.slo)
|
|
337
|
+
# Add to dict for each dataset
|
|
338
|
+
for dataset in bundle.datasets:
|
|
339
|
+
created_slos[dataset] = slo
|
|
340
|
+
else:
|
|
341
|
+
# Single-dataset SLO: create in the specified dataset
|
|
342
|
+
dataset = bundle.datasets[0]
|
|
319
343
|
slo = self.create(dataset, bundle.slo)
|
|
320
344
|
created_slos[dataset] = slo
|
|
321
345
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
346
|
+
# Step 3: Create burn alerts for the SLO
|
|
347
|
+
# For multi-dataset SLOs, create burn alerts in the first dataset
|
|
348
|
+
burn_alert_dataset = bundle.datasets[0]
|
|
349
|
+
for alert_def in bundle.burn_alerts:
|
|
350
|
+
# Process inline recipients with idempotent handling
|
|
351
|
+
import asyncio
|
|
326
352
|
|
|
327
|
-
|
|
353
|
+
from ._recipient_utils import process_inline_recipients
|
|
328
354
|
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
355
|
+
processed_recipients = asyncio.run(
|
|
356
|
+
process_inline_recipients(self._client, alert_def.recipients.copy())
|
|
357
|
+
)
|
|
332
358
|
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
359
|
+
# Convert recipients to BurnAlertRecipient format
|
|
360
|
+
recipients = [BurnAlertRecipient(**recipient) for recipient in processed_recipients]
|
|
361
|
+
|
|
362
|
+
# Convert budget rate percent to per-million if needed
|
|
363
|
+
budget_rate_threshold = None
|
|
364
|
+
if alert_def.budget_rate_decrease_percent is not None:
|
|
365
|
+
budget_rate_threshold = int(alert_def.budget_rate_decrease_percent * 10000)
|
|
366
|
+
|
|
367
|
+
burn_alert = BurnAlertCreate(
|
|
368
|
+
alert_type=alert_def.alert_type,
|
|
369
|
+
slo_id=slo.id,
|
|
370
|
+
description=alert_def.description,
|
|
371
|
+
exhaustion_minutes=alert_def.exhaustion_minutes,
|
|
372
|
+
budget_rate_window_minutes=alert_def.budget_rate_window_minutes,
|
|
373
|
+
budget_rate_decrease_threshold_per_million=budget_rate_threshold,
|
|
374
|
+
recipients=recipients if recipients else [],
|
|
375
|
+
)
|
|
350
376
|
|
|
351
|
-
|
|
377
|
+
self._client.burn_alerts.create(burn_alert_dataset, burn_alert)
|
|
352
378
|
|
|
353
379
|
return created_slos
|
honeycomb/tools/__main__.py
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Usage:
|
|
4
4
|
python -m honeycomb.tools generate --output tools.json
|
|
5
5
|
python -m honeycomb.tools generate --resource triggers --output triggers.json
|
|
6
|
+
python -m honeycomb.tools generate --per-resource --output-dir tools/
|
|
6
7
|
python -m honeycomb.tools validate tools.json
|
|
7
8
|
python -m honeycomb.tools generate --format python --output definitions.py
|
|
8
9
|
"""
|
|
@@ -14,6 +15,7 @@ from pathlib import Path
|
|
|
14
15
|
|
|
15
16
|
from honeycomb.tools.descriptions import validate_description
|
|
16
17
|
from honeycomb.tools.generator import (
|
|
18
|
+
RESOURCE_MODULES,
|
|
17
19
|
export_tools_json,
|
|
18
20
|
export_tools_python,
|
|
19
21
|
generate_all_tools,
|
|
@@ -21,6 +23,9 @@ from honeycomb.tools.generator import (
|
|
|
21
23
|
)
|
|
22
24
|
from honeycomb.tools.schemas import validate_schema, validate_tool_name
|
|
23
25
|
|
|
26
|
+
# All available resources
|
|
27
|
+
AVAILABLE_RESOURCES = list(RESOURCE_MODULES.keys())
|
|
28
|
+
|
|
24
29
|
|
|
25
30
|
def cmd_generate(args: argparse.Namespace) -> int:
|
|
26
31
|
"""Generate tool definitions.
|
|
@@ -32,7 +37,28 @@ def cmd_generate(args: argparse.Namespace) -> int:
|
|
|
32
37
|
Exit code (0 for success, 1 for error)
|
|
33
38
|
"""
|
|
34
39
|
try:
|
|
35
|
-
#
|
|
40
|
+
# Validate arguments
|
|
41
|
+
if not args.per_resource and not args.output:
|
|
42
|
+
print("Error: --output is required unless using --per-resource", file=sys.stderr)
|
|
43
|
+
return 1
|
|
44
|
+
|
|
45
|
+
# Handle per-resource generation
|
|
46
|
+
if args.per_resource:
|
|
47
|
+
output_dir = Path(args.output_dir)
|
|
48
|
+
output_dir.mkdir(parents=True, exist_ok=True)
|
|
49
|
+
|
|
50
|
+
total_tools = 0
|
|
51
|
+
for resource in AVAILABLE_RESOURCES:
|
|
52
|
+
tools = generate_tools_for_resource(resource)
|
|
53
|
+
output_path = output_dir / f"{resource}.json"
|
|
54
|
+
export_tools_json(tools, str(output_path))
|
|
55
|
+
total_tools += len(tools)
|
|
56
|
+
print(f" {resource}.json: {len(tools)} tools")
|
|
57
|
+
|
|
58
|
+
print(f"Generated {total_tools} tools across {len(AVAILABLE_RESOURCES)} resource files")
|
|
59
|
+
return 0
|
|
60
|
+
|
|
61
|
+
# Generate tools (single file mode)
|
|
36
62
|
if args.resource:
|
|
37
63
|
tools = generate_tools_for_resource(args.resource)
|
|
38
64
|
print(f"Generated {len(tools)} tool definitions for resource '{args.resource}'")
|
|
@@ -156,13 +182,12 @@ def main() -> int:
|
|
|
156
182
|
gen_parser.add_argument(
|
|
157
183
|
"--output",
|
|
158
184
|
"-o",
|
|
159
|
-
required
|
|
160
|
-
help="Output file path",
|
|
185
|
+
help="Output file path (required unless using --per-resource)",
|
|
161
186
|
)
|
|
162
187
|
gen_parser.add_argument(
|
|
163
188
|
"--resource",
|
|
164
189
|
"-r",
|
|
165
|
-
choices=
|
|
190
|
+
choices=AVAILABLE_RESOURCES,
|
|
166
191
|
help="Generate tools for specific resource only",
|
|
167
192
|
)
|
|
168
193
|
gen_parser.add_argument(
|
|
@@ -172,6 +197,17 @@ def main() -> int:
|
|
|
172
197
|
default="json",
|
|
173
198
|
help="Output format (default: json)",
|
|
174
199
|
)
|
|
200
|
+
gen_parser.add_argument(
|
|
201
|
+
"--per-resource",
|
|
202
|
+
action="store_true",
|
|
203
|
+
help="Generate separate JSON files for each resource",
|
|
204
|
+
)
|
|
205
|
+
gen_parser.add_argument(
|
|
206
|
+
"--output-dir",
|
|
207
|
+
"-d",
|
|
208
|
+
default="tools",
|
|
209
|
+
help="Output directory for per-resource files (default: tools)",
|
|
210
|
+
)
|
|
175
211
|
|
|
176
212
|
# Validate command
|
|
177
213
|
val_parser = subparsers.add_parser(
|