ecs-agent/introspection/v1/response.go (85 lines of code) (raw):
// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"). You may
// not use this file except in compliance with the License. A copy of the
// License is located at
//
// http://aws.amazon.com/apache2.0/
//
// or in the "license" file accompanying this file. This file 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.
package v1
import (
"net/http"
"time"
"github.com/aws/amazon-ecs-agent/ecs-agent/metrics"
"github.com/aws/amazon-ecs-agent/ecs-agent/tmds/handlers/response"
)
// AgentMetadataResponse is the schema for the metadata response JSON object.
type AgentMetadataResponse struct {
Cluster string `json:"Cluster"`
ContainerInstanceArn *string `json:"ContainerInstanceArn"`
Version string `json:"Version"`
}
// UnversionedAgentMetadataResponse is the schema for the metadata response JSON object
// without the agent version.
type UnversionedAgentMetadataResponse struct {
Cluster string `json:"Cluster"`
ContainerInstanceArn *string `json:"ContainerInstanceArn"`
}
// TaskResponse is the schema for the task response JSON object.
type TaskResponse struct {
Arn string `json:"Arn"`
DesiredStatus string `json:"DesiredStatus,omitempty"`
KnownStatus string `json:"KnownStatus"`
Family string `json:"Family"`
Version string `json:"Version"`
Containers []ContainerResponse `json:"Containers"`
}
// TasksResponse is the schema for the tasks response JSON object.
type TasksResponse struct {
Tasks []*TaskResponse `json:"Tasks"`
}
// ContainerResponse is the schema for the container response JSON object.
type ContainerResponse struct {
DockerID string `json:"DockerId"`
DockerName string `json:"DockerName"`
Name string `json:"Name"`
Image string `json:"Image"`
ImageID string `json:"ImageID"`
CreatedAt *time.Time `json:"CreatedAt,omitempty"`
StartedAt *time.Time `json:"StartedAt,omitempty"`
Ports []response.PortResponse `json:"Ports,omitempty"`
Networks []response.Network `json:"Networks,omitempty"`
Volumes []response.VolumeResponse `json:"Volumes,omitempty"`
RestartCount *int `json:"RestartCount,omitempty"`
}
// ErrorMultipleTasksFound should be returned when a task cannot be uniquely identified for a given request.
type ErrorMultipleTasksFound struct {
externalReason string
}
func NewErrorMultipleTasksFound(externalReason string) *ErrorMultipleTasksFound {
return &ErrorMultipleTasksFound{externalReason: externalReason}
}
func (e *ErrorMultipleTasksFound) Error() string {
return e.externalReason
}
// StatusCode is the http status code that will appear in the response header when this
// error is thrown.
func (e *ErrorMultipleTasksFound) StatusCode() int {
return http.StatusBadRequest
}
// MetricName is the metric that will be fired when this error occurs.
func (e *ErrorMultipleTasksFound) MetricName() string {
return metrics.IntrospectionBadRequest
}
// ErrorNotFound should be returned when the requested metadata cannot be found.
type ErrorNotFound struct {
externalReason string
}
func NewErrorNotFound(externalReason string) *ErrorNotFound {
return &ErrorNotFound{externalReason: externalReason}
}
func (e *ErrorNotFound) Error() string {
return e.externalReason
}
// StatusCode is the http status code that will appear in the response header when this
// error is thrown.
func (e *ErrorNotFound) StatusCode() int {
return http.StatusNotFound
}
// MetricName is the metric that will be fired when this error occurs.
func (e *ErrorNotFound) MetricName() string {
return metrics.IntrospectionNotFound
}
// ErrorFetchFailure is a general "catch-all" error to be returned when metadata could not be
// fetched for some reason.
type ErrorFetchFailure struct {
externalReason string
}
func NewErrorFetchFailure(externalReason string) *ErrorFetchFailure {
return &ErrorFetchFailure{externalReason: externalReason}
}
func (e *ErrorFetchFailure) Error() string {
return e.externalReason
}
// StatusCode is the http status code that will appear in the response header when this
// error is thrown.
func (e *ErrorFetchFailure) StatusCode() int {
return http.StatusInternalServerError
}
// MetricName is the metric that will be fired when this error occurs.
func (e *ErrorFetchFailure) MetricName() string {
return metrics.IntrospectionFetchFailure
}