mirror of
https://gitee.com/rainbond/Rainbond.git
synced 2024-12-05 21:27:47 +08:00
92 lines
2.8 KiB
Go
92 lines
2.8 KiB
Go
|
// RAINBOND, Application Management Platform
|
||
|
// Copyright (C) 2014-2017 Goodrain Co., Ltd.
|
||
|
|
||
|
// This program is free software: you can redistribute it and/or modify
|
||
|
// it under the terms of the GNU General Public License as published by
|
||
|
// the Free Software Foundation, either version 3 of the License, or
|
||
|
// (at your option) any later version. For any non-GPL usage of Rainbond,
|
||
|
// one or multiple Commercial Licenses authorized by Goodrain Co., Ltd.
|
||
|
// must be obtained first.
|
||
|
|
||
|
// This program is distributed in the hope that it will be useful,
|
||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
// GNU General Public License for more details.
|
||
|
|
||
|
// You should have received a copy of the GNU General Public License
|
||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
|
||
|
package watch
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/coreos/etcd/clientv3"
|
||
|
"github.com/coreos/etcd/mvcc/mvccpb"
|
||
|
)
|
||
|
|
||
|
type event struct {
|
||
|
key string
|
||
|
value []byte
|
||
|
prevValue []byte
|
||
|
rev int64
|
||
|
isDeleted bool
|
||
|
isCreated bool
|
||
|
}
|
||
|
|
||
|
// parseKV converts a KeyValue retrieved from an initial sync() listing to a synthetic isCreated event.
|
||
|
func parseKV(kv *mvccpb.KeyValue) *event {
|
||
|
return &event{
|
||
|
key: string(kv.Key),
|
||
|
value: kv.Value,
|
||
|
prevValue: nil,
|
||
|
rev: kv.ModRevision,
|
||
|
isDeleted: false,
|
||
|
isCreated: true,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func parseEvent(e *clientv3.Event) *event {
|
||
|
ret := &event{
|
||
|
key: string(e.Kv.Key),
|
||
|
value: e.Kv.Value,
|
||
|
rev: e.Kv.ModRevision,
|
||
|
isDeleted: e.Type == clientv3.EventTypeDelete,
|
||
|
isCreated: e.IsCreate(),
|
||
|
}
|
||
|
if e.PrevKv != nil {
|
||
|
ret.prevValue = e.PrevKv.Value
|
||
|
}
|
||
|
return ret
|
||
|
}
|
||
|
|
||
|
// Status is a return value for calls that don't return other objects.
|
||
|
type Status struct {
|
||
|
// Status of the operation.
|
||
|
// One of: "Success" or "Failure".
|
||
|
// +optional
|
||
|
Status string `json:"status,omitempty"`
|
||
|
// A human-readable description of the status of this operation.
|
||
|
// +optional
|
||
|
Message string `json:"message,omitempty"`
|
||
|
// A machine-readable description of why this operation is in the
|
||
|
// "Failure" status. If this value is empty there
|
||
|
// is no information available. A Reason clarifies an HTTP status
|
||
|
// code but does not override it.
|
||
|
// +optional
|
||
|
Reason string `json:"reason,omitempty"`
|
||
|
// Extended data associated with the reason. Each reason may define its
|
||
|
// own extended details. This field is optional and the data returned
|
||
|
// is not guaranteed to conform to any schema except that defined by
|
||
|
// the reason type.
|
||
|
// +optional
|
||
|
Details *string `json:"details,omitempty" `
|
||
|
// Suggested HTTP return code for this status, 0 if not set.
|
||
|
// +optional
|
||
|
Code int32 `json:"code,omitempty"`
|
||
|
}
|
||
|
|
||
|
func (s Status) Error() string {
|
||
|
return fmt.Sprintf("(%d)Status:%s Message:%s Reason:%s", s.Code, s.Status, s.Message, s.Reason)
|
||
|
}
|