UNPKG

@squidcloud/client

Version:

A typescript implementation of the Squid client

193 lines (192 loc) 9.52 kB
import { MetadataFilter } from './metadata-filter.public-types'; /** * Tag filter for metric queries. Accepts either a simple key-value record (backward compatible) * or the full {@link MetadataFilter} tree with `$eq`, `$ne`, `$in`, `$nin`, `$exists`, * `$gt`, `$gte`, `$lt`, `$lte`, `$and`, `$or`. * @category Metrics */ export type MetricTagFilter = Record<string, string> | MetadataFilter; /** * Name of metrics publicly provided by the system. * - Metrics suffixed by '_time' are 'gauge' metrics. * - Metrics suffixed by '_count' are 'count' metrics. * All Squid metrics starts with `squid_` prefix. */ export declare const SQUID_METRIC_NAMES: readonly ["squid_functionExecution_count", "squid_functionExecution_time"]; /** Name of a built-in Squid metric ('squid_functionExecution_count' or 'squid_functionExecution_time'). */ export type SquidMetricName = (typeof SQUID_METRIC_NAMES)[number]; /** Aggregation function used in metric queries (e.g., 'sum', 'max', 'median'). */ export declare const METRIC_FUNCTIONS: readonly ["sum", "max", "min", "average", "median", "p95", "p99", "count"]; /** Aggregation function used in metric queries (e.g., 'sum', 'max', 'median'). */ export type MetricFunction = (typeof METRIC_FUNCTIONS)[number]; /** Defines source of the metric: reported by user or automatically collected by the system (Squid). */ export declare const METRIC_DOMAIN: readonly ["user", "squid"]; /** Domain of the metric: 'user' for custom metrics, 'squid' for built-in system metrics. */ export type MetricDomain = (typeof METRIC_DOMAIN)[number]; /** Defines how to align data points in a metric query interval. */ export declare const METRIC_INTERVAL_ALIGNMENT: readonly ["align-by-start-time", "align-by-end-time"]; /** Indicates how to align per-point periods in metric queries. */ export type MetricIntervalAlignment = (typeof METRIC_INTERVAL_ALIGNMENT)[number]; /** Behavior when no data is available for a metric query. */ export declare const METRIC_NO_DATA_BEHAVIOR: readonly ["return-no-result-groups", "return-result-group-with-default-values"]; /** Indicates behavior when no data is available. */ export type MetricNoDataBehavior = (typeof METRIC_NO_DATA_BEHAVIOR)[number]; /** Common parameters shared by all metric query requests. */ export interface QueryMetricsRequestCommon { /** Kind of the metrics (domain) to query. */ domain: MetricDomain; /** Start of the queried interval. Must be an integer value. */ periodStartSeconds: number; /** End of the queried interval. Must be an integer value. */ periodEndSeconds: number; /** * Time interval per point. Must be less than periodEndSeconds - periodStartSeconds. * Set to 0 or keep undefined to have only 1 value in the result. */ pointIntervalSeconds?: number; /** * Specifies the alignment of the per-point interval. * Default: 'align-by-start-time' */ pointIntervalAlignment?: MetricIntervalAlignment; /** Aggregation functions that maps multiple points per point region to a single point value. */ fn: MetricFunction | Array<MetricFunction>; /** * If there is no data in the specified region this value will be used to fill the gap. * Default: null. */ fillValue?: number | null; /** * Tag filters. Supports two formats: * - Simple: `Record<string, string>` — each key-value pair is an exact equality match. * - Advanced: `AiContextMetadataFilter` — the same filter syntax used by AI knowledge base * metadata, supporting `$eq`, `$ne`, `$in`, `$nin`, `$exists`, `$and`, `$or`, and * comparison operators (`$gt`, `$gte`, `$lt`, `$lte` — numeric comparisons on string tags). * * @example Simple format * ```ts * tagFilter: { aiModel: 'claude-sonnet-4-5-20250514', isError: '0' } * ``` * @example Advanced format * ```ts * tagFilter: { $or: [{ aiModel: { $in: ['claude-sonnet-4-5-20250514', 'gpt-4o'] } }, { isError: { $ne: '0' } }] } * ``` */ tagFilter?: MetricTagFilter; /** * A mapping of known tag values that must be present in the response groups. * * This ensures that the result will include groups for all specified tag values, * even if there is no data for some values in the database. * * Example: Consider a tag 'isError' with two possible values: '0' and '1'. * When 'tagDomains' contains `{'isError': ['0', '1']}`, the result will include * groups for both 'isError: 0' and 'isError: 1'. If the database lacks data for * 'isError: 1', the points in this group will be set to 'fillValue' (default is 'null'). * * The tags in the new groups will be copied from the existing resultGroups, * along with one of the tag domain values. * * @property {Record<string, string[]>} tagDomains - A record where each key is a tag name and * each value is an array of possible values for that tag. Should only contain tags listed in 'groupByTags' field. */ tagDomains?: Record<string, string[]>; /** List of ordered tag names for a 'GROUP BY'. */ groupByTags?: string[]; /** The results will be ordered by the specified tags (ORDER BY). */ orderByTags?: string[]; /** * Specifies what result will be returned if there were no records found in the database. * In this case the 'resultGroups' array will be empty (default), or can be filled with a default * values if 'return-result-group-with-default-values' is specified. * The generated result group will have 'tagValues' set to empty strings. * * May be useful to get a ready-to-render array with no additional post-processing required. * * Note: 'tagDomains' can provide similar functionality when set of tag values is defined: multiple result groups * will be filled with default values. There is no need to use this option if 'tagDomains' is used. * * Default: 'return-no-result-groups' */ noDataBehavior?: MetricNoDataBehavior; } /** * Request structure for querying user-defined metrics. * @category Metrics */ export interface QueryUserMetricsRequest<NameType extends string = string> extends QueryMetricsRequestCommon { /** Specifies the user domain for custom metrics. */ domain: 'user'; /** Name of the user-defined metric to query. */ name: NameType; } /** * Request structure for querying built-in Squid metrics. * @category Metrics */ export interface QuerySquidMetricsRequest<NameType extends SquidMetricName = SquidMetricName> extends QueryMetricsRequestCommon { /** Specifies the squid domain for built-in system metrics. */ domain: 'squid'; /** Name of the built-in Squid metric to query. */ name: NameType; } /** A request to query metrics, either Squid or user-defined, depending on the domain and metric name. */ export type QueryMetricsRequest<NameType extends string = string> = QuerySquidMetricsRequest<NameType extends SquidMetricName ? NameType : SquidMetricName> | QueryUserMetricsRequest<NameType>; /** * Every result point is a list of [timestamp, values...], * where list of values are defined by the list of functions in the request. * If there is no data for the point 'null' is used as a 'value'. * The timestamp is always equal to the point period start date and is measured in Unix epoch seconds. */ export type QueryMetricsResultPoint = [number, ...(number | null)[]]; /** A group of metric results that share the same tag values. */ export interface QueryMetricsResultGroup { /** Values of the tags in the group. The tags are ordered the same way as in request.groupByTags collection. */ tagValues: string[]; /** List of result points for the group. */ points: Array<QueryMetricsResultPoint>; } /** Common structure for metric query responses. */ export interface QueryMetricsResponseCommon { /** * Result of the metrics query. * Contains only 1 element if `groupByTags` are empty, otherwise contains multiple results grouped by tags. */ resultGroups: Array<QueryMetricsResultGroup>; } /** * Response for a user-defined metric query. * @category Metrics */ export interface QueryUserMetricsResponse<NameType extends string = string> extends QueryMetricsResponseCommon { /** Specifies the user domain for custom metrics. */ domain: 'user'; /** Name of the queried user-defined metric. */ metricName: NameType; } /** * A single metric response for 'SquidMetricsRequest'. * @category Metrics */ export interface QuerySquidMetricsResponse<NameType extends SquidMetricName> extends QueryMetricsResponseCommon { /** Specifies the squid domain for built-in system metrics. */ domain: 'squid'; /** Name of the queried built-in Squid metric. */ metricName: NameType; } /** Final normalized response for a metrics query, required fields guaranteed. */ export type QueryMetricsResponse<NameType extends string = string> = Required<QuerySquidMetricsResponse<NameType extends SquidMetricName ? NameType : SquidMetricName> | QueryUserMetricsResponse<NameType>>; /** * A single metric event (wire format). * @category Metrics */ export interface Metric<MetricNameType = string> { /** Name of the metric. */ name: MetricNameType; /** Value of the metric. */ value: number; /** Time associated with the metric. Milliseconds since UNIX epoch. */ timestamp: number; /** Set of tags for the metric. */ tags: Record<string, string>; }