feat(web): better debug error displays

This commit is contained in:
əlemi 2024-05-23 03:37:37 +02:00
parent 2dea2282fe
commit 467cf3c92c
Signed by: alemi
GPG key ID: A4895B84D311642C
2 changed files with 37 additions and 13 deletions

View file

@ -300,14 +300,22 @@
span.json-text { span.json-text {
color: var(--text); color: var(--text);
} }
pre.striped {
background: repeating-linear-gradient(
135deg,
var(--background-dim),
var(--background-dim) .9em,
var(--background) .9em,
var(--background) 1em
);
}
.loader { .loader {
animation: spin 1s linear infinite; animation: spin 1s linear infinite;
} }
@keyframes spin { @keyframes spin {
0% { transform: rotate(0deg); } 0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); 100% { transform: rotate(360deg); }
} }
</style> </style>
</head> </head>

View file

@ -7,6 +7,7 @@ pub fn DebugPage() -> impl IntoView {
let query_params = use_query_map(); let query_params = use_query_map();
let auth = use_context::<Auth>().expect("missing auth context"); let auth = use_context::<Auth>().expect("missing auth context");
let (cached, set_cached) = create_signal(false); let (cached, set_cached) = create_signal(false);
let (error, set_error) = create_signal(false);
let (plain, set_plain) = create_signal(false); let (plain, set_plain) = create_signal(false);
let (text, set_text) = create_signal("".to_string()); let (text, set_text) = create_signal("".to_string());
let navigate = use_navigate(); let navigate = use_navigate();
@ -26,7 +27,7 @@ pub fn DebugPage() -> impl IntoView {
None => serde_json::Value::Null, None => serde_json::Value::Null,
} }
} else { } else {
debug_fetch(&format!("{URL_BASE}/proxy?id={query}"), auth).await debug_fetch(&format!("{URL_BASE}/proxy?id={query}"), auth, set_error).await
} }
} }
); );
@ -64,7 +65,7 @@ pub fn DebugPage() -> impl IntoView {
</table> </table>
</form> </form>
</div> </div>
<pre class="ma-1"> <pre class="ma-1" class:striped=error>
{move || object.get().map(|o| if plain.get() { {move || object.get().map(|o| if plain.get() {
serde_json::to_string_pretty(&o).unwrap_or_else(|e| e.to_string()).into_view() serde_json::to_string_pretty(&o).unwrap_or_else(|e| e.to_string()).into_view()
} else { } else {
@ -93,16 +94,31 @@ pub fn DebugPage() -> impl IntoView {
} }
// this is a rather weird way to fetch but i want to see the bare error text if it fails! // this is a rather weird way to fetch but i want to see the bare error text if it fails!
async fn debug_fetch(url: &str, token: Auth) -> serde_json::Value { async fn debug_fetch(url: &str, token: Auth, error: WriteSignal<bool>) -> serde_json::Value {
error.set(false);
match Http::request::<()>(reqwest::Method::GET, url, None, token).await { match Http::request::<()>(reqwest::Method::GET, url, None, token).await {
Err(e) => serde_json::Value::String(format!("[!] failed sending request: {e}")), Ok(res) => {
Ok(res) => match res.text().await { if res.error_for_status_ref().is_err() {
Err(e) => serde_json::Value::String(format!("[!] invalid response body: {e}")), error.set(true); // this is an error but body could still be useful json
}
match res.text().await {
Ok(x) => match serde_json::from_str(&x) { Ok(x) => match serde_json::from_str(&x) {
Err(_) => serde_json::Value::String(x),
Ok(v) => v, Ok(v) => v,
Err(_) => {
error.set(true);
serde_json::Value::String(x)
},
},
Err(e) => {
error.set(true);
serde_json::Value::String(format!("[!] invalid response body: {e}"))
}, },
} }
},
Err(e) => {
error.set(true);
serde_json::Value::String(format!("[!] failed sending request: {e}"))
},
} }
} }