mirror of https://github.com/grafana/grafana.git
Kindsys: Target k8s style resource definitions (#67008)
Co-authored-by: sam boyer <sdboyer@grafana.com>
This commit is contained in:
parent
b71b778d0d
commit
ca1f79b9ba
|
@ -473,7 +473,6 @@ lerna.json @grafana/frontend-ops
|
||||||
/scripts/trigger_docker_build.sh @grafana/grafana-delivery
|
/scripts/trigger_docker_build.sh @grafana/grafana-delivery
|
||||||
/scripts/trigger_grafana_packer.sh @grafana/grafana-delivery
|
/scripts/trigger_grafana_packer.sh @grafana/grafana-delivery
|
||||||
/scripts/trigger_windows_build.sh @grafana/grafana-delivery
|
/scripts/trigger_windows_build.sh @grafana/grafana-delivery
|
||||||
/scripts/validate-devenv-dashboards.sh @grafana/grafana-delivery
|
|
||||||
/scripts/verify-repo-update/ @grafana/grafana-delivery
|
/scripts/verify-repo-update/ @grafana/grafana-delivery
|
||||||
|
|
||||||
/scripts/webpack/ @grafana/frontend-ops
|
/scripts/webpack/ @grafana/frontend-ops
|
||||||
|
|
|
@ -13,6 +13,57 @@ title: Dashboard kind
|
||||||
|
|
||||||
A Grafana dashboard.
|
A Grafana dashboard.
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|------------|---------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `metadata` | [object](#metadata) | **Yes** | | metadata contains embedded CommonMetadata and can be extended with custom string fields<br/>TODO: use CommonMetadata instead of redefining here; currently needs to be defined here<br/>without external reference as using the CommonMetadata reference breaks thema codegen. |
|
||||||
|
| `spec` | [object](#spec) | **Yes** | | |
|
||||||
|
| `status` | [object](#status) | **Yes** | | |
|
||||||
|
|
||||||
|
### Metadata
|
||||||
|
|
||||||
|
metadata contains embedded CommonMetadata and can be extended with custom string fields
|
||||||
|
TODO: use CommonMetadata instead of redefining here; currently needs to be defined here
|
||||||
|
without external reference as using the CommonMetadata reference breaks thema codegen.
|
||||||
|
|
||||||
|
It extends [_kubeObjectMetadata](#_kubeobjectmetadata).
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|---------------------|------------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `createdBy` | string | **Yes** | | |
|
||||||
|
| `creationTimestamp` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `extraFields` | [object](#extrafields) | **Yes** | | extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata |
|
||||||
|
| `finalizers` | string[] | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `labels` | map[string]string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `resourceVersion` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `uid` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `updateTimestamp` | string | **Yes** | | |
|
||||||
|
| `updatedBy` | string | **Yes** | | |
|
||||||
|
| `deletionTimestamp` | string | No | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
|
||||||
|
### _kubeObjectMetadata
|
||||||
|
|
||||||
|
_kubeObjectMetadata is metadata found in a kubernetes object's metadata field.
|
||||||
|
It is not exhaustive and only includes fields which may be relevant to a kind's implementation,
|
||||||
|
As it is also intended to be generic enough to function with any API Server.
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|---------------------|-------------------|----------|---------|-------------|
|
||||||
|
| `creationTimestamp` | string | **Yes** | | |
|
||||||
|
| `finalizers` | string[] | **Yes** | | |
|
||||||
|
| `labels` | map[string]string | **Yes** | | |
|
||||||
|
| `resourceVersion` | string | **Yes** | | |
|
||||||
|
| `uid` | string | **Yes** | | |
|
||||||
|
| `deletionTimestamp` | string | No | | |
|
||||||
|
|
||||||
|
### ExtraFields
|
||||||
|
|
||||||
|
extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|----------|------|----------|---------|-------------|
|
||||||
|
|
||||||
|
### Spec
|
||||||
|
|
||||||
| Property | Type | Required | Default | Description |
|
| Property | Type | Required | Default | Description |
|
||||||
|------------------------|---------------------------------------------|----------|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|------------------------|---------------------------------------------|----------|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
| `editable` | boolean | **Yes** | `true` | Whether a dashboard is editable or not. |
|
| `editable` | boolean | **Yes** | `true` | Whether a dashboard is editable or not. |
|
||||||
|
@ -608,4 +659,34 @@ TODO this appears to be spread all over in the frontend. Concepts will likely ne
|
||||||
| `refresh_intervals` | string[] | **Yes** | `[5s 10s 30s 1m 5m 15m 30m 1h 2h 1d]` | Selectable intervals for auto-refresh. |
|
| `refresh_intervals` | string[] | **Yes** | `[5s 10s 30s 1m 5m 15m 30m 1h 2h 1d]` | Selectable intervals for auto-refresh. |
|
||||||
| `time_options` | string[] | **Yes** | `[5m 15m 1h 6h 12h 24h 2d 7d 30d]` | TODO docs |
|
| `time_options` | string[] | **Yes** | `[5m 15m 1h 6h 12h 24h 2d 7d 30d]` | TODO docs |
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|--------------------|----------------------------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `additionalFields` | [object](#additionalfields) | **Yes** | | additionalFields is reserved for future use |
|
||||||
|
| `operatorStates` | map[string][joinSchema.status.#OperatorState](#joinschema.status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.<br/>Any operator which consumes this kind SHOULD add its state evaluation information to this field. |
|
||||||
|
|
||||||
|
### AdditionalFields
|
||||||
|
|
||||||
|
additionalFields is reserved for future use
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|----------|------|----------|---------|-------------|
|
||||||
|
|
||||||
|
### JoinSchema.Status.#OperatorState
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `lastEvaluation` | string | **Yes** | | lastEvaluation is the ResourceVersion last evaluated |
|
||||||
|
| `state` | string | **Yes** | | state describes the state of the lastEvaluation.<br/>It is limited to three possible states for machine evaluation.<br/>Possible values are: `success`, `in_progress`, `failed`. |
|
||||||
|
| `descriptiveState` | string | No | | descriptiveState is an optional more descriptive state field which has no requirements on format |
|
||||||
|
| `details` | [object](#details) | No | | details contains any extra information that is operator-specific |
|
||||||
|
|
||||||
|
### Details
|
||||||
|
|
||||||
|
details contains any extra information that is operator-specific
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|----------|------|----------|---------|-------------|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,57 @@ title: LibraryPanel kind
|
||||||
|
|
||||||
A standalone panel
|
A standalone panel
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|------------|---------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `metadata` | [object](#metadata) | **Yes** | | metadata contains embedded CommonMetadata and can be extended with custom string fields<br/>TODO: use CommonMetadata instead of redefining here; currently needs to be defined here<br/>without external reference as using the CommonMetadata reference breaks thema codegen. |
|
||||||
|
| `spec` | [object](#spec) | **Yes** | | |
|
||||||
|
| `status` | [object](#status) | **Yes** | | |
|
||||||
|
|
||||||
|
### Metadata
|
||||||
|
|
||||||
|
metadata contains embedded CommonMetadata and can be extended with custom string fields
|
||||||
|
TODO: use CommonMetadata instead of redefining here; currently needs to be defined here
|
||||||
|
without external reference as using the CommonMetadata reference breaks thema codegen.
|
||||||
|
|
||||||
|
It extends [_kubeObjectMetadata](#_kubeobjectmetadata).
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|---------------------|------------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `createdBy` | string | **Yes** | | |
|
||||||
|
| `creationTimestamp` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `extraFields` | [object](#extrafields) | **Yes** | | extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata |
|
||||||
|
| `finalizers` | string[] | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `labels` | map[string]string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `resourceVersion` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `uid` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `updateTimestamp` | string | **Yes** | | |
|
||||||
|
| `updatedBy` | string | **Yes** | | |
|
||||||
|
| `deletionTimestamp` | string | No | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
|
||||||
|
### _kubeObjectMetadata
|
||||||
|
|
||||||
|
_kubeObjectMetadata is metadata found in a kubernetes object's metadata field.
|
||||||
|
It is not exhaustive and only includes fields which may be relevant to a kind's implementation,
|
||||||
|
As it is also intended to be generic enough to function with any API Server.
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|---------------------|-------------------|----------|---------|-------------|
|
||||||
|
| `creationTimestamp` | string | **Yes** | | |
|
||||||
|
| `finalizers` | string[] | **Yes** | | |
|
||||||
|
| `labels` | map[string]string | **Yes** | | |
|
||||||
|
| `resourceVersion` | string | **Yes** | | |
|
||||||
|
| `uid` | string | **Yes** | | |
|
||||||
|
| `deletionTimestamp` | string | No | | |
|
||||||
|
|
||||||
|
### ExtraFields
|
||||||
|
|
||||||
|
extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|----------|------|----------|---------|-------------|
|
||||||
|
|
||||||
|
### Spec
|
||||||
|
|
||||||
| Property | Type | Required | Default | Description |
|
| Property | Type | Required | Default | Description |
|
||||||
|-----------------|-------------------------------------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------|
|
|-----------------|-------------------------------------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
| `model` | [object](#model) | **Yes** | | TODO: should be the same panel schema defined in dashboard<br/>Typescript: Omit<Panel, 'gridPos' | 'id' | 'libraryPanel'>; |
|
| `model` | [object](#model) | **Yes** | | TODO: should be the same panel schema defined in dashboard<br/>Typescript: Omit<Panel, 'gridPos' | 'id' | 'libraryPanel'>; |
|
||||||
|
@ -53,4 +104,34 @@ Typescript: Omit<Panel, 'gridPos' | 'id' | 'libraryPanel'>;
|
||||||
| Property | Type | Required | Default | Description |
|
| Property | Type | Required | Default | Description |
|
||||||
|----------|------|----------|---------|-------------|
|
|----------|------|----------|---------|-------------|
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|--------------------|----------------------------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `additionalFields` | [object](#additionalfields) | **Yes** | | additionalFields is reserved for future use |
|
||||||
|
| `operatorStates` | map[string][joinSchema.status.#OperatorState](#joinschema.status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.<br/>Any operator which consumes this kind SHOULD add its state evaluation information to this field. |
|
||||||
|
|
||||||
|
### AdditionalFields
|
||||||
|
|
||||||
|
additionalFields is reserved for future use
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|----------|------|----------|---------|-------------|
|
||||||
|
|
||||||
|
### JoinSchema.Status.#OperatorState
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `lastEvaluation` | string | **Yes** | | lastEvaluation is the ResourceVersion last evaluated |
|
||||||
|
| `state` | string | **Yes** | | state describes the state of the lastEvaluation.<br/>It is limited to three possible states for machine evaluation.<br/>Possible values are: `success`, `in_progress`, `failed`. |
|
||||||
|
| `descriptiveState` | string | No | | descriptiveState is an optional more descriptive state field which has no requirements on format |
|
||||||
|
| `details` | [object](#details) | No | | details contains any extra information that is operator-specific |
|
||||||
|
|
||||||
|
### Details
|
||||||
|
|
||||||
|
details contains any extra information that is operator-specific
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|----------|------|----------|---------|-------------|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,57 @@ title: Playlist kind
|
||||||
|
|
||||||
A playlist is a series of dashboards that is automatically rotated in the browser, on a configurable interval.
|
A playlist is a series of dashboards that is automatically rotated in the browser, on a configurable interval.
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|------------|---------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `metadata` | [object](#metadata) | **Yes** | | metadata contains embedded CommonMetadata and can be extended with custom string fields<br/>TODO: use CommonMetadata instead of redefining here; currently needs to be defined here<br/>without external reference as using the CommonMetadata reference breaks thema codegen. |
|
||||||
|
| `spec` | [object](#spec) | **Yes** | | |
|
||||||
|
| `status` | [object](#status) | **Yes** | | |
|
||||||
|
|
||||||
|
### Metadata
|
||||||
|
|
||||||
|
metadata contains embedded CommonMetadata and can be extended with custom string fields
|
||||||
|
TODO: use CommonMetadata instead of redefining here; currently needs to be defined here
|
||||||
|
without external reference as using the CommonMetadata reference breaks thema codegen.
|
||||||
|
|
||||||
|
It extends [_kubeObjectMetadata](#_kubeobjectmetadata).
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|---------------------|------------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `createdBy` | string | **Yes** | | |
|
||||||
|
| `creationTimestamp` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `extraFields` | [object](#extrafields) | **Yes** | | extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata |
|
||||||
|
| `finalizers` | string[] | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `labels` | map[string]string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `resourceVersion` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `uid` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `updateTimestamp` | string | **Yes** | | |
|
||||||
|
| `updatedBy` | string | **Yes** | | |
|
||||||
|
| `deletionTimestamp` | string | No | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
|
||||||
|
### _kubeObjectMetadata
|
||||||
|
|
||||||
|
_kubeObjectMetadata is metadata found in a kubernetes object's metadata field.
|
||||||
|
It is not exhaustive and only includes fields which may be relevant to a kind's implementation,
|
||||||
|
As it is also intended to be generic enough to function with any API Server.
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|---------------------|-------------------|----------|---------|-------------|
|
||||||
|
| `creationTimestamp` | string | **Yes** | | |
|
||||||
|
| `finalizers` | string[] | **Yes** | | |
|
||||||
|
| `labels` | map[string]string | **Yes** | | |
|
||||||
|
| `resourceVersion` | string | **Yes** | | |
|
||||||
|
| `uid` | string | **Yes** | | |
|
||||||
|
| `deletionTimestamp` | string | No | | |
|
||||||
|
|
||||||
|
### ExtraFields
|
||||||
|
|
||||||
|
extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|----------|------|----------|---------|-------------|
|
||||||
|
|
||||||
|
### Spec
|
||||||
|
|
||||||
| Property | Type | Required | Default | Description |
|
| Property | Type | Required | Default | Description |
|
||||||
|------------|---------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|------------|---------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
| `interval` | string | **Yes** | `5m` | Interval sets the time between switching views in a playlist.<br/>FIXME: Is this based on a standardized format or what options are available? Can datemath be used? |
|
| `interval` | string | **Yes** | `5m` | Interval sets the time between switching views in a playlist.<br/>FIXME: Is this based on a standardized format or what options are available? Can datemath be used? |
|
||||||
|
@ -28,4 +79,34 @@ A playlist is a series of dashboards that is automatically rotated in the browse
|
||||||
| `value` | string | **Yes** | | Value depends on type and describes the playlist item.<br/><br/> - dashboard_by_id: The value is an internal numerical identifier set by Grafana. This<br/> is not portable as the numerical identifier is non-deterministic between different instances.<br/> Will be replaced by dashboard_by_uid in the future. (deprecated)<br/> - dashboard_by_tag: The value is a tag which is set on any number of dashboards. All<br/> dashboards behind the tag will be added to the playlist.<br/> - dashboard_by_uid: The value is the dashboard UID |
|
| `value` | string | **Yes** | | Value depends on type and describes the playlist item.<br/><br/> - dashboard_by_id: The value is an internal numerical identifier set by Grafana. This<br/> is not portable as the numerical identifier is non-deterministic between different instances.<br/> Will be replaced by dashboard_by_uid in the future. (deprecated)<br/> - dashboard_by_tag: The value is a tag which is set on any number of dashboards. All<br/> dashboards behind the tag will be added to the playlist.<br/> - dashboard_by_uid: The value is the dashboard UID |
|
||||||
| `title` | string | No | | Title is an unused property -- it will be removed in the future |
|
| `title` | string | No | | Title is an unused property -- it will be removed in the future |
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|--------------------|----------------------------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `additionalFields` | [object](#additionalfields) | **Yes** | | additionalFields is reserved for future use |
|
||||||
|
| `operatorStates` | map[string][joinSchema.status.#OperatorState](#joinschema.status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.<br/>Any operator which consumes this kind SHOULD add its state evaluation information to this field. |
|
||||||
|
|
||||||
|
### AdditionalFields
|
||||||
|
|
||||||
|
additionalFields is reserved for future use
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|----------|------|----------|---------|-------------|
|
||||||
|
|
||||||
|
### JoinSchema.Status.#OperatorState
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `lastEvaluation` | string | **Yes** | | lastEvaluation is the ResourceVersion last evaluated |
|
||||||
|
| `state` | string | **Yes** | | state describes the state of the lastEvaluation.<br/>It is limited to three possible states for machine evaluation.<br/>Possible values are: `success`, `in_progress`, `failed`. |
|
||||||
|
| `descriptiveState` | string | No | | descriptiveState is an optional more descriptive state field which has no requirements on format |
|
||||||
|
| `details` | [object](#details) | No | | details contains any extra information that is operator-specific |
|
||||||
|
|
||||||
|
### Details
|
||||||
|
|
||||||
|
details contains any extra information that is operator-specific
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|----------|------|----------|---------|-------------|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,57 @@ title: Preferences kind
|
||||||
|
|
||||||
The user or team frontend preferences
|
The user or team frontend preferences
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|------------|---------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `metadata` | [object](#metadata) | **Yes** | | metadata contains embedded CommonMetadata and can be extended with custom string fields<br/>TODO: use CommonMetadata instead of redefining here; currently needs to be defined here<br/>without external reference as using the CommonMetadata reference breaks thema codegen. |
|
||||||
|
| `spec` | [object](#spec) | **Yes** | | |
|
||||||
|
| `status` | [object](#status) | **Yes** | | |
|
||||||
|
|
||||||
|
### Metadata
|
||||||
|
|
||||||
|
metadata contains embedded CommonMetadata and can be extended with custom string fields
|
||||||
|
TODO: use CommonMetadata instead of redefining here; currently needs to be defined here
|
||||||
|
without external reference as using the CommonMetadata reference breaks thema codegen.
|
||||||
|
|
||||||
|
It extends [_kubeObjectMetadata](#_kubeobjectmetadata).
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|---------------------|------------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `createdBy` | string | **Yes** | | |
|
||||||
|
| `creationTimestamp` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `extraFields` | [object](#extrafields) | **Yes** | | extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata |
|
||||||
|
| `finalizers` | string[] | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `labels` | map[string]string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `resourceVersion` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `uid` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `updateTimestamp` | string | **Yes** | | |
|
||||||
|
| `updatedBy` | string | **Yes** | | |
|
||||||
|
| `deletionTimestamp` | string | No | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
|
||||||
|
### _kubeObjectMetadata
|
||||||
|
|
||||||
|
_kubeObjectMetadata is metadata found in a kubernetes object's metadata field.
|
||||||
|
It is not exhaustive and only includes fields which may be relevant to a kind's implementation,
|
||||||
|
As it is also intended to be generic enough to function with any API Server.
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|---------------------|-------------------|----------|---------|-------------|
|
||||||
|
| `creationTimestamp` | string | **Yes** | | |
|
||||||
|
| `finalizers` | string[] | **Yes** | | |
|
||||||
|
| `labels` | map[string]string | **Yes** | | |
|
||||||
|
| `resourceVersion` | string | **Yes** | | |
|
||||||
|
| `uid` | string | **Yes** | | |
|
||||||
|
| `deletionTimestamp` | string | No | | |
|
||||||
|
|
||||||
|
### ExtraFields
|
||||||
|
|
||||||
|
extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|----------|------|----------|---------|-------------|
|
||||||
|
|
||||||
|
### Spec
|
||||||
|
|
||||||
| Property | Type | Required | Default | Description |
|
| Property | Type | Required | Default | Description |
|
||||||
|--------------------|---------------------------------------------------|----------|---------|---------------------------------------------------------------------------------|
|
|--------------------|---------------------------------------------------|----------|---------|---------------------------------------------------------------------------------|
|
||||||
| `homeDashboardUID` | string | No | | UID for the home dashboard |
|
| `homeDashboardUID` | string | No | | UID for the home dashboard |
|
||||||
|
@ -28,4 +79,34 @@ The user or team frontend preferences
|
||||||
|-----------|--------|----------|---------|---------------------------------------------|
|
|-----------|--------|----------|---------|---------------------------------------------|
|
||||||
| `homeTab` | string | No | | one of: '' | 'query' | 'starred'; |
|
| `homeTab` | string | No | | one of: '' | 'query' | 'starred'; |
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|--------------------|----------------------------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `additionalFields` | [object](#additionalfields) | **Yes** | | additionalFields is reserved for future use |
|
||||||
|
| `operatorStates` | map[string][joinSchema.status.#OperatorState](#joinschema.status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.<br/>Any operator which consumes this kind SHOULD add its state evaluation information to this field. |
|
||||||
|
|
||||||
|
### AdditionalFields
|
||||||
|
|
||||||
|
additionalFields is reserved for future use
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|----------|------|----------|---------|-------------|
|
||||||
|
|
||||||
|
### JoinSchema.Status.#OperatorState
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `lastEvaluation` | string | **Yes** | | lastEvaluation is the ResourceVersion last evaluated |
|
||||||
|
| `state` | string | **Yes** | | state describes the state of the lastEvaluation.<br/>It is limited to three possible states for machine evaluation.<br/>Possible values are: `success`, `in_progress`, `failed`. |
|
||||||
|
| `descriptiveState` | string | No | | descriptiveState is an optional more descriptive state field which has no requirements on format |
|
||||||
|
| `details` | [object](#details) | No | | details contains any extra information that is operator-specific |
|
||||||
|
|
||||||
|
### Details
|
||||||
|
|
||||||
|
details contains any extra information that is operator-specific
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|----------|------|----------|---------|-------------|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,57 @@ title: PublicDashboard kind
|
||||||
|
|
||||||
Public dashboard configuration
|
Public dashboard configuration
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|------------|---------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `metadata` | [object](#metadata) | **Yes** | | metadata contains embedded CommonMetadata and can be extended with custom string fields<br/>TODO: use CommonMetadata instead of redefining here; currently needs to be defined here<br/>without external reference as using the CommonMetadata reference breaks thema codegen. |
|
||||||
|
| `spec` | [object](#spec) | **Yes** | | |
|
||||||
|
| `status` | [object](#status) | **Yes** | | |
|
||||||
|
|
||||||
|
### Metadata
|
||||||
|
|
||||||
|
metadata contains embedded CommonMetadata and can be extended with custom string fields
|
||||||
|
TODO: use CommonMetadata instead of redefining here; currently needs to be defined here
|
||||||
|
without external reference as using the CommonMetadata reference breaks thema codegen.
|
||||||
|
|
||||||
|
It extends [_kubeObjectMetadata](#_kubeobjectmetadata).
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|---------------------|------------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `createdBy` | string | **Yes** | | |
|
||||||
|
| `creationTimestamp` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `extraFields` | [object](#extrafields) | **Yes** | | extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata |
|
||||||
|
| `finalizers` | string[] | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `labels` | map[string]string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `resourceVersion` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `uid` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `updateTimestamp` | string | **Yes** | | |
|
||||||
|
| `updatedBy` | string | **Yes** | | |
|
||||||
|
| `deletionTimestamp` | string | No | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
|
||||||
|
### _kubeObjectMetadata
|
||||||
|
|
||||||
|
_kubeObjectMetadata is metadata found in a kubernetes object's metadata field.
|
||||||
|
It is not exhaustive and only includes fields which may be relevant to a kind's implementation,
|
||||||
|
As it is also intended to be generic enough to function with any API Server.
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|---------------------|-------------------|----------|---------|-------------|
|
||||||
|
| `creationTimestamp` | string | **Yes** | | |
|
||||||
|
| `finalizers` | string[] | **Yes** | | |
|
||||||
|
| `labels` | map[string]string | **Yes** | | |
|
||||||
|
| `resourceVersion` | string | **Yes** | | |
|
||||||
|
| `uid` | string | **Yes** | | |
|
||||||
|
| `deletionTimestamp` | string | No | | |
|
||||||
|
|
||||||
|
### ExtraFields
|
||||||
|
|
||||||
|
extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|----------|------|----------|---------|-------------|
|
||||||
|
|
||||||
|
### Spec
|
||||||
|
|
||||||
| Property | Type | Required | Default | Description |
|
| Property | Type | Required | Default | Description |
|
||||||
|------------------------|---------|----------|---------|-----------------------------------------------------------------|
|
|------------------------|---------|----------|---------|-----------------------------------------------------------------|
|
||||||
| `annotationsEnabled` | boolean | **Yes** | | Flag that indicates if annotations are enabled |
|
| `annotationsEnabled` | boolean | **Yes** | | Flag that indicates if annotations are enabled |
|
||||||
|
@ -22,4 +73,34 @@ Public dashboard configuration
|
||||||
| `uid` | string | **Yes** | | Unique public dashboard identifier |
|
| `uid` | string | **Yes** | | Unique public dashboard identifier |
|
||||||
| `accessToken` | string | No | | Unique public access token |
|
| `accessToken` | string | No | | Unique public access token |
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|--------------------|----------------------------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `additionalFields` | [object](#additionalfields) | **Yes** | | additionalFields is reserved for future use |
|
||||||
|
| `operatorStates` | map[string][joinSchema.status.#OperatorState](#joinschema.status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.<br/>Any operator which consumes this kind SHOULD add its state evaluation information to this field. |
|
||||||
|
|
||||||
|
### AdditionalFields
|
||||||
|
|
||||||
|
additionalFields is reserved for future use
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|----------|------|----------|---------|-------------|
|
||||||
|
|
||||||
|
### JoinSchema.Status.#OperatorState
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `lastEvaluation` | string | **Yes** | | lastEvaluation is the ResourceVersion last evaluated |
|
||||||
|
| `state` | string | **Yes** | | state describes the state of the lastEvaluation.<br/>It is limited to three possible states for machine evaluation.<br/>Possible values are: `success`, `in_progress`, `failed`. |
|
||||||
|
| `descriptiveState` | string | No | | descriptiveState is an optional more descriptive state field which has no requirements on format |
|
||||||
|
| `details` | [object](#details) | No | | details contains any extra information that is operator-specific |
|
||||||
|
|
||||||
|
### Details
|
||||||
|
|
||||||
|
details contains any extra information that is operator-specific
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|----------|------|----------|---------|-------------|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,57 @@ title: ServiceAccount kind
|
||||||
|
|
||||||
system account
|
system account
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|------------|---------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `metadata` | [object](#metadata) | **Yes** | | metadata contains embedded CommonMetadata and can be extended with custom string fields<br/>TODO: use CommonMetadata instead of redefining here; currently needs to be defined here<br/>without external reference as using the CommonMetadata reference breaks thema codegen. |
|
||||||
|
| `spec` | [object](#spec) | **Yes** | | |
|
||||||
|
| `status` | [object](#status) | **Yes** | | |
|
||||||
|
|
||||||
|
### Metadata
|
||||||
|
|
||||||
|
metadata contains embedded CommonMetadata and can be extended with custom string fields
|
||||||
|
TODO: use CommonMetadata instead of redefining here; currently needs to be defined here
|
||||||
|
without external reference as using the CommonMetadata reference breaks thema codegen.
|
||||||
|
|
||||||
|
It extends [_kubeObjectMetadata](#_kubeobjectmetadata).
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|---------------------|------------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `createdBy` | string | **Yes** | | |
|
||||||
|
| `creationTimestamp` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `extraFields` | [object](#extrafields) | **Yes** | | extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata |
|
||||||
|
| `finalizers` | string[] | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `labels` | map[string]string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `resourceVersion` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `uid` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `updateTimestamp` | string | **Yes** | | |
|
||||||
|
| `updatedBy` | string | **Yes** | | |
|
||||||
|
| `deletionTimestamp` | string | No | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
|
||||||
|
### _kubeObjectMetadata
|
||||||
|
|
||||||
|
_kubeObjectMetadata is metadata found in a kubernetes object's metadata field.
|
||||||
|
It is not exhaustive and only includes fields which may be relevant to a kind's implementation,
|
||||||
|
As it is also intended to be generic enough to function with any API Server.
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|---------------------|-------------------|----------|---------|-------------|
|
||||||
|
| `creationTimestamp` | string | **Yes** | | |
|
||||||
|
| `finalizers` | string[] | **Yes** | | |
|
||||||
|
| `labels` | map[string]string | **Yes** | | |
|
||||||
|
| `resourceVersion` | string | **Yes** | | |
|
||||||
|
| `uid` | string | **Yes** | | |
|
||||||
|
| `deletionTimestamp` | string | No | | |
|
||||||
|
|
||||||
|
### ExtraFields
|
||||||
|
|
||||||
|
extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|----------|------|----------|---------|-------------|
|
||||||
|
|
||||||
|
### Spec
|
||||||
|
|
||||||
| Property | Type | Required | Default | Description |
|
| Property | Type | Required | Default | Description |
|
||||||
|-----------------|--------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------|
|
|-----------------|--------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
| `avatarUrl` | string | **Yes** | | AvatarUrl is the service account's avatar URL. It allows the frontend to display a picture in front<br/>of the service account. |
|
| `avatarUrl` | string | **Yes** | | AvatarUrl is the service account's avatar URL. It allows the frontend to display a picture in front<br/>of the service account. |
|
||||||
|
@ -24,8 +75,36 @@ system account
|
||||||
| `role` | string | **Yes** | | OrgRole is a Grafana Organization Role which can be 'Viewer', 'Editor', 'Admin'.<br/>Possible values are: `Admin`, `Editor`, `Viewer`. |
|
| `role` | string | **Yes** | | OrgRole is a Grafana Organization Role which can be 'Viewer', 'Editor', 'Admin'.<br/>Possible values are: `Admin`, `Editor`, `Viewer`. |
|
||||||
| `tokens` | integer | **Yes** | | Tokens is the number of active tokens for the service account.<br/>Tokens are used to authenticate the service account against Grafana. |
|
| `tokens` | integer | **Yes** | | Tokens is the number of active tokens for the service account.<br/>Tokens are used to authenticate the service account against Grafana. |
|
||||||
| `accessControl` | map[string]boolean | No | | AccessControl metadata associated with a given resource. |
|
| `accessControl` | map[string]boolean | No | | AccessControl metadata associated with a given resource. |
|
||||||
| `created` | string | No | | Created indicates when the service account was created. |
|
|
||||||
| `teams` | string[] | No | | Teams is a list of teams the service account belongs to. |
|
| `teams` | string[] | No | | Teams is a list of teams the service account belongs to. |
|
||||||
| `updated` | string | No | | Updated indicates when the service account was updated. |
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|--------------------|----------------------------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `additionalFields` | [object](#additionalfields) | **Yes** | | additionalFields is reserved for future use |
|
||||||
|
| `operatorStates` | map[string][joinSchema.status.#OperatorState](#joinschema.status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.<br/>Any operator which consumes this kind SHOULD add its state evaluation information to this field. |
|
||||||
|
|
||||||
|
### AdditionalFields
|
||||||
|
|
||||||
|
additionalFields is reserved for future use
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|----------|------|----------|---------|-------------|
|
||||||
|
|
||||||
|
### JoinSchema.Status.#OperatorState
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `lastEvaluation` | string | **Yes** | | lastEvaluation is the ResourceVersion last evaluated |
|
||||||
|
| `state` | string | **Yes** | | state describes the state of the lastEvaluation.<br/>It is limited to three possible states for machine evaluation.<br/>Possible values are: `success`, `in_progress`, `failed`. |
|
||||||
|
| `descriptiveState` | string | No | | descriptiveState is an optional more descriptive state field which has no requirements on format |
|
||||||
|
| `details` | [object](#details) | No | | details contains any extra information that is operator-specific |
|
||||||
|
|
||||||
|
### Details
|
||||||
|
|
||||||
|
details contains any extra information that is operator-specific
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|----------|------|----------|---------|-------------|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -13,16 +13,95 @@ title: Team kind
|
||||||
|
|
||||||
A team is a named grouping of Grafana users to which access control rules may be assigned.
|
A team is a named grouping of Grafana users to which access control rules may be assigned.
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|------------|---------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `metadata` | [object](#metadata) | **Yes** | | metadata contains embedded CommonMetadata and can be extended with custom string fields<br/>TODO: use CommonMetadata instead of redefining here; currently needs to be defined here<br/>without external reference as using the CommonMetadata reference breaks thema codegen. |
|
||||||
|
| `spec` | [object](#spec) | **Yes** | | |
|
||||||
|
| `status` | [object](#status) | **Yes** | | |
|
||||||
|
|
||||||
|
### Metadata
|
||||||
|
|
||||||
|
metadata contains embedded CommonMetadata and can be extended with custom string fields
|
||||||
|
TODO: use CommonMetadata instead of redefining here; currently needs to be defined here
|
||||||
|
without external reference as using the CommonMetadata reference breaks thema codegen.
|
||||||
|
|
||||||
|
It extends [_kubeObjectMetadata](#_kubeobjectmetadata).
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|---------------------|------------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `createdBy` | string | **Yes** | | |
|
||||||
|
| `creationTimestamp` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `extraFields` | [object](#extrafields) | **Yes** | | extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata |
|
||||||
|
| `finalizers` | string[] | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `labels` | map[string]string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `resourceVersion` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `uid` | string | **Yes** | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
| `updateTimestamp` | string | **Yes** | | |
|
||||||
|
| `updatedBy` | string | **Yes** | | |
|
||||||
|
| `deletionTimestamp` | string | No | | *(Inherited from [_kubeObjectMetadata](#_kubeobjectmetadata))* |
|
||||||
|
|
||||||
|
### _kubeObjectMetadata
|
||||||
|
|
||||||
|
_kubeObjectMetadata is metadata found in a kubernetes object's metadata field.
|
||||||
|
It is not exhaustive and only includes fields which may be relevant to a kind's implementation,
|
||||||
|
As it is also intended to be generic enough to function with any API Server.
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|---------------------|-------------------|----------|---------|-------------|
|
||||||
|
| `creationTimestamp` | string | **Yes** | | |
|
||||||
|
| `finalizers` | string[] | **Yes** | | |
|
||||||
|
| `labels` | map[string]string | **Yes** | | |
|
||||||
|
| `resourceVersion` | string | **Yes** | | |
|
||||||
|
| `uid` | string | **Yes** | | |
|
||||||
|
| `deletionTimestamp` | string | No | | |
|
||||||
|
|
||||||
|
### ExtraFields
|
||||||
|
|
||||||
|
extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|----------|------|----------|---------|-------------|
|
||||||
|
|
||||||
|
### Spec
|
||||||
|
|
||||||
| Property | Type | Required | Default | Description |
|
| Property | Type | Required | Default | Description |
|
||||||
|-----------------|--------------------|----------|---------|----------------------------------------------------------|
|
|-----------------|--------------------|----------|---------|----------------------------------------------------------|
|
||||||
| `created` | string | **Yes** | | Created indicates when the team was created. |
|
|
||||||
| `memberCount` | integer | **Yes** | | MemberCount is the number of the team members. |
|
| `memberCount` | integer | **Yes** | | MemberCount is the number of the team members. |
|
||||||
| `name` | string | **Yes** | | Name of the team. |
|
| `name` | string | **Yes** | | Name of the team. |
|
||||||
| `orgId` | integer | **Yes** | | OrgId is the ID of an organisation the team belongs to. |
|
| `orgId` | integer | **Yes** | | OrgId is the ID of an organisation the team belongs to. |
|
||||||
| `permission` | integer | **Yes** | | Possible values are: `0`, `1`, `2`, `4`. |
|
| `permission` | integer | **Yes** | | Possible values are: `0`, `1`, `2`, `4`. |
|
||||||
| `updated` | string | **Yes** | | Updated indicates when the team was updated. |
|
|
||||||
| `accessControl` | map[string]boolean | No | | AccessControl metadata associated with a given resource. |
|
| `accessControl` | map[string]boolean | No | | AccessControl metadata associated with a given resource. |
|
||||||
| `avatarUrl` | string | No | | AvatarUrl is the team's avatar URL. |
|
| `avatarUrl` | string | No | | AvatarUrl is the team's avatar URL. |
|
||||||
| `email` | string | No | | Email of the team. |
|
| `email` | string | No | | Email of the team. |
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|--------------------|----------------------------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `additionalFields` | [object](#additionalfields) | **Yes** | | additionalFields is reserved for future use |
|
||||||
|
| `operatorStates` | map[string][joinSchema.status.#OperatorState](#joinschema.status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.<br/>Any operator which consumes this kind SHOULD add its state evaluation information to this field. |
|
||||||
|
|
||||||
|
### AdditionalFields
|
||||||
|
|
||||||
|
additionalFields is reserved for future use
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|----------|------|----------|---------|-------------|
|
||||||
|
|
||||||
|
### JoinSchema.Status.#OperatorState
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `lastEvaluation` | string | **Yes** | | lastEvaluation is the ResourceVersion last evaluated |
|
||||||
|
| `state` | string | **Yes** | | state describes the state of the lastEvaluation.<br/>It is limited to three possible states for machine evaluation.<br/>Possible values are: `success`, `in_progress`, `failed`. |
|
||||||
|
| `descriptiveState` | string | No | | descriptiveState is an optional more descriptive state field which has no requirements on format |
|
||||||
|
| `details` | [object](#details) | No | | details contains any extra information that is operator-specific |
|
||||||
|
|
||||||
|
### Details
|
||||||
|
|
||||||
|
details contains any extra information that is operator-specific
|
||||||
|
|
||||||
|
| Property | Type | Required | Default | Description |
|
||||||
|
|----------|------|----------|---------|-------------|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -61,8 +61,6 @@ Some stable features are enabled by default. You can disable a stable feature by
|
||||||
| `renderAuthJWT` | Uses JWT-based auth for rendering instead of relying on remote cache |
|
| `renderAuthJWT` | Uses JWT-based auth for rendering instead of relying on remote cache |
|
||||||
| `enableElasticsearchBackendQuerying` | Enable the processing of queries and responses in the Elasticsearch data source through backend |
|
| `enableElasticsearchBackendQuerying` | Enable the processing of queries and responses in the Elasticsearch data source through backend |
|
||||||
| `enableDatagridEditing` | Enables the edit functionality in the datagrid panel |
|
| `enableDatagridEditing` | Enables the edit functionality in the datagrid panel |
|
||||||
| `publicDashboards` | Enables public access to dashboards |
|
|
||||||
| `publicDashboardsEmailSharing` | Enables public dashboard sharing to be restricted to only allowed emails |
|
|
||||||
|
|
||||||
## Alpha feature toggles
|
## Alpha feature toggles
|
||||||
|
|
||||||
|
@ -73,6 +71,8 @@ Alpha features might be changed or removed without prior notice.
|
||||||
| ---------------------------------- | -------------------------------------------------------------------------------------------------------------- |
|
| ---------------------------------- | -------------------------------------------------------------------------------------------------------------- |
|
||||||
| `live-service-web-worker` | This will use a webworker thread to processes events rather than the main thread |
|
| `live-service-web-worker` | This will use a webworker thread to processes events rather than the main thread |
|
||||||
| `queryOverLive` | Use Grafana Live WebSocket to execute backend queries |
|
| `queryOverLive` | Use Grafana Live WebSocket to execute backend queries |
|
||||||
|
| `publicDashboards` | Enables public access to dashboards |
|
||||||
|
| `publicDashboardsEmailSharing` | Enables public dashboard sharing to be restricted to only allowed emails |
|
||||||
| `lokiLive` | Support WebSocket streaming for loki (early prototype) |
|
| `lokiLive` | Support WebSocket streaming for loki (early prototype) |
|
||||||
| `storage` | Configurable storage for dashboards, datasources, and resources |
|
| `storage` | Configurable storage for dashboards, datasources, and resources |
|
||||||
| `newTraceViewHeader` | Shows the new trace view header |
|
| `newTraceViewHeader` | Shows the new trace view header |
|
||||||
|
|
14
go.mod
14
go.mod
|
@ -22,10 +22,7 @@ replace github.com/deepmap/oapi-codegen => github.com/spinillos/oapi-codegen v1.
|
||||||
// hoist a replace statement.
|
// hoist a replace statement.
|
||||||
replace k8s.io/client-go => k8s.io/client-go v0.25.3
|
replace k8s.io/client-go => k8s.io/client-go v0.25.3
|
||||||
|
|
||||||
require (
|
require k8s.io/apimachinery v0.26.2
|
||||||
k8s.io/apiextensions-apiserver v0.26.2 // indirect
|
|
||||||
k8s.io/apimachinery v0.26.2
|
|
||||||
)
|
|
||||||
|
|
||||||
require (
|
require (
|
||||||
cloud.google.com/go/storage v1.28.1
|
cloud.google.com/go/storage v1.28.1
|
||||||
|
@ -266,7 +263,7 @@ require (
|
||||||
github.com/grafana/dataplane/examples v0.0.0-20230404174214-4d6fd58a18ad
|
github.com/grafana/dataplane/examples v0.0.0-20230404174214-4d6fd58a18ad
|
||||||
github.com/grafana/dataplane/sdata v0.0.6
|
github.com/grafana/dataplane/sdata v0.0.6
|
||||||
github.com/grafana/go-mssqldb v0.9.1
|
github.com/grafana/go-mssqldb v0.9.1
|
||||||
github.com/grafana/kindsys v0.0.0-20230414093523-5df3e256ebc0
|
github.com/grafana/kindsys v0.0.0-20230427152021-bb328815be7a
|
||||||
github.com/grafana/thema v0.0.0-20230417103609-99b482c479fe
|
github.com/grafana/thema v0.0.0-20230417103609-99b482c479fe
|
||||||
github.com/redis/go-redis/v9 v9.0.2
|
github.com/redis/go-redis/v9 v9.0.2
|
||||||
github.com/weaveworks/common v0.0.0-20230208133027-16871410fca4
|
github.com/weaveworks/common v0.0.0-20230208133027-16871410fca4
|
||||||
|
@ -297,8 +294,10 @@ require (
|
||||||
github.com/drone/drone-go v1.7.1 // indirect
|
github.com/drone/drone-go v1.7.1 // indirect
|
||||||
github.com/drone/envsubst v1.0.3 // indirect
|
github.com/drone/envsubst v1.0.3 // indirect
|
||||||
github.com/drone/runner-go v1.12.0 // indirect
|
github.com/drone/runner-go v1.12.0 // indirect
|
||||||
|
github.com/emicklei/go-restful/v3 v3.9.0 // indirect
|
||||||
github.com/envoyproxy/go-control-plane v0.10.3 // indirect
|
github.com/envoyproxy/go-control-plane v0.10.3 // indirect
|
||||||
github.com/envoyproxy/protoc-gen-validate v0.6.13 // indirect
|
github.com/envoyproxy/protoc-gen-validate v0.6.13 // indirect
|
||||||
|
github.com/fsnotify/fsnotify v1.6.0 // indirect
|
||||||
github.com/go-asn1-ber/asn1-ber v1.5.4 // indirect
|
github.com/go-asn1-ber/asn1-ber v1.5.4 // indirect
|
||||||
github.com/google/go-querystring v1.1.0 // indirect
|
github.com/google/go-querystring v1.1.0 // indirect
|
||||||
github.com/google/gofuzz v1.2.0 // indirect
|
github.com/google/gofuzz v1.2.0 // indirect
|
||||||
|
@ -337,11 +336,8 @@ require (
|
||||||
go.opentelemetry.io/otel/metric v0.37.0 // indirect
|
go.opentelemetry.io/otel/metric v0.37.0 // indirect
|
||||||
go.starlark.net v0.0.0-20221020143700-22309ac47eac // indirect
|
go.starlark.net v0.0.0-20221020143700-22309ac47eac // indirect
|
||||||
gopkg.in/fsnotify/fsnotify.v1 v1.4.7 // indirect
|
gopkg.in/fsnotify/fsnotify.v1 v1.4.7 // indirect
|
||||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
k8s.io/api v0.26.2 // indirect
|
||||||
k8s.io/klog/v2 v2.80.1 // indirect
|
|
||||||
k8s.io/utils v0.0.0-20221107191617-1a15be271d1d // indirect
|
k8s.io/utils v0.0.0-20221107191617-1a15be271d1d // indirect
|
||||||
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect
|
|
||||||
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
|
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
|
23
go.sum
23
go.sum
|
@ -739,10 +739,10 @@ github.com/elazarl/goproxy v0.0.0-20220115173737-adb46da277ac/go.mod h1:Ro8st/El
|
||||||
github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8=
|
github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8=
|
||||||
github.com/elazarl/goproxy/ext v0.0.0-20220115173737-adb46da277ac h1:9yrT5tmn9Zc0ytWPASlaPwQfQMQYnRf0RSDe1XvHw0Q=
|
github.com/elazarl/goproxy/ext v0.0.0-20220115173737-adb46da277ac h1:9yrT5tmn9Zc0ytWPASlaPwQfQMQYnRf0RSDe1XvHw0Q=
|
||||||
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
|
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
|
||||||
github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk=
|
|
||||||
github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
|
github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
|
||||||
github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
|
github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
|
||||||
github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE=
|
github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE=
|
||||||
|
github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
|
||||||
github.com/emicklei/proto v1.10.0 h1:pDGyFRVV5RvV+nkBK9iy3q67FBy9Xa7vwrOTE+g5aGw=
|
github.com/emicklei/proto v1.10.0 h1:pDGyFRVV5RvV+nkBK9iy3q67FBy9Xa7vwrOTE+g5aGw=
|
||||||
github.com/emicklei/proto v1.10.0/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A=
|
github.com/emicklei/proto v1.10.0/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A=
|
||||||
github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg=
|
github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg=
|
||||||
|
@ -786,6 +786,7 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4
|
||||||
github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
|
github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
|
||||||
github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
|
github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
|
||||||
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
|
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
|
||||||
|
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
|
||||||
github.com/fsouza/fake-gcs-server v1.7.0/go.mod h1:5XIRs4YvwNbNoz+1JF8j6KLAyDh7RHGAyAK3EP2EsNk=
|
github.com/fsouza/fake-gcs-server v1.7.0/go.mod h1:5XIRs4YvwNbNoz+1JF8j6KLAyDh7RHGAyAK3EP2EsNk=
|
||||||
github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA=
|
github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA=
|
||||||
github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
|
github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
|
||||||
|
@ -1268,8 +1269,6 @@ github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad
|
||||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||||
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
|
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
|
||||||
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||||
github.com/grafana/alerting v0.0.0-20230418161049-5f374e58cb32 h1:LdPoVBj+CA5oHLeUejDzqy8/c4Fa0UfTtCcOHka0Jws=
|
|
||||||
github.com/grafana/alerting v0.0.0-20230418161049-5f374e58cb32/go.mod h1:nHfrSTdV7/l74N5/ezqlQ+JwSvIChhN3G5+PjCfwG/E=
|
|
||||||
github.com/grafana/alerting v0.0.0-20230426173942-011a41e1fbe2 h1:teRmmE08bSnvyh3e+adfv/6RA1ZZdhTCmNL9Ckfm1Rk=
|
github.com/grafana/alerting v0.0.0-20230426173942-011a41e1fbe2 h1:teRmmE08bSnvyh3e+adfv/6RA1ZZdhTCmNL9Ckfm1Rk=
|
||||||
github.com/grafana/alerting v0.0.0-20230426173942-011a41e1fbe2/go.mod h1:nHfrSTdV7/l74N5/ezqlQ+JwSvIChhN3G5+PjCfwG/E=
|
github.com/grafana/alerting v0.0.0-20230426173942-011a41e1fbe2/go.mod h1:nHfrSTdV7/l74N5/ezqlQ+JwSvIChhN3G5+PjCfwG/E=
|
||||||
github.com/grafana/codejen v0.0.3 h1:tAWxoTUuhgmEqxJPOLtJoxlPBbMULFwKFOcRsPRPXDw=
|
github.com/grafana/codejen v0.0.3 h1:tAWxoTUuhgmEqxJPOLtJoxlPBbMULFwKFOcRsPRPXDw=
|
||||||
|
@ -1296,8 +1295,8 @@ github.com/grafana/grafana-plugin-sdk-go v0.94.0/go.mod h1:3VXz4nCv6wH5SfgB3mlW3
|
||||||
github.com/grafana/grafana-plugin-sdk-go v0.114.0/go.mod h1:D7x3ah+1d4phNXpbnOaxa/osSaZlwh9/ZUnGGzegRbk=
|
github.com/grafana/grafana-plugin-sdk-go v0.114.0/go.mod h1:D7x3ah+1d4phNXpbnOaxa/osSaZlwh9/ZUnGGzegRbk=
|
||||||
github.com/grafana/grafana-plugin-sdk-go v0.159.0 h1:tjqzTe/wz+1zzaeHpOJvBvSvZFx/bJUSHj6WA8HJqhE=
|
github.com/grafana/grafana-plugin-sdk-go v0.159.0 h1:tjqzTe/wz+1zzaeHpOJvBvSvZFx/bJUSHj6WA8HJqhE=
|
||||||
github.com/grafana/grafana-plugin-sdk-go v0.159.0/go.mod h1:7/F3lL/w3MGuZTwu0jam5oL/4zNOQmhs2k8WZ9VlzhI=
|
github.com/grafana/grafana-plugin-sdk-go v0.159.0/go.mod h1:7/F3lL/w3MGuZTwu0jam5oL/4zNOQmhs2k8WZ9VlzhI=
|
||||||
github.com/grafana/kindsys v0.0.0-20230414093523-5df3e256ebc0 h1:Or8DllkxKq3+kLXAS/tkr5K2Yv745c6K2rRvslGWGd4=
|
github.com/grafana/kindsys v0.0.0-20230427152021-bb328815be7a h1:i2YhC6eTyDp+7Ftv5c6VZDUQskmKX4oIPGf38qfiZiU=
|
||||||
github.com/grafana/kindsys v0.0.0-20230414093523-5df3e256ebc0/go.mod h1:GNcfpy5+SY6RVbNGQW264gC0r336Dm+0zgQ5vt6+M8Y=
|
github.com/grafana/kindsys v0.0.0-20230427152021-bb328815be7a/go.mod h1:GNcfpy5+SY6RVbNGQW264gC0r336Dm+0zgQ5vt6+M8Y=
|
||||||
github.com/grafana/phlare/api v0.1.4-0.20230426005640-f90edba05413 h1:bBzCezZNRyYlJpXTkyZdY4fpPxHZUdyeyRWzhtw/P6I=
|
github.com/grafana/phlare/api v0.1.4-0.20230426005640-f90edba05413 h1:bBzCezZNRyYlJpXTkyZdY4fpPxHZUdyeyRWzhtw/P6I=
|
||||||
github.com/grafana/phlare/api v0.1.4-0.20230426005640-f90edba05413/go.mod h1:IvwuGG9xa/h96UH/exgvsfy3zE+ZpctkNT9o5aaGdrU=
|
github.com/grafana/phlare/api v0.1.4-0.20230426005640-f90edba05413/go.mod h1:IvwuGG9xa/h96UH/exgvsfy3zE+ZpctkNT9o5aaGdrU=
|
||||||
github.com/grafana/prometheus-alertmanager v0.25.1-0.20230308154952-78fedf89728b h1:VQOGGGJ2lKcVPANyzIESKYhSeA0QIvUQwfA3CbrkDfA=
|
github.com/grafana/prometheus-alertmanager v0.25.1-0.20230308154952-78fedf89728b h1:VQOGGGJ2lKcVPANyzIESKYhSeA0QIvUQwfA3CbrkDfA=
|
||||||
|
@ -1642,15 +1641,8 @@ github.com/lestrrat-go/httpcc v1.0.1/go.mod h1:qiltp3Mt56+55GPVCbTdM9MlqhvzyuL6W
|
||||||
github.com/lestrrat-go/iter v1.0.1/go.mod h1:zIdgO1mRKhn8l9vrZJZz9TUMMFbQbLeTsbqPDrJ/OJc=
|
github.com/lestrrat-go/iter v1.0.1/go.mod h1:zIdgO1mRKhn8l9vrZJZz9TUMMFbQbLeTsbqPDrJ/OJc=
|
||||||
github.com/lestrrat-go/jwx v1.2.25/go.mod h1:zoNuZymNl5lgdcu6P7K6ie2QRll5HVfF4xwxBBK1NxY=
|
github.com/lestrrat-go/jwx v1.2.25/go.mod h1:zoNuZymNl5lgdcu6P7K6ie2QRll5HVfF4xwxBBK1NxY=
|
||||||
github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I=
|
github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I=
|
||||||
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
|
||||||
github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
|
||||||
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
|
||||||
github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
|
||||||
github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
|
||||||
github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs=
|
github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs=
|
||||||
github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||||
github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw=
|
|
||||||
github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
|
||||||
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
|
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
|
||||||
github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
|
github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
|
||||||
github.com/linkedin/goavro/v2 v2.10.0 h1:eTBIRoInBM88gITGXYtUSqqxLTFXfOsJBiX8ZMW0o4U=
|
github.com/linkedin/goavro/v2 v2.10.0 h1:eTBIRoInBM88gITGXYtUSqqxLTFXfOsJBiX8ZMW0o4U=
|
||||||
|
@ -2935,6 +2927,7 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||||
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220908150016-7ac13a9a928d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220908150016-7ac13a9a928d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
@ -3271,8 +3264,7 @@ k8s.io/api v0.21.1/go.mod h1:FstGROTmsSHBarKc8bylzXih8BLNYTiS3TZcsoEDg2s=
|
||||||
k8s.io/api v0.22.4/go.mod h1:Rgs+9gIGYC5laXQSZZ9JqT5NevNgoGiOdVWi1BAB3qk=
|
k8s.io/api v0.22.4/go.mod h1:Rgs+9gIGYC5laXQSZZ9JqT5NevNgoGiOdVWi1BAB3qk=
|
||||||
k8s.io/api v0.25.3/go.mod h1:o42gKscFrEVjHdQnyRenACrMtbuJsVdP+WVjqejfzmI=
|
k8s.io/api v0.25.3/go.mod h1:o42gKscFrEVjHdQnyRenACrMtbuJsVdP+WVjqejfzmI=
|
||||||
k8s.io/api v0.26.2 h1:dM3cinp3PGB6asOySalOZxEG4CZ0IAdJsrYZXE/ovGQ=
|
k8s.io/api v0.26.2 h1:dM3cinp3PGB6asOySalOZxEG4CZ0IAdJsrYZXE/ovGQ=
|
||||||
k8s.io/apiextensions-apiserver v0.26.2 h1:/yTG2B9jGY2Q70iGskMf41qTLhL9XeNN2KhI0uDgwko=
|
k8s.io/api v0.26.2/go.mod h1:1kjMQsFE+QHPfskEcVNgL3+Hp88B80uj0QtSOlj8itU=
|
||||||
k8s.io/apiextensions-apiserver v0.26.2/go.mod h1:Y7UPgch8nph8mGCuVk0SK83LnS8Esf3n6fUBgew8SH8=
|
|
||||||
k8s.io/apimachinery v0.0.0-20190809020650-423f5d784010/go.mod h1:Waf/xTS2FGRrgXCkO5FP3XxTOWh0qLf2QhL1qFZZ/R8=
|
k8s.io/apimachinery v0.0.0-20190809020650-423f5d784010/go.mod h1:Waf/xTS2FGRrgXCkO5FP3XxTOWh0qLf2QhL1qFZZ/R8=
|
||||||
k8s.io/apimachinery v0.17.5/go.mod h1:ioIo1G/a+uONV7Tv+ZmCbMG1/a3kVw5YcDdncd8ugQ0=
|
k8s.io/apimachinery v0.17.5/go.mod h1:ioIo1G/a+uONV7Tv+ZmCbMG1/a3kVw5YcDdncd8ugQ0=
|
||||||
k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
|
k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
|
||||||
|
@ -3302,6 +3294,7 @@ k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUc
|
||||||
k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
|
k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
|
||||||
k8s.io/klog v0.3.1/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
|
k8s.io/klog v0.3.1/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
|
||||||
k8s.io/klog v0.4.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
|
k8s.io/klog v0.4.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
|
||||||
|
k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
|
||||||
k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
|
k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
|
||||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
||||||
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
||||||
|
@ -3311,7 +3304,6 @@ k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
|
||||||
k8s.io/klog/v2 v2.20.0/go.mod h1:Gm8eSIfQN6457haJuPaMxZw4wyP5k+ykPFlrhQDvhvw=
|
k8s.io/klog/v2 v2.20.0/go.mod h1:Gm8eSIfQN6457haJuPaMxZw4wyP5k+ykPFlrhQDvhvw=
|
||||||
k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
||||||
k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4=
|
k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4=
|
||||||
k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
|
||||||
k8s.io/kube-openapi v0.0.0-20190709113604-33be087ad058/go.mod h1:nfDlWeOsu3pUf4yWGL+ERqohP4YsZcBJXWMK+gkzOA4=
|
k8s.io/kube-openapi v0.0.0-20190709113604-33be087ad058/go.mod h1:nfDlWeOsu3pUf4yWGL+ERqohP4YsZcBJXWMK+gkzOA4=
|
||||||
k8s.io/kube-openapi v0.0.0-20190722073852-5e22f3d471e6/go.mod h1:RZvgC8MSN6DjiMV6oIfEE9pDL9CYXokkfaCKZeHm3nc=
|
k8s.io/kube-openapi v0.0.0-20190722073852-5e22f3d471e6/go.mod h1:RZvgC8MSN6DjiMV6oIfEE9pDL9CYXokkfaCKZeHm3nc=
|
||||||
k8s.io/kube-openapi v0.0.0-20200316234421-82d701f24f9d/go.mod h1:F+5wygcW0wmRTnM3cOgIqGivxkwSWIWT5YdsDbeAOaU=
|
k8s.io/kube-openapi v0.0.0-20200316234421-82d701f24f9d/go.mod h1:F+5wygcW0wmRTnM3cOgIqGivxkwSWIWT5YdsDbeAOaU=
|
||||||
|
@ -3337,6 +3329,7 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyz
|
||||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
|
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
|
||||||
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k=
|
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k=
|
||||||
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
|
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
|
||||||
|
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb792X0kfOBBJUPFEyvVfQWrYT/l8h5EKA6JQ=
|
||||||
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
|
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
|
||||||
sigs.k8s.io/structured-merge-diff/v2 v2.0.1/go.mod h1:Wb7vfKAodbKgf6tn1Kl0VvGj7mRH6DGaRcixXEJXTsE=
|
sigs.k8s.io/structured-merge-diff/v2 v2.0.1/go.mod h1:Wb7vfKAodbKgf6tn1Kl0VvGj7mRH6DGaRcixXEJXTsE=
|
||||||
sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
|
sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
|
||||||
|
|
|
@ -16,91 +16,83 @@ lineage: seqs: [
|
||||||
schemas: [
|
schemas: [
|
||||||
// 0.0
|
// 0.0
|
||||||
{
|
{
|
||||||
@grafana(TSVeneer="type")
|
spec: {
|
||||||
|
// Unique numeric identifier for the dashboard.
|
||||||
|
// TODO must isolate or remove identifiers local to a Grafana instance...?
|
||||||
|
id?: int64
|
||||||
|
// Unique dashboard identifier that can be generated by anyone. string (8-40)
|
||||||
|
uid?: string
|
||||||
|
// Title of dashboard.
|
||||||
|
title?: string
|
||||||
|
// Description of dashboard.
|
||||||
|
description?: string
|
||||||
|
// This property should only be used in dashboards defined by plugins. It is a quick check
|
||||||
|
// to see if the version has changed since the last time. Unclear why using the version property
|
||||||
|
// is insufficient.
|
||||||
|
revision?: int64 @grafanamaturity(NeedsExpertReview)
|
||||||
|
// For dashboards imported from the https://grafana.com/grafana/dashboards/ portal
|
||||||
|
gnetId?: string @grafanamaturity(NeedsExpertReview)
|
||||||
|
// Tags associated with dashboard.
|
||||||
|
tags?: [...string] @grafanamaturity(NeedsExpertReview)
|
||||||
|
// Theme of dashboard.
|
||||||
|
style: "light" | *"dark" @grafanamaturity(NeedsExpertReview)
|
||||||
|
// Timezone of dashboard. Accepts IANA TZDB zone ID or "browser" or "utc".
|
||||||
|
timezone?: string | *"browser"
|
||||||
|
// Whether a dashboard is editable or not.
|
||||||
|
editable: bool | *true
|
||||||
|
// Configuration of dashboard cursor sync behavior.
|
||||||
|
graphTooltip: #DashboardCursorSync
|
||||||
|
// Time range for dashboard, e.g. last 6 hours, last 7 days, etc
|
||||||
|
time?: {
|
||||||
|
from: string | *"now-6h"
|
||||||
|
to: string | *"now"
|
||||||
|
} @grafanamaturity(NeedsExpertReview)
|
||||||
|
|
||||||
// Unique numeric identifier for the dashboard.
|
|
||||||
// TODO must isolate or remove identifiers local to a Grafana instance...?
|
|
||||||
id?: int64
|
|
||||||
// Unique dashboard identifier that can be generated by anyone. string (8-40)
|
|
||||||
uid?: string
|
|
||||||
// Title of dashboard.
|
|
||||||
title?: string
|
|
||||||
// Description of dashboard.
|
|
||||||
description?: string
|
|
||||||
// This property should only be used in dashboards defined by plugins. It is a quick check
|
|
||||||
// to see if the version has changed since the last time. Unclear why using the version property
|
|
||||||
// is insufficient.
|
|
||||||
revision?: int64 @grafanamaturity(NeedsExpertReview)
|
|
||||||
// For dashboards imported from the https://grafana.com/grafana/dashboards/ portal
|
|
||||||
gnetId?: string @grafanamaturity(NeedsExpertReview)
|
|
||||||
// Tags associated with dashboard.
|
|
||||||
tags?: [...string] @grafanamaturity(NeedsExpertReview)
|
|
||||||
// Theme of dashboard.
|
|
||||||
style: "light" | *"dark" @grafanamaturity(NeedsExpertReview)
|
|
||||||
// Timezone of dashboard. Accepts IANA TZDB zone ID or "browser" or "utc".
|
|
||||||
timezone?: string | *"browser"
|
|
||||||
// Whether a dashboard is editable or not.
|
|
||||||
editable: bool | *true
|
|
||||||
// Configuration of dashboard cursor sync behavior.
|
|
||||||
graphTooltip: #DashboardCursorSync
|
|
||||||
// Time range for dashboard, e.g. last 6 hours, last 7 days, etc
|
|
||||||
time?: {
|
|
||||||
from: string | *"now-6h"
|
|
||||||
to: string | *"now"
|
|
||||||
} @grafanamaturity(NeedsExpertReview)
|
|
||||||
|
|
||||||
// TODO docs
|
|
||||||
// TODO this appears to be spread all over in the frontend. Concepts will likely need tidying in tandem with schema changes
|
|
||||||
timepicker?: {
|
|
||||||
// Whether timepicker is collapsed or not.
|
|
||||||
collapse: bool | *false
|
|
||||||
// Whether timepicker is enabled or not.
|
|
||||||
enable: bool | *true
|
|
||||||
// Whether timepicker is visible or not.
|
|
||||||
hidden: bool | *false
|
|
||||||
// Selectable intervals for auto-refresh.
|
|
||||||
refresh_intervals: [...string] | *["5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d"]
|
|
||||||
// TODO docs
|
// TODO docs
|
||||||
time_options: [...string] | *["5m", "15m", "1h", "6h", "12h", "24h", "2d", "7d", "30d"]
|
// TODO this appears to be spread all over in the frontend. Concepts will likely need tidying in tandem with schema changes
|
||||||
} @grafanamaturity(NeedsExpertReview)
|
timepicker?: {
|
||||||
// The month that the fiscal year starts on. 0 = January, 11 = December
|
// Whether timepicker is collapsed or not.
|
||||||
fiscalYearStartMonth?: uint8 & <12 | *0
|
collapse: bool | *false
|
||||||
// When set to true, the dashboard will redraw panels at an interval matching the pixel width.
|
// Whether timepicker is enabled or not.
|
||||||
// This will keep data "moving left" regardless of the query refresh rate. This setting helps
|
enable: bool | *true
|
||||||
// avoid dashboards presenting stale live data
|
// Whether timepicker is visible or not.
|
||||||
liveNow?: bool @grafanamaturity(NeedsExpertReview)
|
hidden: bool | *false
|
||||||
// TODO docs
|
// Selectable intervals for auto-refresh.
|
||||||
weekStart?: string @grafanamaturity(NeedsExpertReview)
|
refresh_intervals: [...string] | *["5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d"]
|
||||||
|
// TODO docs
|
||||||
|
time_options: [...string] | *["5m", "15m", "1h", "6h", "12h", "24h", "2d", "7d", "30d"]
|
||||||
|
} @grafanamaturity(NeedsExpertReview)
|
||||||
|
// The month that the fiscal year starts on. 0 = January, 11 = December
|
||||||
|
fiscalYearStartMonth?: uint8 & <12 | *0
|
||||||
|
// When set to true, the dashboard will redraw panels at an interval matching the pixel width.
|
||||||
|
// This will keep data "moving left" regardless of the query refresh rate. This setting helps
|
||||||
|
// avoid dashboards presenting stale live data
|
||||||
|
liveNow?: bool @grafanamaturity(NeedsExpertReview)
|
||||||
|
// TODO docs
|
||||||
|
weekStart?: string @grafanamaturity(NeedsExpertReview)
|
||||||
|
|
||||||
// Refresh rate of dashboard. Represented via interval string, e.g. "5s", "1m", "1h", "1d".
|
// Refresh rate of dashboard. Represented via interval string, e.g. "5s", "1m", "1h", "1d".
|
||||||
refresh?: string | false
|
refresh?: string | false
|
||||||
// Version of the JSON schema, incremented each time a Grafana update brings
|
// Version of the JSON schema, incremented each time a Grafana update brings
|
||||||
// changes to said schema.
|
// changes to said schema.
|
||||||
// TODO this is the existing schema numbering system. It will be replaced by Thema's themaVersion
|
// TODO this is the existing schema numbering system. It will be replaced by Thema's themaVersion
|
||||||
schemaVersion: uint16 | *36
|
schemaVersion: uint16 | *36
|
||||||
// Version of the dashboard, incremented each time the dashboard is updated.
|
// Version of the dashboard, incremented each time the dashboard is updated.
|
||||||
version?: uint32 @grafanamaturity(NeedsExpertReview)
|
version?: uint32 @grafanamaturity(NeedsExpertReview)
|
||||||
panels?: [...(#Panel | #RowPanel | #GraphPanel | #HeatmapPanel)] @grafanamaturity(NeedsExpertReview)
|
panels?: [...(#Panel | #RowPanel | #GraphPanel | #HeatmapPanel)] @grafanamaturity(NeedsExpertReview)
|
||||||
// TODO docs
|
// TODO docs
|
||||||
templating?: {
|
templating?: {
|
||||||
list?: [...#VariableModel] @grafanamaturity(NeedsExpertReview)
|
list?: [...#VariableModel] @grafanamaturity(NeedsExpertReview)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO -- should not be a public interface on its own, but required for Veneer
|
// TODO docs
|
||||||
#AnnotationContainer: {
|
annotations?: #AnnotationContainer
|
||||||
// annoying... but required so that the list is defined using the nested Veneer
|
|
||||||
@grafana(TSVeneer="type")
|
|
||||||
|
|
||||||
list?: [...#AnnotationQuery] @grafanamaturity(NeedsExpertReview)
|
// TODO docs
|
||||||
} @cuetsy(kind="interface")
|
links?: [...#DashboardLink] @grafanamaturity(NeedsExpertReview)
|
||||||
|
|
||||||
// TODO docs
|
snapshot?: #Snapshot @grafanamaturity(NeedsExpertReview)
|
||||||
annotations?: #AnnotationContainer
|
} @cuetsy(kind="interface") @grafana(TSVeneer="type")
|
||||||
|
|
||||||
// TODO docs
|
|
||||||
links?: [...#DashboardLink] @grafanamaturity(NeedsExpertReview)
|
|
||||||
|
|
||||||
snapshot?: #Snapshot @grafanamaturity(NeedsExpertReview)
|
|
||||||
|
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
// Definitions (referenced above) are declared below
|
// Definitions (referenced above) are declared below
|
||||||
|
@ -131,6 +123,14 @@ lineage: seqs: [
|
||||||
ids: [...uint8]
|
ids: [...uint8]
|
||||||
} @cuetsy(kind="interface")
|
} @cuetsy(kind="interface")
|
||||||
|
|
||||||
|
// TODO -- should not be a public interface on its own, but required for Veneer
|
||||||
|
#AnnotationContainer: {
|
||||||
|
// annoying... but required so that the list is defined using the nested Veneer
|
||||||
|
@grafana(TSVeneer="type")
|
||||||
|
|
||||||
|
list?: [...#AnnotationQuery] @grafanamaturity(NeedsExpertReview)
|
||||||
|
} @cuetsy(kind="interface")
|
||||||
|
|
||||||
// TODO docs
|
// TODO docs
|
||||||
// FROM: AnnotationQuery in grafana-data/src/types/annotations.ts
|
// FROM: AnnotationQuery in grafana-data/src/types/annotations.ts
|
||||||
#AnnotationQuery: {
|
#AnnotationQuery: {
|
||||||
|
|
|
@ -38,10 +38,14 @@ func main() {
|
||||||
|
|
||||||
// All the jennies that comprise the core kinds generator pipeline
|
// All the jennies that comprise the core kinds generator pipeline
|
||||||
coreKindsGen.Append(
|
coreKindsGen.Append(
|
||||||
codegen.LatestJenny(cuectx.GoCoreKindParentPath, codegen.GoTypesJenny{}),
|
&codegen.ResourceGoTypesJenny{},
|
||||||
|
&codegen.SubresourceGoTypesJenny{},
|
||||||
codegen.CoreKindJenny(cuectx.GoCoreKindParentPath, nil),
|
codegen.CoreKindJenny(cuectx.GoCoreKindParentPath, nil),
|
||||||
codegen.BaseCoreRegistryJenny(filepath.Join("pkg", "registry", "corekind"), cuectx.GoCoreKindParentPath),
|
codegen.BaseCoreRegistryJenny(filepath.Join("pkg", "registry", "corekind"), cuectx.GoCoreKindParentPath),
|
||||||
codegen.LatestMajorsOrXJenny(cuectx.TSCoreKindParentPath, codegen.TSTypesJenny{}),
|
codegen.LatestMajorsOrXJenny(
|
||||||
|
cuectx.TSCoreKindParentPath,
|
||||||
|
true, // forcing group so that we ignore the top level resource (for now)
|
||||||
|
codegen.TSResourceJenny{}),
|
||||||
codegen.TSVeneerIndexJenny(filepath.Join("packages", "grafana-schema", "src")),
|
codegen.TSVeneerIndexJenny(filepath.Join("packages", "grafana-schema", "src")),
|
||||||
codegen.DocsJenny(filepath.Join("docs", "sources", "developers", "kinds", "core")),
|
codegen.DocsJenny(filepath.Join("docs", "sources", "developers", "kinds", "core")),
|
||||||
)
|
)
|
||||||
|
|
|
@ -14,35 +14,35 @@ lineage: seqs: [
|
||||||
schemas: [
|
schemas: [
|
||||||
// 0.0
|
// 0.0
|
||||||
{
|
{
|
||||||
@grafana(TSVeneer="type")
|
spec: {
|
||||||
|
// Folder UID
|
||||||
|
folderUid?: string @grafanamaturity(ToMetadata="sys")
|
||||||
|
|
||||||
// Folder UID
|
// Library element UID
|
||||||
folderUid?: string @grafanamaturity(ToMetadata="sys")
|
uid: string
|
||||||
|
|
||||||
// Library element UID
|
// Panel name (also saved in the model)
|
||||||
uid: string
|
name: string & strings.MinRunes(1)
|
||||||
|
|
||||||
// Panel name (also saved in the model)
|
// Panel description
|
||||||
name: string & strings.MinRunes(1)
|
description?: string
|
||||||
|
|
||||||
// Panel description
|
// The panel type (from inside the model)
|
||||||
description?: string
|
type: string & strings.MinRunes(1)
|
||||||
|
|
||||||
// The panel type (from inside the model)
|
// Dashboard version when this was saved (zero if unknown)
|
||||||
type: string & strings.MinRunes(1)
|
schemaVersion?: uint16
|
||||||
|
|
||||||
// Dashboard version when this was saved (zero if unknown)
|
// panel version, incremented each time the dashboard is updated.
|
||||||
schemaVersion?: uint16
|
version: int64 @grafanamaturity(NeedsExpertReview)
|
||||||
|
|
||||||
// panel version, incremented each time the dashboard is updated.
|
// TODO: should be the same panel schema defined in dashboard
|
||||||
version: int64 @grafanamaturity(NeedsExpertReview)
|
// Typescript: Omit<Panel, 'gridPos' | 'id' | 'libraryPanel'>;
|
||||||
|
model: {...}
|
||||||
|
|
||||||
// TODO: should be the same panel schema defined in dashboard
|
// Object storage metadata
|
||||||
// Typescript: Omit<Panel, 'gridPos' | 'id' | 'libraryPanel'>;
|
meta?: #LibraryElementDTOMeta @grafanamaturity(ToMetadata="sys")
|
||||||
model: {...}
|
} @cuetsy(kind="interface") @grafana(TSVeneer="type")
|
||||||
|
|
||||||
// Object storage metadata
|
|
||||||
meta?: #LibraryElementDTOMeta @grafanamaturity(ToMetadata="sys")
|
|
||||||
|
|
||||||
#LibraryElementDTOMetaUser: {
|
#LibraryElementDTOMetaUser: {
|
||||||
id: int64
|
id: int64
|
||||||
|
|
|
@ -9,20 +9,22 @@ lineage: seqs: [
|
||||||
schemas: [
|
schemas: [
|
||||||
//0.0
|
//0.0
|
||||||
{
|
{
|
||||||
// Unique playlist identifier. Generated on creation, either by the
|
spec: {
|
||||||
// creator of the playlist of by the application.
|
// Unique playlist identifier. Generated on creation, either by the
|
||||||
uid: string
|
// creator of the playlist of by the application.
|
||||||
|
uid: string
|
||||||
|
|
||||||
// Name of the playlist.
|
// Name of the playlist.
|
||||||
name: string
|
name: string
|
||||||
|
|
||||||
// Interval sets the time between switching views in a playlist.
|
// Interval sets the time between switching views in a playlist.
|
||||||
// FIXME: Is this based on a standardized format or what options are available? Can datemath be used?
|
// FIXME: Is this based on a standardized format or what options are available? Can datemath be used?
|
||||||
interval: string | *"5m"
|
interval: string | *"5m"
|
||||||
|
|
||||||
// The ordered list of items that the playlist will iterate over.
|
// The ordered list of items that the playlist will iterate over.
|
||||||
// FIXME! This should not be optional, but changing it makes the godegen awkward
|
// FIXME! This should not be optional, but changing it makes the godegen awkward
|
||||||
items?: [...#PlaylistItem]
|
items?: [...#PlaylistItem]
|
||||||
|
} @cuetsy(kind="interface")
|
||||||
|
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
// Definitions (referenced above) are declared below
|
// Definitions (referenced above) are declared below
|
||||||
|
|
|
@ -8,29 +8,31 @@ lineage: seqs: [
|
||||||
{
|
{
|
||||||
schemas: [
|
schemas: [
|
||||||
{
|
{
|
||||||
// UID for the home dashboard
|
spec: {
|
||||||
homeDashboardUID?: string
|
// UID for the home dashboard
|
||||||
|
homeDashboardUID?: string
|
||||||
|
|
||||||
// The timezone selection
|
// The timezone selection
|
||||||
// TODO: this should use the timezone defined in common
|
// TODO: this should use the timezone defined in common
|
||||||
timezone?: string
|
timezone?: string
|
||||||
|
|
||||||
// day of the week (sunday, monday, etc)
|
// day of the week (sunday, monday, etc)
|
||||||
weekStart?: string
|
weekStart?: string
|
||||||
|
|
||||||
// light, dark, empty is default
|
// light, dark, empty is default
|
||||||
theme?: string
|
theme?: string
|
||||||
|
|
||||||
// Selected language (beta)
|
// Selected language (beta)
|
||||||
language?: string
|
language?: string
|
||||||
|
|
||||||
// Explore query history preferences
|
// Explore query history preferences
|
||||||
queryHistory?: #QueryHistoryPreference
|
queryHistory?: #QueryHistoryPreference
|
||||||
|
} @cuetsy(kind="interface")
|
||||||
|
|
||||||
#QueryHistoryPreference: {
|
#QueryHistoryPreference: {
|
||||||
// one of: '' | 'query' | 'starred';
|
// one of: '' | 'query' | 'starred';
|
||||||
homeTab?: string
|
homeTab?: string
|
||||||
} @cuetsy(kind="interface") //0.0
|
} @cuetsy(kind="interface")
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
@ -9,18 +9,20 @@ lineage: seqs: [
|
||||||
schemas: [
|
schemas: [
|
||||||
// 0.0
|
// 0.0
|
||||||
{
|
{
|
||||||
// Unique public dashboard identifier
|
spec: {
|
||||||
uid: string
|
// Unique public dashboard identifier
|
||||||
// Dashboard unique identifier referenced by this public dashboard
|
uid: string
|
||||||
dashboardUid: string
|
// Dashboard unique identifier referenced by this public dashboard
|
||||||
// Unique public access token
|
dashboardUid: string
|
||||||
accessToken?: string
|
// Unique public access token
|
||||||
// Flag that indicates if the public dashboard is enabled
|
accessToken?: string
|
||||||
isEnabled: bool
|
// Flag that indicates if the public dashboard is enabled
|
||||||
// Flag that indicates if annotations are enabled
|
isEnabled: bool
|
||||||
annotationsEnabled: bool
|
// Flag that indicates if annotations are enabled
|
||||||
// Flag that indicates if the time range picker is enabled
|
annotationsEnabled: bool
|
||||||
timeSelectionEnabled: bool
|
// Flag that indicates if the time range picker is enabled
|
||||||
|
timeSelectionEnabled: bool
|
||||||
|
} @cuetsy(kind="interface")
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
package kind
|
package kind
|
||||||
|
|
||||||
import "time"
|
|
||||||
|
|
||||||
name: "ServiceAccount"
|
name: "ServiceAccount"
|
||||||
maturity: "merged"
|
maturity: "merged"
|
||||||
description: "system account"
|
description: "system account"
|
||||||
|
@ -11,35 +9,33 @@ lineage: seqs: [
|
||||||
schemas: [
|
schemas: [
|
||||||
// v0.0
|
// v0.0
|
||||||
{
|
{
|
||||||
// ID is the unique identifier of the service account in the database.
|
spec: {
|
||||||
id: int64 @grafanamaturity(ToMetadata="sys")
|
// ID is the unique identifier of the service account in the database.
|
||||||
// OrgId is the ID of an organisation the service account belongs to.
|
id: int64 @grafanamaturity(ToMetadata="sys")
|
||||||
orgId: int64 @grafanamaturity(ToMetadata="sys")
|
// OrgId is the ID of an organisation the service account belongs to.
|
||||||
// Name of the service account.
|
orgId: int64 @grafanamaturity(ToMetadata="sys")
|
||||||
name: string
|
// Name of the service account.
|
||||||
// Login of the service account.
|
name: string
|
||||||
login: string
|
// Login of the service account.
|
||||||
// IsDisabled indicates if the service account is disabled.
|
login: string
|
||||||
isDisabled: bool
|
// IsDisabled indicates if the service account is disabled.
|
||||||
// Role is the Grafana organization role of the service account which can be 'Viewer', 'Editor', 'Admin'.
|
isDisabled: bool
|
||||||
role: #OrgRole @grafanamaturity(ToMetadata="kind")
|
// Role is the Grafana organization role of the service account which can be 'Viewer', 'Editor', 'Admin'.
|
||||||
// Tokens is the number of active tokens for the service account.
|
role: #OrgRole @grafanamaturity(ToMetadata="kind")
|
||||||
// Tokens are used to authenticate the service account against Grafana.
|
// Tokens is the number of active tokens for the service account.
|
||||||
tokens: int64 @grafanamaturity(ToMetadata="kind")
|
// Tokens are used to authenticate the service account against Grafana.
|
||||||
// AvatarUrl is the service account's avatar URL. It allows the frontend to display a picture in front
|
tokens: int64 @grafanamaturity(ToMetadata="kind")
|
||||||
// of the service account.
|
// AvatarUrl is the service account's avatar URL. It allows the frontend to display a picture in front
|
||||||
avatarUrl: string @grafanamaturity(ToMetadata="kind")
|
// of the service account.
|
||||||
// AccessControl metadata associated with a given resource.
|
avatarUrl: string @grafanamaturity(ToMetadata="kind")
|
||||||
accessControl?: {
|
// AccessControl metadata associated with a given resource.
|
||||||
[string]: bool @grafanamaturity(ToMetadata="sys")
|
accessControl?: {
|
||||||
}
|
[string]: bool @grafanamaturity(ToMetadata="sys")
|
||||||
|
}
|
||||||
|
|
||||||
// Teams is a list of teams the service account belongs to.
|
// Teams is a list of teams the service account belongs to.
|
||||||
teams?: [...string] @grafanamaturity(ToMetadata="sys")
|
teams?: [...string] @grafanamaturity(ToMetadata="sys")
|
||||||
// Created indicates when the service account was created.
|
} @cuetsy(kind="interface")
|
||||||
created?: string & time.Time
|
|
||||||
// Updated indicates when the service account was updated.
|
|
||||||
updated?: string & time.Time
|
|
||||||
|
|
||||||
// OrgRole is a Grafana Organization Role which can be 'Viewer', 'Editor', 'Admin'.
|
// OrgRole is a Grafana Organization Role which can be 'Viewer', 'Editor', 'Admin'.
|
||||||
#OrgRole: "Admin" | "Editor" | "Viewer" @cuetsy(kind="type")
|
#OrgRole: "Admin" | "Editor" | "Viewer" @cuetsy(kind="type")
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
package kind
|
package kind
|
||||||
|
|
||||||
import "time"
|
|
||||||
|
|
||||||
name: "Team"
|
name: "Team"
|
||||||
maturity: "merged"
|
maturity: "merged"
|
||||||
description: "A team is a named grouping of Grafana users to which access control rules may be assigned."
|
description: "A team is a named grouping of Grafana users to which access control rules may be assigned."
|
||||||
|
@ -11,26 +9,24 @@ lineage: seqs: [
|
||||||
schemas: [
|
schemas: [
|
||||||
// v0.0
|
// v0.0
|
||||||
{
|
{
|
||||||
// OrgId is the ID of an organisation the team belongs to.
|
spec: {
|
||||||
orgId: int64 @grafanamaturity(ToMetadata="sys")
|
// OrgId is the ID of an organisation the team belongs to.
|
||||||
// Name of the team.
|
orgId: int64 @grafanamaturity(ToMetadata="sys")
|
||||||
name: string
|
// Name of the team.
|
||||||
// Email of the team.
|
name: string
|
||||||
email?: string
|
// Email of the team.
|
||||||
// AvatarUrl is the team's avatar URL.
|
email?: string
|
||||||
avatarUrl?: string @grafanamaturity(MaybeRemove)
|
// AvatarUrl is the team's avatar URL.
|
||||||
// MemberCount is the number of the team members.
|
avatarUrl?: string @grafanamaturity(MaybeRemove)
|
||||||
memberCount: int64 @grafanamaturity(ToMetadata="kind")
|
// MemberCount is the number of the team members.
|
||||||
// TODO - it seems it's a team_member.permission, unlikely it should belong to the team kind
|
memberCount: int64 @grafanamaturity(ToMetadata="kind")
|
||||||
permission: #Permission @grafanamaturity(ToMetadata="kind", MaybeRemove)
|
// TODO - it seems it's a team_member.permission, unlikely it should belong to the team kind
|
||||||
// AccessControl metadata associated with a given resource.
|
permission: #Permission @grafanamaturity(ToMetadata="kind", MaybeRemove)
|
||||||
accessControl?: {
|
// AccessControl metadata associated with a given resource.
|
||||||
[string]: bool @grafanamaturity(ToMetadata="sys")
|
accessControl?: {
|
||||||
}
|
[string]: bool @grafanamaturity(ToMetadata="sys")
|
||||||
// Created indicates when the team was created.
|
}
|
||||||
created: string & time.Time
|
} @cuetsy(kind="interface")
|
||||||
// Updated indicates when the team was updated.
|
|
||||||
updated: string & time.Time
|
|
||||||
|
|
||||||
#Permission: 0 | 1 | 2 | 4 @cuetsy(kind="enum",memberNames="Member|Viewer|Editor|Admin")
|
#Permission: 0 | 1 | 2 | 4 @cuetsy(kind="enum",memberNames="Member|Viewer|Editor|Admin")
|
||||||
},
|
},
|
||||||
|
|
|
@ -3,22 +3,11 @@
|
||||||
// Generated by:
|
// Generated by:
|
||||||
// kinds/gen.go
|
// kinds/gen.go
|
||||||
// Using jennies:
|
// Using jennies:
|
||||||
// TSTypesJenny
|
// TSResourceJenny
|
||||||
// LatestMajorsOrXJenny
|
// LatestMajorsOrXJenny
|
||||||
//
|
//
|
||||||
// Run 'make gen-cue' from repository root to regenerate.
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO -- should not be a public interface on its own, but required for Veneer
|
|
||||||
*/
|
|
||||||
export interface AnnotationContainer {
|
|
||||||
list?: Array<AnnotationQuery>;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const defaultAnnotationContainer: Partial<AnnotationContainer> = {
|
|
||||||
list: [],
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: this should be a regular DataQuery that depends on the selected dashboard
|
* TODO: this should be a regular DataQuery that depends on the selected dashboard
|
||||||
* these match the properties of the "grafana" datasouce that is default in most dashboards
|
* these match the properties of the "grafana" datasouce that is default in most dashboards
|
||||||
|
@ -66,6 +55,17 @@ export const defaultAnnotationPanelFilter: Partial<AnnotationPanelFilter> = {
|
||||||
ids: [],
|
ids: [],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO -- should not be a public interface on its own, but required for Veneer
|
||||||
|
*/
|
||||||
|
export interface AnnotationContainer {
|
||||||
|
list?: Array<AnnotationQuery>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const defaultAnnotationContainer: Partial<AnnotationContainer> = {
|
||||||
|
list: [],
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO docs
|
* TODO docs
|
||||||
* FROM: AnnotationQuery in grafana-data/src/types/annotations.ts
|
* FROM: AnnotationQuery in grafana-data/src/types/annotations.ts
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// Generated by:
|
// Generated by:
|
||||||
// kinds/gen.go
|
// kinds/gen.go
|
||||||
// Using jennies:
|
// Using jennies:
|
||||||
// TSTypesJenny
|
// TSResourceJenny
|
||||||
// LatestMajorsOrXJenny
|
// LatestMajorsOrXJenny
|
||||||
//
|
//
|
||||||
// Run 'make gen-cue' from repository root to regenerate.
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// Generated by:
|
// Generated by:
|
||||||
// kinds/gen.go
|
// kinds/gen.go
|
||||||
// Using jennies:
|
// Using jennies:
|
||||||
// TSTypesJenny
|
// TSResourceJenny
|
||||||
// LatestMajorsOrXJenny
|
// LatestMajorsOrXJenny
|
||||||
//
|
//
|
||||||
// Run 'make gen-cue' from repository root to regenerate.
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// Generated by:
|
// Generated by:
|
||||||
// kinds/gen.go
|
// kinds/gen.go
|
||||||
// Using jennies:
|
// Using jennies:
|
||||||
// TSTypesJenny
|
// TSResourceJenny
|
||||||
// LatestMajorsOrXJenny
|
// LatestMajorsOrXJenny
|
||||||
//
|
//
|
||||||
// Run 'make gen-cue' from repository root to regenerate.
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
@ -13,7 +13,7 @@ export interface QueryHistoryPreference {
|
||||||
* one of: '' | 'query' | 'starred';
|
* one of: '' | 'query' | 'starred';
|
||||||
*/
|
*/
|
||||||
homeTab?: string;
|
homeTab?: string;
|
||||||
} // 0.0
|
}
|
||||||
|
|
||||||
export interface Preferences {
|
export interface Preferences {
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// Generated by:
|
// Generated by:
|
||||||
// kinds/gen.go
|
// kinds/gen.go
|
||||||
// Using jennies:
|
// Using jennies:
|
||||||
// TSTypesJenny
|
// TSResourceJenny
|
||||||
// LatestMajorsOrXJenny
|
// LatestMajorsOrXJenny
|
||||||
//
|
//
|
||||||
// Run 'make gen-cue' from repository root to regenerate.
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// Generated by:
|
// Generated by:
|
||||||
// kinds/gen.go
|
// kinds/gen.go
|
||||||
// Using jennies:
|
// Using jennies:
|
||||||
// TSTypesJenny
|
// TSResourceJenny
|
||||||
// LatestMajorsOrXJenny
|
// LatestMajorsOrXJenny
|
||||||
//
|
//
|
||||||
// Run 'make gen-cue' from repository root to regenerate.
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
@ -23,10 +23,6 @@ export interface ServiceAccount {
|
||||||
* of the service account.
|
* of the service account.
|
||||||
*/
|
*/
|
||||||
avatarUrl: string;
|
avatarUrl: string;
|
||||||
/**
|
|
||||||
* Created indicates when the service account was created.
|
|
||||||
*/
|
|
||||||
created?: string;
|
|
||||||
/**
|
/**
|
||||||
* ID is the unique identifier of the service account in the database.
|
* ID is the unique identifier of the service account in the database.
|
||||||
*/
|
*/
|
||||||
|
@ -60,10 +56,6 @@ export interface ServiceAccount {
|
||||||
* Tokens are used to authenticate the service account against Grafana.
|
* Tokens are used to authenticate the service account against Grafana.
|
||||||
*/
|
*/
|
||||||
tokens: number;
|
tokens: number;
|
||||||
/**
|
|
||||||
* Updated indicates when the service account was updated.
|
|
||||||
*/
|
|
||||||
updated?: string;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const defaultServiceAccount: Partial<ServiceAccount> = {
|
export const defaultServiceAccount: Partial<ServiceAccount> = {
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// Generated by:
|
// Generated by:
|
||||||
// kinds/gen.go
|
// kinds/gen.go
|
||||||
// Using jennies:
|
// Using jennies:
|
||||||
// TSTypesJenny
|
// TSResourceJenny
|
||||||
// LatestMajorsOrXJenny
|
// LatestMajorsOrXJenny
|
||||||
//
|
//
|
||||||
// Run 'make gen-cue' from repository root to regenerate.
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
@ -24,10 +24,6 @@ export interface Team {
|
||||||
* AvatarUrl is the team's avatar URL.
|
* AvatarUrl is the team's avatar URL.
|
||||||
*/
|
*/
|
||||||
avatarUrl?: string;
|
avatarUrl?: string;
|
||||||
/**
|
|
||||||
* Created indicates when the team was created.
|
|
||||||
*/
|
|
||||||
created: string;
|
|
||||||
/**
|
/**
|
||||||
* Email of the team.
|
* Email of the team.
|
||||||
*/
|
*/
|
||||||
|
@ -48,8 +44,4 @@ export interface Team {
|
||||||
* TODO - it seems it's a team_member.permission, unlikely it should belong to the team kind
|
* TODO - it seems it's a team_member.permission, unlikely it should belong to the team kind
|
||||||
*/
|
*/
|
||||||
permission: Permission;
|
permission: Permission;
|
||||||
/**
|
|
||||||
* Updated indicates when the team was updated.
|
|
||||||
*/
|
|
||||||
updated: string;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -840,7 +840,10 @@ func (hs *HTTPServer) ValidateDashboard(c *contextmodel.ReqContext) response.Res
|
||||||
// work), or if schemaVersion is absent (which will happen once the Thema
|
// work), or if schemaVersion is absent (which will happen once the Thema
|
||||||
// schema becomes canonical).
|
// schema becomes canonical).
|
||||||
if err != nil || schemaVersion >= dashboard.HandoffSchemaVersion {
|
if err != nil || schemaVersion >= dashboard.HandoffSchemaVersion {
|
||||||
_, _, validationErr := dk.JSONValueMux(dashboardBytes)
|
// Schemas expect the dashboard to live in the spec field
|
||||||
|
k8sResource := `{"spec": ` + cmd.Dashboard + "}"
|
||||||
|
|
||||||
|
_, _, validationErr := dk.JSONValueMux([]byte(k8sResource))
|
||||||
|
|
||||||
if validationErr == nil {
|
if validationErr == nil {
|
||||||
isValid = true
|
isValid = true
|
||||||
|
|
|
@ -85,7 +85,7 @@ func (hs *HTTPServer) getPreferencesFor(ctx context.Context, orgID, userID, team
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dto := preferences.Preferences{}
|
dto := preferences.Spec{}
|
||||||
|
|
||||||
if preference.WeekStart != nil && *preference.WeekStart != "" {
|
if preference.WeekStart != nil && *preference.WeekStart != "" {
|
||||||
dto.WeekStart = preference.WeekStart
|
dto.WeekStart = preference.WeekStart
|
||||||
|
@ -302,7 +302,7 @@ type UpdateOrgPreferencesParams struct {
|
||||||
// swagger:response getPreferencesResponse
|
// swagger:response getPreferencesResponse
|
||||||
type GetPreferencesResponse struct {
|
type GetPreferencesResponse struct {
|
||||||
// in:body
|
// in:body
|
||||||
Body preferences.Preferences `json:"body"`
|
Body preferences.Spec `json:"body"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// swagger:parameters patchUserPreferences
|
// swagger:parameters patchUserPreferences
|
||||||
|
|
|
@ -8,21 +8,25 @@ import (
|
||||||
"github.com/grafana/kindsys"
|
"github.com/grafana/kindsys"
|
||||||
)
|
)
|
||||||
|
|
||||||
// LatestMajorsOrXJenny returns a jenny that repeats the input for the latest in each major version,
|
// LatestMajorsOrXJenny returns a jenny that repeats the input for the latest in each major version.
|
||||||
func LatestMajorsOrXJenny(parentdir string, inner codejen.OneToOne[SchemaForGen]) OneToMany {
|
//
|
||||||
|
// TODO remove forceGroup option, it's a temporary hack to accommodate core kinds
|
||||||
|
func LatestMajorsOrXJenny(parentdir string, forceGroup bool, inner codejen.OneToOne[SchemaForGen]) OneToMany {
|
||||||
if inner == nil {
|
if inner == nil {
|
||||||
panic("inner jenny must not be nil")
|
panic("inner jenny must not be nil")
|
||||||
}
|
}
|
||||||
|
|
||||||
return &lmox{
|
return &lmox{
|
||||||
parentdir: parentdir,
|
parentdir: parentdir,
|
||||||
inner: inner,
|
inner: inner,
|
||||||
|
forceGroup: forceGroup,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type lmox struct {
|
type lmox struct {
|
||||||
parentdir string
|
parentdir string
|
||||||
inner codejen.OneToOne[SchemaForGen]
|
inner codejen.OneToOne[SchemaForGen]
|
||||||
|
forceGroup bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (j *lmox) JennyName() string {
|
func (j *lmox) JennyName() string {
|
||||||
|
@ -36,6 +40,10 @@ func (j *lmox) Generate(kind kindsys.Kind) (codejen.Files, error) {
|
||||||
IsGroup: comm.LineageIsGroup,
|
IsGroup: comm.LineageIsGroup,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if j.forceGroup {
|
||||||
|
sfg.IsGroup = true
|
||||||
|
}
|
||||||
|
|
||||||
do := func(sfg SchemaForGen, infix string) (codejen.Files, error) {
|
do := func(sfg SchemaForGen, infix string) (codejen.Files, error) {
|
||||||
f, err := j.inner.Generate(sfg)
|
f, err := j.inner.Generate(sfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -0,0 +1,118 @@
|
||||||
|
package codegen
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"cuelang.org/go/cue"
|
||||||
|
"github.com/dave/dst/dstutil"
|
||||||
|
"github.com/grafana/codejen"
|
||||||
|
"github.com/grafana/kindsys"
|
||||||
|
"github.com/grafana/thema/encoding/gocode"
|
||||||
|
"github.com/grafana/thema/encoding/openapi"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ResourceGoTypesJenny struct {
|
||||||
|
ApplyFuncs []dstutil.ApplyFunc
|
||||||
|
ExpandReferences bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*ResourceGoTypesJenny) JennyName() string {
|
||||||
|
return "GoTypesJenny"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ag *ResourceGoTypesJenny) Generate(kind kindsys.Kind) (*codejen.File, error) {
|
||||||
|
comm := kind.Props().Common()
|
||||||
|
sfg := SchemaForGen{
|
||||||
|
Name: comm.Name,
|
||||||
|
Schema: kind.Lineage().Latest(),
|
||||||
|
IsGroup: comm.LineageIsGroup,
|
||||||
|
}
|
||||||
|
sch := sfg.Schema
|
||||||
|
|
||||||
|
iter, err := sch.Underlying().Fields()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var subr []string
|
||||||
|
for iter.Next() {
|
||||||
|
subr = append(subr, typeNameFromKey(iter.Selector().String()))
|
||||||
|
}
|
||||||
|
|
||||||
|
buf := new(bytes.Buffer)
|
||||||
|
mname := kind.Props().Common().MachineName
|
||||||
|
if err := tmpls.Lookup("core_resource.tmpl").Execute(buf, tvars_resource{
|
||||||
|
PackageName: mname,
|
||||||
|
KindName: kind.Props().Common().Name,
|
||||||
|
SubresourceNames: subr,
|
||||||
|
}); err != nil {
|
||||||
|
return nil, fmt.Errorf("failed executing core resource template: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return codejen.NewFile(fmt.Sprintf("pkg/kinds/%s/%s_gen.go", mname, mname), buf.Bytes(), ag), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type SubresourceGoTypesJenny struct {
|
||||||
|
ApplyFuncs []dstutil.ApplyFunc
|
||||||
|
ExpandReferences bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*SubresourceGoTypesJenny) JennyName() string {
|
||||||
|
return "GoResourceTypes"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *SubresourceGoTypesJenny) Generate(kind kindsys.Kind) (codejen.Files, error) {
|
||||||
|
comm := kind.Props().Common()
|
||||||
|
sfg := SchemaForGen{
|
||||||
|
Name: comm.Name,
|
||||||
|
Schema: kind.Lineage().Latest(),
|
||||||
|
IsGroup: comm.LineageIsGroup,
|
||||||
|
}
|
||||||
|
sch := sfg.Schema
|
||||||
|
|
||||||
|
// Iterate through all top-level fields and make go types for them
|
||||||
|
// (this should consist of "spec" and arbitrary subresources)
|
||||||
|
i, err := sch.Underlying().Fields()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
files := make(codejen.Files, 0)
|
||||||
|
for i.Next() {
|
||||||
|
str := i.Selector().String()
|
||||||
|
|
||||||
|
b, err := gocode.GenerateTypesOpenAPI(sch, &gocode.TypeConfigOpenAPI{
|
||||||
|
// TODO will need to account for sanitizing e.g. dashes here at some point
|
||||||
|
Config: &openapi.Config{
|
||||||
|
Group: false, // TODO: better
|
||||||
|
RootName: typeNameFromKey(str),
|
||||||
|
Subpath: cue.MakePath(cue.Str(str)),
|
||||||
|
},
|
||||||
|
PackageName: sfg.Schema.Lineage().Name(),
|
||||||
|
ApplyFuncs: append(g.ApplyFuncs, PrefixDropper(sfg.Name)),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
name := sfg.Schema.Lineage().Name()
|
||||||
|
files = append(files, codejen.File{
|
||||||
|
RelativePath: fmt.Sprintf("pkg/kinds/%s/%s_%s_gen.go", name, name, strings.ToLower(str)),
|
||||||
|
Data: b,
|
||||||
|
From: []codejen.NamedJenny{g},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return files, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func typeNameFromKey(key string) string {
|
||||||
|
if len(key) > 0 {
|
||||||
|
return strings.ToUpper(key[:1]) + key[1:]
|
||||||
|
}
|
||||||
|
return strings.ToUpper(key)
|
||||||
|
}
|
|
@ -0,0 +1,79 @@
|
||||||
|
package codegen
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/grafana/codejen"
|
||||||
|
"github.com/grafana/cuetsy/ts"
|
||||||
|
"github.com/grafana/cuetsy/ts/ast"
|
||||||
|
"github.com/grafana/thema/encoding/typescript"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TSResourceJenny is a [OneToOne] that produces TypeScript types and
|
||||||
|
// defaults for a Thema schema.
|
||||||
|
//
|
||||||
|
// Thema's generic TS jenny will be able to replace this one once
|
||||||
|
// https://github.com/grafana/thema/issues/89 is complete.
|
||||||
|
type TSResourceJenny struct{}
|
||||||
|
|
||||||
|
var _ codejen.OneToOne[SchemaForGen] = &TSResourceJenny{}
|
||||||
|
|
||||||
|
func (j TSResourceJenny) JennyName() string {
|
||||||
|
return "TSResourceJenny"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (j TSResourceJenny) Generate(sfg SchemaForGen) (*codejen.File, error) {
|
||||||
|
// TODO allow using name instead of machine name in thema generator
|
||||||
|
f, err := typescript.GenerateTypes(sfg.Schema, &typescript.TypeConfig{
|
||||||
|
RootName: sfg.Name,
|
||||||
|
Group: sfg.IsGroup,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
renameSpecNode(sfg.Name, f)
|
||||||
|
|
||||||
|
return codejen.NewFile(sfg.Schema.Lineage().Name()+"_types.gen.ts", []byte(f.String()), j), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func renameSpecNode(name string, tf *ast.File) {
|
||||||
|
specidx, specdefidx := -1, -1
|
||||||
|
for idx, def := range tf.Nodes {
|
||||||
|
// Peer through export keywords
|
||||||
|
if ex, is := def.(ast.ExportKeyword); is {
|
||||||
|
def = ex.Decl
|
||||||
|
}
|
||||||
|
|
||||||
|
switch x := def.(type) {
|
||||||
|
case ast.TypeDecl:
|
||||||
|
if x.Name.Name == "spec" {
|
||||||
|
specidx = idx
|
||||||
|
x.Name.Name = name
|
||||||
|
tf.Nodes[idx] = x
|
||||||
|
}
|
||||||
|
case ast.VarDecl:
|
||||||
|
// Before:
|
||||||
|
// export const defaultspec: Partial<spec> = {
|
||||||
|
// After:
|
||||||
|
/// export const defaultPlaylist: Partial<Playlist> = {
|
||||||
|
if x.Names.Idents[0].Name == "defaultspec" {
|
||||||
|
specdefidx = idx
|
||||||
|
x.Names.Idents[0].Name = "default" + name
|
||||||
|
tt := x.Type.(ast.TypeTransformExpr)
|
||||||
|
tt.Expr = ts.Ident(name)
|
||||||
|
x.Type = tt
|
||||||
|
tf.Nodes[idx] = x
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if specidx != -1 {
|
||||||
|
decl := tf.Nodes[specidx]
|
||||||
|
tf.Nodes = append(append(tf.Nodes[:specidx], tf.Nodes[specidx+1:]...), decl)
|
||||||
|
}
|
||||||
|
if specdefidx != -1 {
|
||||||
|
if specdefidx > specidx {
|
||||||
|
specdefidx--
|
||||||
|
}
|
||||||
|
decl := tf.Nodes[specdefidx]
|
||||||
|
tf.Nodes = append(append(tf.Nodes[:specdefidx], tf.Nodes[specdefidx+1:]...), decl)
|
||||||
|
}
|
||||||
|
}
|
|
@ -50,6 +50,7 @@ func (gen *genTSVeneerIndex) Generate(kinds ...kindsys.Kind) (*codejen.File, err
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("%s: %w", def.Props().Common().Name, err)
|
return nil, fmt.Errorf("%s: %w", def.Props().Common().Name, err)
|
||||||
}
|
}
|
||||||
|
renameSpecNode(def.Props().Common().Name, f)
|
||||||
elems, err := gen.extractTSIndexVeneerElements(def, f)
|
elems, err := gen.extractTSIndexVeneerElements(def, f)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("%s: %w", def.Props().Common().Name, err)
|
return nil, fmt.Errorf("%s: %w", def.Props().Common().Name, err)
|
||||||
|
@ -75,13 +76,13 @@ func (gen *genTSVeneerIndex) extractTSIndexVeneerElements(def kindsys.Kind, tf *
|
||||||
sels := p.Selectors()
|
sels := p.Selectors()
|
||||||
switch len(sels) {
|
switch len(sels) {
|
||||||
case 0:
|
case 0:
|
||||||
name = comm.Name
|
return true
|
||||||
fallthrough
|
|
||||||
case 1:
|
case 1:
|
||||||
// Only deal with subpaths that are definitions, for now
|
// Only deal with subpaths that are definitions, for now
|
||||||
// TODO incorporate smarts about grouped lineages here
|
// TODO incorporate smarts about grouped lineages here
|
||||||
if name == "" {
|
if name == "" {
|
||||||
if !sels[0].IsDefinition() {
|
if !(sels[0].IsDefinition() || sels[0].String() == "spec") {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
// It might seem to make sense that we'd strip replaceout the leading # here for
|
// It might seem to make sense that we'd strip replaceout the leading # here for
|
||||||
|
@ -90,6 +91,10 @@ func (gen *genTSVeneerIndex) extractTSIndexVeneerElements(def kindsys.Kind, tf *
|
||||||
name = sels[0].String()
|
name = sels[0].String()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if name == "spec" {
|
||||||
|
name = comm.Name
|
||||||
|
}
|
||||||
|
|
||||||
// Search the generated TS AST for the type and default def nodes
|
// Search the generated TS AST for the type and default def nodes
|
||||||
pair := findDeclNode(name, tf)
|
pair := findDeclNode(name, tf)
|
||||||
if pair.T == nil {
|
if pair.T == nil {
|
||||||
|
|
|
@ -3,6 +3,7 @@ package codegen
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"embed"
|
"embed"
|
||||||
|
"strings"
|
||||||
"text/template"
|
"text/template"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -15,7 +16,8 @@ var tmpls *template.Template
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
base := template.New("codegen").Funcs(template.FuncMap{
|
base := template.New("codegen").Funcs(template.FuncMap{
|
||||||
"now": time.Now,
|
"now": time.Now,
|
||||||
|
"ToLower": strings.ToLower,
|
||||||
})
|
})
|
||||||
tmpls = template.Must(base.ParseFS(tmplFS, "tmpl/*.tmpl"))
|
tmpls = template.Must(base.ParseFS(tmplFS, "tmpl/*.tmpl"))
|
||||||
}
|
}
|
||||||
|
@ -46,6 +48,11 @@ type (
|
||||||
tvars_coremodel_imports struct {
|
tvars_coremodel_imports struct {
|
||||||
PackageName string
|
PackageName string
|
||||||
}
|
}
|
||||||
|
tvars_resource struct {
|
||||||
|
PackageName string
|
||||||
|
KindName string
|
||||||
|
SubresourceNames []string
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
type HeaderVars = tvars_autogen_header
|
type HeaderVars = tvars_autogen_header
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
package {{ .PackageName }}
|
||||||
|
|
||||||
|
// Resource is the wire representation of {{ .KindName }}. (TODO be better)
|
||||||
|
type Resource struct {
|
||||||
|
{{- range .SubresourceNames }}
|
||||||
|
{{ . }} {{ . }} `json:"{{ . | ToLower }}"`{{end}}
|
||||||
|
}
|
|
@ -17,9 +17,9 @@ const rootrel string = "kinds/{{ .Props.MachineName }}"
|
||||||
// TODO standard generated docs
|
// TODO standard generated docs
|
||||||
type Kind struct {
|
type Kind struct {
|
||||||
kindsys.Core
|
kindsys.Core
|
||||||
lin thema.ConvergentLineage[*{{ .Props.Name }}]
|
lin thema.ConvergentLineage[*Resource]
|
||||||
jcodec vmux.Codec
|
jcodec vmux.Codec
|
||||||
valmux vmux.ValueMux[*{{ .Props.Name }}]
|
valmux vmux.ValueMux[*Resource]
|
||||||
}
|
}
|
||||||
|
|
||||||
// type guard - ensure generated Kind type satisfies the kindsys.Core interface
|
// type guard - ensure generated Kind type satisfies the kindsys.Core interface
|
||||||
|
@ -40,7 +40,7 @@ func NewKind(rt *thema.Runtime, opts ...thema.BindOption) (*Kind, error) {
|
||||||
// Get the thema.Schema that the meta says is in the current version (which
|
// Get the thema.Schema that the meta says is in the current version (which
|
||||||
// codegen ensures is always the latest)
|
// codegen ensures is always the latest)
|
||||||
cursch := thema.SchemaP(k.Core.Lineage(), def.Properties.CurrentVersion)
|
cursch := thema.SchemaP(k.Core.Lineage(), def.Properties.CurrentVersion)
|
||||||
tsch, err := thema.BindType[*{{ .Props.Name }}](cursch, &{{ .Props.Name }}{})
|
tsch, err := thema.BindType(cursch, &Resource{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Should be unreachable, modulo bugs in the Thema->Go code generator
|
// Should be unreachable, modulo bugs in the Thema->Go code generator
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -53,18 +53,18 @@ func NewKind(rt *thema.Runtime, opts ...thema.BindOption) (*Kind, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConvergentLineage returns the same [thema.Lineage] as Lineage, but bound (see [thema.BindType])
|
// ConvergentLineage returns the same [thema.Lineage] as Lineage, but bound (see [thema.BindType])
|
||||||
// to the the {{ .Props.Name }} type generated from the current schema, v{{ .Props.CurrentVersion }}.
|
// to the the {{ .Props.Name }} [Resource] type generated from the current schema, v{{ .Props.CurrentVersion }}.
|
||||||
func (k *Kind) ConvergentLineage() thema.ConvergentLineage[*{{ .Props.Name }}] {
|
func (k *Kind) ConvergentLineage() thema.ConvergentLineage[*Resource] {
|
||||||
return k.lin
|
return k.lin
|
||||||
}
|
}
|
||||||
|
|
||||||
// JSONValueMux is a version multiplexer that maps a []byte containing JSON data
|
// JSONValueMux is a version multiplexer that maps a []byte containing JSON data
|
||||||
// at any schematized dashboard version to an instance of {{ .Props.Name }}.
|
// at any schematized dashboard version to an instance of {{ .Props.Name }} [Resource].
|
||||||
//
|
//
|
||||||
// Validation and translation errors emitted from this func will identify the
|
// Validation and translation errors emitted from this func will identify the
|
||||||
// input bytes as "dashboard.json".
|
// input bytes as "dashboard.json".
|
||||||
//
|
//
|
||||||
// This is a thin wrapper around Thema's [vmux.ValueMux].
|
// This is a thin wrapper around Thema's [vmux.ValueMux].
|
||||||
func (k *Kind) JSONValueMux(b []byte) (*{{ .Props.Name }}, thema.TranslationLacunas, error) {
|
func (k *Kind) JSONValueMux(b []byte) (*Resource, thema.TranslationLacunas, error) {
|
||||||
return k.valmux(b)
|
return k.valmux(b)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
// Generated by:
|
||||||
|
// kinds/gen.go
|
||||||
|
// Using jennies:
|
||||||
|
// GoTypesJenny
|
||||||
|
//
|
||||||
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
package dashboard
|
||||||
|
|
||||||
|
// Resource is the wire representation of Dashboard. (TODO be better)
|
||||||
|
type Resource struct {
|
||||||
|
Metadata Metadata `json:"metadata"`
|
||||||
|
Spec Spec `json:"spec"`
|
||||||
|
Status Status `json:"status"`
|
||||||
|
}
|
|
@ -26,9 +26,9 @@ const rootrel string = "kinds/dashboard"
|
||||||
// TODO standard generated docs
|
// TODO standard generated docs
|
||||||
type Kind struct {
|
type Kind struct {
|
||||||
kindsys.Core
|
kindsys.Core
|
||||||
lin thema.ConvergentLineage[*Dashboard]
|
lin thema.ConvergentLineage[*Resource]
|
||||||
jcodec vmux.Codec
|
jcodec vmux.Codec
|
||||||
valmux vmux.ValueMux[*Dashboard]
|
valmux vmux.ValueMux[*Resource]
|
||||||
}
|
}
|
||||||
|
|
||||||
// type guard - ensure generated Kind type satisfies the kindsys.Core interface
|
// type guard - ensure generated Kind type satisfies the kindsys.Core interface
|
||||||
|
@ -49,7 +49,7 @@ func NewKind(rt *thema.Runtime, opts ...thema.BindOption) (*Kind, error) {
|
||||||
// Get the thema.Schema that the meta says is in the current version (which
|
// Get the thema.Schema that the meta says is in the current version (which
|
||||||
// codegen ensures is always the latest)
|
// codegen ensures is always the latest)
|
||||||
cursch := thema.SchemaP(k.Core.Lineage(), def.Properties.CurrentVersion)
|
cursch := thema.SchemaP(k.Core.Lineage(), def.Properties.CurrentVersion)
|
||||||
tsch, err := thema.BindType[*Dashboard](cursch, &Dashboard{})
|
tsch, err := thema.BindType(cursch, &Resource{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Should be unreachable, modulo bugs in the Thema->Go code generator
|
// Should be unreachable, modulo bugs in the Thema->Go code generator
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -62,18 +62,18 @@ func NewKind(rt *thema.Runtime, opts ...thema.BindOption) (*Kind, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConvergentLineage returns the same [thema.Lineage] as Lineage, but bound (see [thema.BindType])
|
// ConvergentLineage returns the same [thema.Lineage] as Lineage, but bound (see [thema.BindType])
|
||||||
// to the the Dashboard type generated from the current schema, v0.0.
|
// to the the Dashboard [Resource] type generated from the current schema, v0.0.
|
||||||
func (k *Kind) ConvergentLineage() thema.ConvergentLineage[*Dashboard] {
|
func (k *Kind) ConvergentLineage() thema.ConvergentLineage[*Resource] {
|
||||||
return k.lin
|
return k.lin
|
||||||
}
|
}
|
||||||
|
|
||||||
// JSONValueMux is a version multiplexer that maps a []byte containing JSON data
|
// JSONValueMux is a version multiplexer that maps a []byte containing JSON data
|
||||||
// at any schematized dashboard version to an instance of Dashboard.
|
// at any schematized dashboard version to an instance of Dashboard [Resource].
|
||||||
//
|
//
|
||||||
// Validation and translation errors emitted from this func will identify the
|
// Validation and translation errors emitted from this func will identify the
|
||||||
// input bytes as "dashboard.json".
|
// input bytes as "dashboard.json".
|
||||||
//
|
//
|
||||||
// This is a thin wrapper around Thema's [vmux.ValueMux].
|
// This is a thin wrapper around Thema's [vmux.ValueMux].
|
||||||
func (k *Kind) JSONValueMux(b []byte) (*Dashboard, thema.TranslationLacunas, error) {
|
func (k *Kind) JSONValueMux(b []byte) (*Resource, thema.TranslationLacunas, error) {
|
||||||
return k.valmux(b)
|
return k.valmux(b)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
// Generated by:
|
||||||
|
// kinds/gen.go
|
||||||
|
// Using jennies:
|
||||||
|
// GoResourceTypes
|
||||||
|
//
|
||||||
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
package dashboard
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Metadata defines model for Metadata.
|
||||||
|
type Metadata struct {
|
||||||
|
CreatedBy string `json:"createdBy"`
|
||||||
|
CreationTimestamp time.Time `json:"creationTimestamp"`
|
||||||
|
DeletionTimestamp *time.Time `json:"deletionTimestamp,omitempty"`
|
||||||
|
|
||||||
|
// extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata
|
||||||
|
ExtraFields map[string]interface{} `json:"extraFields"`
|
||||||
|
Finalizers []string `json:"finalizers"`
|
||||||
|
Labels map[string]string `json:"labels"`
|
||||||
|
ResourceVersion string `json:"resourceVersion"`
|
||||||
|
Uid string `json:"uid"`
|
||||||
|
UpdateTimestamp time.Time `json:"updateTimestamp"`
|
||||||
|
UpdatedBy string `json:"updatedBy"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// _kubeObjectMetadata is metadata found in a kubernetes object's metadata field.
|
||||||
|
// It is not exhaustive and only includes fields which may be relevant to a kind's implementation,
|
||||||
|
// As it is also intended to be generic enough to function with any API Server.
|
||||||
|
type KubeObjectMetadata struct {
|
||||||
|
CreationTimestamp time.Time `json:"creationTimestamp"`
|
||||||
|
DeletionTimestamp *time.Time `json:"deletionTimestamp,omitempty"`
|
||||||
|
Finalizers []string `json:"finalizers"`
|
||||||
|
Labels map[string]string `json:"labels"`
|
||||||
|
ResourceVersion string `json:"resourceVersion"`
|
||||||
|
Uid string `json:"uid"`
|
||||||
|
}
|
|
@ -3,8 +3,7 @@
|
||||||
// Generated by:
|
// Generated by:
|
||||||
// kinds/gen.go
|
// kinds/gen.go
|
||||||
// Using jennies:
|
// Using jennies:
|
||||||
// GoTypesJenny
|
// GoResourceTypes
|
||||||
// LatestJenny
|
|
||||||
//
|
//
|
||||||
// Run 'make gen-cue' from repository root to regenerate.
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
@ -14,12 +13,6 @@ import (
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Defines values for Style.
|
|
||||||
const (
|
|
||||||
StyleDark Style = "dark"
|
|
||||||
StyleLight Style = "light"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Defines values for CursorSync.
|
// Defines values for CursorSync.
|
||||||
const (
|
const (
|
||||||
CursorSyncN0 CursorSync = 0
|
CursorSyncN0 CursorSync = 0
|
||||||
|
@ -33,15 +26,6 @@ const (
|
||||||
LinkTypeLink LinkType = "link"
|
LinkTypeLink LinkType = "link"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Defines values for FieldColorModeId.
|
|
||||||
const (
|
|
||||||
FieldColorModeIdContinuousGrYlRd FieldColorModeId = "continuous-GrYlRd"
|
|
||||||
FieldColorModeIdFixed FieldColorModeId = "fixed"
|
|
||||||
FieldColorModeIdPaletteClassic FieldColorModeId = "palette-classic"
|
|
||||||
FieldColorModeIdPaletteSaturated FieldColorModeId = "palette-saturated"
|
|
||||||
FieldColorModeIdThresholds FieldColorModeId = "thresholds"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Defines values for FieldColorSeriesByMode.
|
// Defines values for FieldColorSeriesByMode.
|
||||||
const (
|
const (
|
||||||
FieldColorSeriesByModeLast FieldColorSeriesByMode = "last"
|
FieldColorSeriesByModeLast FieldColorSeriesByMode = "last"
|
||||||
|
@ -103,6 +87,12 @@ const (
|
||||||
RowPanelTypeRow RowPanelType = "row"
|
RowPanelTypeRow RowPanelType = "row"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Defines values for SpecStyle.
|
||||||
|
const (
|
||||||
|
SpecStyleDark SpecStyle = "dark"
|
||||||
|
SpecStyleLight SpecStyle = "light"
|
||||||
|
)
|
||||||
|
|
||||||
// Defines values for SpecialValueMapOptionsMatch.
|
// Defines values for SpecialValueMapOptionsMatch.
|
||||||
const (
|
const (
|
||||||
SpecialValueMapOptionsMatchFalse SpecialValueMapOptionsMatch = "false"
|
SpecialValueMapOptionsMatchFalse SpecialValueMapOptionsMatch = "false"
|
||||||
|
@ -117,16 +107,6 @@ const (
|
||||||
SpecialValueMapTypeValue SpecialValueMapType = "value"
|
SpecialValueMapTypeValue SpecialValueMapType = "value"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Defines values for SpecialValueMatch.
|
|
||||||
const (
|
|
||||||
SpecialValueMatchEmpty SpecialValueMatch = "empty"
|
|
||||||
SpecialValueMatchFalse SpecialValueMatch = "false"
|
|
||||||
SpecialValueMatchNan SpecialValueMatch = "nan"
|
|
||||||
SpecialValueMatchNull SpecialValueMatch = "null"
|
|
||||||
SpecialValueMatchNullNan SpecialValueMatch = "null+nan"
|
|
||||||
SpecialValueMatchTrue SpecialValueMatch = "true"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Defines values for ThresholdsMode.
|
// Defines values for ThresholdsMode.
|
||||||
const (
|
const (
|
||||||
ThresholdsModeAbsolute ThresholdsMode = "absolute"
|
ThresholdsModeAbsolute ThresholdsMode = "absolute"
|
||||||
|
@ -225,112 +205,6 @@ type AnnotationTarget struct {
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dashboard defines model for Dashboard.
|
|
||||||
type Dashboard struct {
|
|
||||||
// TODO -- should not be a public interface on its own, but required for Veneer
|
|
||||||
Annotations *AnnotationContainer `json:"annotations,omitempty"`
|
|
||||||
|
|
||||||
// Description of dashboard.
|
|
||||||
Description *string `json:"description,omitempty"`
|
|
||||||
|
|
||||||
// Whether a dashboard is editable or not.
|
|
||||||
Editable bool `json:"editable"`
|
|
||||||
|
|
||||||
// The month that the fiscal year starts on. 0 = January, 11 = December
|
|
||||||
FiscalYearStartMonth *int `json:"fiscalYearStartMonth,omitempty"`
|
|
||||||
|
|
||||||
// For dashboards imported from the https://grafana.com/grafana/dashboards/ portal
|
|
||||||
GnetId *string `json:"gnetId,omitempty"`
|
|
||||||
|
|
||||||
// 0 for no shared crosshair or tooltip (default).
|
|
||||||
// 1 for shared crosshair.
|
|
||||||
// 2 for shared crosshair AND shared tooltip.
|
|
||||||
GraphTooltip CursorSync `json:"graphTooltip"`
|
|
||||||
|
|
||||||
// Unique numeric identifier for the dashboard.
|
|
||||||
// TODO must isolate or remove identifiers local to a Grafana instance...?
|
|
||||||
Id *int64 `json:"id,omitempty"`
|
|
||||||
|
|
||||||
// TODO docs
|
|
||||||
Links []Link `json:"links,omitempty"`
|
|
||||||
|
|
||||||
// When set to true, the dashboard will redraw panels at an interval matching the pixel width.
|
|
||||||
// This will keep data "moving left" regardless of the query refresh rate. This setting helps
|
|
||||||
// avoid dashboards presenting stale live data
|
|
||||||
LiveNow *bool `json:"liveNow,omitempty"`
|
|
||||||
Panels []interface{} `json:"panels,omitempty"`
|
|
||||||
|
|
||||||
// Refresh rate of dashboard. Represented via interval string, e.g. "5s", "1m", "1h", "1d".
|
|
||||||
Refresh *interface{} `json:"refresh,omitempty"`
|
|
||||||
|
|
||||||
// This property should only be used in dashboards defined by plugins. It is a quick check
|
|
||||||
// to see if the version has changed since the last time. Unclear why using the version property
|
|
||||||
// is insufficient.
|
|
||||||
Revision *int64 `json:"revision,omitempty"`
|
|
||||||
|
|
||||||
// Version of the JSON schema, incremented each time a Grafana update brings
|
|
||||||
// changes to said schema.
|
|
||||||
// TODO this is the existing schema numbering system. It will be replaced by Thema's themaVersion
|
|
||||||
SchemaVersion int `json:"schemaVersion"`
|
|
||||||
|
|
||||||
// TODO docs
|
|
||||||
Snapshot *Snapshot `json:"snapshot,omitempty"`
|
|
||||||
|
|
||||||
// Theme of dashboard.
|
|
||||||
Style Style `json:"style"`
|
|
||||||
|
|
||||||
// Tags associated with dashboard.
|
|
||||||
Tags []string `json:"tags,omitempty"`
|
|
||||||
|
|
||||||
// TODO docs
|
|
||||||
Templating *struct {
|
|
||||||
List []VariableModel `json:"list,omitempty"`
|
|
||||||
} `json:"templating,omitempty"`
|
|
||||||
|
|
||||||
// Time range for dashboard, e.g. last 6 hours, last 7 days, etc
|
|
||||||
Time *struct {
|
|
||||||
From string `json:"from"`
|
|
||||||
To string `json:"to"`
|
|
||||||
} `json:"time,omitempty"`
|
|
||||||
|
|
||||||
// TODO docs
|
|
||||||
// TODO this appears to be spread all over in the frontend. Concepts will likely need tidying in tandem with schema changes
|
|
||||||
Timepicker *struct {
|
|
||||||
// Whether timepicker is collapsed or not.
|
|
||||||
Collapse bool `json:"collapse"`
|
|
||||||
|
|
||||||
// Whether timepicker is enabled or not.
|
|
||||||
Enable bool `json:"enable"`
|
|
||||||
|
|
||||||
// Whether timepicker is visible or not.
|
|
||||||
Hidden bool `json:"hidden"`
|
|
||||||
|
|
||||||
// Selectable intervals for auto-refresh.
|
|
||||||
RefreshIntervals []string `json:"refresh_intervals"`
|
|
||||||
|
|
||||||
// TODO docs
|
|
||||||
TimeOptions []string `json:"time_options"`
|
|
||||||
} `json:"timepicker,omitempty"`
|
|
||||||
|
|
||||||
// Timezone of dashboard. Accepts IANA TZDB zone ID or "browser" or "utc".
|
|
||||||
Timezone *string `json:"timezone,omitempty"`
|
|
||||||
|
|
||||||
// Title of dashboard.
|
|
||||||
Title *string `json:"title,omitempty"`
|
|
||||||
|
|
||||||
// Unique dashboard identifier that can be generated by anyone. string (8-40)
|
|
||||||
Uid *string `json:"uid,omitempty"`
|
|
||||||
|
|
||||||
// Version of the dashboard, incremented each time the dashboard is updated.
|
|
||||||
Version *int `json:"version,omitempty"`
|
|
||||||
|
|
||||||
// TODO docs
|
|
||||||
WeekStart *string `json:"weekStart,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// Theme of dashboard.
|
|
||||||
type Style string
|
|
||||||
|
|
||||||
// 0 for no shared crosshair or tooltip (default).
|
// 0 for no shared crosshair or tooltip (default).
|
||||||
// 1 for shared crosshair.
|
// 1 for shared crosshair.
|
||||||
// 2 for shared crosshair AND shared tooltip.
|
// 2 for shared crosshair AND shared tooltip.
|
||||||
|
@ -397,9 +271,6 @@ type FieldColor struct {
|
||||||
SeriesBy *FieldColorSeriesByMode `json:"seriesBy,omitempty"`
|
SeriesBy *FieldColorSeriesByMode `json:"seriesBy,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO docs
|
|
||||||
type FieldColorModeId string
|
|
||||||
|
|
||||||
// TODO docs
|
// TODO docs
|
||||||
type FieldColorSeriesByMode string
|
type FieldColorSeriesByMode string
|
||||||
|
|
||||||
|
@ -693,6 +564,112 @@ type Snapshot struct {
|
||||||
UserId int `json:"userId"`
|
UserId int `json:"userId"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Spec defines model for Spec.
|
||||||
|
type Spec struct {
|
||||||
|
// TODO -- should not be a public interface on its own, but required for Veneer
|
||||||
|
Annotations *AnnotationContainer `json:"annotations,omitempty"`
|
||||||
|
|
||||||
|
// Description of dashboard.
|
||||||
|
Description *string `json:"description,omitempty"`
|
||||||
|
|
||||||
|
// Whether a dashboard is editable or not.
|
||||||
|
Editable bool `json:"editable"`
|
||||||
|
|
||||||
|
// The month that the fiscal year starts on. 0 = January, 11 = December
|
||||||
|
FiscalYearStartMonth *int `json:"fiscalYearStartMonth,omitempty"`
|
||||||
|
|
||||||
|
// For dashboards imported from the https://grafana.com/grafana/dashboards/ portal
|
||||||
|
GnetId *string `json:"gnetId,omitempty"`
|
||||||
|
|
||||||
|
// 0 for no shared crosshair or tooltip (default).
|
||||||
|
// 1 for shared crosshair.
|
||||||
|
// 2 for shared crosshair AND shared tooltip.
|
||||||
|
GraphTooltip CursorSync `json:"graphTooltip"`
|
||||||
|
|
||||||
|
// Unique numeric identifier for the dashboard.
|
||||||
|
// TODO must isolate or remove identifiers local to a Grafana instance...?
|
||||||
|
Id *int64 `json:"id,omitempty"`
|
||||||
|
|
||||||
|
// TODO docs
|
||||||
|
Links []Link `json:"links,omitempty"`
|
||||||
|
|
||||||
|
// When set to true, the dashboard will redraw panels at an interval matching the pixel width.
|
||||||
|
// This will keep data "moving left" regardless of the query refresh rate. This setting helps
|
||||||
|
// avoid dashboards presenting stale live data
|
||||||
|
LiveNow *bool `json:"liveNow,omitempty"`
|
||||||
|
Panels []interface{} `json:"panels,omitempty"`
|
||||||
|
|
||||||
|
// Refresh rate of dashboard. Represented via interval string, e.g. "5s", "1m", "1h", "1d".
|
||||||
|
Refresh *interface{} `json:"refresh,omitempty"`
|
||||||
|
|
||||||
|
// This property should only be used in dashboards defined by plugins. It is a quick check
|
||||||
|
// to see if the version has changed since the last time. Unclear why using the version property
|
||||||
|
// is insufficient.
|
||||||
|
Revision *int64 `json:"revision,omitempty"`
|
||||||
|
|
||||||
|
// Version of the JSON schema, incremented each time a Grafana update brings
|
||||||
|
// changes to said schema.
|
||||||
|
// TODO this is the existing schema numbering system. It will be replaced by Thema's themaVersion
|
||||||
|
SchemaVersion int `json:"schemaVersion"`
|
||||||
|
|
||||||
|
// TODO docs
|
||||||
|
Snapshot *Snapshot `json:"snapshot,omitempty"`
|
||||||
|
|
||||||
|
// Theme of dashboard.
|
||||||
|
Style SpecStyle `json:"style"`
|
||||||
|
|
||||||
|
// Tags associated with dashboard.
|
||||||
|
Tags []string `json:"tags,omitempty"`
|
||||||
|
|
||||||
|
// TODO docs
|
||||||
|
Templating *struct {
|
||||||
|
List []VariableModel `json:"list,omitempty"`
|
||||||
|
} `json:"templating,omitempty"`
|
||||||
|
|
||||||
|
// Time range for dashboard, e.g. last 6 hours, last 7 days, etc
|
||||||
|
Time *struct {
|
||||||
|
From string `json:"from"`
|
||||||
|
To string `json:"to"`
|
||||||
|
} `json:"time,omitempty"`
|
||||||
|
|
||||||
|
// TODO docs
|
||||||
|
// TODO this appears to be spread all over in the frontend. Concepts will likely need tidying in tandem with schema changes
|
||||||
|
Timepicker *struct {
|
||||||
|
// Whether timepicker is collapsed or not.
|
||||||
|
Collapse bool `json:"collapse"`
|
||||||
|
|
||||||
|
// Whether timepicker is enabled or not.
|
||||||
|
Enable bool `json:"enable"`
|
||||||
|
|
||||||
|
// Whether timepicker is visible or not.
|
||||||
|
Hidden bool `json:"hidden"`
|
||||||
|
|
||||||
|
// Selectable intervals for auto-refresh.
|
||||||
|
RefreshIntervals []string `json:"refresh_intervals"`
|
||||||
|
|
||||||
|
// TODO docs
|
||||||
|
TimeOptions []string `json:"time_options"`
|
||||||
|
} `json:"timepicker,omitempty"`
|
||||||
|
|
||||||
|
// Timezone of dashboard. Accepts IANA TZDB zone ID or "browser" or "utc".
|
||||||
|
Timezone *string `json:"timezone,omitempty"`
|
||||||
|
|
||||||
|
// Title of dashboard.
|
||||||
|
Title *string `json:"title,omitempty"`
|
||||||
|
|
||||||
|
// Unique dashboard identifier that can be generated by anyone. string (8-40)
|
||||||
|
Uid *string `json:"uid,omitempty"`
|
||||||
|
|
||||||
|
// Version of the dashboard, incremented each time the dashboard is updated.
|
||||||
|
Version *int `json:"version,omitempty"`
|
||||||
|
|
||||||
|
// TODO docs
|
||||||
|
WeekStart *string `json:"weekStart,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Theme of dashboard.
|
||||||
|
type SpecStyle string
|
||||||
|
|
||||||
// TODO docs
|
// TODO docs
|
||||||
type SpecialValueMap struct {
|
type SpecialValueMap struct {
|
||||||
Options struct {
|
Options struct {
|
||||||
|
@ -711,9 +688,6 @@ type SpecialValueMapOptionsMatch string
|
||||||
// SpecialValueMapType defines model for SpecialValueMap.Type.
|
// SpecialValueMapType defines model for SpecialValueMap.Type.
|
||||||
type SpecialValueMapType string
|
type SpecialValueMapType string
|
||||||
|
|
||||||
// TODO docs
|
|
||||||
type SpecialValueMatch string
|
|
||||||
|
|
||||||
// Schema for panel targets is specified by datasource
|
// Schema for panel targets is specified by datasource
|
||||||
// plugins. We use a placeholder definition, which the Go
|
// plugins. We use a placeholder definition, which the Go
|
||||||
// schema loader either left open/as-is with the Base
|
// schema loader either left open/as-is with the Base
|
|
@ -0,0 +1,47 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
// Generated by:
|
||||||
|
// kinds/gen.go
|
||||||
|
// Using jennies:
|
||||||
|
// GoResourceTypes
|
||||||
|
//
|
||||||
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
package dashboard
|
||||||
|
|
||||||
|
// Defines values for OperatorStateState.
|
||||||
|
const (
|
||||||
|
OperatorStateStateFailed OperatorStateState = "failed"
|
||||||
|
OperatorStateStateInProgress OperatorStateState = "in_progress"
|
||||||
|
OperatorStateStateSuccess OperatorStateState = "success"
|
||||||
|
)
|
||||||
|
|
||||||
|
// OperatorState defines model for OperatorState.
|
||||||
|
type OperatorState struct {
|
||||||
|
// descriptiveState is an optional more descriptive state field which has no requirements on format
|
||||||
|
DescriptiveState *string `json:"descriptiveState,omitempty"`
|
||||||
|
|
||||||
|
// details contains any extra information that is operator-specific
|
||||||
|
Details map[string]interface{} `json:"details,omitempty"`
|
||||||
|
|
||||||
|
// lastEvaluation is the ResourceVersion last evaluated
|
||||||
|
LastEvaluation string `json:"lastEvaluation"`
|
||||||
|
|
||||||
|
// state describes the state of the lastEvaluation.
|
||||||
|
// It is limited to three possible states for machine evaluation.
|
||||||
|
State OperatorStateState `json:"state"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// OperatorStateState state describes the state of the lastEvaluation.
|
||||||
|
// It is limited to three possible states for machine evaluation.
|
||||||
|
type OperatorStateState string
|
||||||
|
|
||||||
|
// Status defines model for Status.
|
||||||
|
type Status struct {
|
||||||
|
// additionalFields is reserved for future use
|
||||||
|
AdditionalFields map[string]interface{} `json:"additionalFields"`
|
||||||
|
|
||||||
|
// operatorStates is a map of operator ID to operator state evaluations.
|
||||||
|
// Any operator which consumes this kind SHOULD add its state evaluation information to this field.
|
||||||
|
OperatorStates map[string]OperatorState `json:"operatorStates,omitempty"`
|
||||||
|
}
|
|
@ -1,89 +0,0 @@
|
||||||
package dashboard_test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"io"
|
|
||||||
"io/fs"
|
|
||||||
"os"
|
|
||||||
"path/filepath"
|
|
||||||
"strings"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"cuelang.org/go/cue/errors"
|
|
||||||
"github.com/grafana/grafana/pkg/cuectx"
|
|
||||||
"github.com/grafana/grafana/pkg/kinds/dashboard"
|
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestDevenvDashboardValidity(t *testing.T) {
|
|
||||||
path, err := filepath.Abs("../../../devenv/dev-dashboards")
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
m, err := themaTestableDashboards(os.DirFS(path))
|
|
||||||
require.NoError(t, err)
|
|
||||||
dk, err := dashboard.NewKind(cuectx.GrafanaThemaRuntime())
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
for path, b := range m {
|
|
||||||
t.Run(path, func(t *testing.T) {
|
|
||||||
// The path arg here only matters for error output
|
|
||||||
cv, err := cuectx.JSONtoCUE(path, b)
|
|
||||||
require.NoError(t, err, "error while decoding dashboard JSON into a CUE value")
|
|
||||||
|
|
||||||
_, err = dk.ConvergentLineage().TypedSchema().Validate(cv)
|
|
||||||
if err != nil {
|
|
||||||
// Testify trims errors to short length. We want the full text
|
|
||||||
errstr := errors.Details(err, nil)
|
|
||||||
t.Log(errstr)
|
|
||||||
if strings.Contains(errstr, "null") {
|
|
||||||
t.Log("validation failure appears to involve nulls - see if scripts/stripnulls.sh has any effect?")
|
|
||||||
}
|
|
||||||
t.FailNow()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func themaTestableDashboards(in fs.FS) (map[string][]byte, error) {
|
|
||||||
m := make(map[string][]byte)
|
|
||||||
|
|
||||||
err := fs.WalkDir(in, ".", func(path string, d fs.DirEntry, err error) error {
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if d.IsDir() || filepath.Ext(d.Name()) != ".json" {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// nolint:gosec
|
|
||||||
f, err := in.Open(path)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer f.Close() //nolint:errcheck
|
|
||||||
|
|
||||||
b, err := io.ReadAll(f)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
jtree := make(map[string]interface{})
|
|
||||||
err = json.Unmarshal(b, &jtree)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if oldschemav, has := jtree["schemaVersion"]; !has || !(oldschemav.(float64) > dashboard.HandoffSchemaVersion-1) {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
m[path] = b
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return m, nil
|
|
||||||
}
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
// Generated by:
|
||||||
|
// kinds/gen.go
|
||||||
|
// Using jennies:
|
||||||
|
// GoTypesJenny
|
||||||
|
//
|
||||||
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
package librarypanel
|
||||||
|
|
||||||
|
// Resource is the wire representation of LibraryPanel. (TODO be better)
|
||||||
|
type Resource struct {
|
||||||
|
Metadata Metadata `json:"metadata"`
|
||||||
|
Spec Spec `json:"spec"`
|
||||||
|
Status Status `json:"status"`
|
||||||
|
}
|
|
@ -26,9 +26,9 @@ const rootrel string = "kinds/librarypanel"
|
||||||
// TODO standard generated docs
|
// TODO standard generated docs
|
||||||
type Kind struct {
|
type Kind struct {
|
||||||
kindsys.Core
|
kindsys.Core
|
||||||
lin thema.ConvergentLineage[*LibraryPanel]
|
lin thema.ConvergentLineage[*Resource]
|
||||||
jcodec vmux.Codec
|
jcodec vmux.Codec
|
||||||
valmux vmux.ValueMux[*LibraryPanel]
|
valmux vmux.ValueMux[*Resource]
|
||||||
}
|
}
|
||||||
|
|
||||||
// type guard - ensure generated Kind type satisfies the kindsys.Core interface
|
// type guard - ensure generated Kind type satisfies the kindsys.Core interface
|
||||||
|
@ -49,7 +49,7 @@ func NewKind(rt *thema.Runtime, opts ...thema.BindOption) (*Kind, error) {
|
||||||
// Get the thema.Schema that the meta says is in the current version (which
|
// Get the thema.Schema that the meta says is in the current version (which
|
||||||
// codegen ensures is always the latest)
|
// codegen ensures is always the latest)
|
||||||
cursch := thema.SchemaP(k.Core.Lineage(), def.Properties.CurrentVersion)
|
cursch := thema.SchemaP(k.Core.Lineage(), def.Properties.CurrentVersion)
|
||||||
tsch, err := thema.BindType[*LibraryPanel](cursch, &LibraryPanel{})
|
tsch, err := thema.BindType(cursch, &Resource{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Should be unreachable, modulo bugs in the Thema->Go code generator
|
// Should be unreachable, modulo bugs in the Thema->Go code generator
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -62,18 +62,18 @@ func NewKind(rt *thema.Runtime, opts ...thema.BindOption) (*Kind, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConvergentLineage returns the same [thema.Lineage] as Lineage, but bound (see [thema.BindType])
|
// ConvergentLineage returns the same [thema.Lineage] as Lineage, but bound (see [thema.BindType])
|
||||||
// to the the LibraryPanel type generated from the current schema, v0.0.
|
// to the the LibraryPanel [Resource] type generated from the current schema, v0.0.
|
||||||
func (k *Kind) ConvergentLineage() thema.ConvergentLineage[*LibraryPanel] {
|
func (k *Kind) ConvergentLineage() thema.ConvergentLineage[*Resource] {
|
||||||
return k.lin
|
return k.lin
|
||||||
}
|
}
|
||||||
|
|
||||||
// JSONValueMux is a version multiplexer that maps a []byte containing JSON data
|
// JSONValueMux is a version multiplexer that maps a []byte containing JSON data
|
||||||
// at any schematized dashboard version to an instance of LibraryPanel.
|
// at any schematized dashboard version to an instance of LibraryPanel [Resource].
|
||||||
//
|
//
|
||||||
// Validation and translation errors emitted from this func will identify the
|
// Validation and translation errors emitted from this func will identify the
|
||||||
// input bytes as "dashboard.json".
|
// input bytes as "dashboard.json".
|
||||||
//
|
//
|
||||||
// This is a thin wrapper around Thema's [vmux.ValueMux].
|
// This is a thin wrapper around Thema's [vmux.ValueMux].
|
||||||
func (k *Kind) JSONValueMux(b []byte) (*LibraryPanel, thema.TranslationLacunas, error) {
|
func (k *Kind) JSONValueMux(b []byte) (*Resource, thema.TranslationLacunas, error) {
|
||||||
return k.valmux(b)
|
return k.valmux(b)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
// Generated by:
|
||||||
|
// kinds/gen.go
|
||||||
|
// Using jennies:
|
||||||
|
// GoResourceTypes
|
||||||
|
//
|
||||||
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
package librarypanel
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Metadata defines model for Metadata.
|
||||||
|
type Metadata struct {
|
||||||
|
CreatedBy string `json:"createdBy"`
|
||||||
|
CreationTimestamp time.Time `json:"creationTimestamp"`
|
||||||
|
DeletionTimestamp *time.Time `json:"deletionTimestamp,omitempty"`
|
||||||
|
|
||||||
|
// extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata
|
||||||
|
ExtraFields map[string]interface{} `json:"extraFields"`
|
||||||
|
Finalizers []string `json:"finalizers"`
|
||||||
|
Labels map[string]string `json:"labels"`
|
||||||
|
ResourceVersion string `json:"resourceVersion"`
|
||||||
|
Uid string `json:"uid"`
|
||||||
|
UpdateTimestamp time.Time `json:"updateTimestamp"`
|
||||||
|
UpdatedBy string `json:"updatedBy"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// _kubeObjectMetadata is metadata found in a kubernetes object's metadata field.
|
||||||
|
// It is not exhaustive and only includes fields which may be relevant to a kind's implementation,
|
||||||
|
// As it is also intended to be generic enough to function with any API Server.
|
||||||
|
type KubeObjectMetadata struct {
|
||||||
|
CreationTimestamp time.Time `json:"creationTimestamp"`
|
||||||
|
DeletionTimestamp *time.Time `json:"deletionTimestamp,omitempty"`
|
||||||
|
Finalizers []string `json:"finalizers"`
|
||||||
|
Labels map[string]string `json:"labels"`
|
||||||
|
ResourceVersion string `json:"resourceVersion"`
|
||||||
|
Uid string `json:"uid"`
|
||||||
|
}
|
|
@ -3,8 +3,7 @@
|
||||||
// Generated by:
|
// Generated by:
|
||||||
// kinds/gen.go
|
// kinds/gen.go
|
||||||
// Using jennies:
|
// Using jennies:
|
||||||
// GoTypesJenny
|
// GoResourceTypes
|
||||||
// LatestJenny
|
|
||||||
//
|
//
|
||||||
// Run 'make gen-cue' from repository root to regenerate.
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
@ -32,8 +31,8 @@ type LibraryElementDTOMetaUser struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// LibraryPanel defines model for LibraryPanel.
|
// Spec defines model for Spec.
|
||||||
type LibraryPanel struct {
|
type Spec struct {
|
||||||
// Panel description
|
// Panel description
|
||||||
Description *string `json:"description,omitempty"`
|
Description *string `json:"description,omitempty"`
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
// Generated by:
|
||||||
|
// kinds/gen.go
|
||||||
|
// Using jennies:
|
||||||
|
// GoResourceTypes
|
||||||
|
//
|
||||||
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
package librarypanel
|
||||||
|
|
||||||
|
// Defines values for OperatorStateState.
|
||||||
|
const (
|
||||||
|
OperatorStateStateFailed OperatorStateState = "failed"
|
||||||
|
OperatorStateStateInProgress OperatorStateState = "in_progress"
|
||||||
|
OperatorStateStateSuccess OperatorStateState = "success"
|
||||||
|
)
|
||||||
|
|
||||||
|
// OperatorState defines model for OperatorState.
|
||||||
|
type OperatorState struct {
|
||||||
|
// descriptiveState is an optional more descriptive state field which has no requirements on format
|
||||||
|
DescriptiveState *string `json:"descriptiveState,omitempty"`
|
||||||
|
|
||||||
|
// details contains any extra information that is operator-specific
|
||||||
|
Details map[string]interface{} `json:"details,omitempty"`
|
||||||
|
|
||||||
|
// lastEvaluation is the ResourceVersion last evaluated
|
||||||
|
LastEvaluation string `json:"lastEvaluation"`
|
||||||
|
|
||||||
|
// state describes the state of the lastEvaluation.
|
||||||
|
// It is limited to three possible states for machine evaluation.
|
||||||
|
State OperatorStateState `json:"state"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// OperatorStateState state describes the state of the lastEvaluation.
|
||||||
|
// It is limited to three possible states for machine evaluation.
|
||||||
|
type OperatorStateState string
|
||||||
|
|
||||||
|
// Status defines model for Status.
|
||||||
|
type Status struct {
|
||||||
|
// additionalFields is reserved for future use
|
||||||
|
AdditionalFields map[string]interface{} `json:"additionalFields"`
|
||||||
|
|
||||||
|
// operatorStates is a map of operator ID to operator state evaluations.
|
||||||
|
// Any operator which consumes this kind SHOULD add its state evaluation information to this field.
|
||||||
|
OperatorStates map[string]OperatorState `json:"operatorStates,omitempty"`
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
// Generated by:
|
||||||
|
// kinds/gen.go
|
||||||
|
// Using jennies:
|
||||||
|
// GoTypesJenny
|
||||||
|
//
|
||||||
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
package playlist
|
||||||
|
|
||||||
|
// Resource is the wire representation of Playlist. (TODO be better)
|
||||||
|
type Resource struct {
|
||||||
|
Metadata Metadata `json:"metadata"`
|
||||||
|
Spec Spec `json:"spec"`
|
||||||
|
Status Status `json:"status"`
|
||||||
|
}
|
|
@ -26,9 +26,9 @@ const rootrel string = "kinds/playlist"
|
||||||
// TODO standard generated docs
|
// TODO standard generated docs
|
||||||
type Kind struct {
|
type Kind struct {
|
||||||
kindsys.Core
|
kindsys.Core
|
||||||
lin thema.ConvergentLineage[*Playlist]
|
lin thema.ConvergentLineage[*Resource]
|
||||||
jcodec vmux.Codec
|
jcodec vmux.Codec
|
||||||
valmux vmux.ValueMux[*Playlist]
|
valmux vmux.ValueMux[*Resource]
|
||||||
}
|
}
|
||||||
|
|
||||||
// type guard - ensure generated Kind type satisfies the kindsys.Core interface
|
// type guard - ensure generated Kind type satisfies the kindsys.Core interface
|
||||||
|
@ -49,7 +49,7 @@ func NewKind(rt *thema.Runtime, opts ...thema.BindOption) (*Kind, error) {
|
||||||
// Get the thema.Schema that the meta says is in the current version (which
|
// Get the thema.Schema that the meta says is in the current version (which
|
||||||
// codegen ensures is always the latest)
|
// codegen ensures is always the latest)
|
||||||
cursch := thema.SchemaP(k.Core.Lineage(), def.Properties.CurrentVersion)
|
cursch := thema.SchemaP(k.Core.Lineage(), def.Properties.CurrentVersion)
|
||||||
tsch, err := thema.BindType[*Playlist](cursch, &Playlist{})
|
tsch, err := thema.BindType(cursch, &Resource{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Should be unreachable, modulo bugs in the Thema->Go code generator
|
// Should be unreachable, modulo bugs in the Thema->Go code generator
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -62,18 +62,18 @@ func NewKind(rt *thema.Runtime, opts ...thema.BindOption) (*Kind, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConvergentLineage returns the same [thema.Lineage] as Lineage, but bound (see [thema.BindType])
|
// ConvergentLineage returns the same [thema.Lineage] as Lineage, but bound (see [thema.BindType])
|
||||||
// to the the Playlist type generated from the current schema, v0.0.
|
// to the the Playlist [Resource] type generated from the current schema, v0.0.
|
||||||
func (k *Kind) ConvergentLineage() thema.ConvergentLineage[*Playlist] {
|
func (k *Kind) ConvergentLineage() thema.ConvergentLineage[*Resource] {
|
||||||
return k.lin
|
return k.lin
|
||||||
}
|
}
|
||||||
|
|
||||||
// JSONValueMux is a version multiplexer that maps a []byte containing JSON data
|
// JSONValueMux is a version multiplexer that maps a []byte containing JSON data
|
||||||
// at any schematized dashboard version to an instance of Playlist.
|
// at any schematized dashboard version to an instance of Playlist [Resource].
|
||||||
//
|
//
|
||||||
// Validation and translation errors emitted from this func will identify the
|
// Validation and translation errors emitted from this func will identify the
|
||||||
// input bytes as "dashboard.json".
|
// input bytes as "dashboard.json".
|
||||||
//
|
//
|
||||||
// This is a thin wrapper around Thema's [vmux.ValueMux].
|
// This is a thin wrapper around Thema's [vmux.ValueMux].
|
||||||
func (k *Kind) JSONValueMux(b []byte) (*Playlist, thema.TranslationLacunas, error) {
|
func (k *Kind) JSONValueMux(b []byte) (*Resource, thema.TranslationLacunas, error) {
|
||||||
return k.valmux(b)
|
return k.valmux(b)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
// Generated by:
|
||||||
|
// kinds/gen.go
|
||||||
|
// Using jennies:
|
||||||
|
// GoResourceTypes
|
||||||
|
//
|
||||||
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
package playlist
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Metadata defines model for Metadata.
|
||||||
|
type Metadata struct {
|
||||||
|
CreatedBy string `json:"createdBy"`
|
||||||
|
CreationTimestamp time.Time `json:"creationTimestamp"`
|
||||||
|
DeletionTimestamp *time.Time `json:"deletionTimestamp,omitempty"`
|
||||||
|
|
||||||
|
// extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata
|
||||||
|
ExtraFields map[string]interface{} `json:"extraFields"`
|
||||||
|
Finalizers []string `json:"finalizers"`
|
||||||
|
Labels map[string]string `json:"labels"`
|
||||||
|
ResourceVersion string `json:"resourceVersion"`
|
||||||
|
Uid string `json:"uid"`
|
||||||
|
UpdateTimestamp time.Time `json:"updateTimestamp"`
|
||||||
|
UpdatedBy string `json:"updatedBy"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// _kubeObjectMetadata is metadata found in a kubernetes object's metadata field.
|
||||||
|
// It is not exhaustive and only includes fields which may be relevant to a kind's implementation,
|
||||||
|
// As it is also intended to be generic enough to function with any API Server.
|
||||||
|
type KubeObjectMetadata struct {
|
||||||
|
CreationTimestamp time.Time `json:"creationTimestamp"`
|
||||||
|
DeletionTimestamp *time.Time `json:"deletionTimestamp,omitempty"`
|
||||||
|
Finalizers []string `json:"finalizers"`
|
||||||
|
Labels map[string]string `json:"labels"`
|
||||||
|
ResourceVersion string `json:"resourceVersion"`
|
||||||
|
Uid string `json:"uid"`
|
||||||
|
}
|
|
@ -3,8 +3,7 @@
|
||||||
// Generated by:
|
// Generated by:
|
||||||
// kinds/gen.go
|
// kinds/gen.go
|
||||||
// Using jennies:
|
// Using jennies:
|
||||||
// GoTypesJenny
|
// GoResourceTypes
|
||||||
// LatestJenny
|
|
||||||
//
|
//
|
||||||
// Run 'make gen-cue' from repository root to regenerate.
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
@ -17,24 +16,6 @@ const (
|
||||||
ItemTypeDashboardByUid ItemType = "dashboard_by_uid"
|
ItemTypeDashboardByUid ItemType = "dashboard_by_uid"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Playlist defines model for Playlist.
|
|
||||||
type Playlist struct {
|
|
||||||
// Interval sets the time between switching views in a playlist.
|
|
||||||
// FIXME: Is this based on a standardized format or what options are available? Can datemath be used?
|
|
||||||
Interval string `json:"interval"`
|
|
||||||
|
|
||||||
// The ordered list of items that the playlist will iterate over.
|
|
||||||
// FIXME! This should not be optional, but changing it makes the godegen awkward
|
|
||||||
Items []Item `json:"items,omitempty"`
|
|
||||||
|
|
||||||
// Name of the playlist.
|
|
||||||
Name string `json:"name"`
|
|
||||||
|
|
||||||
// Unique playlist identifier. Generated on creation, either by the
|
|
||||||
// creator of the playlist of by the application.
|
|
||||||
Uid string `json:"uid"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// Item defines model for Item.
|
// Item defines model for Item.
|
||||||
type Item struct {
|
type Item struct {
|
||||||
// Title is an unused property -- it will be removed in the future
|
// Title is an unused property -- it will be removed in the future
|
||||||
|
@ -56,3 +37,21 @@ type Item struct {
|
||||||
|
|
||||||
// Type of the item.
|
// Type of the item.
|
||||||
type ItemType string
|
type ItemType string
|
||||||
|
|
||||||
|
// Spec defines model for Spec.
|
||||||
|
type Spec struct {
|
||||||
|
// Interval sets the time between switching views in a playlist.
|
||||||
|
// FIXME: Is this based on a standardized format or what options are available? Can datemath be used?
|
||||||
|
Interval string `json:"interval"`
|
||||||
|
|
||||||
|
// The ordered list of items that the playlist will iterate over.
|
||||||
|
// FIXME! This should not be optional, but changing it makes the godegen awkward
|
||||||
|
Items []Item `json:"items,omitempty"`
|
||||||
|
|
||||||
|
// Name of the playlist.
|
||||||
|
Name string `json:"name"`
|
||||||
|
|
||||||
|
// Unique playlist identifier. Generated on creation, either by the
|
||||||
|
// creator of the playlist of by the application.
|
||||||
|
Uid string `json:"uid"`
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
// Generated by:
|
||||||
|
// kinds/gen.go
|
||||||
|
// Using jennies:
|
||||||
|
// GoResourceTypes
|
||||||
|
//
|
||||||
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
package playlist
|
||||||
|
|
||||||
|
// Defines values for OperatorStateState.
|
||||||
|
const (
|
||||||
|
OperatorStateStateFailed OperatorStateState = "failed"
|
||||||
|
OperatorStateStateInProgress OperatorStateState = "in_progress"
|
||||||
|
OperatorStateStateSuccess OperatorStateState = "success"
|
||||||
|
)
|
||||||
|
|
||||||
|
// OperatorState defines model for OperatorState.
|
||||||
|
type OperatorState struct {
|
||||||
|
// descriptiveState is an optional more descriptive state field which has no requirements on format
|
||||||
|
DescriptiveState *string `json:"descriptiveState,omitempty"`
|
||||||
|
|
||||||
|
// details contains any extra information that is operator-specific
|
||||||
|
Details map[string]interface{} `json:"details,omitempty"`
|
||||||
|
|
||||||
|
// lastEvaluation is the ResourceVersion last evaluated
|
||||||
|
LastEvaluation string `json:"lastEvaluation"`
|
||||||
|
|
||||||
|
// state describes the state of the lastEvaluation.
|
||||||
|
// It is limited to three possible states for machine evaluation.
|
||||||
|
State OperatorStateState `json:"state"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// OperatorStateState state describes the state of the lastEvaluation.
|
||||||
|
// It is limited to three possible states for machine evaluation.
|
||||||
|
type OperatorStateState string
|
||||||
|
|
||||||
|
// Status defines model for Status.
|
||||||
|
type Status struct {
|
||||||
|
// additionalFields is reserved for future use
|
||||||
|
AdditionalFields map[string]interface{} `json:"additionalFields"`
|
||||||
|
|
||||||
|
// operatorStates is a map of operator ID to operator state evaluations.
|
||||||
|
// Any operator which consumes this kind SHOULD add its state evaluation information to this field.
|
||||||
|
OperatorStates map[string]OperatorState `json:"operatorStates,omitempty"`
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
// Generated by:
|
||||||
|
// kinds/gen.go
|
||||||
|
// Using jennies:
|
||||||
|
// GoTypesJenny
|
||||||
|
//
|
||||||
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
package preferences
|
||||||
|
|
||||||
|
// Resource is the wire representation of Preferences. (TODO be better)
|
||||||
|
type Resource struct {
|
||||||
|
Metadata Metadata `json:"metadata"`
|
||||||
|
Spec Spec `json:"spec"`
|
||||||
|
Status Status `json:"status"`
|
||||||
|
}
|
|
@ -26,9 +26,9 @@ const rootrel string = "kinds/preferences"
|
||||||
// TODO standard generated docs
|
// TODO standard generated docs
|
||||||
type Kind struct {
|
type Kind struct {
|
||||||
kindsys.Core
|
kindsys.Core
|
||||||
lin thema.ConvergentLineage[*Preferences]
|
lin thema.ConvergentLineage[*Resource]
|
||||||
jcodec vmux.Codec
|
jcodec vmux.Codec
|
||||||
valmux vmux.ValueMux[*Preferences]
|
valmux vmux.ValueMux[*Resource]
|
||||||
}
|
}
|
||||||
|
|
||||||
// type guard - ensure generated Kind type satisfies the kindsys.Core interface
|
// type guard - ensure generated Kind type satisfies the kindsys.Core interface
|
||||||
|
@ -49,7 +49,7 @@ func NewKind(rt *thema.Runtime, opts ...thema.BindOption) (*Kind, error) {
|
||||||
// Get the thema.Schema that the meta says is in the current version (which
|
// Get the thema.Schema that the meta says is in the current version (which
|
||||||
// codegen ensures is always the latest)
|
// codegen ensures is always the latest)
|
||||||
cursch := thema.SchemaP(k.Core.Lineage(), def.Properties.CurrentVersion)
|
cursch := thema.SchemaP(k.Core.Lineage(), def.Properties.CurrentVersion)
|
||||||
tsch, err := thema.BindType[*Preferences](cursch, &Preferences{})
|
tsch, err := thema.BindType(cursch, &Resource{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Should be unreachable, modulo bugs in the Thema->Go code generator
|
// Should be unreachable, modulo bugs in the Thema->Go code generator
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -62,18 +62,18 @@ func NewKind(rt *thema.Runtime, opts ...thema.BindOption) (*Kind, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConvergentLineage returns the same [thema.Lineage] as Lineage, but bound (see [thema.BindType])
|
// ConvergentLineage returns the same [thema.Lineage] as Lineage, but bound (see [thema.BindType])
|
||||||
// to the the Preferences type generated from the current schema, v0.0.
|
// to the the Preferences [Resource] type generated from the current schema, v0.0.
|
||||||
func (k *Kind) ConvergentLineage() thema.ConvergentLineage[*Preferences] {
|
func (k *Kind) ConvergentLineage() thema.ConvergentLineage[*Resource] {
|
||||||
return k.lin
|
return k.lin
|
||||||
}
|
}
|
||||||
|
|
||||||
// JSONValueMux is a version multiplexer that maps a []byte containing JSON data
|
// JSONValueMux is a version multiplexer that maps a []byte containing JSON data
|
||||||
// at any schematized dashboard version to an instance of Preferences.
|
// at any schematized dashboard version to an instance of Preferences [Resource].
|
||||||
//
|
//
|
||||||
// Validation and translation errors emitted from this func will identify the
|
// Validation and translation errors emitted from this func will identify the
|
||||||
// input bytes as "dashboard.json".
|
// input bytes as "dashboard.json".
|
||||||
//
|
//
|
||||||
// This is a thin wrapper around Thema's [vmux.ValueMux].
|
// This is a thin wrapper around Thema's [vmux.ValueMux].
|
||||||
func (k *Kind) JSONValueMux(b []byte) (*Preferences, thema.TranslationLacunas, error) {
|
func (k *Kind) JSONValueMux(b []byte) (*Resource, thema.TranslationLacunas, error) {
|
||||||
return k.valmux(b)
|
return k.valmux(b)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
// Generated by:
|
||||||
|
// kinds/gen.go
|
||||||
|
// Using jennies:
|
||||||
|
// GoResourceTypes
|
||||||
|
//
|
||||||
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
package preferences
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Metadata defines model for Metadata.
|
||||||
|
type Metadata struct {
|
||||||
|
CreatedBy string `json:"createdBy"`
|
||||||
|
CreationTimestamp time.Time `json:"creationTimestamp"`
|
||||||
|
DeletionTimestamp *time.Time `json:"deletionTimestamp,omitempty"`
|
||||||
|
|
||||||
|
// extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata
|
||||||
|
ExtraFields map[string]interface{} `json:"extraFields"`
|
||||||
|
Finalizers []string `json:"finalizers"`
|
||||||
|
Labels map[string]string `json:"labels"`
|
||||||
|
ResourceVersion string `json:"resourceVersion"`
|
||||||
|
Uid string `json:"uid"`
|
||||||
|
UpdateTimestamp time.Time `json:"updateTimestamp"`
|
||||||
|
UpdatedBy string `json:"updatedBy"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// _kubeObjectMetadata is metadata found in a kubernetes object's metadata field.
|
||||||
|
// It is not exhaustive and only includes fields which may be relevant to a kind's implementation,
|
||||||
|
// As it is also intended to be generic enough to function with any API Server.
|
||||||
|
type KubeObjectMetadata struct {
|
||||||
|
CreationTimestamp time.Time `json:"creationTimestamp"`
|
||||||
|
DeletionTimestamp *time.Time `json:"deletionTimestamp,omitempty"`
|
||||||
|
Finalizers []string `json:"finalizers"`
|
||||||
|
Labels map[string]string `json:"labels"`
|
||||||
|
ResourceVersion string `json:"resourceVersion"`
|
||||||
|
Uid string `json:"uid"`
|
||||||
|
}
|
|
@ -3,15 +3,20 @@
|
||||||
// Generated by:
|
// Generated by:
|
||||||
// kinds/gen.go
|
// kinds/gen.go
|
||||||
// Using jennies:
|
// Using jennies:
|
||||||
// GoTypesJenny
|
// GoResourceTypes
|
||||||
// LatestJenny
|
|
||||||
//
|
//
|
||||||
// Run 'make gen-cue' from repository root to regenerate.
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
package preferences
|
package preferences
|
||||||
|
|
||||||
// Preferences defines model for Preferences.
|
// QueryHistoryPreference defines model for QueryHistoryPreference.
|
||||||
type Preferences struct {
|
type QueryHistoryPreference struct {
|
||||||
|
// HomeTab one of: '' | 'query' | 'starred';
|
||||||
|
HomeTab *string `json:"homeTab,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Spec defines model for Spec.
|
||||||
|
type Spec struct {
|
||||||
// UID for the home dashboard
|
// UID for the home dashboard
|
||||||
HomeDashboardUID *string `json:"homeDashboardUID,omitempty"`
|
HomeDashboardUID *string `json:"homeDashboardUID,omitempty"`
|
||||||
|
|
||||||
|
@ -29,9 +34,3 @@ type Preferences struct {
|
||||||
// WeekStart day of the week (sunday, monday, etc)
|
// WeekStart day of the week (sunday, monday, etc)
|
||||||
WeekStart *string `json:"weekStart,omitempty"`
|
WeekStart *string `json:"weekStart,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// QueryHistoryPreference defines model for QueryHistoryPreference.
|
|
||||||
type QueryHistoryPreference struct {
|
|
||||||
// HomeTab one of: '' | 'query' | 'starred';
|
|
||||||
HomeTab *string `json:"homeTab,omitempty"`
|
|
||||||
}
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
// Generated by:
|
||||||
|
// kinds/gen.go
|
||||||
|
// Using jennies:
|
||||||
|
// GoResourceTypes
|
||||||
|
//
|
||||||
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
package preferences
|
||||||
|
|
||||||
|
// Defines values for OperatorStateState.
|
||||||
|
const (
|
||||||
|
OperatorStateStateFailed OperatorStateState = "failed"
|
||||||
|
OperatorStateStateInProgress OperatorStateState = "in_progress"
|
||||||
|
OperatorStateStateSuccess OperatorStateState = "success"
|
||||||
|
)
|
||||||
|
|
||||||
|
// OperatorState defines model for OperatorState.
|
||||||
|
type OperatorState struct {
|
||||||
|
// descriptiveState is an optional more descriptive state field which has no requirements on format
|
||||||
|
DescriptiveState *string `json:"descriptiveState,omitempty"`
|
||||||
|
|
||||||
|
// details contains any extra information that is operator-specific
|
||||||
|
Details map[string]interface{} `json:"details,omitempty"`
|
||||||
|
|
||||||
|
// lastEvaluation is the ResourceVersion last evaluated
|
||||||
|
LastEvaluation string `json:"lastEvaluation"`
|
||||||
|
|
||||||
|
// state describes the state of the lastEvaluation.
|
||||||
|
// It is limited to three possible states for machine evaluation.
|
||||||
|
State OperatorStateState `json:"state"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// OperatorStateState state describes the state of the lastEvaluation.
|
||||||
|
// It is limited to three possible states for machine evaluation.
|
||||||
|
type OperatorStateState string
|
||||||
|
|
||||||
|
// Status defines model for Status.
|
||||||
|
type Status struct {
|
||||||
|
// additionalFields is reserved for future use
|
||||||
|
AdditionalFields map[string]interface{} `json:"additionalFields"`
|
||||||
|
|
||||||
|
// operatorStates is a map of operator ID to operator state evaluations.
|
||||||
|
// Any operator which consumes this kind SHOULD add its state evaluation information to this field.
|
||||||
|
OperatorStates map[string]OperatorState `json:"operatorStates,omitempty"`
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
// Generated by:
|
||||||
|
// kinds/gen.go
|
||||||
|
// Using jennies:
|
||||||
|
// GoTypesJenny
|
||||||
|
//
|
||||||
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
package publicdashboard
|
||||||
|
|
||||||
|
// Resource is the wire representation of PublicDashboard. (TODO be better)
|
||||||
|
type Resource struct {
|
||||||
|
Metadata Metadata `json:"metadata"`
|
||||||
|
Spec Spec `json:"spec"`
|
||||||
|
Status Status `json:"status"`
|
||||||
|
}
|
|
@ -26,9 +26,9 @@ const rootrel string = "kinds/publicdashboard"
|
||||||
// TODO standard generated docs
|
// TODO standard generated docs
|
||||||
type Kind struct {
|
type Kind struct {
|
||||||
kindsys.Core
|
kindsys.Core
|
||||||
lin thema.ConvergentLineage[*PublicDashboard]
|
lin thema.ConvergentLineage[*Resource]
|
||||||
jcodec vmux.Codec
|
jcodec vmux.Codec
|
||||||
valmux vmux.ValueMux[*PublicDashboard]
|
valmux vmux.ValueMux[*Resource]
|
||||||
}
|
}
|
||||||
|
|
||||||
// type guard - ensure generated Kind type satisfies the kindsys.Core interface
|
// type guard - ensure generated Kind type satisfies the kindsys.Core interface
|
||||||
|
@ -49,7 +49,7 @@ func NewKind(rt *thema.Runtime, opts ...thema.BindOption) (*Kind, error) {
|
||||||
// Get the thema.Schema that the meta says is in the current version (which
|
// Get the thema.Schema that the meta says is in the current version (which
|
||||||
// codegen ensures is always the latest)
|
// codegen ensures is always the latest)
|
||||||
cursch := thema.SchemaP(k.Core.Lineage(), def.Properties.CurrentVersion)
|
cursch := thema.SchemaP(k.Core.Lineage(), def.Properties.CurrentVersion)
|
||||||
tsch, err := thema.BindType[*PublicDashboard](cursch, &PublicDashboard{})
|
tsch, err := thema.BindType(cursch, &Resource{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Should be unreachable, modulo bugs in the Thema->Go code generator
|
// Should be unreachable, modulo bugs in the Thema->Go code generator
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -62,18 +62,18 @@ func NewKind(rt *thema.Runtime, opts ...thema.BindOption) (*Kind, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConvergentLineage returns the same [thema.Lineage] as Lineage, but bound (see [thema.BindType])
|
// ConvergentLineage returns the same [thema.Lineage] as Lineage, but bound (see [thema.BindType])
|
||||||
// to the the PublicDashboard type generated from the current schema, v0.0.
|
// to the the PublicDashboard [Resource] type generated from the current schema, v0.0.
|
||||||
func (k *Kind) ConvergentLineage() thema.ConvergentLineage[*PublicDashboard] {
|
func (k *Kind) ConvergentLineage() thema.ConvergentLineage[*Resource] {
|
||||||
return k.lin
|
return k.lin
|
||||||
}
|
}
|
||||||
|
|
||||||
// JSONValueMux is a version multiplexer that maps a []byte containing JSON data
|
// JSONValueMux is a version multiplexer that maps a []byte containing JSON data
|
||||||
// at any schematized dashboard version to an instance of PublicDashboard.
|
// at any schematized dashboard version to an instance of PublicDashboard [Resource].
|
||||||
//
|
//
|
||||||
// Validation and translation errors emitted from this func will identify the
|
// Validation and translation errors emitted from this func will identify the
|
||||||
// input bytes as "dashboard.json".
|
// input bytes as "dashboard.json".
|
||||||
//
|
//
|
||||||
// This is a thin wrapper around Thema's [vmux.ValueMux].
|
// This is a thin wrapper around Thema's [vmux.ValueMux].
|
||||||
func (k *Kind) JSONValueMux(b []byte) (*PublicDashboard, thema.TranslationLacunas, error) {
|
func (k *Kind) JSONValueMux(b []byte) (*Resource, thema.TranslationLacunas, error) {
|
||||||
return k.valmux(b)
|
return k.valmux(b)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
// Generated by:
|
||||||
|
// kinds/gen.go
|
||||||
|
// Using jennies:
|
||||||
|
// GoResourceTypes
|
||||||
|
//
|
||||||
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
package publicdashboard
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Metadata defines model for Metadata.
|
||||||
|
type Metadata struct {
|
||||||
|
CreatedBy string `json:"createdBy"`
|
||||||
|
CreationTimestamp time.Time `json:"creationTimestamp"`
|
||||||
|
DeletionTimestamp *time.Time `json:"deletionTimestamp,omitempty"`
|
||||||
|
|
||||||
|
// extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata
|
||||||
|
ExtraFields map[string]interface{} `json:"extraFields"`
|
||||||
|
Finalizers []string `json:"finalizers"`
|
||||||
|
Labels map[string]string `json:"labels"`
|
||||||
|
ResourceVersion string `json:"resourceVersion"`
|
||||||
|
Uid string `json:"uid"`
|
||||||
|
UpdateTimestamp time.Time `json:"updateTimestamp"`
|
||||||
|
UpdatedBy string `json:"updatedBy"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// _kubeObjectMetadata is metadata found in a kubernetes object's metadata field.
|
||||||
|
// It is not exhaustive and only includes fields which may be relevant to a kind's implementation,
|
||||||
|
// As it is also intended to be generic enough to function with any API Server.
|
||||||
|
type KubeObjectMetadata struct {
|
||||||
|
CreationTimestamp time.Time `json:"creationTimestamp"`
|
||||||
|
DeletionTimestamp *time.Time `json:"deletionTimestamp,omitempty"`
|
||||||
|
Finalizers []string `json:"finalizers"`
|
||||||
|
Labels map[string]string `json:"labels"`
|
||||||
|
ResourceVersion string `json:"resourceVersion"`
|
||||||
|
Uid string `json:"uid"`
|
||||||
|
}
|
|
@ -3,15 +3,14 @@
|
||||||
// Generated by:
|
// Generated by:
|
||||||
// kinds/gen.go
|
// kinds/gen.go
|
||||||
// Using jennies:
|
// Using jennies:
|
||||||
// GoTypesJenny
|
// GoResourceTypes
|
||||||
// LatestJenny
|
|
||||||
//
|
//
|
||||||
// Run 'make gen-cue' from repository root to regenerate.
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
package publicdashboard
|
package publicdashboard
|
||||||
|
|
||||||
// PublicDashboard defines model for PublicDashboard.
|
// Spec defines model for Spec.
|
||||||
type PublicDashboard struct {
|
type Spec struct {
|
||||||
// Unique public access token
|
// Unique public access token
|
||||||
AccessToken *string `json:"accessToken,omitempty"`
|
AccessToken *string `json:"accessToken,omitempty"`
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
// Generated by:
|
||||||
|
// kinds/gen.go
|
||||||
|
// Using jennies:
|
||||||
|
// GoResourceTypes
|
||||||
|
//
|
||||||
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
package publicdashboard
|
||||||
|
|
||||||
|
// Defines values for OperatorStateState.
|
||||||
|
const (
|
||||||
|
OperatorStateStateFailed OperatorStateState = "failed"
|
||||||
|
OperatorStateStateInProgress OperatorStateState = "in_progress"
|
||||||
|
OperatorStateStateSuccess OperatorStateState = "success"
|
||||||
|
)
|
||||||
|
|
||||||
|
// OperatorState defines model for OperatorState.
|
||||||
|
type OperatorState struct {
|
||||||
|
// descriptiveState is an optional more descriptive state field which has no requirements on format
|
||||||
|
DescriptiveState *string `json:"descriptiveState,omitempty"`
|
||||||
|
|
||||||
|
// details contains any extra information that is operator-specific
|
||||||
|
Details map[string]interface{} `json:"details,omitempty"`
|
||||||
|
|
||||||
|
// lastEvaluation is the ResourceVersion last evaluated
|
||||||
|
LastEvaluation string `json:"lastEvaluation"`
|
||||||
|
|
||||||
|
// state describes the state of the lastEvaluation.
|
||||||
|
// It is limited to three possible states for machine evaluation.
|
||||||
|
State OperatorStateState `json:"state"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// OperatorStateState state describes the state of the lastEvaluation.
|
||||||
|
// It is limited to three possible states for machine evaluation.
|
||||||
|
type OperatorStateState string
|
||||||
|
|
||||||
|
// Status defines model for Status.
|
||||||
|
type Status struct {
|
||||||
|
// additionalFields is reserved for future use
|
||||||
|
AdditionalFields map[string]interface{} `json:"additionalFields"`
|
||||||
|
|
||||||
|
// operatorStates is a map of operator ID to operator state evaluations.
|
||||||
|
// Any operator which consumes this kind SHOULD add its state evaluation information to this field.
|
||||||
|
OperatorStates map[string]OperatorState `json:"operatorStates,omitempty"`
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
// Generated by:
|
||||||
|
// kinds/gen.go
|
||||||
|
// Using jennies:
|
||||||
|
// GoTypesJenny
|
||||||
|
//
|
||||||
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
package serviceaccount
|
||||||
|
|
||||||
|
// Resource is the wire representation of ServiceAccount. (TODO be better)
|
||||||
|
type Resource struct {
|
||||||
|
Metadata Metadata `json:"metadata"`
|
||||||
|
Spec Spec `json:"spec"`
|
||||||
|
Status Status `json:"status"`
|
||||||
|
}
|
|
@ -26,9 +26,9 @@ const rootrel string = "kinds/serviceaccount"
|
||||||
// TODO standard generated docs
|
// TODO standard generated docs
|
||||||
type Kind struct {
|
type Kind struct {
|
||||||
kindsys.Core
|
kindsys.Core
|
||||||
lin thema.ConvergentLineage[*ServiceAccount]
|
lin thema.ConvergentLineage[*Resource]
|
||||||
jcodec vmux.Codec
|
jcodec vmux.Codec
|
||||||
valmux vmux.ValueMux[*ServiceAccount]
|
valmux vmux.ValueMux[*Resource]
|
||||||
}
|
}
|
||||||
|
|
||||||
// type guard - ensure generated Kind type satisfies the kindsys.Core interface
|
// type guard - ensure generated Kind type satisfies the kindsys.Core interface
|
||||||
|
@ -49,7 +49,7 @@ func NewKind(rt *thema.Runtime, opts ...thema.BindOption) (*Kind, error) {
|
||||||
// Get the thema.Schema that the meta says is in the current version (which
|
// Get the thema.Schema that the meta says is in the current version (which
|
||||||
// codegen ensures is always the latest)
|
// codegen ensures is always the latest)
|
||||||
cursch := thema.SchemaP(k.Core.Lineage(), def.Properties.CurrentVersion)
|
cursch := thema.SchemaP(k.Core.Lineage(), def.Properties.CurrentVersion)
|
||||||
tsch, err := thema.BindType[*ServiceAccount](cursch, &ServiceAccount{})
|
tsch, err := thema.BindType(cursch, &Resource{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Should be unreachable, modulo bugs in the Thema->Go code generator
|
// Should be unreachable, modulo bugs in the Thema->Go code generator
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -62,18 +62,18 @@ func NewKind(rt *thema.Runtime, opts ...thema.BindOption) (*Kind, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConvergentLineage returns the same [thema.Lineage] as Lineage, but bound (see [thema.BindType])
|
// ConvergentLineage returns the same [thema.Lineage] as Lineage, but bound (see [thema.BindType])
|
||||||
// to the the ServiceAccount type generated from the current schema, v0.0.
|
// to the the ServiceAccount [Resource] type generated from the current schema, v0.0.
|
||||||
func (k *Kind) ConvergentLineage() thema.ConvergentLineage[*ServiceAccount] {
|
func (k *Kind) ConvergentLineage() thema.ConvergentLineage[*Resource] {
|
||||||
return k.lin
|
return k.lin
|
||||||
}
|
}
|
||||||
|
|
||||||
// JSONValueMux is a version multiplexer that maps a []byte containing JSON data
|
// JSONValueMux is a version multiplexer that maps a []byte containing JSON data
|
||||||
// at any schematized dashboard version to an instance of ServiceAccount.
|
// at any schematized dashboard version to an instance of ServiceAccount [Resource].
|
||||||
//
|
//
|
||||||
// Validation and translation errors emitted from this func will identify the
|
// Validation and translation errors emitted from this func will identify the
|
||||||
// input bytes as "dashboard.json".
|
// input bytes as "dashboard.json".
|
||||||
//
|
//
|
||||||
// This is a thin wrapper around Thema's [vmux.ValueMux].
|
// This is a thin wrapper around Thema's [vmux.ValueMux].
|
||||||
func (k *Kind) JSONValueMux(b []byte) (*ServiceAccount, thema.TranslationLacunas, error) {
|
func (k *Kind) JSONValueMux(b []byte) (*Resource, thema.TranslationLacunas, error) {
|
||||||
return k.valmux(b)
|
return k.valmux(b)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
// Generated by:
|
||||||
|
// kinds/gen.go
|
||||||
|
// Using jennies:
|
||||||
|
// GoResourceTypes
|
||||||
|
//
|
||||||
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
package serviceaccount
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Metadata defines model for Metadata.
|
||||||
|
type Metadata struct {
|
||||||
|
CreatedBy string `json:"createdBy"`
|
||||||
|
CreationTimestamp time.Time `json:"creationTimestamp"`
|
||||||
|
DeletionTimestamp *time.Time `json:"deletionTimestamp,omitempty"`
|
||||||
|
|
||||||
|
// extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata
|
||||||
|
ExtraFields map[string]interface{} `json:"extraFields"`
|
||||||
|
Finalizers []string `json:"finalizers"`
|
||||||
|
Labels map[string]string `json:"labels"`
|
||||||
|
ResourceVersion string `json:"resourceVersion"`
|
||||||
|
Uid string `json:"uid"`
|
||||||
|
UpdateTimestamp time.Time `json:"updateTimestamp"`
|
||||||
|
UpdatedBy string `json:"updatedBy"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// _kubeObjectMetadata is metadata found in a kubernetes object's metadata field.
|
||||||
|
// It is not exhaustive and only includes fields which may be relevant to a kind's implementation,
|
||||||
|
// As it is also intended to be generic enough to function with any API Server.
|
||||||
|
type KubeObjectMetadata struct {
|
||||||
|
CreationTimestamp time.Time `json:"creationTimestamp"`
|
||||||
|
DeletionTimestamp *time.Time `json:"deletionTimestamp,omitempty"`
|
||||||
|
Finalizers []string `json:"finalizers"`
|
||||||
|
Labels map[string]string `json:"labels"`
|
||||||
|
ResourceVersion string `json:"resourceVersion"`
|
||||||
|
Uid string `json:"uid"`
|
||||||
|
}
|
|
@ -3,17 +3,12 @@
|
||||||
// Generated by:
|
// Generated by:
|
||||||
// kinds/gen.go
|
// kinds/gen.go
|
||||||
// Using jennies:
|
// Using jennies:
|
||||||
// GoTypesJenny
|
// GoResourceTypes
|
||||||
// LatestJenny
|
|
||||||
//
|
//
|
||||||
// Run 'make gen-cue' from repository root to regenerate.
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
package serviceaccount
|
package serviceaccount
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Defines values for OrgRole.
|
// Defines values for OrgRole.
|
||||||
const (
|
const (
|
||||||
OrgRoleAdmin OrgRole = "Admin"
|
OrgRoleAdmin OrgRole = "Admin"
|
||||||
|
@ -24,8 +19,8 @@ const (
|
||||||
// OrgRole is a Grafana Organization Role which can be 'Viewer', 'Editor', 'Admin'.
|
// OrgRole is a Grafana Organization Role which can be 'Viewer', 'Editor', 'Admin'.
|
||||||
type OrgRole string
|
type OrgRole string
|
||||||
|
|
||||||
// ServiceAccount defines model for ServiceAccount.
|
// Spec defines model for Spec.
|
||||||
type ServiceAccount struct {
|
type Spec struct {
|
||||||
// AccessControl metadata associated with a given resource.
|
// AccessControl metadata associated with a given resource.
|
||||||
AccessControl map[string]bool `json:"accessControl,omitempty"`
|
AccessControl map[string]bool `json:"accessControl,omitempty"`
|
||||||
|
|
||||||
|
@ -33,9 +28,6 @@ type ServiceAccount struct {
|
||||||
// of the service account.
|
// of the service account.
|
||||||
AvatarUrl string `json:"avatarUrl"`
|
AvatarUrl string `json:"avatarUrl"`
|
||||||
|
|
||||||
// Created indicates when the service account was created.
|
|
||||||
Created *time.Time `json:"created,omitempty"`
|
|
||||||
|
|
||||||
// ID is the unique identifier of the service account in the database.
|
// ID is the unique identifier of the service account in the database.
|
||||||
Id int64 `json:"id"`
|
Id int64 `json:"id"`
|
||||||
|
|
||||||
|
@ -60,7 +52,4 @@ type ServiceAccount struct {
|
||||||
// Tokens is the number of active tokens for the service account.
|
// Tokens is the number of active tokens for the service account.
|
||||||
// Tokens are used to authenticate the service account against Grafana.
|
// Tokens are used to authenticate the service account against Grafana.
|
||||||
Tokens int64 `json:"tokens"`
|
Tokens int64 `json:"tokens"`
|
||||||
|
|
||||||
// Updated indicates when the service account was updated.
|
|
||||||
Updated *time.Time `json:"updated,omitempty"`
|
|
||||||
}
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
// Generated by:
|
||||||
|
// kinds/gen.go
|
||||||
|
// Using jennies:
|
||||||
|
// GoResourceTypes
|
||||||
|
//
|
||||||
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
package serviceaccount
|
||||||
|
|
||||||
|
// Defines values for OperatorStateState.
|
||||||
|
const (
|
||||||
|
OperatorStateStateFailed OperatorStateState = "failed"
|
||||||
|
OperatorStateStateInProgress OperatorStateState = "in_progress"
|
||||||
|
OperatorStateStateSuccess OperatorStateState = "success"
|
||||||
|
)
|
||||||
|
|
||||||
|
// OperatorState defines model for OperatorState.
|
||||||
|
type OperatorState struct {
|
||||||
|
// descriptiveState is an optional more descriptive state field which has no requirements on format
|
||||||
|
DescriptiveState *string `json:"descriptiveState,omitempty"`
|
||||||
|
|
||||||
|
// details contains any extra information that is operator-specific
|
||||||
|
Details map[string]interface{} `json:"details,omitempty"`
|
||||||
|
|
||||||
|
// lastEvaluation is the ResourceVersion last evaluated
|
||||||
|
LastEvaluation string `json:"lastEvaluation"`
|
||||||
|
|
||||||
|
// state describes the state of the lastEvaluation.
|
||||||
|
// It is limited to three possible states for machine evaluation.
|
||||||
|
State OperatorStateState `json:"state"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// OperatorStateState state describes the state of the lastEvaluation.
|
||||||
|
// It is limited to three possible states for machine evaluation.
|
||||||
|
type OperatorStateState string
|
||||||
|
|
||||||
|
// Status defines model for Status.
|
||||||
|
type Status struct {
|
||||||
|
// additionalFields is reserved for future use
|
||||||
|
AdditionalFields map[string]interface{} `json:"additionalFields"`
|
||||||
|
|
||||||
|
// operatorStates is a map of operator ID to operator state evaluations.
|
||||||
|
// Any operator which consumes this kind SHOULD add its state evaluation information to this field.
|
||||||
|
OperatorStates map[string]OperatorState `json:"operatorStates,omitempty"`
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
// Generated by:
|
||||||
|
// kinds/gen.go
|
||||||
|
// Using jennies:
|
||||||
|
// GoTypesJenny
|
||||||
|
//
|
||||||
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
package team
|
||||||
|
|
||||||
|
// Resource is the wire representation of Team. (TODO be better)
|
||||||
|
type Resource struct {
|
||||||
|
Metadata Metadata `json:"metadata"`
|
||||||
|
Spec Spec `json:"spec"`
|
||||||
|
Status Status `json:"status"`
|
||||||
|
}
|
|
@ -26,9 +26,9 @@ const rootrel string = "kinds/team"
|
||||||
// TODO standard generated docs
|
// TODO standard generated docs
|
||||||
type Kind struct {
|
type Kind struct {
|
||||||
kindsys.Core
|
kindsys.Core
|
||||||
lin thema.ConvergentLineage[*Team]
|
lin thema.ConvergentLineage[*Resource]
|
||||||
jcodec vmux.Codec
|
jcodec vmux.Codec
|
||||||
valmux vmux.ValueMux[*Team]
|
valmux vmux.ValueMux[*Resource]
|
||||||
}
|
}
|
||||||
|
|
||||||
// type guard - ensure generated Kind type satisfies the kindsys.Core interface
|
// type guard - ensure generated Kind type satisfies the kindsys.Core interface
|
||||||
|
@ -49,7 +49,7 @@ func NewKind(rt *thema.Runtime, opts ...thema.BindOption) (*Kind, error) {
|
||||||
// Get the thema.Schema that the meta says is in the current version (which
|
// Get the thema.Schema that the meta says is in the current version (which
|
||||||
// codegen ensures is always the latest)
|
// codegen ensures is always the latest)
|
||||||
cursch := thema.SchemaP(k.Core.Lineage(), def.Properties.CurrentVersion)
|
cursch := thema.SchemaP(k.Core.Lineage(), def.Properties.CurrentVersion)
|
||||||
tsch, err := thema.BindType[*Team](cursch, &Team{})
|
tsch, err := thema.BindType(cursch, &Resource{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Should be unreachable, modulo bugs in the Thema->Go code generator
|
// Should be unreachable, modulo bugs in the Thema->Go code generator
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -62,18 +62,18 @@ func NewKind(rt *thema.Runtime, opts ...thema.BindOption) (*Kind, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConvergentLineage returns the same [thema.Lineage] as Lineage, but bound (see [thema.BindType])
|
// ConvergentLineage returns the same [thema.Lineage] as Lineage, but bound (see [thema.BindType])
|
||||||
// to the the Team type generated from the current schema, v0.0.
|
// to the the Team [Resource] type generated from the current schema, v0.0.
|
||||||
func (k *Kind) ConvergentLineage() thema.ConvergentLineage[*Team] {
|
func (k *Kind) ConvergentLineage() thema.ConvergentLineage[*Resource] {
|
||||||
return k.lin
|
return k.lin
|
||||||
}
|
}
|
||||||
|
|
||||||
// JSONValueMux is a version multiplexer that maps a []byte containing JSON data
|
// JSONValueMux is a version multiplexer that maps a []byte containing JSON data
|
||||||
// at any schematized dashboard version to an instance of Team.
|
// at any schematized dashboard version to an instance of Team [Resource].
|
||||||
//
|
//
|
||||||
// Validation and translation errors emitted from this func will identify the
|
// Validation and translation errors emitted from this func will identify the
|
||||||
// input bytes as "dashboard.json".
|
// input bytes as "dashboard.json".
|
||||||
//
|
//
|
||||||
// This is a thin wrapper around Thema's [vmux.ValueMux].
|
// This is a thin wrapper around Thema's [vmux.ValueMux].
|
||||||
func (k *Kind) JSONValueMux(b []byte) (*Team, thema.TranslationLacunas, error) {
|
func (k *Kind) JSONValueMux(b []byte) (*Resource, thema.TranslationLacunas, error) {
|
||||||
return k.valmux(b)
|
return k.valmux(b)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
// Generated by:
|
||||||
|
// kinds/gen.go
|
||||||
|
// Using jennies:
|
||||||
|
// GoResourceTypes
|
||||||
|
//
|
||||||
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
package team
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Metadata defines model for Metadata.
|
||||||
|
type Metadata struct {
|
||||||
|
CreatedBy string `json:"createdBy"`
|
||||||
|
CreationTimestamp time.Time `json:"creationTimestamp"`
|
||||||
|
DeletionTimestamp *time.Time `json:"deletionTimestamp,omitempty"`
|
||||||
|
|
||||||
|
// extraFields is reserved for any fields that are pulled from the API server metadata but do not have concrete fields in the CUE metadata
|
||||||
|
ExtraFields map[string]interface{} `json:"extraFields"`
|
||||||
|
Finalizers []string `json:"finalizers"`
|
||||||
|
Labels map[string]string `json:"labels"`
|
||||||
|
ResourceVersion string `json:"resourceVersion"`
|
||||||
|
Uid string `json:"uid"`
|
||||||
|
UpdateTimestamp time.Time `json:"updateTimestamp"`
|
||||||
|
UpdatedBy string `json:"updatedBy"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// _kubeObjectMetadata is metadata found in a kubernetes object's metadata field.
|
||||||
|
// It is not exhaustive and only includes fields which may be relevant to a kind's implementation,
|
||||||
|
// As it is also intended to be generic enough to function with any API Server.
|
||||||
|
type KubeObjectMetadata struct {
|
||||||
|
CreationTimestamp time.Time `json:"creationTimestamp"`
|
||||||
|
DeletionTimestamp *time.Time `json:"deletionTimestamp,omitempty"`
|
||||||
|
Finalizers []string `json:"finalizers"`
|
||||||
|
Labels map[string]string `json:"labels"`
|
||||||
|
ResourceVersion string `json:"resourceVersion"`
|
||||||
|
Uid string `json:"uid"`
|
||||||
|
}
|
|
@ -3,17 +3,12 @@
|
||||||
// Generated by:
|
// Generated by:
|
||||||
// kinds/gen.go
|
// kinds/gen.go
|
||||||
// Using jennies:
|
// Using jennies:
|
||||||
// GoTypesJenny
|
// GoResourceTypes
|
||||||
// LatestJenny
|
|
||||||
//
|
//
|
||||||
// Run 'make gen-cue' from repository root to regenerate.
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
package team
|
package team
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Defines values for Permission.
|
// Defines values for Permission.
|
||||||
const (
|
const (
|
||||||
PermissionN0 Permission = 0
|
PermissionN0 Permission = 0
|
||||||
|
@ -25,17 +20,14 @@ const (
|
||||||
// Permission defines model for Permission.
|
// Permission defines model for Permission.
|
||||||
type Permission int
|
type Permission int
|
||||||
|
|
||||||
// Team defines model for Team.
|
// Spec defines model for Spec.
|
||||||
type Team struct {
|
type Spec struct {
|
||||||
// AccessControl metadata associated with a given resource.
|
// AccessControl metadata associated with a given resource.
|
||||||
AccessControl map[string]bool `json:"accessControl,omitempty"`
|
AccessControl map[string]bool `json:"accessControl,omitempty"`
|
||||||
|
|
||||||
// AvatarUrl is the team's avatar URL.
|
// AvatarUrl is the team's avatar URL.
|
||||||
AvatarUrl *string `json:"avatarUrl,omitempty"`
|
AvatarUrl *string `json:"avatarUrl,omitempty"`
|
||||||
|
|
||||||
// Created indicates when the team was created.
|
|
||||||
Created time.Time `json:"created"`
|
|
||||||
|
|
||||||
// Email of the team.
|
// Email of the team.
|
||||||
Email *string `json:"email,omitempty"`
|
Email *string `json:"email,omitempty"`
|
||||||
|
|
||||||
|
@ -48,7 +40,4 @@ type Team struct {
|
||||||
// OrgId is the ID of an organisation the team belongs to.
|
// OrgId is the ID of an organisation the team belongs to.
|
||||||
OrgId int64 `json:"orgId"`
|
OrgId int64 `json:"orgId"`
|
||||||
Permission Permission `json:"permission"`
|
Permission Permission `json:"permission"`
|
||||||
|
|
||||||
// Updated indicates when the team was updated.
|
|
||||||
Updated time.Time `json:"updated"`
|
|
||||||
}
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
|
||||||
|
//
|
||||||
|
// Generated by:
|
||||||
|
// kinds/gen.go
|
||||||
|
// Using jennies:
|
||||||
|
// GoResourceTypes
|
||||||
|
//
|
||||||
|
// Run 'make gen-cue' from repository root to regenerate.
|
||||||
|
|
||||||
|
package team
|
||||||
|
|
||||||
|
// Defines values for OperatorStateState.
|
||||||
|
const (
|
||||||
|
OperatorStateStateFailed OperatorStateState = "failed"
|
||||||
|
OperatorStateStateInProgress OperatorStateState = "in_progress"
|
||||||
|
OperatorStateStateSuccess OperatorStateState = "success"
|
||||||
|
)
|
||||||
|
|
||||||
|
// OperatorState defines model for OperatorState.
|
||||||
|
type OperatorState struct {
|
||||||
|
// descriptiveState is an optional more descriptive state field which has no requirements on format
|
||||||
|
DescriptiveState *string `json:"descriptiveState,omitempty"`
|
||||||
|
|
||||||
|
// details contains any extra information that is operator-specific
|
||||||
|
Details map[string]interface{} `json:"details,omitempty"`
|
||||||
|
|
||||||
|
// lastEvaluation is the ResourceVersion last evaluated
|
||||||
|
LastEvaluation string `json:"lastEvaluation"`
|
||||||
|
|
||||||
|
// state describes the state of the lastEvaluation.
|
||||||
|
// It is limited to three possible states for machine evaluation.
|
||||||
|
State OperatorStateState `json:"state"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// OperatorStateState state describes the state of the lastEvaluation.
|
||||||
|
// It is limited to three possible states for machine evaluation.
|
||||||
|
type OperatorStateState string
|
||||||
|
|
||||||
|
// Status defines model for Status.
|
||||||
|
type Status struct {
|
||||||
|
// additionalFields is reserved for future use
|
||||||
|
AdditionalFields map[string]interface{} `json:"additionalFields"`
|
||||||
|
|
||||||
|
// operatorStates is a map of operator ID to operator state evaluations.
|
||||||
|
// Any operator which consumes this kind SHOULD add its state evaluation information to this field.
|
||||||
|
OperatorStates map[string]OperatorState `json:"operatorStates,omitempty"`
|
||||||
|
}
|
|
@ -22,7 +22,7 @@ type Playlist struct {
|
||||||
OrgId int64 `json:"-" db:"org_id"`
|
OrgId int64 `json:"-" db:"org_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type PlaylistDTO = playlist.Playlist
|
type PlaylistDTO = playlist.Spec
|
||||||
type PlaylistItemDTO = playlist.Item
|
type PlaylistItemDTO = playlist.Item
|
||||||
type PlaylistItemType = playlist.ItemType
|
type PlaylistItemType = playlist.ItemType
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ func GetEntitySummaryBuilder() entity.EntitySummaryBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
func summaryBuilder(ctx context.Context, uid string, body []byte) (*entity.EntitySummary, []byte, error) {
|
func summaryBuilder(ctx context.Context, uid string, body []byte) (*entity.EntitySummary, []byte, error) {
|
||||||
obj := &playlist.Playlist{}
|
obj := &playlist.Spec{}
|
||||||
err := json.Unmarshal(body, obj)
|
err := json.Unmarshal(body, obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err // unable to read object
|
return nil, nil, err // unable to read object
|
||||||
|
|
|
@ -17,7 +17,7 @@ func TestPlaylistSummary(t *testing.T) {
|
||||||
_, _, err := builder(context.Background(), "abc", []byte("{invalid json"))
|
_, _, err := builder(context.Background(), "abc", []byte("{invalid json"))
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
|
|
||||||
playlist := playlist.Playlist{
|
playlist := playlist.Spec{
|
||||||
Interval: "30s",
|
Interval: "30s",
|
||||||
Name: "test",
|
Name: "test",
|
||||||
Items: []playlist.Item{
|
Items: []playlist.Item{
|
||||||
|
|
|
@ -29,7 +29,7 @@ func GetEntitySummaryBuilder() entity.EntitySummaryBuilder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
obj := &preferences.Preferences{}
|
obj := &preferences.Spec{}
|
||||||
err := json.Unmarshal(body, obj)
|
err := json.Unmarshal(body, obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err // unable to read object
|
return nil, nil, err // unable to read object
|
||||||
|
|
|
@ -18,9 +18,7 @@ export const getMockTeam = (i = 1, overrides = {}): Team => {
|
||||||
memberCount: i,
|
memberCount: i,
|
||||||
permission: TeamPermissionLevel.Member,
|
permission: TeamPermissionLevel.Member,
|
||||||
accessControl: { isEditor: false },
|
accessControl: { isEditor: false },
|
||||||
created: '',
|
|
||||||
orgId: 0,
|
orgId: 0,
|
||||||
updated: '',
|
|
||||||
...overrides,
|
...overrides,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -14,7 +14,6 @@ const loadingTeam = {
|
||||||
memberCount: 0,
|
memberCount: 0,
|
||||||
permission: TeamPermissionLevel.Member,
|
permission: TeamPermissionLevel.Member,
|
||||||
accessControl: { isEditor: false },
|
accessControl: { isEditor: false },
|
||||||
created: '',
|
|
||||||
orgId: 0,
|
orgId: 0,
|
||||||
updated: '',
|
updated: '',
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Temporary - remove this script once the dashboard schema are mature
|
|
||||||
|
|
||||||
# Remove the appropriate ellipses from the schema to check for unspecified
|
|
||||||
# fields in the artifacts (validating "open")
|
|
||||||
|
|
||||||
# Run from root of grafana repo
|
|
||||||
CMD=${CLI:-bin/darwin-amd64/grafana-cli}
|
|
||||||
FILES=$(grep -rl '"schemaVersion": 30' devenv)
|
|
||||||
for DASH in ${FILES}; do echo "${DASH}"; ${CMD} cue validate-resource --dashboard "${DASH}"; done
|
|
Loading…
Reference in New Issue