fix(htyproc): convert task_result values to string in wrap_common_task; preserve body text in parse_hty_response on JSON error
This commit is contained in:
@@ -585,10 +585,13 @@ fn wrap_ts_common_task(req: &ReqTask) -> Value {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn wrap_common_task(result: &CommonTaskResult, task_type: &str) -> Value {
|
fn wrap_common_task(result: &CommonTaskResult, task_type: &str) -> Value {
|
||||||
let task_result = result
|
let task_result = result.task_result.as_ref().map(|m| {
|
||||||
.task_result
|
serde_json::Value::Object(
|
||||||
.as_ref()
|
m.iter()
|
||||||
.map(|m| serde_json::Value::Object(m.iter().map(|(k, v)| (k.clone(), v.clone())).collect()));
|
.map(|(k, v)| (k.clone(), json_val_to_string(v)))
|
||||||
|
.collect(),
|
||||||
|
)
|
||||||
|
});
|
||||||
json!({
|
json!({
|
||||||
"task_id": result.task_id,
|
"task_id": result.task_id,
|
||||||
"task_type": task_type,
|
"task_type": task_type,
|
||||||
@@ -601,7 +604,19 @@ fn wrap_common_task(result: &CommonTaskResult, task_type: &str) -> Value {
|
|||||||
|
|
||||||
async fn parse_hty_response(resp: reqwest::Response) -> anyhow::Result<Value> {
|
async fn parse_hty_response(resp: reqwest::Response) -> anyhow::Result<Value> {
|
||||||
let status = resp.status();
|
let status = resp.status();
|
||||||
let v: Value = resp.json().await?;
|
let body_text = resp.text().await?;
|
||||||
|
let v: Value = match serde_json::from_str(&body_text) {
|
||||||
|
Ok(v) => v,
|
||||||
|
Err(e) => {
|
||||||
|
let snippet = body_text.chars().take(500).collect::<String>();
|
||||||
|
anyhow::bail!(
|
||||||
|
"parse_hty_response: bad JSON (status={}, body_snippet={:?}): {}",
|
||||||
|
status,
|
||||||
|
snippet,
|
||||||
|
e,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
if !status.is_success() {
|
if !status.is_success() {
|
||||||
tracing::debug!(
|
tracing::debug!(
|
||||||
http_status = %status,
|
http_status = %status,
|
||||||
@@ -699,6 +714,16 @@ fn json_value_as_string(v: &Value) -> Option<String> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn json_val_to_string(v: &Value) -> Value {
|
||||||
|
match v {
|
||||||
|
Value::String(s) => Value::String(s.clone()),
|
||||||
|
Value::Number(n) => Value::String(n.to_string()),
|
||||||
|
Value::Bool(b) => Value::String(b.to_string()),
|
||||||
|
Value::Null => Value::Null,
|
||||||
|
other => Value::String(other.to_string()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn extract_created_hty_resource_id(d: &Value) -> Option<String> {
|
fn extract_created_hty_resource_id(d: &Value) -> Option<String> {
|
||||||
json_value_as_string(d)
|
json_value_as_string(d)
|
||||||
.or_else(|| d.get("hty_resource_id").and_then(json_value_as_string))
|
.or_else(|| d.get("hty_resource_id").and_then(json_value_as_string))
|
||||||
|
|||||||
Reference in New Issue
Block a user