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,184 @@
|
|
|
1
|
+
"""Schema generation utilities for Claude tool definitions.
|
|
2
|
+
|
|
3
|
+
This module provides utilities to generate JSON Schema definitions from Pydantic models,
|
|
4
|
+
suitable for Claude's tool calling API.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import re
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
from pydantic import BaseModel
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def validate_tool_name(name: str) -> None:
|
|
14
|
+
"""Validate tool name follows Claude's naming constraints.
|
|
15
|
+
|
|
16
|
+
Args:
|
|
17
|
+
name: The tool name to validate
|
|
18
|
+
|
|
19
|
+
Raises:
|
|
20
|
+
ValueError: If name doesn't match pattern ^[a-zA-Z0-9_-]{1,64}$
|
|
21
|
+
"""
|
|
22
|
+
pattern = r"^[a-zA-Z0-9_-]{1,64}$"
|
|
23
|
+
if not re.match(pattern, name):
|
|
24
|
+
raise ValueError(
|
|
25
|
+
f"Tool name '{name}' must match pattern {pattern}. "
|
|
26
|
+
"Only letters, numbers, underscores, and hyphens allowed, 1-64 characters."
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def generate_schema_from_model(
|
|
31
|
+
model: type[BaseModel], exclude_fields: set[str] | None = None
|
|
32
|
+
) -> dict[str, Any]:
|
|
33
|
+
"""Generate JSON Schema from a Pydantic model.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
model: The Pydantic model class to generate schema from
|
|
37
|
+
exclude_fields: Optional set of field names to exclude from schema
|
|
38
|
+
|
|
39
|
+
Returns:
|
|
40
|
+
JSON Schema dict suitable for Claude tool definitions
|
|
41
|
+
"""
|
|
42
|
+
exclude_fields = exclude_fields or set()
|
|
43
|
+
|
|
44
|
+
# Get the full JSON schema from Pydantic
|
|
45
|
+
full_schema = model.model_json_schema()
|
|
46
|
+
|
|
47
|
+
# Extract properties and required fields
|
|
48
|
+
properties = {
|
|
49
|
+
k: v for k, v in full_schema.get("properties", {}).items() if k not in exclude_fields
|
|
50
|
+
}
|
|
51
|
+
required = [f for f in full_schema.get("required", []) if f not in exclude_fields]
|
|
52
|
+
|
|
53
|
+
# Build the schema
|
|
54
|
+
schema: dict[str, Any] = {
|
|
55
|
+
"type": "object",
|
|
56
|
+
"properties": properties,
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if required:
|
|
60
|
+
schema["required"] = required
|
|
61
|
+
|
|
62
|
+
# Handle definitions/defs for nested models
|
|
63
|
+
if "$defs" in full_schema:
|
|
64
|
+
schema["$defs"] = full_schema["$defs"]
|
|
65
|
+
elif "definitions" in full_schema:
|
|
66
|
+
schema["definitions"] = full_schema["definitions"]
|
|
67
|
+
|
|
68
|
+
return schema
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def merge_schemas(*schemas: dict[str, Any]) -> dict[str, Any]:
|
|
72
|
+
"""Merge multiple JSON schemas into one.
|
|
73
|
+
|
|
74
|
+
Useful for combining schemas from multiple models (e.g., dataset + model-specific params).
|
|
75
|
+
|
|
76
|
+
Args:
|
|
77
|
+
*schemas: Variable number of schema dicts to merge
|
|
78
|
+
|
|
79
|
+
Returns:
|
|
80
|
+
Merged schema dict
|
|
81
|
+
"""
|
|
82
|
+
merged: dict[str, Any] = {
|
|
83
|
+
"type": "object",
|
|
84
|
+
"properties": {},
|
|
85
|
+
"required": [],
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
all_defs: dict[str, Any] = {}
|
|
89
|
+
|
|
90
|
+
for schema in schemas:
|
|
91
|
+
# Merge properties
|
|
92
|
+
merged["properties"].update(schema.get("properties", {}))
|
|
93
|
+
|
|
94
|
+
# Merge required fields
|
|
95
|
+
required = schema.get("required", [])
|
|
96
|
+
if required:
|
|
97
|
+
merged["required"].extend(required)
|
|
98
|
+
|
|
99
|
+
# Merge definitions
|
|
100
|
+
if "$defs" in schema:
|
|
101
|
+
all_defs.update(schema["$defs"])
|
|
102
|
+
elif "definitions" in schema:
|
|
103
|
+
all_defs.update(schema["definitions"])
|
|
104
|
+
|
|
105
|
+
# Deduplicate required fields
|
|
106
|
+
if merged["required"]:
|
|
107
|
+
merged["required"] = list(dict.fromkeys(merged["required"]))
|
|
108
|
+
else:
|
|
109
|
+
del merged["required"]
|
|
110
|
+
|
|
111
|
+
# Add definitions if any
|
|
112
|
+
if all_defs:
|
|
113
|
+
merged["$defs"] = all_defs
|
|
114
|
+
|
|
115
|
+
return merged
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def add_parameter(
|
|
119
|
+
schema: dict[str, Any],
|
|
120
|
+
name: str,
|
|
121
|
+
param_type: str,
|
|
122
|
+
description: str,
|
|
123
|
+
required: bool = True,
|
|
124
|
+
**kwargs: Any,
|
|
125
|
+
) -> None:
|
|
126
|
+
"""Add a parameter to an existing schema.
|
|
127
|
+
|
|
128
|
+
Args:
|
|
129
|
+
schema: The schema dict to modify
|
|
130
|
+
name: Parameter name
|
|
131
|
+
param_type: JSON Schema type (string, integer, object, array, etc.)
|
|
132
|
+
description: Parameter description
|
|
133
|
+
required: Whether parameter is required
|
|
134
|
+
**kwargs: Additional schema properties (enum, items, etc.)
|
|
135
|
+
"""
|
|
136
|
+
schema["properties"][name] = {
|
|
137
|
+
"type": param_type,
|
|
138
|
+
"description": description,
|
|
139
|
+
**kwargs,
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if required:
|
|
143
|
+
if "required" not in schema:
|
|
144
|
+
schema["required"] = []
|
|
145
|
+
if name not in schema["required"]:
|
|
146
|
+
schema["required"].append(name)
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def validate_schema(schema: dict[str, Any]) -> None:
|
|
150
|
+
"""Validate a JSON Schema is well-formed.
|
|
151
|
+
|
|
152
|
+
Args:
|
|
153
|
+
schema: The schema dict to validate
|
|
154
|
+
|
|
155
|
+
Raises:
|
|
156
|
+
ValueError: If schema is invalid
|
|
157
|
+
"""
|
|
158
|
+
if not isinstance(schema, dict):
|
|
159
|
+
raise ValueError("Schema must be a dictionary")
|
|
160
|
+
|
|
161
|
+
if schema.get("type") != "object":
|
|
162
|
+
raise ValueError("Schema type must be 'object'")
|
|
163
|
+
|
|
164
|
+
if "properties" not in schema:
|
|
165
|
+
raise ValueError("Schema must have 'properties' field")
|
|
166
|
+
|
|
167
|
+
if not isinstance(schema["properties"], dict):
|
|
168
|
+
raise ValueError("Schema properties must be a dictionary")
|
|
169
|
+
|
|
170
|
+
# Check all required fields exist in properties
|
|
171
|
+
required = schema.get("required", [])
|
|
172
|
+
properties = schema["properties"]
|
|
173
|
+
|
|
174
|
+
for field in required:
|
|
175
|
+
if field not in properties:
|
|
176
|
+
raise ValueError(f"Required field '{field}' not found in properties")
|
|
177
|
+
|
|
178
|
+
# Check all properties have descriptions
|
|
179
|
+
for field_name, field_schema in properties.items():
|
|
180
|
+
if "description" not in field_schema and "$ref" not in field_schema:
|
|
181
|
+
raise ValueError(
|
|
182
|
+
f"Field '{field_name}' missing description. "
|
|
183
|
+
"All fields must have descriptions for Claude tool definitions."
|
|
184
|
+
)
|
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: honeycomb-api
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Python client for the Honeycomb.io API
|
|
5
|
+
License-Expression: MIT
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
Keywords: honeycomb,observability,api,client,sdk
|
|
8
|
+
Author: Irving Popovetsky
|
|
9
|
+
Requires-Python: >=3.10
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
17
|
+
Classifier: Typing :: Typed
|
|
18
|
+
Requires-Dist: attrs (>=23.0)
|
|
19
|
+
Requires-Dist: httpx (>=0.27)
|
|
20
|
+
Requires-Dist: pydantic (>=2.0)
|
|
21
|
+
Requires-Dist: pytest-xdist (>=3.8.0,<4.0.0)
|
|
22
|
+
Requires-Dist: python-dateutil (>=2.8)
|
|
23
|
+
Project-URL: Homepage, https://github.com/irvingpop/honeycomb-api-python
|
|
24
|
+
Project-URL: Repository, https://github.com/irvingpop/honeycomb-api-python
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
|
|
27
|
+
# honeycomb-api-python
|
|
28
|
+
|
|
29
|
+
A modern, async-first Python client for the [Honeycomb.io](https://www.honeycomb.io/) API.
|
|
30
|
+
|
|
31
|
+
[](https://www.python.org/downloads/)
|
|
32
|
+
[](https://opensource.org/licenses/MIT)
|
|
33
|
+
[](https://github.com/astral-sh/ruff)
|
|
34
|
+
|
|
35
|
+
📚 **[Read the full documentation](https://irvingpop.github.io/honeycomb-api-python/)**
|
|
36
|
+
|
|
37
|
+
## Features
|
|
38
|
+
|
|
39
|
+
- **Async-first design** with full sync support
|
|
40
|
+
- **Fluent builder pattern** for queries, triggers, SLOs, and boards
|
|
41
|
+
- **Pydantic models** for type-safe request/response handling
|
|
42
|
+
- **Automatic retries** with exponential backoff for transient failures
|
|
43
|
+
- **Comprehensive error handling** with specific exception types
|
|
44
|
+
- **Dual authentication** support (API keys and Management keys)
|
|
45
|
+
- **Resource-oriented API** for intuitive usage
|
|
46
|
+
|
|
47
|
+
## Installation (coming soon)
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
pip install honeycomb-api-python
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Or with Poetry:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
poetry add honeycomb-api-python
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Quick Start
|
|
60
|
+
|
|
61
|
+
### Async Usage (Recommended)
|
|
62
|
+
|
|
63
|
+
```python
|
|
64
|
+
import asyncio
|
|
65
|
+
from honeycomb import HoneycombClient, QueryBuilder
|
|
66
|
+
|
|
67
|
+
async def main():
|
|
68
|
+
async with HoneycombClient(api_key="your-api-key") as client:
|
|
69
|
+
# List all datasets
|
|
70
|
+
datasets = await client.datasets.list_async()
|
|
71
|
+
for ds in datasets:
|
|
72
|
+
print(f"Dataset: {ds.name} ({ds.slug})")
|
|
73
|
+
|
|
74
|
+
# Run a query using the fluent QueryBuilder
|
|
75
|
+
query, result = await client.query_results.create_and_run_async(
|
|
76
|
+
QueryBuilder("Error Analysis") # Optional name for board integration
|
|
77
|
+
.dataset("my-dataset") # Dataset scope on builder
|
|
78
|
+
.last_24_hours() # Time preset matching Honeycomb UI
|
|
79
|
+
.count()
|
|
80
|
+
.p99("duration_ms")
|
|
81
|
+
.avg("duration_ms")
|
|
82
|
+
.gte("status_code", 500) # Filter shortcuts: gte, eq, contains, etc.
|
|
83
|
+
.group_by("service", "endpoint")
|
|
84
|
+
.order_by_count()
|
|
85
|
+
.limit(100)
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
for row in result.data.rows:
|
|
89
|
+
print(f"Service: {row['service']}, Count: {row['COUNT']}, P99: {row['P99']}")
|
|
90
|
+
|
|
91
|
+
asyncio.run(main())
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Sync Usage
|
|
95
|
+
|
|
96
|
+
```python
|
|
97
|
+
from honeycomb import HoneycombClient, QueryBuilder
|
|
98
|
+
|
|
99
|
+
with HoneycombClient(api_key="your-api-key", sync=True) as client:
|
|
100
|
+
datasets = client.datasets.list()
|
|
101
|
+
|
|
102
|
+
# Run queries with the same fluent API
|
|
103
|
+
query, result = client.query_results.create_and_run(
|
|
104
|
+
QueryBuilder()
|
|
105
|
+
.dataset("my-dataset")
|
|
106
|
+
.last_1_hour()
|
|
107
|
+
.count()
|
|
108
|
+
.group_by("endpoint"),
|
|
109
|
+
)
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Builders with resource mixins
|
|
113
|
+
|
|
114
|
+
### TriggerBuilder
|
|
115
|
+
|
|
116
|
+
```python
|
|
117
|
+
from honeycomb import TriggerBuilder
|
|
118
|
+
|
|
119
|
+
# Create sophisticated alert in one fluent call
|
|
120
|
+
trigger = await client.triggers.create_async(
|
|
121
|
+
"api-logs",
|
|
122
|
+
TriggerBuilder("High Error Rate")
|
|
123
|
+
.dataset("api-logs") # Or .environment_wide() for all datasets
|
|
124
|
+
.last_15_minutes() # Frequency presets
|
|
125
|
+
.count()
|
|
126
|
+
.gte("status_code", 500)
|
|
127
|
+
.threshold_gt(100) # Threshold shortcuts
|
|
128
|
+
.email("oncall@example.com") # Multiple recipients
|
|
129
|
+
.pagerduty("critical")
|
|
130
|
+
.slack("#incidents")
|
|
131
|
+
.tag("team", "backend") # Tag support with validation
|
|
132
|
+
.build()
|
|
133
|
+
)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### SLOBuilder
|
|
137
|
+
|
|
138
|
+
```python
|
|
139
|
+
from honeycomb import SLOBuilder
|
|
140
|
+
|
|
141
|
+
# Create SLO with derived column and burn alerts automatically
|
|
142
|
+
slos = await client.slos.create_from_bundle_async(
|
|
143
|
+
SLOBuilder("API Availability")
|
|
144
|
+
.dataset("api-logs")
|
|
145
|
+
.target_nines(3) # 99.9% = .target_percentage(99.9)
|
|
146
|
+
.time_period_days(30)
|
|
147
|
+
.sli(
|
|
148
|
+
alias="success_rate",
|
|
149
|
+
expression="IF(LT($status_code, 400), 1, 0)",
|
|
150
|
+
description="Success indicator"
|
|
151
|
+
)
|
|
152
|
+
# Burn alerts with integrated recipients
|
|
153
|
+
.exhaustion_alert(exhaustion_minutes=15)
|
|
154
|
+
.budget_rate_alert(window_minutes=60, threshold_percentage=10)
|
|
155
|
+
.email("sre@example.com")
|
|
156
|
+
.pagerduty("critical")
|
|
157
|
+
.build()
|
|
158
|
+
)
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### BoardBuilder
|
|
162
|
+
|
|
163
|
+
```python
|
|
164
|
+
from honeycomb import BoardBuilder, QueryBuilder, SLOBuilder
|
|
165
|
+
|
|
166
|
+
# Create board with inline queries and SLOs - no pre-creation needed!
|
|
167
|
+
board = await client.boards.create_from_bundle_async(
|
|
168
|
+
BoardBuilder("Production Dashboard")
|
|
169
|
+
.description("Service health monitoring")
|
|
170
|
+
.auto_layout()
|
|
171
|
+
.tag("team", "platform")
|
|
172
|
+
# Inline QueryBuilder - creates query automatically
|
|
173
|
+
.query(
|
|
174
|
+
QueryBuilder("Request Count")
|
|
175
|
+
.dataset("api-logs")
|
|
176
|
+
.last_24_hours()
|
|
177
|
+
.count()
|
|
178
|
+
.group_by("service"),
|
|
179
|
+
style="graph"
|
|
180
|
+
)
|
|
181
|
+
# Inline SLOBuilder - creates SLO automatically
|
|
182
|
+
.slo(
|
|
183
|
+
SLOBuilder("API Availability")
|
|
184
|
+
.dataset("api-logs")
|
|
185
|
+
.target_nines(3)
|
|
186
|
+
.sli(alias="sli_success")
|
|
187
|
+
)
|
|
188
|
+
# Environment-wide query
|
|
189
|
+
.query(
|
|
190
|
+
QueryBuilder("P99 Latency")
|
|
191
|
+
.environment_wide() # All datasets
|
|
192
|
+
.last_1_hour()
|
|
193
|
+
.p99("duration_ms")
|
|
194
|
+
.group_by("endpoint"),
|
|
195
|
+
style="table"
|
|
196
|
+
)
|
|
197
|
+
.build()
|
|
198
|
+
)
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
See [full documentation](https://irvingpop.github.io/honeycomb-api-python/) for more examples and advanced features.
|
|
202
|
+
|
|
203
|
+
## Authentication
|
|
204
|
+
|
|
205
|
+
The client supports two authentication methods:
|
|
206
|
+
|
|
207
|
+
### API Key (Single Environment)
|
|
208
|
+
|
|
209
|
+
For accessing a single Honeycomb environment:
|
|
210
|
+
|
|
211
|
+
```python
|
|
212
|
+
client = HoneycombClient(api_key="your-api-key")
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
The API key is sent via the `X-Honeycomb-Team` header.
|
|
216
|
+
|
|
217
|
+
### Management Key (Multi-Environment)
|
|
218
|
+
|
|
219
|
+
For management operations across multiple environments:
|
|
220
|
+
|
|
221
|
+
```python
|
|
222
|
+
client = HoneycombClient(
|
|
223
|
+
management_key="your-key-id",
|
|
224
|
+
management_secret="your-key-secret"
|
|
225
|
+
)
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
Management credentials are sent via the `Authorization: Bearer` header.
|
|
229
|
+
|
|
230
|
+
## Usage Guide
|
|
231
|
+
|
|
232
|
+
For complete usage examples and guides, see the [full documentation](https://irvingpop.github.io/honeycomb-api-python/):
|
|
233
|
+
|
|
234
|
+
- [Quick Start Guide](https://irvingpop.github.io/honeycomb-api-python/getting-started/quickstart/) - Common operations with examples
|
|
235
|
+
- [Working with Queries](https://irvingpop.github.io/honeycomb-api-python/usage/queries/) - Saved, ephemeral, and combined query patterns
|
|
236
|
+
- [Working with Triggers](https://irvingpop.github.io/honeycomb-api-python/usage/triggers/) - Alert configuration
|
|
237
|
+
- [Working with SLOs](https://irvingpop.github.io/honeycomb-api-python/usage/slos/) - Service level objectives
|
|
238
|
+
- [API Reference](https://irvingpop.github.io/honeycomb-api-python/api/resources/) - Complete API documentation
|
|
239
|
+
|
|
240
|
+
## Error Handling
|
|
241
|
+
|
|
242
|
+
The client provides specific exception types for different error scenarios (authentication, rate limiting, validation, etc.). All exceptions include useful debugging information like HTTP status codes and request IDs for support tickets.
|
|
243
|
+
|
|
244
|
+
See the [Error Handling Guide](https://irvingpop.github.io/honeycomb-api-python/advanced/error-handling/) for complete documentation and best practices.
|
|
245
|
+
|
|
246
|
+
## Configuration
|
|
247
|
+
|
|
248
|
+
### Client Options
|
|
249
|
+
|
|
250
|
+
```python
|
|
251
|
+
from honeycomb import HoneycombClient, RetryConfig
|
|
252
|
+
|
|
253
|
+
client = HoneycombClient(
|
|
254
|
+
api_key="...", # API key for single-environment access
|
|
255
|
+
management_key="...", # Management key ID (alternative auth)
|
|
256
|
+
management_secret="...", # Management key secret
|
|
257
|
+
base_url="https://api.honeycomb.io", # API base URL (default)
|
|
258
|
+
timeout=30.0, # Request timeout in seconds (default: 30)
|
|
259
|
+
max_retries=3, # Max retry attempts (default: 3)
|
|
260
|
+
retry_config=None, # Custom retry configuration (optional)
|
|
261
|
+
sync=False, # Use sync mode (default: False)
|
|
262
|
+
)
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### Retry Behavior
|
|
266
|
+
|
|
267
|
+
The client automatically retries requests on:
|
|
268
|
+
- HTTP 429 (Rate Limited) - respects `Retry-After` header
|
|
269
|
+
- HTTP 500, 502, 503, 504 (Server Errors)
|
|
270
|
+
- Connection timeouts
|
|
271
|
+
|
|
272
|
+
Retries use exponential backoff: 1s, 2s, 4s, ... up to 30s max.
|
|
273
|
+
|
|
274
|
+
#### Custom Retry Configuration
|
|
275
|
+
|
|
276
|
+
```python
|
|
277
|
+
from honeycomb import HoneycombClient, RetryConfig
|
|
278
|
+
|
|
279
|
+
# Customize retry behavior
|
|
280
|
+
retry_config = RetryConfig(
|
|
281
|
+
max_retries=5, # More retry attempts
|
|
282
|
+
base_delay=2.0, # Start with 2s delay
|
|
283
|
+
max_delay=60.0, # Cap at 60s
|
|
284
|
+
exponential_base=2.0, # Double each time
|
|
285
|
+
retry_statuses={429, 503}, # Only retry these status codes
|
|
286
|
+
)
|
|
287
|
+
|
|
288
|
+
client = HoneycombClient(api_key="...", retry_config=retry_config)
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
## API Reference
|
|
292
|
+
|
|
293
|
+
The client provides resource-oriented access to the Honeycomb API:
|
|
294
|
+
|
|
295
|
+
**Core Resources:**
|
|
296
|
+
- `client.datasets` - Dataset management
|
|
297
|
+
- `client.triggers` - Alert triggers
|
|
298
|
+
- `client.slos` - Service level objectives
|
|
299
|
+
- `client.boards` - Dashboards
|
|
300
|
+
- `client.queries` - Saved queries
|
|
301
|
+
- `client.query_results` - Query execution
|
|
302
|
+
|
|
303
|
+
**Data Management:**
|
|
304
|
+
- `client.columns` - Column schema management
|
|
305
|
+
- `client.markers` - Event markers and annotations
|
|
306
|
+
- `client.recipients` - Notification recipients
|
|
307
|
+
- `client.burn_alerts` - SLO burn rate alerts
|
|
308
|
+
- `client.events` - Event ingestion (send data to Honeycomb)
|
|
309
|
+
|
|
310
|
+
**Team Management (v2 - requires Management Key):**
|
|
311
|
+
- `client.api_keys` - API key management (team-scoped)
|
|
312
|
+
- `client.environments` - Environment management (team-scoped)
|
|
313
|
+
|
|
314
|
+
All methods have both sync and async variants (`list()` / `list_async()`).
|
|
315
|
+
|
|
316
|
+
See the [API Reference](https://irvingpop.github.io/honeycomb-api-python/api/resources/) for complete documentation.
|
|
317
|
+
|
|
318
|
+
## Development
|
|
319
|
+
|
|
320
|
+
### Prerequisites
|
|
321
|
+
|
|
322
|
+
- Python 3.10+
|
|
323
|
+
- [Poetry](https://python-poetry.org/) for dependency management
|
|
324
|
+
- [direnv](https://direnv.net/) (optional, for environment management)
|
|
325
|
+
- Make
|
|
326
|
+
|
|
327
|
+
### Setup
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
# Clone the repository
|
|
331
|
+
git clone https://github.com/irvingpop/honeycomb-api-python.git
|
|
332
|
+
cd honeycomb-api-python
|
|
333
|
+
|
|
334
|
+
# Install dependencies
|
|
335
|
+
make install-dev
|
|
336
|
+
# Or: poetry install
|
|
337
|
+
|
|
338
|
+
# Set up environment variables (for live API testing)
|
|
339
|
+
cp .envrc.example .envrc
|
|
340
|
+
# Edit .envrc with your API key
|
|
341
|
+
direnv allow
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### Make Commands
|
|
345
|
+
|
|
346
|
+
All common development tasks are available via `make`. Run `make help` for a full list:
|
|
347
|
+
|
|
348
|
+
```bash
|
|
349
|
+
make help # Show all available commands
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
#### Setup
|
|
353
|
+
| Command | Description |
|
|
354
|
+
|---------|-------------|
|
|
355
|
+
| `make install` | Install poetry production dependencies only |
|
|
356
|
+
| `make install-dev` | Install all poetry dependencies (including dev) |
|
|
357
|
+
|
|
358
|
+
#### Code Quality
|
|
359
|
+
| Command | Description |
|
|
360
|
+
|---------|-------------|
|
|
361
|
+
| `make lint` | Run linter (ruff check) |
|
|
362
|
+
| `make lint-fix` | Run linter and auto-fix issues |
|
|
363
|
+
| `make format` | Format code with ruff |
|
|
364
|
+
| `make typecheck` | Run type checker (mypy) |
|
|
365
|
+
| `make check` | Run all checks (lint + typecheck) |
|
|
366
|
+
|
|
367
|
+
#### Testing
|
|
368
|
+
| Command | Description |
|
|
369
|
+
|---------|-------------|
|
|
370
|
+
| `make test` | Run all tests |
|
|
371
|
+
| `make test-unit` | Run only unit tests |
|
|
372
|
+
| `make test-cov` | Run tests with coverage report |
|
|
373
|
+
| `make test-live` | Run live API tests (requires `HONEYCOMB_API_KEY`) |
|
|
374
|
+
|
|
375
|
+
#### Build & Publish
|
|
376
|
+
| Command | Description |
|
|
377
|
+
|---------|-------------|
|
|
378
|
+
| `make build` | Build distribution packages |
|
|
379
|
+
| `make publish` | Publish to PyPI |
|
|
380
|
+
| `make publish-test` | Publish to Test PyPI |
|
|
381
|
+
|
|
382
|
+
#### Maintenance
|
|
383
|
+
| Command | Description |
|
|
384
|
+
|---------|-------------|
|
|
385
|
+
| `make clean` | Remove build artifacts and cache files |
|
|
386
|
+
| `make update-deps` | Update dependencies to latest versions |
|
|
387
|
+
| `make ci` | Run full CI pipeline (install, check, test) |
|
|
388
|
+
|
|
389
|
+
### Running Tests (Manual)
|
|
390
|
+
|
|
391
|
+
```bash
|
|
392
|
+
# Run all tests
|
|
393
|
+
make test
|
|
394
|
+
# Or: poetry run pytest tests/ -v
|
|
395
|
+
|
|
396
|
+
# Run with coverage
|
|
397
|
+
make test-cov
|
|
398
|
+
# Or: poetry run pytest --cov=honeycomb --cov-report=html
|
|
399
|
+
|
|
400
|
+
# Run specific test file
|
|
401
|
+
poetry run pytest tests/unit/test_wrapper_client.py -v
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
### Code Quality (Manual)
|
|
405
|
+
|
|
406
|
+
```bash
|
|
407
|
+
# Run all checks
|
|
408
|
+
make check
|
|
409
|
+
|
|
410
|
+
# Or run individually:
|
|
411
|
+
poetry run ruff check src/ tests/ # Linting
|
|
412
|
+
poetry run ruff format src/ tests/ # Formatting
|
|
413
|
+
poetry run mypy src/ # Type checking
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
## Contributing
|
|
417
|
+
|
|
418
|
+
Contributions are welcome! Please follow these steps:
|
|
419
|
+
|
|
420
|
+
1. Fork the repository
|
|
421
|
+
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
|
|
422
|
+
3. Make your changes
|
|
423
|
+
4. Run checks and tests (`make check && make test`)
|
|
424
|
+
5. Commit your changes (`git commit -m 'Add amazing feature'`)
|
|
425
|
+
6. Push to the branch (`git push origin feature/amazing-feature`)
|
|
426
|
+
7. Open a Pull Request
|
|
427
|
+
|
|
428
|
+
### Guidelines
|
|
429
|
+
|
|
430
|
+
- Follow the existing code style (enforced by Ruff)
|
|
431
|
+
- Add tests for new functionality
|
|
432
|
+
- Update documentation as needed
|
|
433
|
+
- Keep commits focused and atomic
|
|
434
|
+
- Run `make ci` before submitting to ensure all checks pass
|
|
435
|
+
|
|
436
|
+
## License
|
|
437
|
+
|
|
438
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
439
|
+
|
|
440
|
+
## Related Links
|
|
441
|
+
|
|
442
|
+
- [Honeycomb Documentation](https://docs.honeycomb.io/)
|
|
443
|
+
- [Honeycomb API Reference](https://docs.honeycomb.io/api/)
|
|
444
|
+
- [Issue Tracker](https://github.com/irvingpop/honeycomb-api-python/issues)
|
|
445
|
+
|
|
446
|
+
## Acknowledgments
|
|
447
|
+
|
|
448
|
+
- Built with [httpx](https://www.python-httpx.org/) for async HTTP
|
|
449
|
+
- Models powered by [Pydantic](https://docs.pydantic.dev/)
|
|
450
|
+
- API spec from [Honeycomb OpenAPI](https://docs.honeycomb.io/api/)
|
|
451
|
+
|