Signed-off-by: Evan Hazlett <ejhazlett@gmail.com> events: update events package to include emitter and use envelope proto Signed-off-by: Evan Hazlett <ejhazlett@gmail.com> events: add events service Signed-off-by: Evan Hazlett <ejhazlett@gmail.com> events: enable events service and update ctr events to use events service Signed-off-by: Evan Hazlett <ejhazlett@gmail.com> event listeners Signed-off-by: Evan Hazlett <ejhazlett@gmail.com> events: helper func for emitting in services Signed-off-by: Evan Hazlett <ejhazlett@gmail.com> events: improved cli for containers and tasks Signed-off-by: Evan Hazlett <ejhazlett@gmail.com> create event envelope with poster Signed-off-by: Evan Hazlett <ejhazlett@gmail.com> events: introspect event data to use for type url Signed-off-by: Evan Hazlett <ejhazlett@gmail.com> events: use pb encoding; add event types Signed-off-by: Evan Hazlett <ejhazlett@gmail.com> events: instrument content and snapshot services with events Signed-off-by: Evan Hazlett <ejhazlett@gmail.com> events: instrument image service with events Signed-off-by: Evan Hazlett <ejhazlett@gmail.com> events: instrument namespace service with events Signed-off-by: Evan Hazlett <ejhazlett@gmail.com> events: add namespace support Signed-off-by: Evan Hazlett <ejhazlett@gmail.com> events: only send events from namespace requested from client Signed-off-by: Evan Hazlett <ejhazlett@gmail.com> events: switch to go-events for broadcasting Signed-off-by: Evan Hazlett <ejhazlett@gmail.com>
93 lines
1.8 KiB
Go
93 lines
1.8 KiB
Go
package events
|
|
|
|
import (
|
|
"path"
|
|
"strings"
|
|
|
|
"github.com/containerd/containerd/api/types/event"
|
|
"github.com/gogo/protobuf/proto"
|
|
protobuf "github.com/gogo/protobuf/types"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
func getUrl(name string) string {
|
|
base := "types.containerd.io"
|
|
return path.Join(base, strings.Join([]string{
|
|
"containerd",
|
|
EventVersion,
|
|
"types",
|
|
"event",
|
|
name,
|
|
}, "."))
|
|
}
|
|
|
|
func convertToAny(evt Event) (*protobuf.Any, error) {
|
|
url := ""
|
|
var pb proto.Message
|
|
switch v := evt.(type) {
|
|
case event.ContainerCreate:
|
|
url = getUrl("ContainerCreate")
|
|
pb = &v
|
|
case event.ContainerDelete:
|
|
url = getUrl("ContainerDelete")
|
|
pb = &v
|
|
case event.TaskCreate:
|
|
url = getUrl("TaskCreate")
|
|
pb = &v
|
|
case event.TaskStart:
|
|
url = getUrl("TaskStart")
|
|
pb = &v
|
|
case event.TaskDelete:
|
|
url = getUrl("TaskDelete")
|
|
pb = &v
|
|
case event.ContentDelete:
|
|
url = getUrl("ContentDelete")
|
|
pb = &v
|
|
case event.SnapshotPrepare:
|
|
url = getUrl("SnapshotPrepare")
|
|
pb = &v
|
|
case event.SnapshotCommit:
|
|
url = getUrl("SnapshotCommit")
|
|
pb = &v
|
|
case event.SnapshotRemove:
|
|
url = getUrl("SnapshotRemove")
|
|
pb = &v
|
|
case event.ImagePut:
|
|
url = getUrl("ImagePut")
|
|
pb = &v
|
|
case event.ImageDelete:
|
|
url = getUrl("ImageDelete")
|
|
pb = &v
|
|
case event.NamespaceCreate:
|
|
url = getUrl("NamespaceCreate")
|
|
pb = &v
|
|
case event.NamespaceUpdate:
|
|
url = getUrl("NamespaceUpdate")
|
|
pb = &v
|
|
case event.NamespaceDelete:
|
|
url = getUrl("NamespaceDelete")
|
|
pb = &v
|
|
case event.RuntimeCreate:
|
|
url = getUrl("RuntimeCreate")
|
|
pb = &v
|
|
case event.RuntimeEvent:
|
|
url = getUrl("RuntimeEvent")
|
|
pb = &v
|
|
case event.RuntimeDelete:
|
|
url = getUrl("RuntimeDelete")
|
|
pb = &v
|
|
default:
|
|
return nil, errors.Errorf("unsupported event type: %T", v)
|
|
}
|
|
|
|
val, err := proto.Marshal(pb)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &protobuf.Any{
|
|
TypeUrl: url,
|
|
Value: val,
|
|
}, nil
|
|
}
|