import {z} from 'zod' export type GetApiApiOrgIdDashboardsDashboardIdArgs = {org_id: string, dashboard_id: string, folder?: string | undefined}; export type GetApiApiOrgIdDashboardsDashboardIdOptions = {baseUrl: string, Authorization?: string | undefined, fetch?: typeof fetch | undefined}; export const annotationSourceMode = z.enum(["builder", "sql"]); export const streamType = z.enum(["logs", "metrics", "traces", "profiles", "service_graph", "enrichment_tables", "file_list", "metadata", "index"]); export const annotationSource = z.object({color: z.string().nullable().optional(), description: z.string().nullable().optional(), enabled: z.boolean().optional(), endTimeField: z.string().nullable().optional(), filters: z.object({}).optional(), id: z.string().optional(), mode: annotationSourceMode.optional(), name: z.string().optional(), panels: z.array(z.string()).nullable().optional(), query: z.string().nullable().optional(), stream: z.string().optional(), streamType: streamType.optional(), title: z.string().optional()}); export const dateTimeOptions = z.object({endTime: z.number().int().nullable().optional(), relativeTimePeriod: z.string().nullable().optional(), startTime: z.number().int().nullable().optional(), type: z.string().optional()}); export const backgroundValue = z.object({color: z.string()}); export const background = z.object({type: z.string(), value: backgroundValue.nullable().optional()}); export const baseMap = z.object({type: z.string().nullable().optional()}); export const colorBySeries = z.object({color: z.string().nullable().optional(), type: z.string().nullable().optional(), value: z.string().nullable().optional()}); export const colorCfg = z.object({colorBySeries: z.array(colorBySeries).nullable().optional(), fixedColor: z.array(z.string()).nullable().optional(), mode: z.string().nullable().optional(), seriesBy: z.string().nullable().optional()}); export const drillDownVariables = z.object({name: z.string().nullable().optional(), value: z.string().nullable().optional()}); export const drillDownData = z.object({dashboard: z.string().nullable().optional(), folder: z.string().nullable().optional(), logsMode: z.string().nullable().optional(), logsQuery: z.string().nullable().optional(), passAllVariables: z.boolean().nullable().optional(), tab: z.string().nullable().optional(), url: z.string().nullable().optional(), variables: z.array(drillDownVariables).nullable().optional()}); export const drillDown = z.object({data: drillDownData.nullable().optional(), findBy: z.string().nullable().optional(), name: z.string().nullable().optional(), targetBlank: z.boolean().nullable().optional(), type: z.string().nullable().optional()}); export const heatmapYBucket = z.object({base: z.number().nullable().optional(), mode: z.string().nullable().optional(), size: z.number().nullable().optional()}); export const labelPosition = z.enum(["top", "left", "right", "bottom", "inside", "insideLeft", "insideRight", "insideTop", "insideBottom", "insideTopLeft", "insideBottomLeft", "insideTopRight", "insideBottomRight", "outside"]); export const labelOption = z.object({position: labelPosition.nullable().optional(), rotate: z.number().nullable().optional()}); export const legendHeight = z.object({unit: z.string().nullable().optional(), value: z.number().nullable().optional()}); export const legendWidth = z.object({unit: z.string().nullable().optional(), value: z.number().nullable().optional()}); export const lineInterpolation = z.enum(["smooth", "linear", "step-start", "step-end", "step-middle"]); export const sizeByValue = z.object({max: z.number().optional(), min: z.number().optional()}); export const mapSymbolStyle = z.object({size: z.string().optional(), size_by_value: sizeByValue.nullable().optional(), size_fixed: z.number().optional()}); export const mapType = z.object({type: z.string().nullable().optional()}); export const mapView = z.object({lat: z.number().optional(), lng: z.number().optional(), zoom: z.number().optional()}); export const mapping = z.object({color: z.string().nullable().optional(), from: z.string().nullable().optional(), match: z.string().nullable().optional(), pattern: z.string().nullable().optional(), text: z.string().nullable().optional(), textColor: z.string().nullable().optional(), to: z.string().nullable().optional(), type: z.string().nullable().optional(), value: z.string().nullable().optional()}); export const markArea = z.object({axis: z.string().nullable().optional(), color: z.string().nullable().optional(), from: z.string().nullable().optional(), name: z.string().nullable().optional(), to: z.string().nullable().optional()}); export const markLine = z.object({name: z.string().nullable().optional(), type: z.string().nullable().optional(), value: z.string().nullable().optional()}); export const conditionalRule = z.object({bgColor: z.string().nullable().optional(), operator: z.string().optional(), textColor: z.string().nullable().optional(), threshold: z.number().optional()}); export const thresholdStep = z.object({color: z.string().nullable().optional(), value: z.number().nullable().optional()}); export const thresholds = z.object({baseColor: z.string().nullable().optional(), mode: z.string().nullable().optional(), showAs: z.string().nullable().optional(), steps: z.array(thresholdStep).nullable().optional()}); export const seriesHideFrom = z.object({chart: z.boolean().nullable().optional(), legend: z.boolean().nullable().optional(), tooltip: z.boolean().nullable().optional()}); export const config = z.union([z.object({type: z.literal("unit"), value: z.unknown()}), z.object({autoColor: z.boolean().optional(), type: z.literal("unique_value_color")}), z.object({type: z.literal("alignment"), value: z.string().nullable().optional()}), z.object({type: z.literal("text_color"), value: z.string().nullable().optional()}), z.object({type: z.literal("background_color"), value: z.string().nullable().optional()}), z.object({type: z.literal("field_type"), value: z.string().nullable().optional()}), z.object({rules: z.array(conditionalRule).nullable().optional(), type: z.literal("conditional_styles")}), z.object({type: z.literal("decimals"), value: z.number().nullable().optional()}), z.object({type: z.literal("display_name"), value: z.string().nullable().optional()}), z.object({type: z.literal("series_color"), value: z.string().nullable().optional()}), z.object({type: z.literal("thresholds"), value: thresholds.nullable().optional()}), z.object({type: z.literal("value_mappings"), value: z.array(mapping).nullable().optional()}), z.object({type: z.literal("line_style"), value: z.string().nullable().optional()}), z.object({type: z.literal("line_width"), value: z.number().nullable().optional()}), z.object({type: z.literal("fill_opacity"), value: z.number().nullable().optional()}), z.object({type: z.literal("show_points"), value: z.boolean().nullable().optional()}), z.object({type: z.literal("transform"), value: z.string().nullable().optional()}), z.object({type: z.literal("draw_style"), value: z.string().nullable().optional()}), z.object({type: z.literal("stack_group"), value: z.string().nullable().optional()}), z.object({type: z.literal("y_axis"), value: z.string().nullable().optional()}), z.object({type: z.literal("hide_from"), value: seriesHideFrom.nullable().optional()})]); export const field = z.object({matchBy: z.string().optional(), value: z.string().optional()}); export const overrideConfig = z.object({config: z.array(config).nullable().optional(), field: field.nullable().optional()}); export const sparkline = z.object({color: z.string().nullable().optional(), enabled: z.boolean().optional(), fillOpacity: z.number().nullable().optional(), layout: z.string().nullable().optional(), lineWidth: z.number().nullable().optional(), type: z.string().nullable().optional()}); export const trellis = z.object({group_by_y_axis: z.boolean().nullable().optional(), layout: z.string().nullable().optional(), num_of_columns: z.number().int().optional()}); export const panelConfig = z.object({aggregation: z.string().nullable().optional(), alert_list_folder: z.string().nullable().optional(), alert_list_max: z.number().nullable().optional(), alert_list_sort: z.string().nullable().optional(), alert_list_state: z.array(z.string()).nullable().optional(), axis_border_show: z.boolean().nullable().optional(), axis_label_mode: z.string().nullable().optional(), axis_label_rotate: z.number().nullable().optional(), axis_label_truncate_width: z.number().nullable().optional(), axis_width: z.number().nullable().optional(), background: background.nullable().optional(), bar_gauge_mode: z.string().nullable().optional(), bar_gauge_orientation: z.string().nullable().optional(), bar_gauge_show_unfilled: z.boolean().nullable().optional(), bar_radius: z.number().nullable().optional(), bar_width: z.number().nullable().optional(), base_map: baseMap.nullable().optional(), boxplot_whisker: z.string().nullable().optional(), bucket_unit: z.string().nullable().optional(), bucket_unit_custom: z.string().nullable().optional(), chart_align: z.string().nullable().optional(), color: colorCfg.nullable().optional(), column_order: z.array(z.string()).nullable().optional(), connect_nulls: z.boolean().nullable().optional(), connect_nulls_threshold: z.number().nullable().optional(), decimals: z.number().nullable().optional(), distribution_bucket_count: z.number().nullable().optional(), distribution_bucket_offset: z.number().nullable().optional(), distribution_bucket_size: z.number().nullable().optional(), donut_inner_radius: z.number().nullable().optional(), drilldown: z.array(drillDown).nullable().optional(), enable_roam: z.boolean().nullable().optional(), fill_gradient: z.boolean().nullable().optional(), fill_opacity: z.number().nullable().optional(), flame_graph_stack_field: z.string().nullable().optional(), flame_graph_value_field: z.string().nullable().optional(), funnel_orient: z.string().nullable().optional(), funnel_show_percent: z.boolean().nullable().optional(), funnel_sort: z.string().nullable().optional(), gauge_neutral: z.number().nullable().optional(), gauge_round_cap: z.boolean().nullable().optional(), gauge_segments: z.number().nullable().optional(), gauge_style: z.string().nullable().optional(), heatmap_cell_gap: z.number().nullable().optional(), heatmap_color_max: z.number().nullable().optional(), heatmap_color_min: z.number().nullable().optional(), heatmap_color_scale: z.string().nullable().optional(), heatmap_hide_below: z.number().nullable().optional(), heatmap_mode: z.string().nullable().optional(), heatmap_palette: z.string().nullable().optional(), heatmap_palette_reverse: z.boolean().nullable().optional(), heatmap_y_bucket: heatmapYBucket.nullable().optional(), heatmap_y_max: z.number().nullable().optional(), heatmap_y_min: z.number().nullable().optional(), heatmap_y_sort: z.string().nullable().optional(), hidden_columns: z.array(z.string()).nullable().optional(), hostmap_cell_label: z.string().nullable().optional(), hostmap_cell_shape: z.string().nullable().optional(), hostmap_cell_sort: z.string().nullable().optional(), hostmap_entity_label: z.string().nullable().optional(), hostmap_group_by: z.array(z.string()).nullable().optional(), hostmap_group_sort: z.string().nullable().optional(), hostmap_reduction: z.string().nullable().optional(), label_option: labelOption.nullable().optional(), lat_label: z.string().nullable().optional(), legend_height: legendHeight.nullable().optional(), legend_values: z.array(z.string()).nullable().optional(), legend_width: legendWidth.nullable().optional(), legends_position: z.string().nullable().optional(), legends_type: z.string().nullable().optional(), line_interpolation: lineInterpolation.nullable().optional(), line_style: z.string().nullable().optional(), line_thickness: z.number().nullable().optional(), logs_level_field: z.string().nullable().optional(), logs_message_field: z.string().nullable().optional(), logs_order: z.string().nullable().optional(), logs_prettify_json: z.boolean().nullable().optional(), logs_show_time: z.boolean().nullable().optional(), logs_time_field: z.string().nullable().optional(), logs_wrap: z.boolean().nullable().optional(), lon_label: z.string().nullable().optional(), map_cluster: z.boolean().nullable().optional(), map_cluster_radius: z.number().nullable().optional(), map_symbol_style: mapSymbolStyle.nullable().optional(), map_type: mapType.nullable().optional(), map_view: mapView.nullable().optional(), mappings: z.array(mapping).nullable().optional(), mark_area: z.array(markArea).nullable().optional(), mark_line: z.array(markLine).nullable().optional(), merge_gaps: z.number().nullable().optional(), name_label: z.string().nullable().optional(), no_data_text: z.string().nullable().optional(), no_value_replacement: z.string().nullable().optional(), node_graph_layout: z.string().nullable().optional(), node_graph_show_edge_labels: z.boolean().nullable().optional(), override_config: z.array(overrideConfig).nullable().optional(), panel_time_enabled: z.boolean().nullable().optional(), panel_time_range: dateTimeOptions.nullable().optional(), pie_label_content: z.array(z.string()).nullable().optional(), pie_other_threshold: z.number().nullable().optional(), promql_series_limit: z.number().nullable().optional(), promql_table_mode: z.string().nullable().optional(), row_gap: z.number().nullable().optional(), row_height: z.number().nullable().optional(), row_sort: z.string().nullable().optional(), scatter_color_field: z.string().nullable().optional(), scatter_size_field: z.string().nullable().optional(), scatter_size_max: z.number().nullable().optional(), scatter_size_min: z.number().nullable().optional(), show_bar_track: z.boolean().nullable().optional(), show_exemplars: z.boolean().nullable().optional(), show_gauge_end_labels: z.boolean().nullable().optional(), show_gridlines: z.boolean().nullable().optional(), show_legends: z.boolean(), show_state_text: z.boolean().nullable().optional(), show_symbol: z.boolean().nullable().optional(), sort_order: z.string().nullable().optional(), sparkline: sparkline.nullable().optional(), stack_mode: z.string().nullable().optional(), stat_text_mode: z.string().nullable().optional(), state_timeline_display: z.string().nullable().optional(), state_value_align: z.string().nullable().optional(), step_value: z.string().nullable().optional(), sticky_columns: z.array(z.string()).nullable().optional(), sticky_first_column: z.boolean().nullable().optional(), sunburst_show_labels: z.boolean().nullable().optional(), symbol_opacity: z.number().nullable().optional(), symbol_size: z.number().nullable().optional(), table_aggregations: z.array(z.string()).nullable().optional(), table_density: z.string().nullable().optional(), table_dynamic_columns: z.boolean().nullable().optional(), table_expandable_rows: z.boolean().nullable().optional(), table_filtering: z.boolean().nullable().optional(), table_footer_calcs: z.array(z.string()).nullable().optional(), table_pagination: z.boolean().nullable().optional(), table_pagination_rows_per_page: z.number().int().nullable().optional(), table_pivot_show_col_totals: z.boolean().nullable().optional(), table_pivot_show_row_totals: z.boolean().nullable().optional(), table_pivot_sticky_col_totals: z.boolean().nullable().optional(), table_pivot_sticky_row_totals: z.boolean().nullable().optional(), table_transpose: z.boolean().nullable().optional(), thresholds: thresholds.nullable().optional(), tooltip_mode: z.string().nullable().optional(), tooltip_sort: z.string().nullable().optional(), top_results: z.number().nullable().optional(), top_results_others: z.boolean().nullable().optional(), treemap_show_breadcrumb: z.boolean().nullable().optional(), trellis: trellis.nullable().optional(), unit: z.string().nullable().optional(), unit_custom: z.string().nullable().optional(), value_font_size: z.number().nullable().optional(), visible_columns: z.array(z.string()).nullable().optional(), weight_label: z.string().nullable().optional(), wrap_table_cells: z.boolean().nullable().optional(), y_axis_hard_max: z.number().nullable().optional(), y_axis_hard_min: z.number().nullable().optional(), y_axis_label: z.string().nullable().optional(), y_axis_log_base: z.number().nullable().optional(), y_axis_max: z.number().nullable().optional(), y_axis_min: z.number().nullable().optional(), y_axis_min_interval: z.number().nullable().optional(), y_axis_scale: z.string().nullable().optional()}); export const layout = z.object({h: z.number().int().optional(), i: z.number().int().optional(), w: z.number().int().optional(), x: z.number().int().optional(), y: z.number().int().optional()}); export const timeShift = z.object({offSet: z.string().nullable().optional()}); export const queryConfig = z.object({formula: z.string().nullable().optional(), hide: z.boolean().nullable().optional(), layer_type: z.string().nullable().optional(), limit: z.number().nullable().optional(), max: z.number().nullable().optional(), min: z.number().nullable().optional(), promql_legend: z.string(), promql_legend_fallback: z.string().nullable().optional(), query_label: z.string().nullable().optional(), query_type: z.string().nullable().optional(), range_mode: z.string().nullable().optional(), ref: z.string().nullable().optional(), step_value: z.string().nullable().optional(), time_shift: z.array(timeShift).nullable().optional(), weight_fixed: z.number().nullable().optional()}); export const axisArgFunction = z.object({args: z.array(z.object({})), functionName: z.string().nullable().optional()}); export const axisArgValue = z.object({field: z.string().nullable().optional(), streamAlias: z.string().nullable().optional()}); export const axisArgValueWrapper = z.union([axisArgFunction, axisArgValue, z.string(), z.number()]); export const axisArg = z.object({type: z.string().nullable().optional(), value: axisArgValueWrapper.nullable().optional()}); export const havingConditions = z.object({operator: z.string().nullable().optional(), value: z.number().nullable().optional()}); export const axisType = z.enum(["build", "raw", "custom"]); export const axisItem = z.object({alias: z.string(), args: z.array(axisArg).nullable().optional(), color: z.string().nullable().optional(), column: z.string().nullable().optional(), functionName: z.string().nullable().optional(), havingConditions: z.array(havingConditions).nullable().optional(), isDerived: z.boolean().nullable().optional(), label: z.string(), rawQuery: z.string().nullable().optional(), showFieldAsJson: z.boolean().nullable().optional(), sortBy: z.string().nullable().optional(), treatAsNonTimestamp: z.boolean().nullable().optional(), type: axisType.nullable().optional()}); export const streamFieldObj = z.object({field: z.string().nullable().optional(), streamAlias: z.string().nullable().optional()}); export const filterCondition = z.object({column: streamFieldObj.nullable().optional(), emptyLiteral: z.boolean().nullable().optional(), filterType: z.string(), logicalOperator: z.string(), operator: z.string().nullable().optional(), type: z.string(), value: z.string().nullable().optional(), values: z.array(z.string())}); export const groupType = z.object({conditions: z.array(z.object({})), filterType: z.string(), logicalOperator: z.string()}); export const panelFilter = z.union([filterCondition, groupType]); export const promQLLabelFilter = z.object({group: z.number().int().gte(0).nullable().optional(), label: z.string().optional(), negate: z.boolean().nullable().optional(), op: z.string().optional(), value: z.string().optional()}); export const promQLOperationParam = z.union([z.array(z.string()), z.string(), z.number(), z.boolean()]); export const promQLOperation = z.object({id: z.string().optional(), params: z.array(promQLOperationParam).nullable().optional()}); export const panelFields = z.object({breakdown: z.array(axisItem).nullable().optional(), filter: panelFilter, latitude: axisItem.nullable().optional(), longitude: axisItem.nullable().optional(), name: axisItem.nullable().optional(), promql_labels: z.array(promQLLabelFilter).optional(), promql_operations: z.array(promQLOperation).optional(), source: axisItem.nullable().optional(), stream: z.string(), stream_type: streamType, target: axisItem.nullable().optional(), value: axisItem.nullable().optional(), value_for_maps: axisItem.nullable().optional(), weight: axisItem.nullable().optional(), x: z.array(axisItem), y: z.array(axisItem), z: z.array(axisItem).optional()}); export const selectedField = z.object({field: z.string(), streamAlias: z.string().nullable().optional()}); export const joinCondition = z.object({leftField: selectedField, operation: z.string(), rightField: selectedField}); export const join = z.object({conditions: z.array(joinCondition), joinType: z.string(), stream: z.string(), streamAlias: z.string()}); export const query = z.object({config: queryConfig, customQuery: z.boolean(), fields: panelFields, joins: z.array(join).nullable().optional(), query: z.string().nullable().optional(), tabName: z.string().nullable().optional(), vrlFunctionQuery: z.string().nullable().optional()}); export const panel = z.object({config: panelConfig, customChartContent: z.string().nullable().optional(), description: z.string(), htmlContent: z.string().nullable().optional(), id: z.string(), layout: layout.nullable().optional(), markdownContent: z.string().nullable().optional(), queries: z.array(query), queryType: z.string().optional(), title: z.string(), type: z.string()}); export const tab = z.object({name: z.string(), panels: z.array(panel).optional(), tabId: z.string()}); export const customFieldsOption = z.object({label: z.string().optional(), selected: z.boolean().nullable().optional(), value: z.string().optional()}); export const filters = z.object({name: z.string().nullable().optional(), operator: z.string().nullable().optional(), value: z.string().optional()}); export const queryData = z.object({field: z.string().optional(), filter: z.array(filters).nullable().optional(), max_record_size: z.number().int().nullable().optional(), stream: z.string().optional(), stream_type: streamType.optional()}); export const variableList = z.object({customMultiSelectValue: z.array(z.string()).nullable().optional(), dateFormat: z.string().nullable().optional(), escapeSingleQuotes: z.boolean().nullable().optional(), hideOnDashboard: z.boolean().nullable().optional(), label: z.string().optional(), multiSelect: z.boolean().nullable().optional(), name: z.string().optional(), options: z.array(customFieldsOption).nullable().optional(), panels: z.array(z.string()).nullable().optional(), query_data: queryData.nullable().optional(), scope: z.string().nullable().optional(), selectAllValueForMultiSelect: z.string().nullable().optional(), tabs: z.array(z.string()).nullable().optional(), type: z.string().optional(), value: z.string().nullable().optional()}); export const variables = z.object({list: z.array(variableList).optional(), showDynamicFilters: z.boolean().nullable().optional()}); export const dashboard = z.object({annotationSources: z.array(annotationSource).nullable().optional(), created: z.string().optional(), dashboardId: z.string().optional(), defaultDatetimeDuration: dateTimeOptions.nullable().optional(), defaultRefreshInterval: z.number().int().gte(0).nullable().optional(), description: z.string(), owner: z.string().optional(), role: z.string().optional(), tabs: z.array(tab).optional(), title: z.string(), variables: variables.nullable().optional(), version: z.number().int().optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Get dashboard details * * GET /api/{org_id}/dashboards/{dashboard_id} */ export const getApiApiOrgIdDashboardsDashboardId = async (args: GetApiApiOrgIdDashboardsDashboardIdArgs, options: GetApiApiOrgIdDashboardsDashboardIdOptions) => { const {baseUrl, fetch: fetchFn = fetch, Authorization} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.folder != null) query.append("folder", String(args.folder)) if (Authorization !== undefined) headers.set("Authorization", Authorization) const url = `${baseUrl.replace(/\/+$/, '')}/api/${encodeURIComponent(String(args.org_id))}/dashboards/${encodeURIComponent(String(args.dashboard_id))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(dashboard, await res.json()) };