-
Notifications
You must be signed in to change notification settings - Fork 949
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feature: error stream for cri stream server
Signed-off-by: YaoZengzeng <yaozengzeng@zju.edu.cn>
- Loading branch information
1 parent
8ac4b7c
commit 5d979ab
Showing
8 changed files
with
205 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package stream | ||
|
||
// NOTE: the code in this package and its subpackage is almost copy from | ||
// kubernete's official code base and make some modification to satisify | ||
// our need. | ||
// The reason why we do this is not to vendor so many packages which most | ||
// code is useless and we want to keep pouch simple and clean :) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
package remotecommand | ||
|
||
import ( | ||
"fmt" | ||
"net/http" | ||
) | ||
|
||
// Values of Status.Status | ||
const ( | ||
StatusSuccess = "Success" | ||
StatusFailure = "Failure" | ||
) | ||
|
||
// StatusReason is an enumeration of possible failure causes. Each StatusReason | ||
// must map to a single HTTP status code, but multiple reasons may map | ||
// to the same HTTP status code. | ||
// TODO: move to apiserver | ||
type StatusReason string | ||
|
||
const ( | ||
// NonZeroExitCodeReason indicates that the command executing failed with non zero exit code. | ||
NonZeroExitCodeReason StatusReason = "NonZeroExitCode" | ||
|
||
// StatusReasonInternalError indicates that an internal error occurred, it is unexpected | ||
// and the outcome of the call is unknown. | ||
// Details (optional): | ||
// "causes" - The original error | ||
// Status code 500 | ||
StatusReasonInternalError StatusReason = "InternalError" | ||
) | ||
|
||
// CauseType is a machine readable value providing more detail about what | ||
// occurred in a status response. An operation may have multiple causes for a | ||
// status (whether Failure or Success). | ||
type CauseType string | ||
|
||
const ( | ||
// ExitCodeCauseType indicates that the status cause is the command's exit code is not zero. | ||
ExitCodeCauseType CauseType = "ExitCode" | ||
) | ||
|
||
// StatusCause provides more information about an api.Status failure, including | ||
// cases when multiple errors are encountered. | ||
type StatusCause struct { | ||
// A machine-readable description of the cause of the error. If this value is | ||
// empty there is no information available. | ||
// +optional | ||
Type CauseType `json:"reason,omitempty" protobuf:"bytes,1,opt,name=reason,casttype=CauseType"` | ||
// A human-readable description of the cause of the error. This field may be | ||
// presented as-is to a reader. | ||
// +optional | ||
Message string `json:"message,omitempty" protobuf:"bytes,2,opt,name=message"` | ||
} | ||
|
||
// StatusDetails is a set of additional properties that MAY be set by the | ||
// server to provide additional information about a response. The Reason | ||
// field of a Status object defines what attributes will be set. Clients | ||
// must ignore fields that do not match the defined type of each attribute, | ||
// and should assume that any attribute may be empty, invalid, or under | ||
// defined. | ||
type StatusDetails struct { | ||
Causes []StatusCause `json:"causes,omitempty" protobuf:"bytes,4,rep,name=causes"` | ||
} | ||
|
||
// 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". | ||
// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status | ||
// +optional | ||
Status string `json:"status,omitempty" protobuf:"bytes,2,opt,name=status"` | ||
// A human-readable description of the status of this operation. | ||
// +optional | ||
Message string `json:"message,omitempty" protobuf:"bytes,3,opt,name=message"` | ||
// 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 StatusReason `json:"reason,omitempty" protobuf:"bytes,4,opt,name=reason,casttype=StatusReason"` | ||
// 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 *StatusDetails `json:"details,omitempty" protobuf:"bytes,5,opt,name=details"` | ||
// Suggested HTTP return code for this status, 0 if not set. | ||
// +optional | ||
Code int32 `json:"code,omitempty" protobuf:"varint,6,opt,name=code"` | ||
} | ||
|
||
// StatusError is an error intended for consumption by a REST API server; it can also be | ||
// reconstructed by clients from a REST response. Public to allow easy type switches. | ||
type StatusError struct { | ||
ErrStatus Status | ||
} | ||
|
||
var _ error = &StatusError{} | ||
|
||
// Error implements the Error interface. | ||
func (e *StatusError) Error() string { | ||
return e.ErrStatus.Message | ||
} | ||
|
||
// Status allows access to e's status without having to know the detailed workings | ||
// of StatusError. | ||
func (e *StatusError) Status() Status { | ||
return e.ErrStatus | ||
} | ||
|
||
// NewInternalError returns an error indicating the item is invalid and cannot be processed. | ||
func NewInternalError(err error) *StatusError { | ||
return &StatusError{Status{ | ||
Status: StatusFailure, | ||
Code: http.StatusInternalServerError, | ||
Reason: StatusReasonInternalError, | ||
Details: &StatusDetails{ | ||
Causes: []StatusCause{{Message: err.Error()}}, | ||
}, | ||
Message: fmt.Sprintf("Internal error occurred: %v", err), | ||
}} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters