Skip to content

Commit 632f29d

Browse files
committed
feature: include dataset tracking_ids on get top datasetse query
1 parent d60c164 commit 632f29d

File tree

4 files changed

+49
-23
lines changed

4 files changed

+49
-23
lines changed

server/src/data/models.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -4203,10 +4203,11 @@ impl SearchAnalyticsFilter {
42034203
#[derive(Debug, Serialize, Deserialize, ToSchema)]
42044204
pub struct TopDatasetsResponse {
42054205
pub dataset_id: uuid::Uuid,
4206+
pub dataset_tracking_id: Option<String>,
42064207
pub total_queries: i64,
42074208
}
42084209

4209-
#[derive(Debug, Serialize, Deserialize, ToSchema, Row)]
4210+
#[derive(Debug, Serialize, Deserialize, ToSchema, Row, Clone)]
42104211
pub struct TopDatasetsResponseClickhouse {
42114212
#[serde(with = "clickhouse::serde::uuid")]
42124213
pub dataset_id: uuid::Uuid,
@@ -4217,6 +4218,7 @@ impl From<TopDatasetsResponseClickhouse> for TopDatasetsResponse {
42174218
fn from(clickhouse_response: TopDatasetsResponseClickhouse) -> TopDatasetsResponse {
42184219
TopDatasetsResponse {
42194220
dataset_id: uuid::Uuid::from_bytes(*clickhouse_response.dataset_id.as_bytes()),
4221+
dataset_tracking_id: None,
42204222
total_queries: clickhouse_response.total_queries,
42214223
}
42224224
}

server/src/handlers/analytics_handler.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -592,9 +592,10 @@ pub async fn get_top_datasets(
592592
_user: AdminOnly,
593593
data: web::Json<GetTopDatasetsRequestBody>,
594594
clickhouse_client: web::Data<clickhouse::Client>,
595+
pool: web::Data<Pool>,
595596
) -> Result<HttpResponse, ServiceError> {
596597
let top_datasets =
597-
get_top_datasets_query(data.into_inner(), clickhouse_client.get_ref()).await?;
598+
get_top_datasets_query(data.into_inner(), clickhouse_client.get_ref(), pool).await?;
598599

599600
Ok(HttpResponse::Ok().json(top_datasets))
600601
}

server/src/operators/analytics_operator.rs

+40-12
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
1-
use actix_web::web;
2-
use futures::future::join_all;
3-
use itertools::Itertools;
4-
use serde::{Deserialize, Serialize};
5-
use ureq::json;
6-
use utoipa::ToSchema;
7-
1+
use super::chunk_operator::get_metadata_from_tracking_id_query;
82
use crate::{
93
data::models::{
104
ClusterAnalyticsFilter, ClusterTopicsClickhouse, DatasetAnalytics, Granularity,
@@ -26,8 +20,14 @@ use crate::{
2620
CTRDataRequestBody, GetTopDatasetsRequestBody, RateQueryRequest,
2721
},
2822
};
29-
30-
use super::chunk_operator::get_metadata_from_tracking_id_query;
23+
use actix_web::web;
24+
use diesel::prelude::*;
25+
use diesel_async::RunQueryDsl;
26+
use futures::future::join_all;
27+
use itertools::Itertools;
28+
use serde::{Deserialize, Serialize};
29+
use ureq::json;
30+
use utoipa::ToSchema;
3131

3232
#[derive(Debug, Serialize, Deserialize, ToSchema)]
3333
pub struct SearchClusterResponse {
@@ -1359,7 +1359,10 @@ pub async fn set_query_rating_query(
13591359
pub async fn get_top_datasets_query(
13601360
data: GetTopDatasetsRequestBody,
13611361
clickhouse_client: &clickhouse::Client,
1362+
pool: web::Data<Pool>,
13621363
) -> Result<Vec<TopDatasetsResponse>, ServiceError> {
1364+
use crate::data::schema::datasets::dsl as datasets_columns;
1365+
13631366
let mut query_string = format!(
13641367
"SELECT
13651368
dataset_id,
@@ -1393,7 +1396,7 @@ pub async fn get_top_datasets_query(
13931396
LIMIT 10",
13941397
);
13951398

1396-
let clickhouse_query = clickhouse_client
1399+
let clickhouse_resp_data = clickhouse_client
13971400
.query(query_string.as_str())
13981401
.fetch_all::<TopDatasetsResponseClickhouse>()
13991402
.await
@@ -1402,9 +1405,34 @@ pub async fn get_top_datasets_query(
14021405
ServiceError::InternalServerError("Error fetching query".to_string())
14031406
})?;
14041407

1405-
let response = clickhouse_query
1408+
let dataset_ids = clickhouse_resp_data
1409+
.iter()
1410+
.map(|x| x.dataset_id)
1411+
.collect::<Vec<_>>();
1412+
let mut conn = pool
1413+
.get()
1414+
.await
1415+
.map_err(|_| ServiceError::BadRequest("Could not get database connection".to_string()))?;
1416+
let dataset_id_and_tracking_ids = datasets_columns::datasets
1417+
.select((datasets_columns::id, datasets_columns::tracking_id))
1418+
.filter(datasets_columns::id.eq_any(dataset_ids))
1419+
.load::<(uuid::Uuid, Option<String>)>(&mut conn)
1420+
.await
1421+
.map_err(|e| {
1422+
log::error!("Error fetching dataset ids: {:?}", e);
1423+
ServiceError::InternalServerError("Error fetching dataset ids".to_string())
1424+
})?;
1425+
1426+
let response = clickhouse_resp_data
14061427
.into_iter()
1407-
.map(|x| x.into())
1428+
.map(|x| {
1429+
let mut top_dataset_resps = TopDatasetsResponse::from(x.clone());
1430+
top_dataset_resps.dataset_tracking_id = dataset_id_and_tracking_ids
1431+
.iter()
1432+
.find(|(id, _)| id == &x.dataset_id)
1433+
.and_then(|(_, tracking_id)| tracking_id.clone());
1434+
top_dataset_resps
1435+
})
14081436
.collect::<Vec<_>>();
14091437

14101438
Ok(response)

server/src/operators/message_operator.rs

+4-9
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,10 @@ pub async fn create_message_query(
6969
) -> Result<(), ServiceError> {
7070
use crate::data::schema::messages::dsl::messages;
7171

72-
let mut conn = match pool.get().await {
73-
Ok(conn) => conn,
74-
Err(e) => {
75-
log::error!("Error getting connection from pool: {:?}", e);
76-
return Err(ServiceError::InternalServerError(
77-
"Error getting postgres connection from pool".into(),
78-
));
79-
}
80-
};
72+
let mut conn = pool
73+
.get()
74+
.await
75+
.map_err(|_| ServiceError::BadRequest("Could not get database connection".to_string()))?;
8176

8277
diesel::insert_into(messages)
8378
.values(&new_message)

0 commit comments

Comments
 (0)