76 lines
1.6 KiB
Go
76 lines
1.6 KiB
Go
package ecs
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/docker/docker/api/types"
|
|
)
|
|
|
|
// Task is the ECS task representation
|
|
type Task struct {
|
|
Cluster string
|
|
TaskARN string
|
|
Family string
|
|
Revision string
|
|
DesiredStatus string
|
|
KnownStatus string
|
|
Containers []Container
|
|
Limits map[string]float64
|
|
PullStartedAt time.Time
|
|
PullStoppedAt time.Time
|
|
}
|
|
|
|
// Container is the ECS metadata container representation
|
|
type Container struct {
|
|
ID string `json:"DockerId"`
|
|
Name string
|
|
DockerName string
|
|
Image string
|
|
ImageID string
|
|
Labels map[string]string
|
|
DesiredStatus string
|
|
KnownStatus string
|
|
Limits map[string]float64
|
|
CreatedAt time.Time
|
|
StartedAt time.Time
|
|
Stats types.StatsJSON
|
|
Type string
|
|
Networks []Network
|
|
}
|
|
|
|
// Network is a docker network configuration
|
|
type Network struct {
|
|
NetworkMode string
|
|
IPv4Addresses []string
|
|
}
|
|
|
|
func unmarshalTask(r io.Reader) (*Task, error) {
|
|
task := &Task{}
|
|
err := json.NewDecoder(r).Decode(task)
|
|
return task, err
|
|
}
|
|
|
|
// docker parsers
|
|
func unmarshalStats(r io.Reader) (map[string]types.StatsJSON, error) {
|
|
var statsMap map[string]types.StatsJSON
|
|
err := json.NewDecoder(r).Decode(&statsMap)
|
|
return statsMap, err
|
|
}
|
|
|
|
// interleaves Stats in to the Container objects in the Task
|
|
func mergeTaskStats(task *Task, stats map[string]types.StatsJSON) {
|
|
for i, c := range task.Containers {
|
|
if strings.Trim(c.ID, " ") == "" {
|
|
continue
|
|
}
|
|
stat, ok := stats[c.ID]
|
|
if !ok {
|
|
continue
|
|
}
|
|
task.Containers[i].Stats = stat
|
|
}
|
|
}
|