Skip to content

Commit

Permalink
move getImageRewriteStatus query to go
Browse files Browse the repository at this point in the history
  • Loading branch information
sgalsaleh committed Jul 24, 2020
1 parent ae5cfec commit 1fc2bba
Show file tree
Hide file tree
Showing 7 changed files with 109 additions and 45 deletions.
1 change: 1 addition & 0 deletions kotsadm/pkg/apiserver/server.go
Expand Up @@ -108,6 +108,7 @@ func Start() {
r.Path("/api/v1/license/resume").Methods("OPTIONS", "PUT").HandlerFunc(handlers.ResumeInstallOnline)

r.Path("/api/v1/registry").Methods("OPTIONS", "GET").HandlerFunc(handlers.GetKotsadmRegistry)
r.Path("/api/v1/imagerewritestatus").Methods("OPTIONS", "GET").HandlerFunc(handlers.GetImageRewriteStatus)

r.Path("/api/v1/metadata").Methods("OPTIONS", "GET").HandlerFunc(handlers.Metadata)
r.Path("/api/v1/app/{appSlug}/registry").Methods("OPTIONS", "PUT").HandlerFunc(handlers.UpdateAppRegistry)
Expand Down
51 changes: 51 additions & 0 deletions kotsadm/pkg/handlers/image_rewrite_status.go
@@ -0,0 +1,51 @@
package handlers

import (
"net/http"

"github.com/replicatedhq/kots/kotsadm/pkg/logger"
"github.com/replicatedhq/kots/kotsadm/pkg/session"
"github.com/replicatedhq/kots/kotsadm/pkg/task"
)

type GetImageRewriteStatusResponse struct {
Status string `json:"status"`
CurrentMessage string `json:"currentMessage"`
}

func GetImageRewriteStatus(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Headers", "content-type, origin, accept, authorization")

if r.Method == "OPTIONS" {
w.WriteHeader(200)
return
}

sess, err := session.Parse(r.Header.Get("Authorization"))
if err != nil {
logger.Error(err)
w.WriteHeader(401)
return
}

// we don't currently have roles, all valid tokens are valid sessions
if sess == nil || sess.ID == "" {
w.WriteHeader(401)
return
}

status, message, err := task.GetTaskStatus("image-rewrite")
if err != nil {
logger.Error(err)
w.WriteHeader(500)
return
}

getImageRewriteStatusResponse := GetImageRewriteStatusResponse{
Status: status,
CurrentMessage: message,
}

JSON(w, 200, getImageRewriteStatusResponse)
}
6 changes: 3 additions & 3 deletions kotsadm/pkg/handlers/license.go
Expand Up @@ -97,7 +97,7 @@ func SyncLicense(w http.ResponseWriter, r *http.Request) {
sess, err := session.Parse(r.Header.Get("Authorization"))
if err != nil {
logger.Error(err)
w.WriteHeader(500)
w.WriteHeader(401)
return
}

Expand Down Expand Up @@ -245,7 +245,7 @@ func UploadNewLicense(w http.ResponseWriter, r *http.Request) {
sess, err := session.Parse(r.Header.Get("Authorization"))
if err != nil {
logger.Error(err)
w.WriteHeader(500)
w.WriteHeader(401)
return
}

Expand Down Expand Up @@ -387,7 +387,7 @@ func ResumeInstallOnline(w http.ResponseWriter, r *http.Request) {
if err != nil {
logger.Error(err)
resumeInstallOnlineResponse.Error = err.Error()
JSON(w, 500, resumeInstallOnlineResponse)
JSON(w, 401, resumeInstallOnlineResponse)
return
}

Expand Down
2 changes: 1 addition & 1 deletion kotsadm/pkg/handlers/registry.go
Expand Up @@ -86,7 +86,7 @@ func UpdateAppRegistry(w http.ResponseWriter, r *http.Request) {
return
}

currentStatus, err := task.GetTaskStatus("image-rewrite")
currentStatus, _, err := task.GetTaskStatus("image-rewrite")
if err != nil {
logger.Error(err)
updateAppRegistryResponse.Error = err.Error()
Expand Down
18 changes: 10 additions & 8 deletions kotsadm/pkg/task/task.go
Expand Up @@ -45,19 +45,21 @@ func ClearTaskStatus(id string) error {
return nil
}

func GetTaskStatus(id string) (string, error) {
func GetTaskStatus(id string) (string, string, error) {
db := persistence.MustGetPGSession()
query := `select status from api_task_status where id = $1 AND updated_at > ($2::timestamp - '10 seconds'::interval)`

query := `select status, current_message from api_task_status where id = $1 AND updated_at > ($2::timestamp - '10 seconds'::interval)`
row := db.QueryRow(query, id, time.Now())
status := ""
if err := row.Scan(&status); err != nil {

var status sql.NullString
var message sql.NullString

if err := row.Scan(&status, &message); err != nil {
if err == sql.ErrNoRows {
return "", nil
return "", "", nil
}

return "", errors.Wrap(err, "failed to scan task status")
return "", "", errors.Wrap(err, "failed to scan task status")
}

return status, nil
return status.String, message.String, nil
}
2 changes: 1 addition & 1 deletion kotsadm/pkg/updatechecker/updatechecker.go
Expand Up @@ -143,7 +143,7 @@ func Stop(appID string) {
// if "deploy" is set to true, the latest version/update will be deployed
// returns the number of available updates
func CheckForUpdates(appID string, deploy bool) (int64, error) {
currentStatus, err := task.GetTaskStatus("update-download")
currentStatus, _, err := task.GetTaskStatus("update-download")
if err != nil {
return 0, errors.Wrap(err, "failed to get task status")
}
Expand Down
74 changes: 42 additions & 32 deletions kotsadm/web/src/components/shared/AirgapRegistrySettings.jsx
Expand Up @@ -206,46 +206,56 @@ class AirgapRegistrySettings extends Component {
}

triggerStatusUpdates = () => {
this.props.client.query({
query: getImageRewriteStatus,
variables: {},
fetchPolicy: "no-cache",
}).then((res) => {
this.setState({
rewriteStatus: res.data.getImageRewriteStatus.status,
rewriteMessage: res.data.getImageRewriteStatus.currentMessage,
fetch(`${window.env.API_ENDPOINT}/imagerewritestatus`, {
headers: {
"Authorization": Utilities.getToken(),
"Content-Type": "application/json",
},
method: "GET",
})
.then(async (response) => {
const res = await response.json();
this.setState({
rewriteStatus: res.status,
rewriteMessage: res.currentMessage,
});
if (res.status !== "running") {
return;
}
this.state.updateChecker.start(this.updateStatus, 1000);
})
.catch((err) => {
console.log("failed to get rewrite status", err);
});
if (res.data.getImageRewriteStatus.status !== "running") {
return;
}
this.state.updateChecker.start(this.updateStatus, 1000);
}).catch((err) => {
console.log("failed to get rewrite status", err);
});
}

updateStatus = () => {
return new Promise((resolve, reject) => {
this.props.client.query({
query: getImageRewriteStatus,
fetchPolicy: "no-cache",
}).then((res) => {

this.setState({
rewriteStatus: res.data.getImageRewriteStatus.status,
rewriteMessage: res.data.getImageRewriteStatus.currentMessage,
});
fetch(`${window.env.API_ENDPOINT}/imagerewritestatus`, {
headers: {
"Authorization": Utilities.getToken(),
"Content-Type": "application/json",
},
method: "GET",
})
.then(async (response) => {
const res = await response.json();

if (res.data.getImageRewriteStatus.status !== "running") {
this.state.updateChecker.stop();
}
this.setState({
rewriteStatus: res.status,
rewriteMessage: res.currentMessage,
});

resolve();
if (res.status !== "running") {
this.state.updateChecker.stop();
}

}).catch((err) => {
console.log("failed to get rewrite status", err);
reject();
})
resolve();
})
.catch((err) => {
console.log("failed to get rewrite status", err);
reject();
});
});
}

Expand Down

0 comments on commit 1fc2bba

Please sign in to comment.