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,387 @@
|
|
|
1
|
+
"""Board Builder - Fluent interface for creating boards with panels."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from typing import TYPE_CHECKING, Any, Literal
|
|
7
|
+
|
|
8
|
+
from honeycomb.models.tags_mixin import TagsMixin
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from honeycomb.models.query_builder import QueryBuilder
|
|
12
|
+
from honeycomb.models.slo_builder import SLOBuilder
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# =============================================================================
|
|
16
|
+
# BoardBundle Data Structures
|
|
17
|
+
# =============================================================================
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@dataclass
|
|
21
|
+
class QueryBuilderPanel:
|
|
22
|
+
"""Query panel from inline QueryBuilder (needs creation).
|
|
23
|
+
|
|
24
|
+
Attributes:
|
|
25
|
+
builder: QueryBuilder instance with .name() set
|
|
26
|
+
position: Optional (x, y, width, height) for manual layout
|
|
27
|
+
style: Display style (graph, table, combo)
|
|
28
|
+
visualization: Optional visualization settings dict
|
|
29
|
+
dataset_override: Optional dataset override
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
builder: QueryBuilder
|
|
33
|
+
position: tuple[int, int, int, int] | None
|
|
34
|
+
style: Literal["graph", "table", "combo"]
|
|
35
|
+
visualization: dict[str, Any] | None
|
|
36
|
+
dataset_override: str | None
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
@dataclass
|
|
40
|
+
class ExistingQueryPanel:
|
|
41
|
+
"""Query panel from existing query ID.
|
|
42
|
+
|
|
43
|
+
Attributes:
|
|
44
|
+
query_id: ID of saved query
|
|
45
|
+
annotation_id: Annotation ID of query
|
|
46
|
+
position: Optional (x, y, width, height) for manual layout
|
|
47
|
+
style: Display style (graph, table, combo)
|
|
48
|
+
visualization: Optional visualization settings dict
|
|
49
|
+
dataset: Optional dataset name
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
query_id: str
|
|
53
|
+
annotation_id: str
|
|
54
|
+
position: tuple[int, int, int, int] | None
|
|
55
|
+
style: Literal["graph", "table", "combo"]
|
|
56
|
+
visualization: dict[str, Any] | None
|
|
57
|
+
dataset: str | None
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
@dataclass
|
|
61
|
+
class SLOBuilderPanel:
|
|
62
|
+
"""SLO panel from inline SLOBuilder (needs creation).
|
|
63
|
+
|
|
64
|
+
Attributes:
|
|
65
|
+
builder: SLOBuilder instance
|
|
66
|
+
position: Optional (x, y, width, height) for manual layout
|
|
67
|
+
"""
|
|
68
|
+
|
|
69
|
+
builder: SLOBuilder
|
|
70
|
+
position: tuple[int, int, int, int] | None
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
@dataclass
|
|
74
|
+
class ExistingSLOPanel:
|
|
75
|
+
"""SLO panel from existing SLO ID.
|
|
76
|
+
|
|
77
|
+
Attributes:
|
|
78
|
+
slo_id: ID of the SLO
|
|
79
|
+
position: Optional (x, y, width, height) for manual layout
|
|
80
|
+
"""
|
|
81
|
+
|
|
82
|
+
slo_id: str
|
|
83
|
+
position: tuple[int, int, int, int] | None
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
@dataclass
|
|
87
|
+
class TextPanel:
|
|
88
|
+
"""Text panel.
|
|
89
|
+
|
|
90
|
+
Attributes:
|
|
91
|
+
content: Markdown text content
|
|
92
|
+
position: Optional (x, y, width, height) for manual layout
|
|
93
|
+
"""
|
|
94
|
+
|
|
95
|
+
content: str
|
|
96
|
+
position: tuple[int, int, int, int] | None
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
@dataclass
|
|
100
|
+
class BoardBundle:
|
|
101
|
+
"""Board creation bundle for orchestration.
|
|
102
|
+
|
|
103
|
+
Returned by BoardBuilder.build(), consumed by boards.create_from_bundle_async().
|
|
104
|
+
|
|
105
|
+
Attributes:
|
|
106
|
+
board_name: Board name
|
|
107
|
+
board_description: Optional board description
|
|
108
|
+
layout_generation: Layout mode (auto or manual)
|
|
109
|
+
tags: Optional tags list
|
|
110
|
+
preset_filters: Optional preset filters list
|
|
111
|
+
query_builder_panels: Panels from QueryBuilder instances
|
|
112
|
+
existing_query_panels: Panels from existing query IDs
|
|
113
|
+
slo_panels: SLO panels
|
|
114
|
+
text_panels: Text panels
|
|
115
|
+
"""
|
|
116
|
+
|
|
117
|
+
board_name: str
|
|
118
|
+
board_description: str | None
|
|
119
|
+
layout_generation: Literal["auto", "manual"]
|
|
120
|
+
tags: list[dict[str, str]] | None
|
|
121
|
+
preset_filters: list[dict[str, str]] | None
|
|
122
|
+
# Panels (in order added)
|
|
123
|
+
query_builder_panels: list[QueryBuilderPanel]
|
|
124
|
+
existing_query_panels: list[ExistingQueryPanel]
|
|
125
|
+
slo_builder_panels: list[SLOBuilderPanel]
|
|
126
|
+
existing_slo_panels: list[ExistingSLOPanel]
|
|
127
|
+
text_panels: list[TextPanel]
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
class BoardBuilder(TagsMixin):
|
|
131
|
+
"""Fluent builder for boards with inline QueryBuilder or existing query IDs.
|
|
132
|
+
|
|
133
|
+
Example - Inline QueryBuilder with auto-layout:
|
|
134
|
+
board = await client.boards.create_from_bundle_async(
|
|
135
|
+
BoardBuilder("Service Dashboard")
|
|
136
|
+
.description("Overview of API health")
|
|
137
|
+
.auto_layout()
|
|
138
|
+
.query(
|
|
139
|
+
QueryBuilder("Request Count")
|
|
140
|
+
.dataset("api-logs")
|
|
141
|
+
.last_1_hour()
|
|
142
|
+
.count()
|
|
143
|
+
)
|
|
144
|
+
.slo("slo-id-1")
|
|
145
|
+
.text("## Notes\\nMonitor during peak hours")
|
|
146
|
+
.build()
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
Example - Manual layout with tuple positioning:
|
|
150
|
+
board = await client.boards.create_from_bundle_async(
|
|
151
|
+
BoardBuilder("Custom Layout")
|
|
152
|
+
.manual_layout()
|
|
153
|
+
.query(
|
|
154
|
+
QueryBuilder("Requests").dataset("api-logs").last_1_hour().count(),
|
|
155
|
+
position=(0, 0, 8, 6)
|
|
156
|
+
)
|
|
157
|
+
.slo("slo-id-1", position=(8, 0, 4, 6))
|
|
158
|
+
.build()
|
|
159
|
+
)
|
|
160
|
+
"""
|
|
161
|
+
|
|
162
|
+
def __init__(self, name: str):
|
|
163
|
+
TagsMixin.__init__(self)
|
|
164
|
+
self._name = name
|
|
165
|
+
self._description: str | None = None
|
|
166
|
+
self._layout_generation: Literal["auto", "manual"] = "manual"
|
|
167
|
+
self._preset_filters: list[dict[str, str]] = []
|
|
168
|
+
# Panel storage (in order added)
|
|
169
|
+
self._query_builder_panels: list[QueryBuilderPanel] = []
|
|
170
|
+
self._existing_query_panels: list[ExistingQueryPanel] = []
|
|
171
|
+
self._slo_builder_panels: list[SLOBuilderPanel] = []
|
|
172
|
+
self._existing_slo_panels: list[ExistingSLOPanel] = []
|
|
173
|
+
self._text_panels: list[TextPanel] = []
|
|
174
|
+
|
|
175
|
+
def description(self, desc: str) -> BoardBuilder:
|
|
176
|
+
"""Set board description (max 1024 chars).
|
|
177
|
+
|
|
178
|
+
Args:
|
|
179
|
+
desc: Description text
|
|
180
|
+
"""
|
|
181
|
+
self._description = desc
|
|
182
|
+
return self
|
|
183
|
+
|
|
184
|
+
# -------------------------------------------------------------------------
|
|
185
|
+
# Layout configuration
|
|
186
|
+
# -------------------------------------------------------------------------
|
|
187
|
+
|
|
188
|
+
def auto_layout(self) -> BoardBuilder:
|
|
189
|
+
"""Use automatic layout positioning.
|
|
190
|
+
|
|
191
|
+
Panels will be arranged automatically. Position can be omitted.
|
|
192
|
+
"""
|
|
193
|
+
self._layout_generation = "auto"
|
|
194
|
+
return self
|
|
195
|
+
|
|
196
|
+
def manual_layout(self) -> BoardBuilder:
|
|
197
|
+
"""Use manual layout positioning (default).
|
|
198
|
+
|
|
199
|
+
When using manual layout, you must specify position for all panels.
|
|
200
|
+
"""
|
|
201
|
+
self._layout_generation = "manual"
|
|
202
|
+
return self
|
|
203
|
+
|
|
204
|
+
# -------------------------------------------------------------------------
|
|
205
|
+
# Preset filters
|
|
206
|
+
# -------------------------------------------------------------------------
|
|
207
|
+
|
|
208
|
+
def preset_filter(self, column: str, alias: str) -> BoardBuilder:
|
|
209
|
+
"""Add a preset filter to the board.
|
|
210
|
+
|
|
211
|
+
Preset filters allow dynamic filtering of board data by specific columns.
|
|
212
|
+
|
|
213
|
+
Args:
|
|
214
|
+
column: Original column name to filter on
|
|
215
|
+
alias: Display name for the filter in the UI
|
|
216
|
+
|
|
217
|
+
Example:
|
|
218
|
+
.preset_filter("service_name", "Service")
|
|
219
|
+
.preset_filter("environment", "Environment")
|
|
220
|
+
"""
|
|
221
|
+
self._preset_filters.append({"column": column, "alias": alias})
|
|
222
|
+
return self
|
|
223
|
+
|
|
224
|
+
# -------------------------------------------------------------------------
|
|
225
|
+
# Add panels
|
|
226
|
+
# -------------------------------------------------------------------------
|
|
227
|
+
|
|
228
|
+
def query(
|
|
229
|
+
self,
|
|
230
|
+
query: QueryBuilder | str,
|
|
231
|
+
annotation_id: str | None = None,
|
|
232
|
+
*,
|
|
233
|
+
position: tuple[int, int, int, int] | None = None,
|
|
234
|
+
style: Literal["graph", "table", "combo"] = "graph",
|
|
235
|
+
visualization: dict[str, Any] | None = None,
|
|
236
|
+
dataset: str | None = None,
|
|
237
|
+
) -> BoardBuilder:
|
|
238
|
+
"""Add a query panel.
|
|
239
|
+
|
|
240
|
+
Args:
|
|
241
|
+
query: QueryBuilder with .name() OR existing query_id string
|
|
242
|
+
annotation_id: Required only if query is string
|
|
243
|
+
position: (x, y, width, height) for manual layout
|
|
244
|
+
style: graph | table | combo
|
|
245
|
+
visualization: {"hide_markers": True, "utc_xaxis": True, ...}
|
|
246
|
+
dataset: Override QueryBuilder's dataset
|
|
247
|
+
|
|
248
|
+
Example - Inline QueryBuilder:
|
|
249
|
+
.query(
|
|
250
|
+
QueryBuilder("Request Count")
|
|
251
|
+
.dataset("api-logs")
|
|
252
|
+
.last_24_hours()
|
|
253
|
+
.count()
|
|
254
|
+
.group_by("service")
|
|
255
|
+
.description("Requests by service over 24h"),
|
|
256
|
+
position=(0, 0, 9, 6),
|
|
257
|
+
style="graph",
|
|
258
|
+
visualization={"hide_markers": True, "utc_xaxis": True}
|
|
259
|
+
)
|
|
260
|
+
|
|
261
|
+
Example - Existing query:
|
|
262
|
+
.query("query-id-123", "annotation-id-456", style="table")
|
|
263
|
+
"""
|
|
264
|
+
from honeycomb.models.query_builder import QueryBuilder
|
|
265
|
+
|
|
266
|
+
if isinstance(query, QueryBuilder):
|
|
267
|
+
if not query.has_name():
|
|
268
|
+
raise ValueError("QueryBuilder must have name in constructor for board panels")
|
|
269
|
+
|
|
270
|
+
self._query_builder_panels.append(
|
|
271
|
+
QueryBuilderPanel(
|
|
272
|
+
builder=query,
|
|
273
|
+
position=position,
|
|
274
|
+
style=style,
|
|
275
|
+
visualization=visualization,
|
|
276
|
+
dataset_override=dataset,
|
|
277
|
+
)
|
|
278
|
+
)
|
|
279
|
+
else:
|
|
280
|
+
if not annotation_id:
|
|
281
|
+
raise ValueError("annotation_id required when using existing query ID")
|
|
282
|
+
|
|
283
|
+
self._existing_query_panels.append(
|
|
284
|
+
ExistingQueryPanel(
|
|
285
|
+
query_id=query,
|
|
286
|
+
annotation_id=annotation_id,
|
|
287
|
+
position=position,
|
|
288
|
+
style=style,
|
|
289
|
+
visualization=visualization,
|
|
290
|
+
dataset=dataset,
|
|
291
|
+
)
|
|
292
|
+
)
|
|
293
|
+
return self
|
|
294
|
+
|
|
295
|
+
def slo(
|
|
296
|
+
self,
|
|
297
|
+
slo: SLOBuilder | str,
|
|
298
|
+
*,
|
|
299
|
+
position: tuple[int, int, int, int] | None = None,
|
|
300
|
+
) -> BoardBuilder:
|
|
301
|
+
"""Add an SLO panel.
|
|
302
|
+
|
|
303
|
+
Args:
|
|
304
|
+
slo: SLOBuilder instance OR existing SLO ID string
|
|
305
|
+
position: (x, y, width, height) for manual layout
|
|
306
|
+
|
|
307
|
+
Example - Inline SLOBuilder:
|
|
308
|
+
.slo(
|
|
309
|
+
SLOBuilder("API Availability")
|
|
310
|
+
.dataset("api-logs")
|
|
311
|
+
.target_nines(3)
|
|
312
|
+
.sli(alias="success_rate"),
|
|
313
|
+
position=(9, 0, 3, 6)
|
|
314
|
+
)
|
|
315
|
+
|
|
316
|
+
Example - Existing SLO:
|
|
317
|
+
.slo("slo-id-123", position=(8, 0, 4, 6))
|
|
318
|
+
"""
|
|
319
|
+
from honeycomb.models.slo_builder import SLOBuilder
|
|
320
|
+
|
|
321
|
+
if isinstance(slo, SLOBuilder):
|
|
322
|
+
self._slo_builder_panels.append(SLOBuilderPanel(builder=slo, position=position))
|
|
323
|
+
else:
|
|
324
|
+
self._existing_slo_panels.append(ExistingSLOPanel(slo_id=slo, position=position))
|
|
325
|
+
return self
|
|
326
|
+
|
|
327
|
+
def text(
|
|
328
|
+
self,
|
|
329
|
+
content: str,
|
|
330
|
+
*,
|
|
331
|
+
position: tuple[int, int, int, int] | None = None,
|
|
332
|
+
) -> BoardBuilder:
|
|
333
|
+
"""Add a text panel (supports markdown, max 10000 chars).
|
|
334
|
+
|
|
335
|
+
Args:
|
|
336
|
+
content: Markdown text content
|
|
337
|
+
position: (x, y, width, height) for manual layout
|
|
338
|
+
|
|
339
|
+
Example:
|
|
340
|
+
.text("## Service Status\\n\\nAll systems operational", position=(0, 6, 12, 2))
|
|
341
|
+
"""
|
|
342
|
+
if len(content) > 10000:
|
|
343
|
+
raise ValueError(f"Text content must be <= 10000 characters, got {len(content)}")
|
|
344
|
+
self._text_panels.append(TextPanel(content=content, position=position))
|
|
345
|
+
return self
|
|
346
|
+
|
|
347
|
+
# -------------------------------------------------------------------------
|
|
348
|
+
# Build
|
|
349
|
+
# -------------------------------------------------------------------------
|
|
350
|
+
|
|
351
|
+
def build(self) -> BoardBundle:
|
|
352
|
+
"""Build BoardBundle for orchestration.
|
|
353
|
+
|
|
354
|
+
Returns:
|
|
355
|
+
BoardBundle (not BoardCreate) for client orchestration
|
|
356
|
+
|
|
357
|
+
Raises:
|
|
358
|
+
ValueError: If manual layout requires positions but some are missing
|
|
359
|
+
"""
|
|
360
|
+
# Validate manual layout requires all positions
|
|
361
|
+
if self._layout_generation == "manual":
|
|
362
|
+
all_panels = (
|
|
363
|
+
self._query_builder_panels
|
|
364
|
+
+ self._existing_query_panels
|
|
365
|
+
+ self._slo_builder_panels
|
|
366
|
+
+ self._existing_slo_panels
|
|
367
|
+
+ self._text_panels
|
|
368
|
+
)
|
|
369
|
+
for i, panel in enumerate(all_panels):
|
|
370
|
+
if panel.position is None:
|
|
371
|
+
raise ValueError(
|
|
372
|
+
f"Manual layout requires position for all panels. "
|
|
373
|
+
f"Panel {i} missing position. Use position=(x, y, width, height)"
|
|
374
|
+
)
|
|
375
|
+
|
|
376
|
+
return BoardBundle(
|
|
377
|
+
board_name=self._name,
|
|
378
|
+
board_description=self._description,
|
|
379
|
+
layout_generation=self._layout_generation,
|
|
380
|
+
tags=self._get_all_tags(),
|
|
381
|
+
preset_filters=self._preset_filters if self._preset_filters else None,
|
|
382
|
+
query_builder_panels=self._query_builder_panels,
|
|
383
|
+
existing_query_panels=self._existing_query_panels,
|
|
384
|
+
slo_builder_panels=self._slo_builder_panels,
|
|
385
|
+
existing_slo_panels=self._existing_slo_panels,
|
|
386
|
+
text_panels=self._text_panels,
|
|
387
|
+
)
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"""Pydantic models for Honeycomb Boards."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any, Literal
|
|
6
|
+
|
|
7
|
+
from pydantic import BaseModel, Field
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class BoardCreate(BaseModel):
|
|
11
|
+
"""Model for creating a new board.
|
|
12
|
+
|
|
13
|
+
The Honeycomb Board API only supports flexible boards.
|
|
14
|
+
|
|
15
|
+
Attributes:
|
|
16
|
+
name: Human-readable name (1-255 chars)
|
|
17
|
+
description: Longer description (0-1024 chars)
|
|
18
|
+
type: Board type (only "flexible" is supported)
|
|
19
|
+
panels: Array of board panels (queries, SLOs, text)
|
|
20
|
+
layout_generation: Layout mode - "auto" or "manual" (default: "manual")
|
|
21
|
+
tags: Array of tag objects (max 10 items)
|
|
22
|
+
preset_filters: Array of preset filter objects
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
name: str = Field(description="Human-readable name for the board (1-255 chars)")
|
|
26
|
+
description: str | None = Field(default=None, description="Longer description (0-1024 chars)")
|
|
27
|
+
type: str = Field(
|
|
28
|
+
default="flexible",
|
|
29
|
+
description="Board type: only 'flexible' is supported",
|
|
30
|
+
)
|
|
31
|
+
panels: list[dict[str, Any]] | None = Field(
|
|
32
|
+
default=None,
|
|
33
|
+
description="Array of board panels (queries, SLOs, text)",
|
|
34
|
+
)
|
|
35
|
+
layout_generation: Literal["auto", "manual"] = Field(
|
|
36
|
+
default="manual",
|
|
37
|
+
description="Layout mode: 'auto' or 'manual'",
|
|
38
|
+
)
|
|
39
|
+
tags: list[dict[str, str]] | None = Field(
|
|
40
|
+
default=None,
|
|
41
|
+
description="Array of tag objects (max 10)",
|
|
42
|
+
)
|
|
43
|
+
preset_filters: list[dict[str, str]] | None = Field(
|
|
44
|
+
default=None,
|
|
45
|
+
description="Array of preset filter objects",
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
def model_dump_for_api(self) -> dict[str, Any]:
|
|
49
|
+
"""Serialize for API request."""
|
|
50
|
+
data: dict[str, Any] = {
|
|
51
|
+
"name": self.name,
|
|
52
|
+
"type": self.type,
|
|
53
|
+
"layout_generation": self.layout_generation,
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if self.description:
|
|
57
|
+
data["description"] = self.description
|
|
58
|
+
|
|
59
|
+
if self.panels:
|
|
60
|
+
data["panels"] = self.panels
|
|
61
|
+
|
|
62
|
+
if self.tags:
|
|
63
|
+
data["tags"] = self.tags
|
|
64
|
+
|
|
65
|
+
if self.preset_filters:
|
|
66
|
+
data["preset_filters"] = self.preset_filters
|
|
67
|
+
|
|
68
|
+
return data
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class Board(BaseModel):
|
|
72
|
+
"""A Honeycomb board (response model)."""
|
|
73
|
+
|
|
74
|
+
id: str = Field(description="Unique identifier")
|
|
75
|
+
name: str = Field(description="Human-readable name")
|
|
76
|
+
description: str | None = Field(default=None, description="Longer description")
|
|
77
|
+
type: str = Field(default="flexible", description="Board type")
|
|
78
|
+
panels: list[dict] | None = Field(default=None, description="Board panels")
|
|
79
|
+
links: dict | None = Field(default=None, description="Board links")
|
|
80
|
+
layout_generation: str | None = Field(
|
|
81
|
+
default=None,
|
|
82
|
+
description="Layout mode: 'auto' or 'manual'",
|
|
83
|
+
)
|
|
84
|
+
tags: list[dict] | None = Field(default=None, description="Board tags")
|
|
85
|
+
|
|
86
|
+
model_config = {"extra": "allow"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"""Pydantic models for Honeycomb Burn Alerts."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from datetime import datetime
|
|
6
|
+
from enum import Enum
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
from pydantic import BaseModel, Field
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class BurnAlertType(str, Enum):
|
|
13
|
+
"""Burn alert types."""
|
|
14
|
+
|
|
15
|
+
EXHAUSTION_TIME = "exhaustion_time"
|
|
16
|
+
BUDGET_RATE = "budget_rate"
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class BurnAlertRecipient(BaseModel):
|
|
20
|
+
"""A recipient for burn alert notifications.
|
|
21
|
+
|
|
22
|
+
Either id (recommended) OR type+target (deprecated) must be provided.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
id: str | None = Field(default=None, description="ID of the recipient")
|
|
26
|
+
type: str | None = Field(default=None, description="Type of recipient (email, slack, etc)")
|
|
27
|
+
target: str | None = Field(default=None, description="Target address (for backwards compat)")
|
|
28
|
+
details: dict[str, Any] | None = Field(default=None, description="Additional details")
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class BurnAlertCreate(BaseModel):
|
|
32
|
+
"""Model for creating a new burn alert."""
|
|
33
|
+
|
|
34
|
+
alert_type: BurnAlertType = Field(description="Type of burn alert")
|
|
35
|
+
slo_id: str = Field(description="ID of the SLO to monitor")
|
|
36
|
+
description: str | None = Field(default=None, description="Description of the burn alert")
|
|
37
|
+
recipients: list[BurnAlertRecipient] = Field(
|
|
38
|
+
default_factory=list,
|
|
39
|
+
description="List of recipients to notify when alert fires",
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
# Exhaustion time fields (required when alert_type=exhaustion_time)
|
|
43
|
+
exhaustion_minutes: int | None = Field(
|
|
44
|
+
default=None,
|
|
45
|
+
description="Minutes until SLO budget exhaustion (for exhaustion_time alerts)",
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
# Budget rate fields (required when alert_type=budget_rate)
|
|
49
|
+
budget_rate_window_minutes: int | None = Field(
|
|
50
|
+
default=None, description="Time window in minutes (for budget_rate alerts)"
|
|
51
|
+
)
|
|
52
|
+
budget_rate_decrease_threshold_per_million: int | None = Field(
|
|
53
|
+
default=None,
|
|
54
|
+
description="Budget decrease threshold per million (for budget_rate alerts)",
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
def model_dump_for_api(self) -> dict[str, Any]:
|
|
58
|
+
"""Serialize for API request."""
|
|
59
|
+
# Build recipient list - support both id-based and inline (type+target) formats
|
|
60
|
+
recipients_data = []
|
|
61
|
+
for r in self.recipients:
|
|
62
|
+
recipient_dict: dict[str, Any] = {}
|
|
63
|
+
if r.id:
|
|
64
|
+
# ID-based recipient (recommended)
|
|
65
|
+
recipient_dict["id"] = r.id
|
|
66
|
+
if r.type:
|
|
67
|
+
recipient_dict["type"] = r.type
|
|
68
|
+
else:
|
|
69
|
+
# Inline recipient (deprecated but still supported)
|
|
70
|
+
if r.type:
|
|
71
|
+
recipient_dict["type"] = r.type
|
|
72
|
+
if r.target:
|
|
73
|
+
recipient_dict["target"] = r.target
|
|
74
|
+
if r.details:
|
|
75
|
+
recipient_dict["details"] = r.details
|
|
76
|
+
recipients_data.append(recipient_dict)
|
|
77
|
+
|
|
78
|
+
data: dict[str, Any] = {
|
|
79
|
+
"alert_type": self.alert_type.value,
|
|
80
|
+
"slo": {"id": self.slo_id},
|
|
81
|
+
"recipients": recipients_data,
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if self.description:
|
|
85
|
+
data["description"] = self.description
|
|
86
|
+
|
|
87
|
+
if self.alert_type == BurnAlertType.EXHAUSTION_TIME and self.exhaustion_minutes:
|
|
88
|
+
data["exhaustion_minutes"] = self.exhaustion_minutes
|
|
89
|
+
elif self.alert_type == BurnAlertType.BUDGET_RATE:
|
|
90
|
+
if self.budget_rate_window_minutes:
|
|
91
|
+
data["budget_rate_window_minutes"] = self.budget_rate_window_minutes
|
|
92
|
+
if self.budget_rate_decrease_threshold_per_million:
|
|
93
|
+
data["budget_rate_decrease_threshold_per_million"] = (
|
|
94
|
+
self.budget_rate_decrease_threshold_per_million
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
return data
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
class BurnAlert(BaseModel):
|
|
101
|
+
"""A Honeycomb burn alert (response model)."""
|
|
102
|
+
|
|
103
|
+
id: str = Field(description="Unique identifier")
|
|
104
|
+
alert_type: BurnAlertType = Field(description="Type of burn alert")
|
|
105
|
+
slo_id: str | None = Field(default=None, description="ID of the associated SLO")
|
|
106
|
+
description: str | None = Field(default=None, description="Description of the burn alert")
|
|
107
|
+
triggered: bool = Field(default=False, description="Whether alert is currently triggered")
|
|
108
|
+
|
|
109
|
+
# Exhaustion time fields
|
|
110
|
+
exhaustion_minutes: int | None = Field(default=None, description="Minutes until exhaustion")
|
|
111
|
+
|
|
112
|
+
# Budget rate fields
|
|
113
|
+
budget_rate_window_minutes: int | None = Field(default=None, description="Time window")
|
|
114
|
+
budget_rate_decrease_threshold_per_million: int | None = Field(
|
|
115
|
+
default=None, description="Budget decrease threshold"
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
recipients: list[dict] | None = Field(default=None, description="List of recipients")
|
|
119
|
+
slo: dict | None = Field(default=None, description="SLO details")
|
|
120
|
+
|
|
121
|
+
created_at: datetime | None = Field(default=None, description="Creation timestamp")
|
|
122
|
+
updated_at: datetime | None = Field(default=None, description="Last update timestamp")
|
|
123
|
+
|
|
124
|
+
model_config = {"extra": "allow"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"""Pydantic models for Honeycomb Columns."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from datetime import datetime
|
|
6
|
+
from enum import Enum
|
|
7
|
+
|
|
8
|
+
from pydantic import BaseModel, Field
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ColumnType(str, Enum):
|
|
12
|
+
"""Column data types."""
|
|
13
|
+
|
|
14
|
+
STRING = "string"
|
|
15
|
+
INTEGER = "integer"
|
|
16
|
+
FLOAT = "float"
|
|
17
|
+
BOOLEAN = "boolean"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class ColumnCreate(BaseModel):
|
|
21
|
+
"""Model for creating a new column."""
|
|
22
|
+
|
|
23
|
+
key_name: str = Field(description="Name of the column")
|
|
24
|
+
type: ColumnType = Field(
|
|
25
|
+
default=ColumnType.STRING, description="Type of data the column contains"
|
|
26
|
+
)
|
|
27
|
+
description: str | None = Field(default=None, description="Column description")
|
|
28
|
+
hidden: bool = Field(
|
|
29
|
+
default=False,
|
|
30
|
+
description="If true, column is excluded from autocomplete and raw data field lists",
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
def model_dump_for_api(self) -> dict:
|
|
34
|
+
"""Serialize for API request."""
|
|
35
|
+
data = {
|
|
36
|
+
"key_name": self.key_name,
|
|
37
|
+
"type": self.type.value,
|
|
38
|
+
"hidden": self.hidden,
|
|
39
|
+
}
|
|
40
|
+
if self.description:
|
|
41
|
+
data["description"] = self.description
|
|
42
|
+
return data
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class Column(BaseModel):
|
|
46
|
+
"""A Honeycomb column (response model)."""
|
|
47
|
+
|
|
48
|
+
id: str = Field(description="Unique identifier")
|
|
49
|
+
key_name: str = Field(description="Name of the column")
|
|
50
|
+
type: ColumnType = Field(description="Type of data the column contains")
|
|
51
|
+
description: str | None = Field(default=None, description="Column description")
|
|
52
|
+
hidden: bool = Field(default=False, description="Whether column is hidden")
|
|
53
|
+
last_written: datetime | None = Field(
|
|
54
|
+
default=None, description="Timestamp when column was last written to"
|
|
55
|
+
)
|
|
56
|
+
created_at: datetime | None = Field(default=None, description="Creation timestamp")
|
|
57
|
+
updated_at: datetime | None = Field(default=None, description="Last update timestamp")
|
|
58
|
+
|
|
59
|
+
model_config = {"extra": "allow"}
|