honeycomb-api 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- honeycomb/__init__.py +217 -0
- honeycomb/_generated/__init__.py +8 -0
- honeycomb/_generated/api/__init__.py +1 -0
- honeycomb/_generated/api/auth/__init__.py +0 -0
- honeycomb/_generated/api/auth/get_auth.py +172 -0
- honeycomb/_generated/api/auth/get_v2_auth.py +168 -0
- honeycomb/_generated/api/boards/__init__.py +0 -0
- honeycomb/_generated/api/boards/create_board.py +217 -0
- honeycomb/_generated/api/boards/create_board_view.py +237 -0
- honeycomb/_generated/api/boards/delete_board.py +191 -0
- honeycomb/_generated/api/boards/delete_board_view.py +210 -0
- honeycomb/_generated/api/boards/get_board.py +208 -0
- honeycomb/_generated/api/boards/get_board_view.py +214 -0
- honeycomb/_generated/api/boards/list_board_views.py +206 -0
- honeycomb/_generated/api/boards/list_boards.py +177 -0
- honeycomb/_generated/api/boards/update_board.py +238 -0
- honeycomb/_generated/api/boards/update_board_view.py +250 -0
- honeycomb/_generated/api/burn_alerts/__init__.py +0 -0
- honeycomb/_generated/api/burn_alerts/create_burn_alert.py +224 -0
- honeycomb/_generated/api/burn_alerts/delete_burn_alert.py +204 -0
- honeycomb/_generated/api/burn_alerts/get_burn_alert.py +208 -0
- honeycomb/_generated/api/burn_alerts/list_burn_alerts_by_slo.py +220 -0
- honeycomb/_generated/api/calculated_fields/__init__.py +0 -0
- honeycomb/_generated/api/calculated_fields/create_calculated_field.py +239 -0
- honeycomb/_generated/api/calculated_fields/delete_calculated_field.py +225 -0
- honeycomb/_generated/api/calculated_fields/get_calculated_field.py +207 -0
- honeycomb/_generated/api/calculated_fields/list_calculated_fields.py +252 -0
- honeycomb/_generated/api/calculated_fields/update_calculated_field.py +242 -0
- honeycomb/_generated/api/columns/__init__.py +0 -0
- honeycomb/_generated/api/columns/create_column.py +241 -0
- honeycomb/_generated/api/columns/delete_column.py +221 -0
- honeycomb/_generated/api/columns/get_column.py +206 -0
- honeycomb/_generated/api/columns/list_columns.py +256 -0
- honeycomb/_generated/api/columns/update_column.py +242 -0
- honeycomb/_generated/api/dataset_definitions/__init__.py +0 -0
- honeycomb/_generated/api/dataset_definitions/list_dataset_definitions.py +193 -0
- honeycomb/_generated/api/dataset_definitions/patch_dataset_definitions.py +235 -0
- honeycomb/_generated/api/datasets/__init__.py +0 -0
- honeycomb/_generated/api/datasets/create_dataset.py +227 -0
- honeycomb/_generated/api/datasets/delete_dataset.py +251 -0
- honeycomb/_generated/api/datasets/get_dataset.py +195 -0
- honeycomb/_generated/api/datasets/list_datasets.py +177 -0
- honeycomb/_generated/api/datasets/update_dataset.py +217 -0
- honeycomb/_generated/api/enhance/__init__.py +0 -0
- honeycomb/_generated/api/enhance/record_enhance_indexer_usage.py +231 -0
- honeycomb/_generated/api/environments/__init__.py +0 -0
- honeycomb/_generated/api/environments/create_environment.py +247 -0
- honeycomb/_generated/api/environments/delete_environment.py +245 -0
- honeycomb/_generated/api/environments/get_environment.py +213 -0
- honeycomb/_generated/api/environments/list_environments.py +245 -0
- honeycomb/_generated/api/environments/update_environment.py +254 -0
- honeycomb/_generated/api/events/__init__.py +0 -0
- honeycomb/_generated/api/events/create_event.py +269 -0
- honeycomb/_generated/api/events/create_events.py +314 -0
- honeycomb/_generated/api/key_management/__init__.py +0 -0
- honeycomb/_generated/api/key_management/create_api_key.py +286 -0
- honeycomb/_generated/api/key_management/delete_api_key.py +223 -0
- honeycomb/_generated/api/key_management/get_api_key.py +225 -0
- honeycomb/_generated/api/key_management/list_api_keys.py +281 -0
- honeycomb/_generated/api/key_management/update_api_key.py +270 -0
- honeycomb/_generated/api/kinesis_events/__init__.py +0 -0
- honeycomb/_generated/api/kinesis_events/create_kinesis_events.py +220 -0
- honeycomb/_generated/api/marker_settings/__init__.py +0 -0
- honeycomb/_generated/api/marker_settings/create_marker_setting.py +209 -0
- honeycomb/_generated/api/marker_settings/delete_marker_settings.py +194 -0
- honeycomb/_generated/api/marker_settings/list_marker_settings.py +186 -0
- honeycomb/_generated/api/marker_settings/update_marker_settings.py +230 -0
- honeycomb/_generated/api/markers/__init__.py +0 -0
- honeycomb/_generated/api/markers/create_marker.py +220 -0
- honeycomb/_generated/api/markers/create_marker_v2.py +253 -0
- honeycomb/_generated/api/markers/delete_marker.py +200 -0
- honeycomb/_generated/api/markers/get_marker.py +194 -0
- honeycomb/_generated/api/markers/update_marker.py +233 -0
- honeycomb/_generated/api/markers/update_marker_v2.py +262 -0
- honeycomb/_generated/api/pipelines/__init__.py +0 -0
- honeycomb/_generated/api/pipelines/get_pipeline_configuration.py +306 -0
- honeycomb/_generated/api/pipelines/record_pipeline_usage.py +244 -0
- honeycomb/_generated/api/pipelines/update_pipeline_configuration_rollout.py +261 -0
- honeycomb/_generated/api/queries/__init__.py +0 -0
- honeycomb/_generated/api/queries/create_query.py +224 -0
- honeycomb/_generated/api/queries/get_query.py +208 -0
- honeycomb/_generated/api/query_annotations/__init__.py +0 -0
- honeycomb/_generated/api/query_annotations/create_query_annotation.py +226 -0
- honeycomb/_generated/api/query_annotations/delete_query_annotation.py +198 -0
- honeycomb/_generated/api/query_annotations/get_query_annotation.py +202 -0
- honeycomb/_generated/api/query_annotations/list_query_annotations.py +217 -0
- honeycomb/_generated/api/query_annotations/update_query_annotation.py +237 -0
- honeycomb/_generated/api/query_data/__init__.py +0 -0
- honeycomb/_generated/api/query_data/create_query_result.py +247 -0
- honeycomb/_generated/api/query_data/get_query_result.py +208 -0
- honeycomb/_generated/api/recipients/__init__.py +0 -0
- honeycomb/_generated/api/recipients/create_recipient.py +317 -0
- honeycomb/_generated/api/recipients/delete_recipient.py +199 -0
- honeycomb/_generated/api/recipients/get_recipient.py +252 -0
- honeycomb/_generated/api/recipients/list_recipients.py +230 -0
- honeycomb/_generated/api/recipients/update_recipient.py +323 -0
- honeycomb/_generated/api/reporting/__init__.py +0 -0
- honeycomb/_generated/api/reporting/get_slo_history.py +218 -0
- honeycomb/_generated/api/service_maps/__init__.py +0 -0
- honeycomb/_generated/api/service_maps/create_map_dependency_request.py +252 -0
- honeycomb/_generated/api/service_maps/get_map_dependencies.py +265 -0
- honeycomb/_generated/api/sl_os/__init__.py +0 -0
- honeycomb/_generated/api/sl_os/create_slo.py +229 -0
- honeycomb/_generated/api/sl_os/delete_slo.py +210 -0
- honeycomb/_generated/api/sl_os/get_slo.py +256 -0
- honeycomb/_generated/api/sl_os/list_slos.py +210 -0
- honeycomb/_generated/api/sl_os/update_slo.py +242 -0
- honeycomb/_generated/api/triggers/__init__.py +0 -0
- honeycomb/_generated/api/triggers/create_trigger.py +250 -0
- honeycomb/_generated/api/triggers/delete_trigger.py +204 -0
- honeycomb/_generated/api/triggers/get_trigger.py +214 -0
- honeycomb/_generated/api/triggers/list_triggers.py +206 -0
- honeycomb/_generated/api/triggers/list_triggers_with_recipient.py +208 -0
- honeycomb/_generated/api/triggers/update_trigger.py +248 -0
- honeycomb/_generated/client.py +271 -0
- honeycomb/_generated/errors.py +14 -0
- honeycomb/_generated/models/__init__.py +561 -0
- honeycomb/_generated/models/api_key_create_request.py +78 -0
- honeycomb/_generated/models/api_key_create_request_data.py +130 -0
- honeycomb/_generated/models/api_key_create_request_data_relationships.py +78 -0
- honeycomb/_generated/models/api_key_create_request_data_type.py +7 -0
- honeycomb/_generated/models/api_key_list_response.py +112 -0
- honeycomb/_generated/models/api_key_object.py +189 -0
- honeycomb/_generated/models/api_key_object_links.py +74 -0
- honeycomb/_generated/models/api_key_object_relationships.py +150 -0
- honeycomb/_generated/models/api_key_object_type.py +7 -0
- honeycomb/_generated/models/api_key_response.py +78 -0
- honeycomb/_generated/models/api_key_update_request.py +104 -0
- honeycomb/_generated/models/auth.py +140 -0
- honeycomb/_generated/models/auth_api_key_access.py +154 -0
- honeycomb/_generated/models/auth_environment.py +82 -0
- honeycomb/_generated/models/auth_team.py +82 -0
- honeycomb/_generated/models/auth_type.py +8 -0
- honeycomb/_generated/models/auth_v2_response.py +108 -0
- honeycomb/_generated/models/auth_v2_response_data.py +122 -0
- honeycomb/_generated/models/auth_v2_response_data_attributes.py +141 -0
- honeycomb/_generated/models/auth_v2_response_data_attributes_key_type.py +7 -0
- honeycomb/_generated/models/auth_v2_response_data_attributes_timestamps.py +107 -0
- honeycomb/_generated/models/auth_v2_response_data_relationships.py +59 -0
- honeycomb/_generated/models/auth_v2_response_data_type.py +7 -0
- honeycomb/_generated/models/base_trigger.py +367 -0
- honeycomb/_generated/models/base_trigger_alert_type.py +8 -0
- honeycomb/_generated/models/base_trigger_baseline_details_type_0.py +92 -0
- honeycomb/_generated/models/base_trigger_baseline_details_type_0_offset_minutes.py +10 -0
- honeycomb/_generated/models/base_trigger_baseline_details_type_0_type.py +8 -0
- honeycomb/_generated/models/base_trigger_evaluation_schedule.py +83 -0
- honeycomb/_generated/models/base_trigger_evaluation_schedule_type.py +8 -0
- honeycomb/_generated/models/base_trigger_evaluation_schedule_window.py +103 -0
- honeycomb/_generated/models/base_trigger_evaluation_schedule_window_days_of_week_item.py +13 -0
- honeycomb/_generated/models/base_trigger_threshold.py +95 -0
- honeycomb/_generated/models/base_trigger_threshold_op.py +10 -0
- honeycomb/_generated/models/batch_event.py +110 -0
- honeycomb/_generated/models/board.py +276 -0
- honeycomb/_generated/models/board_layout_generation.py +8 -0
- honeycomb/_generated/models/board_links.py +74 -0
- honeycomb/_generated/models/board_panel_position.py +104 -0
- honeycomb/_generated/models/board_query_visualization_settings.py +141 -0
- honeycomb/_generated/models/board_query_visualization_settings_charts_item.py +113 -0
- honeycomb/_generated/models/board_query_visualization_settings_charts_item_chart_type.py +13 -0
- honeycomb/_generated/models/board_type.py +7 -0
- honeycomb/_generated/models/board_view_filter.py +93 -0
- honeycomb/_generated/models/board_view_filter_operation.py +22 -0
- honeycomb/_generated/models/board_view_response.py +111 -0
- honeycomb/_generated/models/budget_rate.py +189 -0
- honeycomb/_generated/models/budget_rate_alert_type.py +8 -0
- honeycomb/_generated/models/burn_alert_shared_params.py +136 -0
- honeycomb/_generated/models/calculated_field.py +117 -0
- honeycomb/_generated/models/configuration_key_attributes.py +140 -0
- honeycomb/_generated/models/configuration_key_attributes_key_type.py +7 -0
- honeycomb/_generated/models/configuration_key_attributes_timestamps.py +107 -0
- honeycomb/_generated/models/create_board_view_request.py +96 -0
- honeycomb/_generated/models/create_budget_rate_burn_alert_request.py +232 -0
- honeycomb/_generated/models/create_budget_rate_burn_alert_request_slo.py +74 -0
- honeycomb/_generated/models/create_column.py +149 -0
- honeycomb/_generated/models/create_column_type.py +11 -0
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request.py +78 -0
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data.py +90 -0
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes.py +97 -0
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data.py +88 -0
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item.py +89 -0
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item.py +89 -0
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item.py +97 -0
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum.py +102 -0
- 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 +7 -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 +105 -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_attributes_item.py +87 -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_attributes_item_value.py +73 -0
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_type.py +7 -0
- honeycomb/_generated/models/create_environment_request.py +78 -0
- honeycomb/_generated/models/create_environment_request_data.py +90 -0
- honeycomb/_generated/models/create_environment_request_data_attributes.py +102 -0
- honeycomb/_generated/models/create_environment_request_data_type.py +7 -0
- honeycomb/_generated/models/create_events_content_encoding.py +8 -0
- honeycomb/_generated/models/create_events_response_200_item.py +82 -0
- honeycomb/_generated/models/create_exhaustion_time_burn_alert_request.py +217 -0
- honeycomb/_generated/models/create_exhaustion_time_burn_alert_request_slo.py +74 -0
- honeycomb/_generated/models/create_map_dependencies_request.py +128 -0
- honeycomb/_generated/models/create_map_dependencies_response.py +97 -0
- honeycomb/_generated/models/create_map_dependencies_response_status.py +9 -0
- honeycomb/_generated/models/create_pipeline_health_record_request.py +78 -0
- honeycomb/_generated/models/create_pipeline_health_record_request_data.py +98 -0
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes.py +88 -0
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data.py +88 -0
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item.py +89 -0
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item.py +89 -0
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item.py +97 -0
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum.py +102 -0
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_aggregation_temporality.py +7 -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 +105 -0
- 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 +87 -0
- 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 +73 -0
- honeycomb/_generated/models/create_pipeline_health_record_request_data_type.py +7 -0
- honeycomb/_generated/models/create_query_result_request.py +118 -0
- honeycomb/_generated/models/dataset.py +183 -0
- honeycomb/_generated/models/dataset_creation_payload.py +93 -0
- honeycomb/_generated/models/dataset_definition_type_1.py +96 -0
- honeycomb/_generated/models/dataset_definition_type_1_column_type.py +8 -0
- honeycomb/_generated/models/dataset_definitions.py +599 -0
- honeycomb/_generated/models/dataset_relationship.py +79 -0
- honeycomb/_generated/models/dataset_relationship_data.py +82 -0
- honeycomb/_generated/models/dataset_relationship_data_type.py +7 -0
- honeycomb/_generated/models/dataset_settings.py +73 -0
- honeycomb/_generated/models/dataset_update_payload.py +105 -0
- honeycomb/_generated/models/dataset_update_payload_settings.py +73 -0
- honeycomb/_generated/models/detailed_error.py +115 -0
- honeycomb/_generated/models/email_recipient.py +160 -0
- honeycomb/_generated/models/email_recipient_details.py +71 -0
- honeycomb/_generated/models/email_recipient_type.py +7 -0
- honeycomb/_generated/models/environment.py +112 -0
- honeycomb/_generated/models/environment_attributes.py +140 -0
- honeycomb/_generated/models/environment_attributes_color_type_1.py +7 -0
- honeycomb/_generated/models/environment_attributes_settings.py +70 -0
- honeycomb/_generated/models/environment_color.py +16 -0
- honeycomb/_generated/models/environment_links.py +70 -0
- honeycomb/_generated/models/environment_list_response.py +112 -0
- honeycomb/_generated/models/environment_relationship.py +79 -0
- honeycomb/_generated/models/environment_relationship_data.py +82 -0
- honeycomb/_generated/models/environment_relationship_data_type.py +7 -0
- honeycomb/_generated/models/environment_response.py +78 -0
- honeycomb/_generated/models/environment_type.py +7 -0
- honeycomb/_generated/models/error.py +74 -0
- honeycomb/_generated/models/event.py +71 -0
- honeycomb/_generated/models/exhaustion_time.py +174 -0
- honeycomb/_generated/models/exhaustion_time_alert_type.py +8 -0
- honeycomb/_generated/models/exhaustion_time_burn_alert_list_response.py +198 -0
- honeycomb/_generated/models/exhaustion_time_burn_alert_list_response_slo.py +77 -0
- honeycomb/_generated/models/filter_op.py +22 -0
- honeycomb/_generated/models/get_map_dependencies_response.py +169 -0
- honeycomb/_generated/models/get_map_dependencies_response_status.py +9 -0
- honeycomb/_generated/models/having_calculate_op.py +29 -0
- honeycomb/_generated/models/having_op.py +12 -0
- honeycomb/_generated/models/included_resource.py +106 -0
- honeycomb/_generated/models/included_resource_attributes.py +62 -0
- honeycomb/_generated/models/ingest_key_attributes.py +153 -0
- honeycomb/_generated/models/ingest_key_attributes_key_type.py +7 -0
- honeycomb/_generated/models/ingest_key_attributes_permissions.py +74 -0
- honeycomb/_generated/models/ingest_key_attributes_timestamps.py +107 -0
- honeycomb/_generated/models/ingest_key_type.py +90 -0
- honeycomb/_generated/models/ingest_key_type_key_type.py +7 -0
- honeycomb/_generated/models/jsonapi_error_source.py +92 -0
- honeycomb/_generated/models/kinesis_event.py +111 -0
- honeycomb/_generated/models/kinesis_event_record.py +73 -0
- honeycomb/_generated/models/kinesis_response.py +91 -0
- honeycomb/_generated/models/list_api_keys_filtertype.py +8 -0
- honeycomb/_generated/models/map_dependency.py +118 -0
- honeycomb/_generated/models/map_node.py +97 -0
- honeycomb/_generated/models/map_node_type.py +7 -0
- honeycomb/_generated/models/marker.py +151 -0
- honeycomb/_generated/models/marker_create_request.py +78 -0
- honeycomb/_generated/models/marker_create_request_data.py +104 -0
- honeycomb/_generated/models/marker_create_request_data_attributes.py +110 -0
- honeycomb/_generated/models/marker_create_request_data_relationships.py +92 -0
- honeycomb/_generated/models/marker_create_request_data_type.py +7 -0
- honeycomb/_generated/models/marker_object.py +136 -0
- honeycomb/_generated/models/marker_object_attributes.py +146 -0
- honeycomb/_generated/models/marker_object_attributes_timestamps.py +107 -0
- honeycomb/_generated/models/marker_object_links.py +74 -0
- honeycomb/_generated/models/marker_object_relationships.py +111 -0
- honeycomb/_generated/models/marker_object_relationships_dataset.py +104 -0
- honeycomb/_generated/models/marker_object_relationships_dataset_data_type_0.py +94 -0
- honeycomb/_generated/models/marker_object_relationships_dataset_data_type_0_type.py +7 -0
- honeycomb/_generated/models/marker_object_type.py +7 -0
- honeycomb/_generated/models/marker_response.py +78 -0
- honeycomb/_generated/models/marker_setting.py +125 -0
- honeycomb/_generated/models/marker_update_request.py +78 -0
- honeycomb/_generated/models/marker_update_request_data.py +104 -0
- honeycomb/_generated/models/marker_update_request_data_attributes.py +111 -0
- honeycomb/_generated/models/marker_update_request_data_relationships.py +92 -0
- honeycomb/_generated/models/marker_update_request_data_type.py +7 -0
- honeycomb/_generated/models/ms_teams_recipient.py +161 -0
- honeycomb/_generated/models/ms_teams_recipient_details.py +80 -0
- honeycomb/_generated/models/ms_teams_recipient_type.py +7 -0
- honeycomb/_generated/models/ms_teams_workflow_recipient.py +161 -0
- honeycomb/_generated/models/ms_teams_workflow_recipient_details.py +80 -0
- honeycomb/_generated/models/ms_teams_workflow_recipient_type.py +7 -0
- honeycomb/_generated/models/notification_recipient.py +131 -0
- honeycomb/_generated/models/notification_recipient_details.py +117 -0
- honeycomb/_generated/models/notification_recipient_details_pagerduty_severity.py +10 -0
- honeycomb/_generated/models/notification_recipient_details_variables_item.py +81 -0
- honeycomb/_generated/models/pager_duty_recipient.py +160 -0
- honeycomb/_generated/models/pager_duty_recipient_details.py +79 -0
- honeycomb/_generated/models/pager_duty_recipient_type.py +7 -0
- honeycomb/_generated/models/pagination_links.py +80 -0
- honeycomb/_generated/models/payload_template.py +73 -0
- honeycomb/_generated/models/pipeline_configuration_response.py +112 -0
- honeycomb/_generated/models/pipeline_configuration_response_attributes.py +101 -0
- honeycomb/_generated/models/pipeline_configuration_response_attributes_configs_item.py +85 -0
- honeycomb/_generated/models/pipeline_configuration_response_links.py +73 -0
- honeycomb/_generated/models/pipeline_configuration_response_type.py +7 -0
- honeycomb/_generated/models/pipeline_configuration_rollout.py +112 -0
- honeycomb/_generated/models/pipeline_configuration_rollout_attributes.py +75 -0
- honeycomb/_generated/models/pipeline_configuration_rollout_attributes_status.py +12 -0
- honeycomb/_generated/models/pipeline_configuration_rollout_links.py +73 -0
- honeycomb/_generated/models/pipeline_configuration_rollout_type.py +7 -0
- honeycomb/_generated/models/preset_filter.py +78 -0
- honeycomb/_generated/models/query.py +346 -0
- honeycomb/_generated/models/query_annotation.py +166 -0
- honeycomb/_generated/models/query_annotation_source.py +8 -0
- honeycomb/_generated/models/query_calculated_fields_item.py +80 -0
- honeycomb/_generated/models/query_calculations_item.py +98 -0
- honeycomb/_generated/models/query_compare_time_offset_seconds.py +14 -0
- honeycomb/_generated/models/query_filter_combination.py +8 -0
- honeycomb/_generated/models/query_filters_item.py +126 -0
- honeycomb/_generated/models/query_havings_item.py +128 -0
- honeycomb/_generated/models/query_op.py +30 -0
- honeycomb/_generated/models/query_orders_item.py +115 -0
- honeycomb/_generated/models/query_orders_item_order.py +8 -0
- honeycomb/_generated/models/query_panel.py +114 -0
- honeycomb/_generated/models/query_panel_query_panel.py +143 -0
- honeycomb/_generated/models/query_panel_query_panel_query_style.py +9 -0
- honeycomb/_generated/models/query_result.py +130 -0
- honeycomb/_generated/models/query_result_details.py +156 -0
- honeycomb/_generated/models/query_result_details_data.py +188 -0
- honeycomb/_generated/models/query_result_details_links.py +85 -0
- honeycomb/_generated/models/query_result_links.py +85 -0
- honeycomb/_generated/models/query_results_data.py +89 -0
- honeycomb/_generated/models/query_results_data_data.py +71 -0
- honeycomb/_generated/models/query_results_series.py +97 -0
- honeycomb/_generated/models/recipient_properties.py +137 -0
- honeycomb/_generated/models/recipient_type.py +12 -0
- honeycomb/_generated/models/slack_recipient.py +160 -0
- honeycomb/_generated/models/slack_recipient_details.py +71 -0
- honeycomb/_generated/models/slack_recipient_type.py +7 -0
- honeycomb/_generated/models/slo.py +245 -0
- honeycomb/_generated/models/slo_create.py +245 -0
- honeycomb/_generated/models/slo_create_sli.py +75 -0
- honeycomb/_generated/models/slo_detailed_response.py +312 -0
- honeycomb/_generated/models/slo_detailed_response_status.py +10 -0
- honeycomb/_generated/models/slo_history.py +94 -0
- honeycomb/_generated/models/slo_history_request.py +93 -0
- honeycomb/_generated/models/slo_history_response.py +91 -0
- honeycomb/_generated/models/slo_panel.py +114 -0
- honeycomb/_generated/models/slo_panel_slo_panel.py +75 -0
- honeycomb/_generated/models/slo_sli.py +74 -0
- honeycomb/_generated/models/tag.py +79 -0
- honeycomb/_generated/models/team_relationship.py +78 -0
- honeycomb/_generated/models/team_relationship_team.py +78 -0
- honeycomb/_generated/models/team_relationship_team_data.py +82 -0
- honeycomb/_generated/models/team_relationship_team_data_type.py +7 -0
- honeycomb/_generated/models/template_variable_definition.py +81 -0
- honeycomb/_generated/models/text_panel.py +114 -0
- honeycomb/_generated/models/text_panel_text_panel.py +71 -0
- honeycomb/_generated/models/trigger_response.py +399 -0
- honeycomb/_generated/models/trigger_with_inline_query.py +390 -0
- honeycomb/_generated/models/trigger_with_inline_query_query.py +60 -0
- honeycomb/_generated/models/trigger_with_query_reference.py +376 -0
- honeycomb/_generated/models/update_board_view_request.py +107 -0
- honeycomb/_generated/models/update_environment_request.py +78 -0
- honeycomb/_generated/models/update_environment_request_data.py +98 -0
- honeycomb/_generated/models/update_environment_request_data_attributes.py +118 -0
- honeycomb/_generated/models/update_environment_request_data_attributes_settings.py +73 -0
- honeycomb/_generated/models/update_environment_request_data_type.py +7 -0
- honeycomb/_generated/models/update_exhaustion_time_burn_alert_request.py +202 -0
- honeycomb/_generated/models/update_pipeline_configuration_rollout.py +98 -0
- honeycomb/_generated/models/update_pipeline_configuration_rollout_attributes.py +75 -0
- honeycomb/_generated/models/update_pipeline_configuration_rollout_attributes_status.py +12 -0
- honeycomb/_generated/models/update_pipeline_configuration_rollout_request.py +78 -0
- honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data.py +98 -0
- honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_attributes.py +75 -0
- honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_attributes_status.py +12 -0
- honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_type.py +7 -0
- honeycomb/_generated/models/update_pipeline_configuration_rollout_response.py +78 -0
- honeycomb/_generated/models/update_pipeline_configuration_rollout_type.py +7 -0
- honeycomb/_generated/models/user_relationship.py +78 -0
- honeycomb/_generated/models/user_relationship_data.py +82 -0
- honeycomb/_generated/models/user_relationship_data_type.py +7 -0
- honeycomb/_generated/models/validation_error.py +145 -0
- honeycomb/_generated/models/validation_error_type_detail_item.py +103 -0
- honeycomb/_generated/models/validation_error_type_detail_item_code.py +10 -0
- honeycomb/_generated/models/webhook_header.py +81 -0
- honeycomb/_generated/models/webhook_recipient.py +160 -0
- honeycomb/_generated/models/webhook_recipient_details.py +142 -0
- honeycomb/_generated/models/webhook_recipient_details_webhook_payloads.py +117 -0
- honeycomb/_generated/models/webhook_recipient_details_webhook_payloads_payload_templates.py +126 -0
- honeycomb/_generated/models/webhook_recipient_type.py +7 -0
- honeycomb/_generated/py.typed +1 -0
- honeycomb/_generated/types.py +46 -0
- honeycomb/auth.py +152 -0
- honeycomb/client.py +736 -0
- honeycomb/exceptions.py +236 -0
- honeycomb/models/__init__.py +157 -0
- honeycomb/models/api_keys.py +81 -0
- honeycomb/models/board_builder.py +387 -0
- honeycomb/models/boards.py +86 -0
- honeycomb/models/burn_alerts.py +124 -0
- honeycomb/models/columns.py +59 -0
- honeycomb/models/datasets.py +51 -0
- honeycomb/models/derived_columns.py +107 -0
- honeycomb/models/environments.py +106 -0
- honeycomb/models/events.py +35 -0
- honeycomb/models/marker_builder.py +136 -0
- honeycomb/models/markers.py +73 -0
- honeycomb/models/queries.py +210 -0
- honeycomb/models/query_annotations.py +63 -0
- honeycomb/models/query_builder.py +840 -0
- honeycomb/models/recipient_builder.py +248 -0
- honeycomb/models/recipients.py +43 -0
- honeycomb/models/service_map_dependencies.py +126 -0
- honeycomb/models/slo_builder.py +463 -0
- honeycomb/models/slos.py +66 -0
- honeycomb/models/tags_mixin.py +79 -0
- honeycomb/models/trigger_builder.py +561 -0
- honeycomb/models/triggers.py +208 -0
- honeycomb/resources/__init__.py +35 -0
- honeycomb/resources/_recipient_utils.py +156 -0
- honeycomb/resources/api_keys.py +303 -0
- honeycomb/resources/base.py +142 -0
- honeycomb/resources/boards.py +350 -0
- honeycomb/resources/burn_alerts.py +205 -0
- honeycomb/resources/columns.py +185 -0
- honeycomb/resources/datasets.py +163 -0
- honeycomb/resources/derived_columns.py +233 -0
- honeycomb/resources/environments.py +295 -0
- honeycomb/resources/events.py +156 -0
- honeycomb/resources/markers.py +334 -0
- honeycomb/resources/queries.py +256 -0
- honeycomb/resources/query_annotations.py +207 -0
- honeycomb/resources/query_results.py +886 -0
- honeycomb/resources/recipients.py +202 -0
- honeycomb/resources/service_map_dependencies.py +389 -0
- honeycomb/resources/slos.py +353 -0
- honeycomb/resources/triggers.py +284 -0
- honeycomb/tools/__init__.py +85 -0
- honeycomb/tools/__main__.py +204 -0
- honeycomb/tools/builders.py +512 -0
- honeycomb/tools/descriptions.py +523 -0
- honeycomb/tools/executor.py +860 -0
- honeycomb/tools/generator.py +2386 -0
- honeycomb/tools/schemas.py +184 -0
- honeycomb_api-0.1.0.dist-info/METADATA +451 -0
- honeycomb_api-0.1.0.dist-info/RECORD +453 -0
- honeycomb_api-0.1.0.dist-info/WHEEL +4 -0
- honeycomb_api-0.1.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
"""Boards resource for Honeycomb API."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import TYPE_CHECKING, Any
|
|
6
|
+
|
|
7
|
+
from ..models.boards import Board, BoardCreate
|
|
8
|
+
from .base import BaseResource
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from ..client import HoneycombClient
|
|
12
|
+
from ..models.board_builder import BoardBundle
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class BoardsResource(BaseResource):
|
|
16
|
+
"""Resource for managing Honeycomb boards.
|
|
17
|
+
|
|
18
|
+
Boards are dashboards that display visualizations of your data.
|
|
19
|
+
|
|
20
|
+
Example (async):
|
|
21
|
+
>>> async with HoneycombClient(api_key="...") as client:
|
|
22
|
+
... boards = await client.boards.list()
|
|
23
|
+
... board = await client.boards.get(board_id="abc123")
|
|
24
|
+
|
|
25
|
+
Example (sync):
|
|
26
|
+
>>> with HoneycombClient(api_key="...", sync=True) as client:
|
|
27
|
+
... boards = client.boards.list()
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
def __init__(self, client: HoneycombClient) -> None:
|
|
31
|
+
super().__init__(client)
|
|
32
|
+
|
|
33
|
+
def _build_path(self, board_id: str | None = None) -> str:
|
|
34
|
+
"""Build API path for boards."""
|
|
35
|
+
base = "/1/boards"
|
|
36
|
+
if board_id:
|
|
37
|
+
return f"{base}/{board_id}"
|
|
38
|
+
return base
|
|
39
|
+
|
|
40
|
+
# -------------------------------------------------------------------------
|
|
41
|
+
# Async methods
|
|
42
|
+
# -------------------------------------------------------------------------
|
|
43
|
+
|
|
44
|
+
async def list_async(self) -> list[Board]:
|
|
45
|
+
"""List all boards (async).
|
|
46
|
+
|
|
47
|
+
Returns:
|
|
48
|
+
List of Board objects.
|
|
49
|
+
"""
|
|
50
|
+
data = await self._get_async(self._build_path())
|
|
51
|
+
return self._parse_model_list(Board, data)
|
|
52
|
+
|
|
53
|
+
async def get_async(self, board_id: str) -> Board:
|
|
54
|
+
"""Get a specific board (async).
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
board_id: Board ID.
|
|
58
|
+
|
|
59
|
+
Returns:
|
|
60
|
+
Board object.
|
|
61
|
+
"""
|
|
62
|
+
data = await self._get_async(self._build_path(board_id))
|
|
63
|
+
return self._parse_model(Board, data)
|
|
64
|
+
|
|
65
|
+
async def create_async(self, board: BoardCreate) -> Board:
|
|
66
|
+
"""Create a new board (async).
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
board: Board configuration.
|
|
70
|
+
|
|
71
|
+
Returns:
|
|
72
|
+
Created Board object.
|
|
73
|
+
"""
|
|
74
|
+
data = await self._post_async(self._build_path(), json=board.model_dump_for_api())
|
|
75
|
+
return self._parse_model(Board, data)
|
|
76
|
+
|
|
77
|
+
async def update_async(self, board_id: str, board: BoardCreate) -> Board:
|
|
78
|
+
"""Update an existing board (async).
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
board_id: Board ID.
|
|
82
|
+
board: Updated board configuration.
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
Updated Board object.
|
|
86
|
+
"""
|
|
87
|
+
data = await self._put_async(self._build_path(board_id), json=board.model_dump_for_api())
|
|
88
|
+
return self._parse_model(Board, data)
|
|
89
|
+
|
|
90
|
+
async def delete_async(self, board_id: str) -> None:
|
|
91
|
+
"""Delete a board (async).
|
|
92
|
+
|
|
93
|
+
Args:
|
|
94
|
+
board_id: Board ID.
|
|
95
|
+
"""
|
|
96
|
+
await self._delete_async(self._build_path(board_id))
|
|
97
|
+
|
|
98
|
+
async def create_from_bundle_async(self, bundle: BoardBundle) -> Board:
|
|
99
|
+
"""Create board from BoardBundle with automatic query creation.
|
|
100
|
+
|
|
101
|
+
Orchestrates:
|
|
102
|
+
1. Create queries + annotations from QueryBuilder instances
|
|
103
|
+
2. Assemble all panel configurations
|
|
104
|
+
3. Create board with all panels
|
|
105
|
+
|
|
106
|
+
Panels are added to the board in the order they appear in the bundle:
|
|
107
|
+
- Auto-layout: Honeycomb arranges panels in this order
|
|
108
|
+
- Manual-layout: Respects explicit positions
|
|
109
|
+
|
|
110
|
+
Args:
|
|
111
|
+
bundle: BoardBundle from BoardBuilder.build()
|
|
112
|
+
|
|
113
|
+
Returns:
|
|
114
|
+
Created Board object
|
|
115
|
+
|
|
116
|
+
Example:
|
|
117
|
+
>>> board = await client.boards.create_from_bundle_async(
|
|
118
|
+
... BoardBuilder("Dashboard")
|
|
119
|
+
... .auto_layout()
|
|
120
|
+
... .query(
|
|
121
|
+
... QueryBuilder("Request Count")
|
|
122
|
+
... .dataset("api-logs")
|
|
123
|
+
... .last_1_hour()
|
|
124
|
+
... .count()
|
|
125
|
+
... )
|
|
126
|
+
... .build()
|
|
127
|
+
... )
|
|
128
|
+
"""
|
|
129
|
+
|
|
130
|
+
panels = []
|
|
131
|
+
|
|
132
|
+
# Create query panels from QueryBuilder instances
|
|
133
|
+
for qb_panel in bundle.query_builder_panels:
|
|
134
|
+
# Apply dataset override if specified
|
|
135
|
+
if qb_panel.dataset_override:
|
|
136
|
+
# Temporarily override the dataset on the builder
|
|
137
|
+
original_dataset = qb_panel.builder.get_dataset()
|
|
138
|
+
qb_panel.builder.dataset(qb_panel.dataset_override)
|
|
139
|
+
query, annotation_id = await self._client.queries.create_with_annotation_async(
|
|
140
|
+
qb_panel.builder
|
|
141
|
+
)
|
|
142
|
+
# Restore original dataset
|
|
143
|
+
qb_panel.builder.dataset(original_dataset)
|
|
144
|
+
else:
|
|
145
|
+
query, annotation_id = await self._client.queries.create_with_annotation_async(
|
|
146
|
+
qb_panel.builder
|
|
147
|
+
)
|
|
148
|
+
panels.append(
|
|
149
|
+
self._build_query_panel_dict(
|
|
150
|
+
query.id,
|
|
151
|
+
annotation_id,
|
|
152
|
+
qb_panel.position,
|
|
153
|
+
qb_panel.style,
|
|
154
|
+
qb_panel.visualization,
|
|
155
|
+
)
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
# Add existing query panels
|
|
159
|
+
for existing in bundle.existing_query_panels:
|
|
160
|
+
panels.append(
|
|
161
|
+
self._build_query_panel_dict(
|
|
162
|
+
existing.query_id,
|
|
163
|
+
existing.annotation_id,
|
|
164
|
+
existing.position,
|
|
165
|
+
existing.style,
|
|
166
|
+
existing.visualization,
|
|
167
|
+
)
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
# Create SLOs from SLOBuilder instances
|
|
171
|
+
for slo_panel in bundle.slo_builder_panels:
|
|
172
|
+
# Create SLO using existing orchestration
|
|
173
|
+
slo_dict = await self._client.slos.create_from_bundle_async(slo_panel.builder.build())
|
|
174
|
+
# Get first SLO (should only be one dataset for board usage)
|
|
175
|
+
slo = next(iter(slo_dict.values()))
|
|
176
|
+
panels.append(self._build_slo_panel_dict(slo.id, slo_panel.position))
|
|
177
|
+
|
|
178
|
+
# Add existing SLO panels
|
|
179
|
+
for slo_existing in bundle.existing_slo_panels:
|
|
180
|
+
panels.append(self._build_slo_panel_dict(slo_existing.slo_id, slo_existing.position))
|
|
181
|
+
|
|
182
|
+
# Add text panels
|
|
183
|
+
for text in bundle.text_panels:
|
|
184
|
+
panels.append(self._build_text_panel_dict(text.content, text.position))
|
|
185
|
+
|
|
186
|
+
# Create board
|
|
187
|
+
board_create = BoardCreate(
|
|
188
|
+
name=bundle.board_name,
|
|
189
|
+
description=bundle.board_description,
|
|
190
|
+
type="flexible",
|
|
191
|
+
panels=panels if panels else None,
|
|
192
|
+
layout_generation=bundle.layout_generation,
|
|
193
|
+
tags=bundle.tags,
|
|
194
|
+
preset_filters=bundle.preset_filters,
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
return await self.create_async(board_create)
|
|
198
|
+
|
|
199
|
+
def _build_query_panel_dict(
|
|
200
|
+
self,
|
|
201
|
+
query_id: str,
|
|
202
|
+
annotation_id: str,
|
|
203
|
+
position: tuple[int, int, int, int] | None,
|
|
204
|
+
style: str,
|
|
205
|
+
visualization: dict[str, Any] | None,
|
|
206
|
+
) -> dict[str, Any]:
|
|
207
|
+
"""Build query panel dictionary for API."""
|
|
208
|
+
query_panel: dict[str, Any] = {
|
|
209
|
+
"query_id": query_id,
|
|
210
|
+
"query_annotation_id": annotation_id,
|
|
211
|
+
"query_style": style,
|
|
212
|
+
}
|
|
213
|
+
# Dataset is not included - query already knows its scope
|
|
214
|
+
if visualization:
|
|
215
|
+
query_panel["visualization_settings"] = visualization
|
|
216
|
+
|
|
217
|
+
panel: dict[str, Any] = {
|
|
218
|
+
"type": "query",
|
|
219
|
+
"query_panel": query_panel,
|
|
220
|
+
}
|
|
221
|
+
if position:
|
|
222
|
+
panel["position"] = {
|
|
223
|
+
"x_coordinate": position[0],
|
|
224
|
+
"y_coordinate": position[1],
|
|
225
|
+
"width": position[2],
|
|
226
|
+
"height": position[3],
|
|
227
|
+
}
|
|
228
|
+
return panel
|
|
229
|
+
|
|
230
|
+
def _build_slo_panel_dict(
|
|
231
|
+
self,
|
|
232
|
+
slo_id: str,
|
|
233
|
+
position: tuple[int, int, int, int] | None,
|
|
234
|
+
) -> dict[str, Any]:
|
|
235
|
+
"""Build SLO panel dictionary for API."""
|
|
236
|
+
panel = {"type": "slo", "slo_panel": {"slo_id": slo_id}}
|
|
237
|
+
if position:
|
|
238
|
+
panel["position"] = {
|
|
239
|
+
"x_coordinate": position[0],
|
|
240
|
+
"y_coordinate": position[1],
|
|
241
|
+
"width": position[2],
|
|
242
|
+
"height": position[3],
|
|
243
|
+
}
|
|
244
|
+
return panel
|
|
245
|
+
|
|
246
|
+
def _build_text_panel_dict(
|
|
247
|
+
self,
|
|
248
|
+
content: str,
|
|
249
|
+
position: tuple[int, int, int, int] | None,
|
|
250
|
+
) -> dict[str, Any]:
|
|
251
|
+
"""Build text panel dictionary for API."""
|
|
252
|
+
panel = {"type": "text", "text_panel": {"content": content}}
|
|
253
|
+
if position:
|
|
254
|
+
panel["position"] = {
|
|
255
|
+
"x_coordinate": position[0],
|
|
256
|
+
"y_coordinate": position[1],
|
|
257
|
+
"width": position[2],
|
|
258
|
+
"height": position[3],
|
|
259
|
+
}
|
|
260
|
+
return panel
|
|
261
|
+
|
|
262
|
+
# -------------------------------------------------------------------------
|
|
263
|
+
# Sync methods
|
|
264
|
+
# -------------------------------------------------------------------------
|
|
265
|
+
|
|
266
|
+
def list(self) -> list[Board]:
|
|
267
|
+
"""List all boards.
|
|
268
|
+
|
|
269
|
+
Returns:
|
|
270
|
+
List of Board objects.
|
|
271
|
+
"""
|
|
272
|
+
if not self._client.is_sync:
|
|
273
|
+
raise RuntimeError("Use list_async() for async mode, or pass sync=True to client")
|
|
274
|
+
data = self._get_sync(self._build_path())
|
|
275
|
+
return self._parse_model_list(Board, data)
|
|
276
|
+
|
|
277
|
+
def get(self, board_id: str) -> Board:
|
|
278
|
+
"""Get a specific board.
|
|
279
|
+
|
|
280
|
+
Args:
|
|
281
|
+
board_id: Board ID.
|
|
282
|
+
|
|
283
|
+
Returns:
|
|
284
|
+
Board object.
|
|
285
|
+
"""
|
|
286
|
+
if not self._client.is_sync:
|
|
287
|
+
raise RuntimeError("Use get_async() for async mode, or pass sync=True to client")
|
|
288
|
+
data = self._get_sync(self._build_path(board_id))
|
|
289
|
+
return self._parse_model(Board, data)
|
|
290
|
+
|
|
291
|
+
def create(self, board: BoardCreate) -> Board:
|
|
292
|
+
"""Create a new board.
|
|
293
|
+
|
|
294
|
+
Args:
|
|
295
|
+
board: Board configuration.
|
|
296
|
+
|
|
297
|
+
Returns:
|
|
298
|
+
Created Board object.
|
|
299
|
+
"""
|
|
300
|
+
if not self._client.is_sync:
|
|
301
|
+
raise RuntimeError("Use create_async() for async mode, or pass sync=True to client")
|
|
302
|
+
data = self._post_sync(self._build_path(), json=board.model_dump_for_api())
|
|
303
|
+
return self._parse_model(Board, data)
|
|
304
|
+
|
|
305
|
+
def update(self, board_id: str, board: BoardCreate) -> Board:
|
|
306
|
+
"""Update an existing board.
|
|
307
|
+
|
|
308
|
+
Args:
|
|
309
|
+
board_id: Board ID.
|
|
310
|
+
board: Updated board configuration.
|
|
311
|
+
|
|
312
|
+
Returns:
|
|
313
|
+
Updated Board object.
|
|
314
|
+
"""
|
|
315
|
+
if not self._client.is_sync:
|
|
316
|
+
raise RuntimeError("Use update_async() for async mode, or pass sync=True to client")
|
|
317
|
+
data = self._put_sync(self._build_path(board_id), json=board.model_dump_for_api())
|
|
318
|
+
return self._parse_model(Board, data)
|
|
319
|
+
|
|
320
|
+
def delete(self, board_id: str) -> None:
|
|
321
|
+
"""Delete a board.
|
|
322
|
+
|
|
323
|
+
Args:
|
|
324
|
+
board_id: Board ID.
|
|
325
|
+
"""
|
|
326
|
+
if not self._client.is_sync:
|
|
327
|
+
raise RuntimeError("Use delete_async() for async mode, or pass sync=True to client")
|
|
328
|
+
self._delete_sync(self._build_path(board_id))
|
|
329
|
+
|
|
330
|
+
def create_from_bundle(self, bundle: BoardBundle) -> Board:
|
|
331
|
+
"""Create board from BoardBundle with automatic query creation (sync).
|
|
332
|
+
|
|
333
|
+
Orchestrates:
|
|
334
|
+
1. Create queries + annotations from QueryBuilder instances
|
|
335
|
+
2. Assemble all panel configurations
|
|
336
|
+
3. Create board with all panels
|
|
337
|
+
|
|
338
|
+
Args:
|
|
339
|
+
bundle: BoardBundle from BoardBuilder.build()
|
|
340
|
+
|
|
341
|
+
Returns:
|
|
342
|
+
Created Board object
|
|
343
|
+
"""
|
|
344
|
+
if not self._client.is_sync:
|
|
345
|
+
raise RuntimeError(
|
|
346
|
+
"Use create_from_bundle_async() for async mode, or pass sync=True to client"
|
|
347
|
+
)
|
|
348
|
+
import asyncio
|
|
349
|
+
|
|
350
|
+
return asyncio.run(self.create_from_bundle_async(bundle))
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
"""Burn Alerts resource for Honeycomb API."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import TYPE_CHECKING
|
|
6
|
+
|
|
7
|
+
from ..models.burn_alerts import BurnAlert, BurnAlertCreate
|
|
8
|
+
from .base import BaseResource
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from ..client import HoneycombClient
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class BurnAlertsResource(BaseResource):
|
|
15
|
+
"""Resource for managing SLO burn alerts.
|
|
16
|
+
|
|
17
|
+
Burn alerts notify you when you're consuming your SLO error budget too quickly.
|
|
18
|
+
Two alert types are supported:
|
|
19
|
+
- exhaustion_time: Alerts when budget will be exhausted within X minutes
|
|
20
|
+
- budget_rate: Alerts when budget drops by X% within a time window
|
|
21
|
+
|
|
22
|
+
Example (async):
|
|
23
|
+
>>> async with HoneycombClient(api_key="...") as client:
|
|
24
|
+
... alerts = await client.burn_alerts.list(
|
|
25
|
+
... dataset="my-dataset",
|
|
26
|
+
... slo_id="abc123"
|
|
27
|
+
... )
|
|
28
|
+
... alert = await client.burn_alerts.create(
|
|
29
|
+
... dataset="my-dataset",
|
|
30
|
+
... burn_alert=BurnAlertCreate(
|
|
31
|
+
... alert_type=BurnAlertType.EXHAUSTION_TIME,
|
|
32
|
+
... slo_id="abc123",
|
|
33
|
+
... exhaustion_minutes=120
|
|
34
|
+
... )
|
|
35
|
+
... )
|
|
36
|
+
|
|
37
|
+
Example (sync):
|
|
38
|
+
>>> with HoneycombClient(api_key="...", sync=True) as client:
|
|
39
|
+
... alerts = client.burn_alerts.list(
|
|
40
|
+
... dataset="my-dataset",
|
|
41
|
+
... slo_id="abc123"
|
|
42
|
+
... )
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
def __init__(self, client: HoneycombClient) -> None:
|
|
46
|
+
super().__init__(client)
|
|
47
|
+
|
|
48
|
+
def _build_path(self, dataset: str, burn_alert_id: str | None = None) -> str:
|
|
49
|
+
"""Build API path for burn alerts."""
|
|
50
|
+
base = f"/1/burn_alerts/{dataset}"
|
|
51
|
+
if burn_alert_id:
|
|
52
|
+
return f"{base}/{burn_alert_id}"
|
|
53
|
+
return base
|
|
54
|
+
|
|
55
|
+
# -------------------------------------------------------------------------
|
|
56
|
+
# Async methods
|
|
57
|
+
# -------------------------------------------------------------------------
|
|
58
|
+
|
|
59
|
+
async def list_async(self, dataset: str, slo_id: str) -> list[BurnAlert]:
|
|
60
|
+
"""List all burn alerts for an SLO (async).
|
|
61
|
+
|
|
62
|
+
Args:
|
|
63
|
+
dataset: Dataset slug.
|
|
64
|
+
slo_id: SLO ID to list burn alerts for.
|
|
65
|
+
|
|
66
|
+
Returns:
|
|
67
|
+
List of BurnAlert objects.
|
|
68
|
+
"""
|
|
69
|
+
path = f"{self._build_path(dataset)}?slo_id={slo_id}"
|
|
70
|
+
data = await self._get_async(path)
|
|
71
|
+
return self._parse_model_list(BurnAlert, data)
|
|
72
|
+
|
|
73
|
+
async def get_async(self, dataset: str, burn_alert_id: str) -> BurnAlert:
|
|
74
|
+
"""Get a specific burn alert (async).
|
|
75
|
+
|
|
76
|
+
Args:
|
|
77
|
+
dataset: Dataset slug.
|
|
78
|
+
burn_alert_id: Burn Alert ID.
|
|
79
|
+
|
|
80
|
+
Returns:
|
|
81
|
+
BurnAlert object.
|
|
82
|
+
"""
|
|
83
|
+
data = await self._get_async(self._build_path(dataset, burn_alert_id))
|
|
84
|
+
return self._parse_model(BurnAlert, data)
|
|
85
|
+
|
|
86
|
+
async def create_async(self, dataset: str, burn_alert: BurnAlertCreate) -> BurnAlert:
|
|
87
|
+
"""Create a new burn alert (async).
|
|
88
|
+
|
|
89
|
+
Args:
|
|
90
|
+
dataset: Dataset slug.
|
|
91
|
+
burn_alert: Burn alert configuration.
|
|
92
|
+
|
|
93
|
+
Returns:
|
|
94
|
+
Created BurnAlert object.
|
|
95
|
+
"""
|
|
96
|
+
data = await self._post_async(
|
|
97
|
+
self._build_path(dataset), json=burn_alert.model_dump_for_api()
|
|
98
|
+
)
|
|
99
|
+
return self._parse_model(BurnAlert, data)
|
|
100
|
+
|
|
101
|
+
async def update_async(
|
|
102
|
+
self, dataset: str, burn_alert_id: str, burn_alert: BurnAlertCreate
|
|
103
|
+
) -> BurnAlert:
|
|
104
|
+
"""Update an existing burn alert (async).
|
|
105
|
+
|
|
106
|
+
Args:
|
|
107
|
+
dataset: Dataset slug.
|
|
108
|
+
burn_alert_id: Burn Alert ID.
|
|
109
|
+
burn_alert: Updated burn alert configuration.
|
|
110
|
+
|
|
111
|
+
Returns:
|
|
112
|
+
Updated BurnAlert object.
|
|
113
|
+
"""
|
|
114
|
+
data = await self._put_async(
|
|
115
|
+
self._build_path(dataset, burn_alert_id), json=burn_alert.model_dump_for_api()
|
|
116
|
+
)
|
|
117
|
+
return self._parse_model(BurnAlert, data)
|
|
118
|
+
|
|
119
|
+
async def delete_async(self, dataset: str, burn_alert_id: str) -> None:
|
|
120
|
+
"""Delete a burn alert (async).
|
|
121
|
+
|
|
122
|
+
Args:
|
|
123
|
+
dataset: Dataset slug.
|
|
124
|
+
burn_alert_id: Burn Alert ID.
|
|
125
|
+
"""
|
|
126
|
+
await self._delete_async(self._build_path(dataset, burn_alert_id))
|
|
127
|
+
|
|
128
|
+
# -------------------------------------------------------------------------
|
|
129
|
+
# Sync methods
|
|
130
|
+
# -------------------------------------------------------------------------
|
|
131
|
+
|
|
132
|
+
def list(self, dataset: str, slo_id: str) -> list[BurnAlert]:
|
|
133
|
+
"""List all burn alerts for an SLO.
|
|
134
|
+
|
|
135
|
+
Args:
|
|
136
|
+
dataset: Dataset slug.
|
|
137
|
+
slo_id: SLO ID to list burn alerts for.
|
|
138
|
+
|
|
139
|
+
Returns:
|
|
140
|
+
List of BurnAlert objects.
|
|
141
|
+
"""
|
|
142
|
+
if not self._client.is_sync:
|
|
143
|
+
raise RuntimeError("Use list_async() for async mode, or pass sync=True to client")
|
|
144
|
+
path = f"{self._build_path(dataset)}?slo_id={slo_id}"
|
|
145
|
+
data = self._get_sync(path)
|
|
146
|
+
return self._parse_model_list(BurnAlert, data)
|
|
147
|
+
|
|
148
|
+
def get(self, dataset: str, burn_alert_id: str) -> BurnAlert:
|
|
149
|
+
"""Get a specific burn alert.
|
|
150
|
+
|
|
151
|
+
Args:
|
|
152
|
+
dataset: Dataset slug.
|
|
153
|
+
burn_alert_id: Burn Alert ID.
|
|
154
|
+
|
|
155
|
+
Returns:
|
|
156
|
+
BurnAlert object.
|
|
157
|
+
"""
|
|
158
|
+
if not self._client.is_sync:
|
|
159
|
+
raise RuntimeError("Use get_async() for async mode, or pass sync=True to client")
|
|
160
|
+
data = self._get_sync(self._build_path(dataset, burn_alert_id))
|
|
161
|
+
return self._parse_model(BurnAlert, data)
|
|
162
|
+
|
|
163
|
+
def create(self, dataset: str, burn_alert: BurnAlertCreate) -> BurnAlert:
|
|
164
|
+
"""Create a new burn alert.
|
|
165
|
+
|
|
166
|
+
Args:
|
|
167
|
+
dataset: Dataset slug.
|
|
168
|
+
burn_alert: Burn alert configuration.
|
|
169
|
+
|
|
170
|
+
Returns:
|
|
171
|
+
Created BurnAlert object.
|
|
172
|
+
"""
|
|
173
|
+
if not self._client.is_sync:
|
|
174
|
+
raise RuntimeError("Use create_async() for async mode, or pass sync=True to client")
|
|
175
|
+
data = self._post_sync(self._build_path(dataset), json=burn_alert.model_dump_for_api())
|
|
176
|
+
return self._parse_model(BurnAlert, data)
|
|
177
|
+
|
|
178
|
+
def update(self, dataset: str, burn_alert_id: str, burn_alert: BurnAlertCreate) -> BurnAlert:
|
|
179
|
+
"""Update an existing burn alert.
|
|
180
|
+
|
|
181
|
+
Args:
|
|
182
|
+
dataset: Dataset slug.
|
|
183
|
+
burn_alert_id: Burn Alert ID.
|
|
184
|
+
burn_alert: Updated burn alert configuration.
|
|
185
|
+
|
|
186
|
+
Returns:
|
|
187
|
+
Updated BurnAlert object.
|
|
188
|
+
"""
|
|
189
|
+
if not self._client.is_sync:
|
|
190
|
+
raise RuntimeError("Use update_async() for async mode, or pass sync=True to client")
|
|
191
|
+
data = self._put_sync(
|
|
192
|
+
self._build_path(dataset, burn_alert_id), json=burn_alert.model_dump_for_api()
|
|
193
|
+
)
|
|
194
|
+
return self._parse_model(BurnAlert, data)
|
|
195
|
+
|
|
196
|
+
def delete(self, dataset: str, burn_alert_id: str) -> None:
|
|
197
|
+
"""Delete a burn alert.
|
|
198
|
+
|
|
199
|
+
Args:
|
|
200
|
+
dataset: Dataset slug.
|
|
201
|
+
burn_alert_id: Burn Alert ID.
|
|
202
|
+
"""
|
|
203
|
+
if not self._client.is_sync:
|
|
204
|
+
raise RuntimeError("Use delete_async() for async mode, or pass sync=True to client")
|
|
205
|
+
self._delete_sync(self._build_path(dataset, burn_alert_id))
|