honeycomb-api 0.1.0__py3-none-any.whl → 0.5.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- honeycomb/__init__.py +9 -0
- honeycomb/_generated/api/auth/get_auth.py +2 -5
- honeycomb/_generated/api/auth/get_v2_auth.py +2 -5
- honeycomb/_generated/api/boards/create_board.py +6 -5
- honeycomb/_generated/api/boards/create_board_view.py +14 -9
- honeycomb/_generated/api/boards/delete_board.py +2 -5
- honeycomb/_generated/api/boards/delete_board_view.py +2 -5
- honeycomb/_generated/api/boards/get_board.py +2 -5
- honeycomb/_generated/api/boards/get_board_view.py +2 -5
- honeycomb/_generated/api/boards/list_board_views.py +10 -9
- honeycomb/_generated/api/boards/list_boards.py +2 -5
- honeycomb/_generated/api/boards/update_board.py +10 -5
- honeycomb/_generated/api/boards/update_board_view.py +2 -5
- honeycomb/_generated/api/burn_alerts/create_burn_alert.py +6 -8
- honeycomb/_generated/api/burn_alerts/delete_burn_alert.py +2 -5
- honeycomb/_generated/api/burn_alerts/get_burn_alert.py +2 -5
- honeycomb/_generated/api/burn_alerts/list_burn_alerts_by_slo.py +2 -5
- honeycomb/_generated/api/calculated_fields/create_calculated_field.py +2 -5
- honeycomb/_generated/api/calculated_fields/delete_calculated_field.py +2 -5
- honeycomb/_generated/api/calculated_fields/get_calculated_field.py +2 -5
- honeycomb/_generated/api/calculated_fields/list_calculated_fields.py +2 -8
- honeycomb/_generated/api/calculated_fields/update_calculated_field.py +2 -5
- honeycomb/_generated/api/columns/create_column.py +2 -5
- honeycomb/_generated/api/columns/delete_column.py +2 -5
- honeycomb/_generated/api/columns/get_column.py +2 -5
- honeycomb/_generated/api/columns/list_columns.py +2 -8
- honeycomb/_generated/api/columns/update_column.py +2 -5
- honeycomb/_generated/api/dataset_definitions/list_dataset_definitions.py +2 -5
- honeycomb/_generated/api/dataset_definitions/patch_dataset_definitions.py +2 -5
- honeycomb/_generated/api/datasets/create_dataset.py +2 -5
- honeycomb/_generated/api/datasets/delete_dataset.py +2 -5
- honeycomb/_generated/api/datasets/get_dataset.py +2 -5
- honeycomb/_generated/api/datasets/list_datasets.py +2 -5
- honeycomb/_generated/api/datasets/update_dataset.py +2 -5
- honeycomb/_generated/api/enhance/record_enhance_indexer_usage.py +4 -6
- honeycomb/_generated/api/environments/create_environment.py +2 -5
- honeycomb/_generated/api/environments/delete_environment.py +2 -5
- honeycomb/_generated/api/environments/get_environment.py +2 -5
- honeycomb/_generated/api/environments/list_environments.py +2 -7
- honeycomb/_generated/api/environments/update_environment.py +2 -5
- honeycomb/_generated/api/events/create_event.py +2 -7
- honeycomb/_generated/api/events/create_events.py +7 -11
- honeycomb/_generated/api/key_management/create_api_key.py +2 -5
- honeycomb/_generated/api/key_management/delete_api_key.py +2 -5
- honeycomb/_generated/api/key_management/get_api_key.py +2 -5
- honeycomb/_generated/api/key_management/list_api_keys.py +2 -7
- honeycomb/_generated/api/key_management/update_api_key.py +2 -5
- honeycomb/_generated/api/kinesis_events/create_kinesis_events.py +2 -5
- honeycomb/_generated/api/marker_settings/create_marker_setting.py +2 -5
- honeycomb/_generated/api/marker_settings/delete_marker_settings.py +2 -5
- honeycomb/_generated/api/marker_settings/list_marker_settings.py +2 -5
- honeycomb/_generated/api/marker_settings/update_marker_settings.py +2 -5
- honeycomb/_generated/api/markers/create_marker.py +2 -5
- honeycomb/_generated/api/markers/create_marker_v2.py +2 -5
- honeycomb/_generated/api/markers/delete_marker.py +2 -5
- honeycomb/_generated/api/markers/get_marker.py +2 -5
- honeycomb/_generated/api/markers/update_marker.py +2 -5
- honeycomb/_generated/api/markers/update_marker_v2.py +2 -5
- honeycomb/_generated/api/pipelines/get_pipeline_configuration.py +4 -8
- honeycomb/_generated/api/pipelines/record_pipeline_usage.py +4 -6
- honeycomb/_generated/api/pipelines/update_pipeline_configuration_rollout.py +6 -7
- honeycomb/_generated/api/queries/create_query.py +2 -5
- honeycomb/_generated/api/queries/get_query.py +2 -5
- honeycomb/_generated/api/query_annotations/create_query_annotation.py +2 -5
- honeycomb/_generated/api/query_annotations/delete_query_annotation.py +2 -5
- honeycomb/_generated/api/query_annotations/get_query_annotation.py +2 -5
- honeycomb/_generated/api/query_annotations/list_query_annotations.py +2 -7
- honeycomb/_generated/api/query_annotations/update_query_annotation.py +2 -5
- honeycomb/_generated/api/query_data/create_query_result.py +2 -5
- honeycomb/_generated/api/query_data/get_query_result.py +2 -5
- honeycomb/_generated/api/recipients/create_recipient.py +2 -6
- honeycomb/_generated/api/recipients/delete_recipient.py +2 -5
- honeycomb/_generated/api/recipients/get_recipient.py +2 -6
- honeycomb/_generated/api/recipients/list_recipients.py +2 -6
- honeycomb/_generated/api/recipients/update_recipient.py +2 -6
- honeycomb/_generated/api/reporting/get_slo_history.py +2 -5
- honeycomb/_generated/api/service_maps/create_map_dependency_request.py +6 -9
- honeycomb/_generated/api/service_maps/get_map_dependencies.py +2 -7
- honeycomb/_generated/api/sl_os/create_slo.py +2 -5
- honeycomb/_generated/api/sl_os/delete_slo.py +2 -5
- honeycomb/_generated/api/sl_os/get_slo.py +2 -8
- honeycomb/_generated/api/sl_os/list_slos.py +2 -5
- honeycomb/_generated/api/sl_os/update_slo.py +2 -5
- honeycomb/_generated/api/triggers/create_trigger.py +2 -6
- honeycomb/_generated/api/triggers/delete_trigger.py +2 -5
- honeycomb/_generated/api/triggers/get_trigger.py +2 -5
- honeycomb/_generated/api/triggers/list_triggers.py +2 -5
- honeycomb/_generated/api/triggers/list_triggers_with_recipient.py +2 -5
- honeycomb/_generated/api/triggers/update_trigger.py +2 -5
- honeycomb/_generated/client.py +2 -5
- honeycomb/_generated/models/__init__.py +195 -88
- honeycomb/_generated/models/api_key_create_request.py +6 -5
- honeycomb/_generated/models/api_key_create_request_data.py +15 -11
- honeycomb/_generated/models/api_key_create_request_data_relationships.py +2 -3
- honeycomb/_generated/models/api_key_create_request_data_type.py +1 -0
- honeycomb/_generated/models/api_key_list_response.py +2 -5
- honeycomb/_generated/models/api_key_object.py +14 -14
- honeycomb/_generated/models/api_key_object_links.py +2 -9
- honeycomb/_generated/models/api_key_object_relationships.py +5 -9
- honeycomb/_generated/models/api_key_object_type.py +1 -0
- honeycomb/_generated/models/api_key_response.py +2 -3
- honeycomb/_generated/models/api_key_update_request.py +15 -17
- honeycomb/_generated/models/auth.py +2 -5
- honeycomb/_generated/models/auth_api_key_access.py +2 -9
- honeycomb/_generated/models/auth_environment.py +2 -9
- honeycomb/_generated/models/auth_team.py +2 -9
- honeycomb/_generated/models/auth_type.py +1 -0
- honeycomb/_generated/models/auth_v2_response.py +5 -8
- honeycomb/_generated/models/auth_v2_response_data.py +14 -11
- honeycomb/_generated/models/auth_v2_response_data_attributes.py +10 -9
- honeycomb/_generated/models/auth_v2_response_data_attributes_key_type.py +1 -0
- honeycomb/_generated/models/auth_v2_response_data_attributes_timestamps.py +4 -12
- honeycomb/_generated/models/auth_v2_response_data_relationships.py +1 -7
- honeycomb/_generated/models/auth_v2_response_data_type.py +1 -0
- honeycomb/_generated/models/base_trigger.py +21 -18
- honeycomb/_generated/models/base_trigger_alert_type.py +1 -0
- honeycomb/_generated/models/base_trigger_baseline_details_type_0.py +5 -9
- honeycomb/_generated/models/base_trigger_baseline_details_type_0_offset_minutes.py +1 -0
- honeycomb/_generated/models/base_trigger_baseline_details_type_0_type.py +1 -0
- honeycomb/_generated/models/base_trigger_evaluation_schedule.py +8 -6
- honeycomb/_generated/models/base_trigger_evaluation_schedule_type.py +1 -0
- honeycomb/_generated/models/base_trigger_evaluation_schedule_window.py +4 -9
- honeycomb/_generated/models/base_trigger_evaluation_schedule_window_days_of_week_item.py +1 -0
- honeycomb/_generated/models/base_trigger_threshold.py +2 -9
- honeycomb/_generated/models/base_trigger_threshold_op.py +1 -0
- honeycomb/_generated/models/batch_event.py +2 -5
- honeycomb/_generated/models/board.py +15 -17
- honeycomb/_generated/models/board_layout_generation.py +1 -0
- honeycomb/_generated/models/board_links.py +2 -9
- honeycomb/_generated/models/board_panel_position.py +2 -9
- honeycomb/_generated/models/board_query_visualization_settings.py +8 -8
- honeycomb/_generated/models/board_query_visualization_settings_charts_item.py +4 -10
- honeycomb/_generated/models/board_query_visualization_settings_charts_item_chart_type.py +1 -0
- honeycomb/_generated/models/board_type.py +1 -0
- honeycomb/_generated/models/board_view_filter.py +2 -9
- honeycomb/_generated/models/board_view_filter_operation.py +1 -0
- honeycomb/_generated/models/board_view_response.py +2 -5
- honeycomb/_generated/models/budget_rate.py +4 -12
- honeycomb/_generated/models/budget_rate_alert_type.py +1 -0
- honeycomb/_generated/models/burn_alert_shared_params.py +4 -12
- honeycomb/_generated/models/calculated_field.py +2 -9
- honeycomb/_generated/models/configuration_key_attributes.py +16 -12
- honeycomb/_generated/models/configuration_key_attributes_key_type.py +1 -0
- honeycomb/_generated/models/configuration_key_attributes_permissions.py +172 -0
- honeycomb/_generated/models/configuration_key_attributes_timestamps.py +4 -12
- honeycomb/_generated/models/configuration_key_request.py +101 -0
- honeycomb/_generated/models/configuration_key_request_attributes.py +107 -0
- honeycomb/_generated/models/configuration_key_request_attributes_permissions.py +168 -0
- honeycomb/_generated/models/configuration_key_request_type.py +8 -0
- honeycomb/_generated/models/create_board_view_request.py +2 -3
- honeycomb/_generated/models/create_budget_rate_burn_alert_request.py +10 -10
- honeycomb/_generated/models/create_budget_rate_burn_alert_request_slo.py +1 -7
- honeycomb/_generated/models/create_column.py +2 -9
- honeycomb/_generated/models/create_column_type.py +1 -0
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request.py +8 -6
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data.py +10 -7
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes.py +8 -8
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data.py +8 -6
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item.py +8 -6
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item.py +8 -6
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item.py +8 -8
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum.py +10 -7
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_aggregation_temporality.py +1 -0
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item.py +8 -6
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item_attributes_item.py +8 -6
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item_attributes_item_value.py +2 -9
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_type.py +1 -0
- honeycomb/_generated/models/create_environment_request.py +8 -6
- honeycomb/_generated/models/create_environment_request_data.py +10 -7
- honeycomb/_generated/models/create_environment_request_data_attributes.py +2 -9
- honeycomb/_generated/models/create_environment_request_data_type.py +1 -0
- honeycomb/_generated/models/create_events_content_encoding.py +1 -0
- honeycomb/_generated/models/create_events_response_200_item.py +2 -9
- honeycomb/_generated/models/create_exhaustion_time_burn_alert_request.py +10 -10
- honeycomb/_generated/models/create_exhaustion_time_burn_alert_request_slo.py +1 -7
- honeycomb/_generated/models/create_map_dependencies_request.py +2 -5
- honeycomb/_generated/models/create_map_dependencies_response.py +4 -10
- honeycomb/_generated/models/create_map_dependencies_response_status.py +1 -0
- honeycomb/_generated/models/create_pipeline_health_record_request.py +8 -6
- honeycomb/_generated/models/create_pipeline_health_record_request_data.py +10 -7
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes.py +8 -8
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data.py +8 -6
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item.py +8 -6
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item.py +8 -6
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item.py +8 -8
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum.py +10 -7
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_aggregation_temporality.py +1 -0
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item.py +8 -6
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item_attributes_item.py +8 -6
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item_attributes_item_value.py +2 -9
- honeycomb/_generated/models/create_pipeline_health_record_request_data_type.py +1 -0
- honeycomb/_generated/models/create_query_result_request.py +2 -9
- honeycomb/_generated/models/dataset.py +2 -6
- honeycomb/_generated/models/dataset_creation_payload.py +2 -9
- honeycomb/_generated/models/dataset_definition_type_1.py +4 -10
- honeycomb/_generated/models/dataset_definition_type_1_column_type.py +1 -0
- honeycomb/_generated/models/dataset_definitions.py +2 -6
- honeycomb/_generated/models/dataset_relationship.py +2 -3
- honeycomb/_generated/models/dataset_relationship_data.py +2 -8
- honeycomb/_generated/models/dataset_relationship_data_type.py +1 -0
- honeycomb/_generated/models/dataset_settings.py +2 -9
- honeycomb/_generated/models/dataset_update_payload.py +8 -8
- honeycomb/_generated/models/dataset_update_payload_settings.py +2 -9
- honeycomb/_generated/models/detailed_error.py +2 -9
- honeycomb/_generated/models/email_recipient.py +4 -7
- honeycomb/_generated/models/email_recipient_details.py +1 -7
- honeycomb/_generated/models/email_recipient_type.py +1 -0
- honeycomb/_generated/models/environment.py +6 -7
- honeycomb/_generated/models/environment_attributes.py +11 -9
- honeycomb/_generated/models/environment_attributes_color_type_1.py +1 -0
- honeycomb/_generated/models/environment_attributes_settings.py +1 -7
- honeycomb/_generated/models/environment_color.py +1 -0
- honeycomb/_generated/models/environment_links.py +1 -7
- honeycomb/_generated/models/environment_list_response.py +2 -5
- honeycomb/_generated/models/environment_relationship.py +8 -6
- honeycomb/_generated/models/environment_relationship_data.py +3 -8
- honeycomb/_generated/models/environment_relationship_data_type.py +1 -0
- honeycomb/_generated/models/environment_response.py +2 -3
- honeycomb/_generated/models/environment_type.py +1 -0
- honeycomb/_generated/models/error.py +2 -9
- honeycomb/_generated/models/event.py +2 -8
- honeycomb/_generated/models/exhaustion_time.py +4 -12
- honeycomb/_generated/models/exhaustion_time_alert_type.py +1 -0
- honeycomb/_generated/models/exhaustion_time_burn_alert_list_response.py +10 -10
- honeycomb/_generated/models/exhaustion_time_burn_alert_list_response_slo.py +2 -9
- honeycomb/_generated/models/filter_op.py +1 -0
- honeycomb/_generated/models/get_map_dependencies_response.py +7 -10
- honeycomb/_generated/models/get_map_dependencies_response_status.py +1 -0
- honeycomb/_generated/models/having_calculate_op.py +1 -0
- honeycomb/_generated/models/having_op.py +1 -0
- honeycomb/_generated/models/included_resource.py +6 -7
- honeycomb/_generated/models/included_resource_attributes.py +1 -7
- honeycomb/_generated/models/ingest_key_attributes.py +14 -11
- honeycomb/_generated/models/ingest_key_attributes_key_type.py +1 -0
- honeycomb/_generated/models/ingest_key_attributes_permissions.py +2 -9
- honeycomb/_generated/models/ingest_key_attributes_timestamps.py +4 -12
- honeycomb/_generated/models/ingest_key_request.py +100 -0
- honeycomb/_generated/models/ingest_key_request_attributes.py +75 -0
- honeycomb/_generated/models/ingest_key_request_type.py +8 -0
- honeycomb/_generated/models/ingest_key_type.py +2 -9
- honeycomb/_generated/models/ingest_key_type_key_type.py +1 -0
- honeycomb/_generated/models/jsonapi_error_source.py +2 -9
- honeycomb/_generated/models/kinesis_event.py +2 -5
- honeycomb/_generated/models/kinesis_event_record.py +2 -9
- honeycomb/_generated/models/kinesis_response.py +2 -9
- honeycomb/_generated/models/list_api_keys_filtertype.py +1 -0
- honeycomb/_generated/models/map_dependency.py +2 -5
- honeycomb/_generated/models/map_node.py +2 -9
- honeycomb/_generated/models/map_node_type.py +1 -0
- honeycomb/_generated/models/marker.py +2 -9
- honeycomb/_generated/models/marker_create_request.py +2 -3
- honeycomb/_generated/models/marker_create_request_data.py +16 -10
- honeycomb/_generated/models/marker_create_request_data_attributes.py +2 -9
- honeycomb/_generated/models/marker_create_request_data_relationships.py +2 -3
- honeycomb/_generated/models/marker_create_request_data_type.py +1 -0
- honeycomb/_generated/models/marker_object.py +7 -8
- honeycomb/_generated/models/marker_object_attributes.py +8 -8
- honeycomb/_generated/models/marker_object_attributes_timestamps.py +4 -12
- honeycomb/_generated/models/marker_object_links.py +2 -9
- honeycomb/_generated/models/marker_object_relationships.py +8 -8
- honeycomb/_generated/models/marker_object_relationships_dataset.py +8 -9
- honeycomb/_generated/models/marker_object_relationships_dataset_data_type_0.py +4 -10
- honeycomb/_generated/models/marker_object_relationships_dataset_data_type_0_type.py +1 -0
- honeycomb/_generated/models/marker_object_type.py +1 -0
- honeycomb/_generated/models/marker_response.py +2 -3
- honeycomb/_generated/models/marker_setting.py +2 -10
- honeycomb/_generated/models/marker_update_request.py +2 -3
- honeycomb/_generated/models/marker_update_request_data.py +16 -10
- honeycomb/_generated/models/marker_update_request_data_attributes.py +2 -9
- honeycomb/_generated/models/marker_update_request_data_relationships.py +2 -3
- honeycomb/_generated/models/marker_update_request_data_type.py +1 -0
- honeycomb/_generated/models/ms_teams_recipient.py +4 -7
- honeycomb/_generated/models/ms_teams_recipient_details.py +1 -7
- honeycomb/_generated/models/ms_teams_recipient_type.py +1 -0
- honeycomb/_generated/models/ms_teams_workflow_recipient.py +12 -11
- honeycomb/_generated/models/ms_teams_workflow_recipient_details.py +1 -7
- honeycomb/_generated/models/ms_teams_workflow_recipient_type.py +1 -0
- honeycomb/_generated/models/notification_recipient.py +8 -8
- honeycomb/_generated/models/notification_recipient_details.py +10 -9
- honeycomb/_generated/models/notification_recipient_details_pagerduty_severity.py +1 -0
- honeycomb/_generated/models/notification_recipient_details_variables_item.py +2 -9
- honeycomb/_generated/models/pager_duty_recipient.py +8 -9
- honeycomb/_generated/models/pager_duty_recipient_details.py +1 -7
- honeycomb/_generated/models/pager_duty_recipient_type.py +1 -0
- honeycomb/_generated/models/pagination_links.py +2 -8
- honeycomb/_generated/models/payload_template.py +2 -9
- honeycomb/_generated/models/pipeline_configuration_response.py +16 -10
- honeycomb/_generated/models/pipeline_configuration_response_attributes.py +8 -8
- honeycomb/_generated/models/pipeline_configuration_response_attributes_configs_item.py +1 -7
- honeycomb/_generated/models/pipeline_configuration_response_links.py +2 -9
- honeycomb/_generated/models/pipeline_configuration_response_type.py +1 -0
- honeycomb/_generated/models/pipeline_configuration_rollout.py +16 -10
- honeycomb/_generated/models/pipeline_configuration_rollout_attributes.py +3 -8
- honeycomb/_generated/models/pipeline_configuration_rollout_attributes_status.py +1 -0
- honeycomb/_generated/models/pipeline_configuration_rollout_links.py +2 -9
- honeycomb/_generated/models/pipeline_configuration_rollout_type.py +1 -0
- honeycomb/_generated/models/preset_filter.py +1 -7
- honeycomb/_generated/models/query.py +11 -11
- honeycomb/_generated/models/query_annotation.py +4 -12
- honeycomb/_generated/models/query_annotation_source.py +1 -0
- honeycomb/_generated/models/query_calculated_fields_item.py +1 -7
- honeycomb/_generated/models/query_calculations_item.py +2 -10
- honeycomb/_generated/models/query_compare_time_offset_seconds.py +1 -0
- honeycomb/_generated/models/query_filter_combination.py +1 -0
- honeycomb/_generated/models/query_filters_item.py +2 -11
- honeycomb/_generated/models/query_havings_item.py +2 -10
- honeycomb/_generated/models/query_op.py +1 -0
- honeycomb/_generated/models/query_orders_item.py +2 -9
- honeycomb/_generated/models/query_orders_item_order.py +1 -0
- honeycomb/_generated/models/query_panel.py +2 -6
- honeycomb/_generated/models/query_panel_query_panel.py +10 -9
- honeycomb/_generated/models/query_panel_query_panel_query_style.py +1 -0
- honeycomb/_generated/models/query_result.py +2 -5
- honeycomb/_generated/models/query_result_details.py +5 -8
- honeycomb/_generated/models/query_result_details_data.py +5 -8
- honeycomb/_generated/models/query_result_details_links.py +2 -9
- honeycomb/_generated/models/query_result_links.py +2 -9
- honeycomb/_generated/models/query_results_data.py +2 -5
- honeycomb/_generated/models/query_results_data_data.py +2 -8
- honeycomb/_generated/models/query_results_series.py +2 -5
- honeycomb/_generated/models/recipient_properties.py +4 -12
- honeycomb/_generated/models/recipient_type.py +1 -0
- honeycomb/_generated/models/slack_recipient.py +4 -7
- honeycomb/_generated/models/slack_recipient_details.py +1 -7
- honeycomb/_generated/models/slack_recipient_type.py +1 -0
- honeycomb/_generated/models/slo.py +4 -8
- honeycomb/_generated/models/slo_create.py +4 -8
- honeycomb/_generated/models/slo_create_sli.py +1 -7
- honeycomb/_generated/models/slo_detailed_response.py +4 -8
- honeycomb/_generated/models/slo_detailed_response_status.py +1 -0
- honeycomb/_generated/models/slo_history.py +2 -9
- honeycomb/_generated/models/slo_history_request.py +2 -8
- honeycomb/_generated/models/slo_history_response.py +2 -3
- honeycomb/_generated/models/slo_panel.py +2 -6
- honeycomb/_generated/models/slo_panel_slo_panel.py +2 -9
- honeycomb/_generated/models/slo_sli.py +1 -7
- honeycomb/_generated/models/tag.py +1 -7
- honeycomb/_generated/models/team_relationship.py +2 -3
- honeycomb/_generated/models/team_relationship_team.py +6 -5
- honeycomb/_generated/models/team_relationship_team_data.py +3 -8
- honeycomb/_generated/models/team_relationship_team_data_type.py +1 -0
- honeycomb/_generated/models/template_variable_definition.py +2 -9
- honeycomb/_generated/models/text_panel.py +2 -6
- honeycomb/_generated/models/text_panel_text_panel.py +1 -7
- honeycomb/_generated/models/trigger_response.py +27 -21
- honeycomb/_generated/models/trigger_with_inline_query.py +27 -21
- honeycomb/_generated/models/trigger_with_inline_query_query.py +1 -7
- honeycomb/_generated/models/trigger_with_query_reference.py +21 -18
- honeycomb/_generated/models/update_board_view_request.py +2 -5
- honeycomb/_generated/models/update_environment_request.py +8 -6
- honeycomb/_generated/models/update_environment_request_data.py +10 -7
- honeycomb/_generated/models/update_environment_request_data_attributes.py +8 -8
- honeycomb/_generated/models/update_environment_request_data_attributes_settings.py +2 -9
- honeycomb/_generated/models/update_environment_request_data_type.py +1 -0
- honeycomb/_generated/models/update_exhaustion_time_burn_alert_request.py +4 -7
- honeycomb/_generated/models/update_pipeline_configuration_rollout.py +10 -7
- honeycomb/_generated/models/update_pipeline_configuration_rollout_attributes.py +3 -8
- honeycomb/_generated/models/update_pipeline_configuration_rollout_attributes_status.py +1 -0
- honeycomb/_generated/models/update_pipeline_configuration_rollout_request.py +8 -6
- honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data.py +10 -7
- honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_attributes.py +3 -8
- honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_attributes_status.py +1 -0
- honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_type.py +1 -0
- honeycomb/_generated/models/update_pipeline_configuration_rollout_response.py +8 -6
- honeycomb/_generated/models/update_pipeline_configuration_rollout_type.py +1 -0
- honeycomb/_generated/models/user_relationship.py +2 -3
- honeycomb/_generated/models/user_relationship_data.py +2 -8
- honeycomb/_generated/models/user_relationship_data_type.py +1 -0
- honeycomb/_generated/models/validation_error.py +8 -8
- honeycomb/_generated/models/validation_error_type_detail_item.py +4 -10
- honeycomb/_generated/models/validation_error_type_detail_item_code.py +1 -0
- honeycomb/_generated/models/webhook_header.py +2 -9
- honeycomb/_generated/models/webhook_recipient.py +4 -7
- honeycomb/_generated/models/webhook_recipient_details.py +8 -8
- honeycomb/_generated/models/webhook_recipient_details_webhook_payloads.py +12 -10
- honeycomb/_generated/models/webhook_recipient_details_webhook_payloads_payload_templates.py +2 -5
- honeycomb/_generated/models/webhook_recipient_type.py +1 -0
- honeycomb/_generated/types.py +1 -1
- honeycomb/cli/__init__.py +85 -0
- honeycomb/cli/api_keys.py +205 -0
- honeycomb/cli/auth.py +70 -0
- honeycomb/cli/boards.py +203 -0
- honeycomb/cli/columns.py +256 -0
- honeycomb/cli/config.py +259 -0
- honeycomb/cli/datasets.py +186 -0
- honeycomb/cli/derived_columns.py +222 -0
- honeycomb/cli/environments.py +240 -0
- honeycomb/cli/formatters.py +242 -0
- honeycomb/cli/markers.py +151 -0
- honeycomb/cli/queries.py +380 -0
- honeycomb/cli/recipients.py +211 -0
- honeycomb/cli/slos.py +338 -0
- honeycomb/cli/triggers.py +271 -0
- honeycomb/client.py +13 -7
- honeycomb/models/__init__.py +18 -3
- honeycomb/models/api_keys.py +49 -5
- honeycomb/models/auth.py +71 -0
- honeycomb/models/board_builder.py +97 -25
- honeycomb/models/boards.py +95 -1
- honeycomb/models/datasets.py +42 -0
- honeycomb/models/queries.py +21 -0
- honeycomb/models/query_builder.py +119 -59
- honeycomb/models/recipient_builder.py +51 -4
- honeycomb/models/slo_builder.py +24 -19
- honeycomb/models/slos.py +50 -3
- honeycomb/models/tool_inputs.py +630 -0
- honeycomb/models/triggers.py +39 -9
- honeycomb/resources/__init__.py +2 -0
- honeycomb/resources/api_keys.py +66 -29
- honeycomb/resources/auth.py +97 -0
- honeycomb/resources/boards.py +272 -18
- honeycomb/resources/datasets.py +49 -11
- honeycomb/resources/environments.py +54 -31
- honeycomb/resources/slos.py +87 -61
- honeycomb/tools/__main__.py +40 -4
- honeycomb/tools/builders.py +235 -150
- honeycomb/tools/descriptions.py +175 -7
- honeycomb/tools/executor.py +212 -25
- honeycomb/tools/generator.py +61 -2264
- honeycomb/tools/resources/__init__.py +42 -0
- honeycomb/tools/resources/api_keys.py +249 -0
- honeycomb/tools/resources/auth.py +98 -0
- honeycomb/tools/resources/boards.py +313 -0
- honeycomb/tools/resources/burn_alerts.py +278 -0
- honeycomb/tools/resources/columns.py +257 -0
- honeycomb/tools/resources/datasets.py +215 -0
- honeycomb/tools/resources/derived_columns.py +311 -0
- honeycomb/tools/resources/environments.py +211 -0
- honeycomb/tools/resources/events.py +158 -0
- honeycomb/tools/resources/marker_settings.py +216 -0
- honeycomb/tools/resources/markers.py +197 -0
- honeycomb/tools/resources/queries.py +220 -0
- honeycomb/tools/resources/recipients.py +297 -0
- honeycomb/tools/resources/service_map.py +110 -0
- honeycomb/tools/resources/slos.py +276 -0
- honeycomb/tools/resources/triggers.py +328 -0
- honeycomb/tools/schemas.py +81 -0
- {honeycomb_api-0.1.0.dist-info → honeycomb_api-0.5.3.dist-info}/METADATA +33 -8
- honeycomb_api-0.5.3.dist-info/RECORD +497 -0
- honeycomb_api-0.5.3.dist-info/entry_points.txt +5 -0
- honeycomb_api-0.1.0.dist-info/RECORD +0 -453
- {honeycomb_api-0.1.0.dist-info → honeycomb_api-0.5.3.dist-info}/WHEEL +0 -0
- {honeycomb_api-0.1.0.dist-info → honeycomb_api-0.5.3.dist-info}/licenses/LICENSE +0 -0
honeycomb/models/__init__.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""Pydantic models for Honeycomb API resources."""
|
|
2
2
|
|
|
3
|
-
from .api_keys import ApiKey, ApiKeyCreate, ApiKeyType
|
|
3
|
+
from .api_keys import ApiKey, ApiKeyCreate, ApiKeyType, ApiKeyUpdate
|
|
4
|
+
from .auth import AuthInfo, AuthInfoV2
|
|
4
5
|
from .board_builder import (
|
|
5
6
|
BoardBuilder,
|
|
6
7
|
BoardBundle,
|
|
@@ -10,10 +11,16 @@ from .board_builder import (
|
|
|
10
11
|
SLOBuilderPanel,
|
|
11
12
|
TextPanel,
|
|
12
13
|
)
|
|
13
|
-
from .boards import
|
|
14
|
+
from .boards import (
|
|
15
|
+
Board,
|
|
16
|
+
BoardCreate,
|
|
17
|
+
BoardView,
|
|
18
|
+
BoardViewCreate,
|
|
19
|
+
BoardViewFilter,
|
|
20
|
+
)
|
|
14
21
|
from .burn_alerts import BurnAlert, BurnAlertCreate, BurnAlertRecipient, BurnAlertType
|
|
15
22
|
from .columns import Column, ColumnCreate, ColumnType
|
|
16
|
-
from .datasets import Dataset, DatasetCreate
|
|
23
|
+
from .datasets import Dataset, DatasetCreate, DatasetUpdate
|
|
17
24
|
from .derived_columns import DerivedColumn, DerivedColumnBuilder, DerivedColumnCreate
|
|
18
25
|
from .environments import Environment, EnvironmentColor, EnvironmentCreate, EnvironmentUpdate
|
|
19
26
|
from .events import BatchEvent, BatchEventResult
|
|
@@ -88,11 +95,15 @@ __all__ = [
|
|
|
88
95
|
# Datasets
|
|
89
96
|
"Dataset",
|
|
90
97
|
"DatasetCreate",
|
|
98
|
+
"DatasetUpdate",
|
|
91
99
|
# Boards
|
|
92
100
|
"Board",
|
|
93
101
|
"BoardBuilder",
|
|
94
102
|
"BoardBundle",
|
|
95
103
|
"BoardCreate",
|
|
104
|
+
"BoardView",
|
|
105
|
+
"BoardViewCreate",
|
|
106
|
+
"BoardViewFilter",
|
|
96
107
|
"ExistingQueryPanel",
|
|
97
108
|
"ExistingSLOPanel",
|
|
98
109
|
"QueryBuilderPanel",
|
|
@@ -141,6 +152,10 @@ __all__ = [
|
|
|
141
152
|
"ApiKey",
|
|
142
153
|
"ApiKeyCreate",
|
|
143
154
|
"ApiKeyType",
|
|
155
|
+
"ApiKeyUpdate",
|
|
156
|
+
# Auth
|
|
157
|
+
"AuthInfo",
|
|
158
|
+
"AuthInfoV2",
|
|
144
159
|
# Environments (v2)
|
|
145
160
|
"Environment",
|
|
146
161
|
"EnvironmentCreate",
|
honeycomb/models/api_keys.py
CHANGED
|
@@ -23,17 +23,34 @@ class ApiKeyCreate(BaseModel):
|
|
|
23
23
|
key_type: ApiKeyType = Field(description="Type of API key")
|
|
24
24
|
environment_id: str = Field(description="Environment ID this key belongs to")
|
|
25
25
|
disabled: bool = Field(default=False, description="Whether key is disabled")
|
|
26
|
+
permissions: dict[str, bool] | None = Field(
|
|
27
|
+
default=None,
|
|
28
|
+
description=(
|
|
29
|
+
"Permissions for configuration keys (REQUIRED for configuration type). "
|
|
30
|
+
"Available permissions: 'create_datasets', 'send_events', 'manage_markers', "
|
|
31
|
+
"'manage_triggers', 'manage_boards', 'run_queries', 'manage_columns', "
|
|
32
|
+
"'manage_slos', 'manage_recipients', 'manage_privateBoards', "
|
|
33
|
+
"'read_service_maps', 'visible_team_members'. "
|
|
34
|
+
"Ignored for ingest keys."
|
|
35
|
+
),
|
|
36
|
+
)
|
|
26
37
|
|
|
27
38
|
def to_jsonapi(self) -> dict[str, Any]:
|
|
28
39
|
"""Convert to JSON:API format for API request."""
|
|
40
|
+
attributes: dict[str, Any] = {
|
|
41
|
+
"name": self.name,
|
|
42
|
+
"key_type": self.key_type.value,
|
|
43
|
+
"disabled": self.disabled,
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
# Add permissions for configuration keys
|
|
47
|
+
if self.permissions is not None:
|
|
48
|
+
attributes["permissions"] = self.permissions
|
|
49
|
+
|
|
29
50
|
return {
|
|
30
51
|
"data": {
|
|
31
52
|
"type": "api-keys",
|
|
32
|
-
"attributes":
|
|
33
|
-
"name": self.name,
|
|
34
|
-
"key_type": self.key_type.value,
|
|
35
|
-
"disabled": self.disabled,
|
|
36
|
-
},
|
|
53
|
+
"attributes": attributes,
|
|
37
54
|
"relationships": {
|
|
38
55
|
"environment": {"data": {"type": "environments", "id": self.environment_id}}
|
|
39
56
|
},
|
|
@@ -41,6 +58,29 @@ class ApiKeyCreate(BaseModel):
|
|
|
41
58
|
}
|
|
42
59
|
|
|
43
60
|
|
|
61
|
+
class ApiKeyUpdate(BaseModel):
|
|
62
|
+
"""Model for updating an API key."""
|
|
63
|
+
|
|
64
|
+
name: str | None = Field(default=None, description="New name for the API key")
|
|
65
|
+
disabled: bool | None = Field(default=None, description="Enable/disable the key")
|
|
66
|
+
|
|
67
|
+
def to_jsonapi(self, key_id: str) -> dict[str, Any]:
|
|
68
|
+
"""Convert to JSON:API format for API request."""
|
|
69
|
+
attributes: dict[str, Any] = {}
|
|
70
|
+
if self.name is not None:
|
|
71
|
+
attributes["name"] = self.name
|
|
72
|
+
if self.disabled is not None:
|
|
73
|
+
attributes["disabled"] = self.disabled
|
|
74
|
+
|
|
75
|
+
return {
|
|
76
|
+
"data": {
|
|
77
|
+
"id": key_id,
|
|
78
|
+
"type": "api-keys",
|
|
79
|
+
"attributes": attributes,
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
|
|
44
84
|
class ApiKey(BaseModel):
|
|
45
85
|
"""A Honeycomb API key (response model)."""
|
|
46
86
|
|
|
@@ -49,6 +89,9 @@ class ApiKey(BaseModel):
|
|
|
49
89
|
key_type: ApiKeyType = Field(description="Type of API key")
|
|
50
90
|
environment_id: str | None = Field(default=None, description="Environment ID")
|
|
51
91
|
disabled: bool = Field(default=False, description="Whether key is disabled")
|
|
92
|
+
permissions: dict[str, bool] | None = Field(
|
|
93
|
+
default=None, description="Permissions for configuration keys"
|
|
94
|
+
)
|
|
52
95
|
secret: str | None = Field(
|
|
53
96
|
default=None, description="Key secret (only available during creation)"
|
|
54
97
|
)
|
|
@@ -75,6 +118,7 @@ class ApiKey(BaseModel):
|
|
|
75
118
|
key_type=attributes.get("key_type", "ingest"),
|
|
76
119
|
environment_id=env_id,
|
|
77
120
|
disabled=attributes.get("disabled", False),
|
|
121
|
+
permissions=attributes.get("permissions"),
|
|
78
122
|
secret=attributes.get("secret"),
|
|
79
123
|
created_at=attributes.get("created_at"),
|
|
80
124
|
updated_at=attributes.get("updated_at"),
|
honeycomb/models/auth.py
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"""Auth endpoint models for API key metadata."""
|
|
2
|
+
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class AuthInfo(BaseModel):
|
|
10
|
+
"""v1 auth endpoint response - API key metadata."""
|
|
11
|
+
|
|
12
|
+
id: str = Field(description="Unique identifier of the API key")
|
|
13
|
+
type: str = Field(description="Key type: 'configuration' or 'ingest'")
|
|
14
|
+
team_name: str = Field(description="Name of the team")
|
|
15
|
+
team_slug: str = Field(description="URL-safe team identifier")
|
|
16
|
+
environment_name: str = Field(description="Name of the environment")
|
|
17
|
+
environment_slug: str = Field(description="URL-safe environment identifier")
|
|
18
|
+
api_key_access: dict[str, Any] = Field(description="Key capabilities/permissions")
|
|
19
|
+
time_to_live: str | None = Field(default=None, description="Expiration time (RFC3339)")
|
|
20
|
+
|
|
21
|
+
model_config = {"extra": "allow"}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class AuthInfoV2(BaseModel):
|
|
25
|
+
"""v2 auth endpoint response - Management key metadata."""
|
|
26
|
+
|
|
27
|
+
id: str = Field(description="Unique identifier of the management key")
|
|
28
|
+
name: str = Field(description="Human-readable name")
|
|
29
|
+
key_type: str = Field(description="Key type: 'management'")
|
|
30
|
+
disabled: bool = Field(default=False, description="Whether the key is disabled")
|
|
31
|
+
scopes: list[str] = Field(default_factory=list, description="Authorized scopes")
|
|
32
|
+
team_id: str = Field(description="Team ID this key belongs to")
|
|
33
|
+
team_name: str | None = Field(default=None, description="Team name")
|
|
34
|
+
team_slug: str | None = Field(default=None, description="Team slug")
|
|
35
|
+
created_at: datetime | None = Field(default=None, description="Creation timestamp")
|
|
36
|
+
updated_at: datetime | None = Field(default=None, description="Last update timestamp")
|
|
37
|
+
|
|
38
|
+
model_config = {"extra": "allow"}
|
|
39
|
+
|
|
40
|
+
@classmethod
|
|
41
|
+
def from_jsonapi(cls, data: dict[str, Any]) -> "AuthInfoV2":
|
|
42
|
+
"""Parse from JSON:API format."""
|
|
43
|
+
obj = data.get("data", data)
|
|
44
|
+
attrs = obj.get("attributes", {})
|
|
45
|
+
rels = obj.get("relationships", {})
|
|
46
|
+
included = data.get("included", [])
|
|
47
|
+
|
|
48
|
+
# Extract team info from relationships and included
|
|
49
|
+
team_id = rels.get("team", {}).get("data", {}).get("id", "")
|
|
50
|
+
team_name = None
|
|
51
|
+
team_slug = None
|
|
52
|
+
for inc in included:
|
|
53
|
+
if inc.get("type") == "teams" and inc.get("id") == team_id:
|
|
54
|
+
team_attrs = inc.get("attributes", {})
|
|
55
|
+
team_name = team_attrs.get("name")
|
|
56
|
+
team_slug = team_attrs.get("slug")
|
|
57
|
+
break
|
|
58
|
+
|
|
59
|
+
timestamps = attrs.get("timestamps", {})
|
|
60
|
+
return cls(
|
|
61
|
+
id=obj.get("id", ""),
|
|
62
|
+
name=attrs.get("name", ""),
|
|
63
|
+
key_type=attrs.get("key_type", "management"),
|
|
64
|
+
disabled=attrs.get("disabled", False),
|
|
65
|
+
scopes=attrs.get("scopes", []),
|
|
66
|
+
team_id=team_id,
|
|
67
|
+
team_name=team_name,
|
|
68
|
+
team_slug=team_slug,
|
|
69
|
+
created_at=timestamps.get("created_at"),
|
|
70
|
+
updated_at=timestamps.get("updated_at"),
|
|
71
|
+
)
|
|
@@ -5,7 +5,9 @@ from __future__ import annotations
|
|
|
5
5
|
from dataclasses import dataclass
|
|
6
6
|
from typing import TYPE_CHECKING, Any, Literal
|
|
7
7
|
|
|
8
|
+
from honeycomb.models.boards import BoardViewCreate, BoardViewFilter
|
|
8
9
|
from honeycomb.models.tags_mixin import TagsMixin
|
|
10
|
+
from honeycomb.models.tool_inputs import PositionInput
|
|
9
11
|
|
|
10
12
|
if TYPE_CHECKING:
|
|
11
13
|
from honeycomb.models.query_builder import QueryBuilder
|
|
@@ -23,14 +25,14 @@ class QueryBuilderPanel:
|
|
|
23
25
|
|
|
24
26
|
Attributes:
|
|
25
27
|
builder: QueryBuilder instance with .name() set
|
|
26
|
-
position: Optional
|
|
28
|
+
position: Optional PositionInput for manual layout
|
|
27
29
|
style: Display style (graph, table, combo)
|
|
28
30
|
visualization: Optional visualization settings dict
|
|
29
31
|
dataset_override: Optional dataset override
|
|
30
32
|
"""
|
|
31
33
|
|
|
32
34
|
builder: QueryBuilder
|
|
33
|
-
position:
|
|
35
|
+
position: PositionInput | None
|
|
34
36
|
style: Literal["graph", "table", "combo"]
|
|
35
37
|
visualization: dict[str, Any] | None
|
|
36
38
|
dataset_override: str | None
|
|
@@ -43,7 +45,7 @@ class ExistingQueryPanel:
|
|
|
43
45
|
Attributes:
|
|
44
46
|
query_id: ID of saved query
|
|
45
47
|
annotation_id: Annotation ID of query
|
|
46
|
-
position: Optional
|
|
48
|
+
position: Optional PositionInput for manual layout
|
|
47
49
|
style: Display style (graph, table, combo)
|
|
48
50
|
visualization: Optional visualization settings dict
|
|
49
51
|
dataset: Optional dataset name
|
|
@@ -51,7 +53,7 @@ class ExistingQueryPanel:
|
|
|
51
53
|
|
|
52
54
|
query_id: str
|
|
53
55
|
annotation_id: str
|
|
54
|
-
position:
|
|
56
|
+
position: PositionInput | None
|
|
55
57
|
style: Literal["graph", "table", "combo"]
|
|
56
58
|
visualization: dict[str, Any] | None
|
|
57
59
|
dataset: str | None
|
|
@@ -63,11 +65,11 @@ class SLOBuilderPanel:
|
|
|
63
65
|
|
|
64
66
|
Attributes:
|
|
65
67
|
builder: SLOBuilder instance
|
|
66
|
-
position: Optional
|
|
68
|
+
position: Optional PositionInput for manual layout
|
|
67
69
|
"""
|
|
68
70
|
|
|
69
71
|
builder: SLOBuilder
|
|
70
|
-
position:
|
|
72
|
+
position: PositionInput | None
|
|
71
73
|
|
|
72
74
|
|
|
73
75
|
@dataclass
|
|
@@ -76,11 +78,11 @@ class ExistingSLOPanel:
|
|
|
76
78
|
|
|
77
79
|
Attributes:
|
|
78
80
|
slo_id: ID of the SLO
|
|
79
|
-
position: Optional
|
|
81
|
+
position: Optional PositionInput for manual layout
|
|
80
82
|
"""
|
|
81
83
|
|
|
82
84
|
slo_id: str
|
|
83
|
-
position:
|
|
85
|
+
position: PositionInput | None
|
|
84
86
|
|
|
85
87
|
|
|
86
88
|
@dataclass
|
|
@@ -89,11 +91,11 @@ class TextPanel:
|
|
|
89
91
|
|
|
90
92
|
Attributes:
|
|
91
93
|
content: Markdown text content
|
|
92
|
-
position: Optional
|
|
94
|
+
position: Optional PositionInput for manual layout
|
|
93
95
|
"""
|
|
94
96
|
|
|
95
97
|
content: str
|
|
96
|
-
position:
|
|
98
|
+
position: PositionInput | None
|
|
97
99
|
|
|
98
100
|
|
|
99
101
|
@dataclass
|
|
@@ -112,6 +114,7 @@ class BoardBundle:
|
|
|
112
114
|
existing_query_panels: Panels from existing query IDs
|
|
113
115
|
slo_panels: SLO panels
|
|
114
116
|
text_panels: Text panels
|
|
117
|
+
views: Board views to create
|
|
115
118
|
"""
|
|
116
119
|
|
|
117
120
|
board_name: str
|
|
@@ -125,6 +128,8 @@ class BoardBundle:
|
|
|
125
128
|
slo_builder_panels: list[SLOBuilderPanel]
|
|
126
129
|
existing_slo_panels: list[ExistingSLOPanel]
|
|
127
130
|
text_panels: list[TextPanel]
|
|
131
|
+
# Views
|
|
132
|
+
views: list[BoardViewCreate]
|
|
128
133
|
|
|
129
134
|
|
|
130
135
|
class BoardBuilder(TagsMixin):
|
|
@@ -146,15 +151,17 @@ class BoardBuilder(TagsMixin):
|
|
|
146
151
|
.build()
|
|
147
152
|
)
|
|
148
153
|
|
|
149
|
-
Example - Manual layout with
|
|
154
|
+
Example - Manual layout with PositionInput:
|
|
155
|
+
from honeycomb.models.tool_inputs import PositionInput
|
|
156
|
+
|
|
150
157
|
board = await client.boards.create_from_bundle_async(
|
|
151
158
|
BoardBuilder("Custom Layout")
|
|
152
159
|
.manual_layout()
|
|
153
160
|
.query(
|
|
154
161
|
QueryBuilder("Requests").dataset("api-logs").last_1_hour().count(),
|
|
155
|
-
position=(0, 0, 8, 6)
|
|
162
|
+
position=PositionInput(x_coordinate=0, y_coordinate=0, width=8, height=6)
|
|
156
163
|
)
|
|
157
|
-
.slo("slo-id-1", position=(8, 0, 4, 6))
|
|
164
|
+
.slo("slo-id-1", position=PositionInput(x_coordinate=8, y_coordinate=0, width=4, height=6))
|
|
158
165
|
.build()
|
|
159
166
|
)
|
|
160
167
|
"""
|
|
@@ -171,6 +178,8 @@ class BoardBuilder(TagsMixin):
|
|
|
171
178
|
self._slo_builder_panels: list[SLOBuilderPanel] = []
|
|
172
179
|
self._existing_slo_panels: list[ExistingSLOPanel] = []
|
|
173
180
|
self._text_panels: list[TextPanel] = []
|
|
181
|
+
# Views
|
|
182
|
+
self._views: list[BoardViewCreate] = []
|
|
174
183
|
|
|
175
184
|
def description(self, desc: str) -> BoardBuilder:
|
|
176
185
|
"""Set board description (max 1024 chars).
|
|
@@ -230,7 +239,7 @@ class BoardBuilder(TagsMixin):
|
|
|
230
239
|
query: QueryBuilder | str,
|
|
231
240
|
annotation_id: str | None = None,
|
|
232
241
|
*,
|
|
233
|
-
position:
|
|
242
|
+
position: PositionInput | None = None,
|
|
234
243
|
style: Literal["graph", "table", "combo"] = "graph",
|
|
235
244
|
visualization: dict[str, Any] | None = None,
|
|
236
245
|
dataset: str | None = None,
|
|
@@ -240,12 +249,14 @@ class BoardBuilder(TagsMixin):
|
|
|
240
249
|
Args:
|
|
241
250
|
query: QueryBuilder with .name() OR existing query_id string
|
|
242
251
|
annotation_id: Required only if query is string
|
|
243
|
-
position:
|
|
252
|
+
position: PositionInput for manual layout
|
|
244
253
|
style: graph | table | combo
|
|
245
254
|
visualization: {"hide_markers": True, "utc_xaxis": True, ...}
|
|
246
255
|
dataset: Override QueryBuilder's dataset
|
|
247
256
|
|
|
248
257
|
Example - Inline QueryBuilder:
|
|
258
|
+
from honeycomb.models.tool_inputs import PositionInput
|
|
259
|
+
|
|
249
260
|
.query(
|
|
250
261
|
QueryBuilder("Request Count")
|
|
251
262
|
.dataset("api-logs")
|
|
@@ -253,7 +264,7 @@ class BoardBuilder(TagsMixin):
|
|
|
253
264
|
.count()
|
|
254
265
|
.group_by("service")
|
|
255
266
|
.description("Requests by service over 24h"),
|
|
256
|
-
position=(0, 0, 9, 6),
|
|
267
|
+
position=PositionInput(x_coordinate=0, y_coordinate=0, width=9, height=6),
|
|
257
268
|
style="graph",
|
|
258
269
|
visualization={"hide_markers": True, "utc_xaxis": True}
|
|
259
270
|
)
|
|
@@ -296,25 +307,27 @@ class BoardBuilder(TagsMixin):
|
|
|
296
307
|
self,
|
|
297
308
|
slo: SLOBuilder | str,
|
|
298
309
|
*,
|
|
299
|
-
position:
|
|
310
|
+
position: PositionInput | None = None,
|
|
300
311
|
) -> BoardBuilder:
|
|
301
312
|
"""Add an SLO panel.
|
|
302
313
|
|
|
303
314
|
Args:
|
|
304
315
|
slo: SLOBuilder instance OR existing SLO ID string
|
|
305
|
-
position:
|
|
316
|
+
position: PositionInput for manual layout
|
|
306
317
|
|
|
307
318
|
Example - Inline SLOBuilder:
|
|
319
|
+
from honeycomb.models.tool_inputs import PositionInput
|
|
320
|
+
|
|
308
321
|
.slo(
|
|
309
322
|
SLOBuilder("API Availability")
|
|
310
323
|
.dataset("api-logs")
|
|
311
|
-
.
|
|
324
|
+
.target_percentage(99.9)
|
|
312
325
|
.sli(alias="success_rate"),
|
|
313
|
-
position=(9, 0, 3, 6)
|
|
326
|
+
position=PositionInput(x_coordinate=9, y_coordinate=0, width=3, height=6)
|
|
314
327
|
)
|
|
315
328
|
|
|
316
329
|
Example - Existing SLO:
|
|
317
|
-
.slo("slo-id-123", position=(8, 0, 4, 6))
|
|
330
|
+
.slo("slo-id-123", position=PositionInput(x_coordinate=8, y_coordinate=0, width=4, height=6))
|
|
318
331
|
"""
|
|
319
332
|
from honeycomb.models.slo_builder import SLOBuilder
|
|
320
333
|
|
|
@@ -328,22 +341,80 @@ class BoardBuilder(TagsMixin):
|
|
|
328
341
|
self,
|
|
329
342
|
content: str,
|
|
330
343
|
*,
|
|
331
|
-
position:
|
|
344
|
+
position: PositionInput | None = None,
|
|
332
345
|
) -> BoardBuilder:
|
|
333
346
|
"""Add a text panel (supports markdown, max 10000 chars).
|
|
334
347
|
|
|
335
348
|
Args:
|
|
336
349
|
content: Markdown text content
|
|
337
|
-
position:
|
|
350
|
+
position: PositionInput for manual layout
|
|
338
351
|
|
|
339
352
|
Example:
|
|
340
|
-
.
|
|
353
|
+
from honeycomb.models.tool_inputs import PositionInput
|
|
354
|
+
|
|
355
|
+
.text(
|
|
356
|
+
"## Service Status\\n\\nAll systems operational",
|
|
357
|
+
position=PositionInput(x_coordinate=0, y_coordinate=6, width=12, height=2)
|
|
358
|
+
)
|
|
341
359
|
"""
|
|
342
360
|
if len(content) > 10000:
|
|
343
361
|
raise ValueError(f"Text content must be <= 10000 characters, got {len(content)}")
|
|
344
362
|
self._text_panels.append(TextPanel(content=content, position=position))
|
|
345
363
|
return self
|
|
346
364
|
|
|
365
|
+
# -------------------------------------------------------------------------
|
|
366
|
+
# Board Views
|
|
367
|
+
# -------------------------------------------------------------------------
|
|
368
|
+
|
|
369
|
+
def add_view(
|
|
370
|
+
self,
|
|
371
|
+
name: str,
|
|
372
|
+
filters: list[BoardViewFilter] | list[dict[str, Any]] | None = None,
|
|
373
|
+
) -> BoardBuilder:
|
|
374
|
+
"""Add a view to the board.
|
|
375
|
+
|
|
376
|
+
Views are filtered perspectives on board data. Each board can have up to 50 views.
|
|
377
|
+
|
|
378
|
+
Args:
|
|
379
|
+
name: View name
|
|
380
|
+
filters: List of BoardViewFilter objects or dicts with column/operation/value
|
|
381
|
+
|
|
382
|
+
Example with dict filters:
|
|
383
|
+
.add_view("Active Services", [
|
|
384
|
+
{"column": "status", "operation": "=", "value": "active"},
|
|
385
|
+
{"column": "environment", "operation": "in", "value": ["prod", "staging"]}
|
|
386
|
+
])
|
|
387
|
+
|
|
388
|
+
Example with BoardViewFilter objects:
|
|
389
|
+
from honeycomb.models.boards import BoardViewFilter
|
|
390
|
+
from honeycomb.models.query_builder import FilterOp
|
|
391
|
+
|
|
392
|
+
.add_view("Error View", [
|
|
393
|
+
BoardViewFilter(
|
|
394
|
+
column="status_code",
|
|
395
|
+
operation=FilterOp.GREATER_THAN_OR_EQUAL,
|
|
396
|
+
value=400
|
|
397
|
+
)
|
|
398
|
+
])
|
|
399
|
+
|
|
400
|
+
Example with no filters (all data):
|
|
401
|
+
.add_view("All Data")
|
|
402
|
+
"""
|
|
403
|
+
if filters is None:
|
|
404
|
+
filters = []
|
|
405
|
+
|
|
406
|
+
# Convert dict filters to BoardViewFilter objects
|
|
407
|
+
filter_objs: list[BoardViewFilter] = []
|
|
408
|
+
for f in filters:
|
|
409
|
+
if isinstance(f, BoardViewFilter):
|
|
410
|
+
filter_objs.append(f)
|
|
411
|
+
else:
|
|
412
|
+
# Convert dict to BoardViewFilter
|
|
413
|
+
filter_objs.append(BoardViewFilter.model_validate(f))
|
|
414
|
+
|
|
415
|
+
self._views.append(BoardViewCreate(name=name, filters=filter_objs))
|
|
416
|
+
return self
|
|
417
|
+
|
|
347
418
|
# -------------------------------------------------------------------------
|
|
348
419
|
# Build
|
|
349
420
|
# -------------------------------------------------------------------------
|
|
@@ -370,7 +441,7 @@ class BoardBuilder(TagsMixin):
|
|
|
370
441
|
if panel.position is None:
|
|
371
442
|
raise ValueError(
|
|
372
443
|
f"Manual layout requires position for all panels. "
|
|
373
|
-
f"Panel {i} missing position. Use position=(
|
|
444
|
+
f"Panel {i} missing position. Use position=PositionInput(x_coordinate=..., y_coordinate=..., width=..., height=...)"
|
|
374
445
|
)
|
|
375
446
|
|
|
376
447
|
return BoardBundle(
|
|
@@ -384,4 +455,5 @@ class BoardBuilder(TagsMixin):
|
|
|
384
455
|
slo_builder_panels=self._slo_builder_panels,
|
|
385
456
|
existing_slo_panels=self._existing_slo_panels,
|
|
386
457
|
text_panels=self._text_panels,
|
|
458
|
+
views=self._views,
|
|
387
459
|
)
|
honeycomb/models/boards.py
CHANGED
|
@@ -4,7 +4,9 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from typing import Any, Literal
|
|
6
6
|
|
|
7
|
-
from pydantic import BaseModel, Field
|
|
7
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
8
|
+
|
|
9
|
+
from .query_builder import FilterOp
|
|
8
10
|
|
|
9
11
|
|
|
10
12
|
class BoardCreate(BaseModel):
|
|
@@ -84,3 +86,95 @@ class Board(BaseModel):
|
|
|
84
86
|
tags: list[dict] | None = Field(default=None, description="Board tags")
|
|
85
87
|
|
|
86
88
|
model_config = {"extra": "allow"}
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
# =============================================================================
|
|
92
|
+
# Board Views
|
|
93
|
+
# =============================================================================
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
class BoardViewFilter(BaseModel):
|
|
97
|
+
"""Filter for board views.
|
|
98
|
+
|
|
99
|
+
Uses the same FilterOp enum as QueryBuilder for consistency.
|
|
100
|
+
|
|
101
|
+
Attributes:
|
|
102
|
+
column: Column name to filter on
|
|
103
|
+
operation: Filter operation to apply
|
|
104
|
+
value: Filter value (optional for exists/does-not-exist operations)
|
|
105
|
+
|
|
106
|
+
Example:
|
|
107
|
+
>>> BoardViewFilter(column="status", operation=FilterOp.EQUALS, value="active")
|
|
108
|
+
>>> BoardViewFilter(column="error", operation=FilterOp.EXISTS)
|
|
109
|
+
"""
|
|
110
|
+
|
|
111
|
+
model_config = ConfigDict(extra="forbid")
|
|
112
|
+
|
|
113
|
+
column: str = Field(description="Column name to filter on")
|
|
114
|
+
operation: FilterOp = Field(description="Filter operation")
|
|
115
|
+
value: Any | None = Field(
|
|
116
|
+
default=None,
|
|
117
|
+
description="Filter value (optional for exists/does-not-exist)",
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
def model_dump_for_api(self) -> dict[str, Any]:
|
|
121
|
+
"""Serialize for API request."""
|
|
122
|
+
data: dict[str, Any] = {
|
|
123
|
+
"column": self.column,
|
|
124
|
+
"operation": self.operation.value,
|
|
125
|
+
}
|
|
126
|
+
if self.value is not None:
|
|
127
|
+
data["value"] = self.value
|
|
128
|
+
return data
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
class BoardViewCreate(BaseModel):
|
|
132
|
+
"""Model for creating or updating a board view.
|
|
133
|
+
|
|
134
|
+
Attributes:
|
|
135
|
+
name: View name
|
|
136
|
+
filters: List of filters to apply to this view
|
|
137
|
+
|
|
138
|
+
Example:
|
|
139
|
+
>>> BoardViewCreate(
|
|
140
|
+
... name="Active Services",
|
|
141
|
+
... filters=[
|
|
142
|
+
... BoardViewFilter(column="status", operation=FilterOp.EQUALS, value="active")
|
|
143
|
+
... ]
|
|
144
|
+
... )
|
|
145
|
+
"""
|
|
146
|
+
|
|
147
|
+
name: str = Field(description="View name")
|
|
148
|
+
filters: list[BoardViewFilter] = Field(
|
|
149
|
+
default_factory=list,
|
|
150
|
+
description="List of filters",
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
def model_dump_for_api(self) -> dict[str, Any]:
|
|
154
|
+
"""Serialize for API request."""
|
|
155
|
+
return {
|
|
156
|
+
"name": self.name,
|
|
157
|
+
"filters": [f.model_dump_for_api() for f in self.filters],
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
class BoardView(BaseModel):
|
|
162
|
+
"""A board view (response model).
|
|
163
|
+
|
|
164
|
+
Board views are filtered perspectives on a board, with each board
|
|
165
|
+
supporting up to 50 views maximum.
|
|
166
|
+
|
|
167
|
+
Attributes:
|
|
168
|
+
id: Unique identifier
|
|
169
|
+
name: View name
|
|
170
|
+
filters: List of filters applied to this view
|
|
171
|
+
"""
|
|
172
|
+
|
|
173
|
+
id: str = Field(description="Unique identifier")
|
|
174
|
+
name: str = Field(description="View name")
|
|
175
|
+
filters: list[BoardViewFilter] = Field(
|
|
176
|
+
default_factory=list,
|
|
177
|
+
description="Filters",
|
|
178
|
+
)
|
|
179
|
+
|
|
180
|
+
model_config = {"extra": "allow"}
|
honeycomb/models/datasets.py
CHANGED
|
@@ -35,6 +35,40 @@ class DatasetCreate(BaseModel):
|
|
|
35
35
|
return data
|
|
36
36
|
|
|
37
37
|
|
|
38
|
+
class DatasetUpdate(BaseModel):
|
|
39
|
+
"""Model for updating an existing dataset."""
|
|
40
|
+
|
|
41
|
+
name: str | None = Field(default=None, description="Human-readable name for the dataset")
|
|
42
|
+
description: str | None = Field(default=None, description="Longer description")
|
|
43
|
+
expand_json_depth: int | None = Field(
|
|
44
|
+
default=None,
|
|
45
|
+
ge=0,
|
|
46
|
+
le=10,
|
|
47
|
+
description="Depth to expand JSON fields (0-10)",
|
|
48
|
+
)
|
|
49
|
+
delete_protected: bool | None = Field(
|
|
50
|
+
default=None, description="If true, the dataset cannot be deleted"
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
def model_dump_for_api(self) -> dict[str, Any]:
|
|
54
|
+
"""Serialize for API request."""
|
|
55
|
+
data: dict[str, Any] = {}
|
|
56
|
+
|
|
57
|
+
if self.name is not None:
|
|
58
|
+
data["name"] = self.name
|
|
59
|
+
|
|
60
|
+
if self.description is not None:
|
|
61
|
+
data["description"] = self.description
|
|
62
|
+
|
|
63
|
+
if self.expand_json_depth is not None:
|
|
64
|
+
data["expand_json_depth"] = self.expand_json_depth
|
|
65
|
+
|
|
66
|
+
if self.delete_protected is not None:
|
|
67
|
+
data["settings"] = {"delete_protected": self.delete_protected}
|
|
68
|
+
|
|
69
|
+
return data
|
|
70
|
+
|
|
71
|
+
|
|
38
72
|
class Dataset(BaseModel):
|
|
39
73
|
"""A Honeycomb dataset (response model)."""
|
|
40
74
|
|
|
@@ -42,6 +76,7 @@ class Dataset(BaseModel):
|
|
|
42
76
|
slug: str = Field(description="URL-safe identifier")
|
|
43
77
|
description: str | None = Field(default=None, description="Longer description")
|
|
44
78
|
expand_json_depth: int = Field(default=0, description="JSON expansion depth")
|
|
79
|
+
delete_protected: bool = Field(default=False, description="If true, dataset cannot be deleted")
|
|
45
80
|
created_at: datetime | None = Field(default=None, description="Creation timestamp")
|
|
46
81
|
last_written_at: datetime | None = Field(
|
|
47
82
|
default=None, description="Last event written timestamp"
|
|
@@ -49,3 +84,10 @@ class Dataset(BaseModel):
|
|
|
49
84
|
regular_columns_count: int | None = Field(default=None, description="Number of regular columns")
|
|
50
85
|
|
|
51
86
|
model_config = {"extra": "allow"}
|
|
87
|
+
|
|
88
|
+
@classmethod
|
|
89
|
+
def from_api_response(cls, data: dict[str, Any]) -> Dataset:
|
|
90
|
+
"""Parse from API response format, extracting settings."""
|
|
91
|
+
settings = data.pop("settings", {}) if isinstance(data.get("settings"), dict) else {}
|
|
92
|
+
delete_protected = settings.get("delete_protected", False)
|
|
93
|
+
return cls(delete_protected=delete_protected, **data)
|