in internal/flink/client.go [219:270]
func (c *Client) GetSavepointStatus(
apiBaseURL string, jobID string, triggerID string) (*SavepointStatus, error) {
var url = fmt.Sprintf("%s/jobs/%s/savepoints/%s", apiBaseURL, jobID, triggerID)
var status = &SavepointStatus{JobID: jobID, TriggerID: triggerID}
var rootJSON map[string]*json.RawMessage
var stateID SavepointStateID
var opJSON map[string]*json.RawMessage
resp, err := c.httpClient.Get(url)
if err != nil {
return nil, err
}
err = parseJson(resp, &rootJSON)
if err != nil {
return nil, err
}
c.log.Info("Savepoint status json", "json", rootJSON)
if state, ok := rootJSON["status"]; ok && state != nil {
err = json.Unmarshal(*state, &stateID)
if err != nil {
return nil, err
}
if stateID.ID == savepointStateCompleted {
status.Completed = true
} else {
status.Completed = false
}
}
if op, ok := rootJSON["operation"]; ok && op != nil {
err = json.Unmarshal(*op, &opJSON)
if err != nil {
return nil, err
}
// Success
if location, ok := opJSON["location"]; ok && location != nil {
err = json.Unmarshal(*location, &status.Location)
if err != nil {
return nil, err
}
}
// Failure
if failureCause, ok := opJSON["failure-cause"]; ok && failureCause != nil {
err = json.Unmarshal(*failureCause, &status.FailureCause)
if err != nil {
return nil, err
}
}
}
return status, err
}