func()

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
}