# Copyright 2019 The Knative Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Note: The schema part of the spec is auto-generated by hack/update-schemas.sh.

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: metrics.autoscaling.internal.knative.dev
  labels:
    knative.dev/crd-install: "true"
    serving.knative.dev/release: "v1.0.0"
spec:
  group: autoscaling.internal.knative.dev
  names:
    kind: Metric
    categories:
    - knative-internal
    - autoscaling
    plural: metrics
    singular: metric
  scope: Namespaced
  versions:
  - name: v1alpha1
    additionalPrinterColumns:
    - name: Ready
      type: string
      jsonPath: ".status.conditions[?(@.type=='Ready')].status"
    - name: Reason
      type: string
      jsonPath: ".status.conditions[?(@.type=='Ready')].reason"
    schema:
      openAPIV3Schema:
        type: object
        description: Metric represents a resource to configure the metric collector with.
        properties:
          apiVersion:
            type: string
            description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
          kind:
            type: string
            description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
          metadata:
            type: object
          spec:
            type: object
            description: Spec holds the desired state of the Metric (from the client).
            properties:
              panicWindow:
                type: integer
                description: PanicWindow is the aggregation window for metrics where quick reactions are needed.
                format: int64
              scrapeTarget:
                type: string
                description: ScrapeTarget is the K8s service that publishes the metric endpoint.
              stableWindow:
                type: integer
                description: StableWindow is the aggregation window for metrics in a stable state.
                format: int64
            required:
            - panicWindow
            - scrapeTarget
            - stableWindow
          status:
            type: object
            description: Status communicates the observed state of the Metric (from the controller).
            properties:
              annotations:
                type: object
                additionalProperties:
                  type: string
                description: Annotations is additional Status fields for the Resource to save some additional State as well as convey more information to the user. This is roughly akin to Annotations on any k8s resource, just the reconciler conveying richer information outwards.
              conditions:
                type: array
                description: Conditions the latest available observations of a resource's current state.
                items:
                  type: object
                  description: 'Condition defines a readiness condition for a Knative resource. See: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties'
                  properties:
                    type:
                      type: string
                      description: Type of condition.
                    status:
                      type: string
                      description: Status of the condition, one of True, False, Unknown.
                    lastTransitionTime:
                      type: string
                      description: LastTransitionTime is the last time the condition transitioned from one status to another. We use VolatileTime in place of metav1.Time to exclude this from creating equality.Semantic differences (all other things held constant).
                      format: date-time
                    message:
                      type: string
                      description: A human readable message indicating details about the transition.
                    reason:
                      type: string
                      description: The reason for the condition's last transition.
                    severity:
                      type: string
                      description: Severity with which to treat failures of this type of condition. When this is not specified, it defaults to Error.
                  required:
                  - status
                  - type
              observedGeneration:
                type: integer
                description: ObservedGeneration is the 'Generation' of the Service that was last processed by the controller.
                format: int64
    served: true
    storage: true
    subresources:
      status: {}
