Skip to content

Commit

Permalink
fix downstream output struct (#1073)
Browse files Browse the repository at this point in the history
* fix downstream output struct
  • Loading branch information
sgalsaleh committed Sep 5, 2020
1 parent 42d3a8d commit 45ec707
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 17 deletions.
2 changes: 0 additions & 2 deletions kotsadm/pkg/downstream/types/types.go
Expand Up @@ -32,8 +32,6 @@ type DownstreamVersion struct {
}

type DownstreamOutput struct {
AppID string `json:"appId"`
IsError bool `json:"isError"`
DryrunStdout string `json:"dryrunStdout"`
DryrunStderr string `json:"dryrunStderr"`
ApplyStdout string `json:"applyStdout"`
Expand Down
44 changes: 33 additions & 11 deletions kotsadm/pkg/handlers/deploy.go
Expand Up @@ -18,6 +18,21 @@ import (
"go.uber.org/zap"
)

type UpdateDeployResultRequest struct {
AppID string `json:"appId"`
IsError bool `json:"isError"`
DryrunStdout string `json:"dryrunStdout"`
DryrunStderr string `json:"dryrunStderr"`
ApplyStdout string `json:"applyStdout"`
ApplyStderr string `json:"applyStderr"`
RenderError string `json:"renderError"`
}

type UpdateUndeployResultRequest struct {
AppID string `json:"appId"`
IsError bool `json:"isError"`
}

func DeployAppVersion(w http.ResponseWriter, r *http.Request) {
appSlug := mux.Vars(r)["appSlug"]
sequence, err := strconv.Atoi(mux.Vars(r)["sequence"])
Expand Down Expand Up @@ -59,23 +74,23 @@ func UpdateDeployResult(w http.ResponseWriter, r *http.Request) {
return
}

output := downstreamtypes.DownstreamOutput{}
err = json.NewDecoder(r.Body).Decode(&output)
updateDeployResultRequest := UpdateDeployResultRequest{}
err = json.NewDecoder(r.Body).Decode(&updateDeployResultRequest)
if err != nil {
logger.Error(err)
w.WriteHeader(http.StatusInternalServerError)
return
}

// sequence really should be passed down to operator and returned from it
currentSequence, err := downstream.GetCurrentSequence(output.AppID, clusterID)
currentSequence, err := downstream.GetCurrentSequence(updateDeployResultRequest.AppID, clusterID)
if err != nil {
logger.Error(err)
w.WriteHeader(http.StatusInternalServerError)
return
}

alreadySuccessful, err := downstream.IsDownstreamDeploySuccessful(output.AppID, clusterID, currentSequence)
alreadySuccessful, err := downstream.IsDownstreamDeploySuccessful(updateDeployResultRequest.AppID, clusterID, currentSequence)
if err != nil {
logger.Error(err)
w.WriteHeader(http.StatusInternalServerError)
Expand All @@ -87,7 +102,14 @@ func UpdateDeployResult(w http.ResponseWriter, r *http.Request) {
return
}

err = downstream.UpdateDownstreamDeployStatus(output.AppID, clusterID, currentSequence, output.IsError, output)
downstreamOutput := downstreamtypes.DownstreamOutput{
DryrunStdout: updateDeployResultRequest.DryrunStdout,
DryrunStderr: updateDeployResultRequest.DryrunStderr,
ApplyStdout: updateDeployResultRequest.ApplyStdout,
ApplyStderr: updateDeployResultRequest.ApplyStderr,
RenderError: updateDeployResultRequest.RenderError,
}
err = downstream.UpdateDownstreamDeployStatus(updateDeployResultRequest.AppID, clusterID, currentSequence, updateDeployResultRequest.IsError, downstreamOutput)
if err != nil {
logger.Error(err)
w.WriteHeader(http.StatusInternalServerError)
Expand All @@ -114,26 +136,26 @@ func UpdateUndeployResult(w http.ResponseWriter, r *http.Request) {
return
}

output := downstreamtypes.DownstreamOutput{}
err = json.NewDecoder(r.Body).Decode(&output)
updateUndeployResultRequest := UpdateUndeployResultRequest{}
err = json.NewDecoder(r.Body).Decode(&updateUndeployResultRequest)
if err != nil {
logger.Error(err)
w.WriteHeader(http.StatusInternalServerError)
return
}

var status apptypes.UndeployStatus
if output.IsError {
if updateUndeployResultRequest.IsError {
status = apptypes.UndeployFailed
} else {
status = apptypes.UndeployCompleted
}

logger.Info("restore API set undeploy status",
zap.String("status", string(status)),
zap.String("appID", output.AppID))
zap.String("appID", updateUndeployResultRequest.AppID))

foundApp, err := store.GetStore().GetApp(output.AppID)
foundApp, err := store.GetStore().GetApp(updateUndeployResultRequest.AppID)
if err != nil {
err = errors.Wrap(err, "failed to get app")
logger.Error(err)
Expand All @@ -144,7 +166,7 @@ func UpdateUndeployResult(w http.ResponseWriter, r *http.Request) {
if foundApp.RestoreInProgressName != "" {
go func() {
<-time.After(20 * time.Second)
err = app.SetRestoreUndeployStatus(output.AppID, status)
err = app.SetRestoreUndeployStatus(updateUndeployResultRequest.AppID, status)
if err != nil {
err = errors.Wrap(err, "failed to set app undeploy status")
logger.Error(err)
Expand Down
24 changes: 23 additions & 1 deletion kotsadm/pkg/handlers/downstream.go
Expand Up @@ -10,6 +10,17 @@ import (
"github.com/replicatedhq/kots/kotsadm/pkg/store"
)

type GetDownstreamOutputResponse struct {
Logs DownstreamLogs `json:"logs"`
}
type DownstreamLogs struct {
DryrunStdout string `json:"dryrunStdout"`
DryrunStderr string `json:"dryrunStderr"`
ApplyStdout string `json:"applyStdout"`
ApplyStderr string `json:"applyStderr"`
RenderError string `json:"renderError"`
}

func GetDownstreamOutput(w http.ResponseWriter, r *http.Request) {
appSlug := mux.Vars(r)["appSlug"]
clusterID := mux.Vars(r)["clusterId"]
Expand All @@ -34,5 +45,16 @@ func GetDownstreamOutput(w http.ResponseWriter, r *http.Request) {
return
}

JSON(w, http.StatusOK, output)
downstreamLogs := DownstreamLogs{
DryrunStdout: output.DryrunStdout,
DryrunStderr: output.DryrunStderr,
ApplyStdout: output.ApplyStdout,
ApplyStderr: output.ApplyStderr,
RenderError: output.RenderError,
}
getDownstreamOutputResponse := GetDownstreamOutputResponse{
Logs: downstreamLogs,
}

JSON(w, http.StatusOK, getDownstreamOutputResponse)
}
6 changes: 3 additions & 3 deletions kotsadm/web/src/components/apps/AppVersionHistory.jsx
Expand Up @@ -584,9 +584,9 @@ class AppVersionHistory extends Component {
method: "GET",
});
if (res.ok && res.status === 200) {
const logs = await res.json();
const selectedTab = Object.keys(logs)[0];
this.setState({ logs, selectedTab, logsLoading: false, viewLogsErrMsg: "" });
const response = await res.json();
const selectedTab = Object.keys(response.logs)[0];
this.setState({ logs: response.logs, selectedTab, logsLoading: false, viewLogsErrMsg: "" });
} else {
this.setState({ logsLoading: false, viewLogsErrMsg: `Failed to view logs, unexpected status code, ${res.status}` });
}
Expand Down

0 comments on commit 45ec707

Please sign in to comment.