Line data Source code
1 : use std::sync::Arc;
2 :
3 : use axum::{extract::State, response::Response};
4 : use compute_api::responses::ComputeStatus;
5 : use http::StatusCode;
6 : use tokio::task;
7 :
8 : use crate::{compute::ComputeNode, http::JsonResponse, installed_extensions};
9 :
10 : /// Get a list of installed extensions.
11 0 : pub(in crate::http) async fn get_installed_extensions(
12 0 : State(compute): State<Arc<ComputeNode>>,
13 0 : ) -> Response {
14 0 : let status = compute.get_status();
15 0 : if status != ComputeStatus::Running {
16 0 : return JsonResponse::invalid_status(status);
17 0 : }
18 0 :
19 0 : let conf = compute.get_conn_conf(None);
20 0 : let res = task::spawn_blocking(move || installed_extensions::get_installed_extensions(conf))
21 0 : .await
22 0 : .unwrap();
23 0 :
24 0 : match res {
25 0 : Ok(installed_extensions) => {
26 0 : JsonResponse::success(StatusCode::OK, Some(installed_extensions))
27 : }
28 0 : Err(e) => JsonResponse::error(
29 0 : StatusCode::INTERNAL_SERVER_ERROR,
30 0 : format!("failed to get list of installed extensions: {e}"),
31 0 : ),
32 : }
33 0 : }
|