Skip to content

Commit

Permalink
feat: start logging diff comparing with delta
Browse files Browse the repository at this point in the history
  • Loading branch information
sjaanus committed Jan 15, 2025
1 parent f96016f commit f2af163
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 11 deletions.
26 changes: 22 additions & 4 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions server/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ futures = "0.3.31"
futures-core = "0.3.31"
iter_tools = "0.24.0"
itertools = "0.14.0"
json-structural-diff = "0.2.0"
lazy_static = "1.5.0"
num_cpus = "1.16.0"
opentelemetry = { version = "0.27.1", features = ["trace", "metrics"] }
Expand Down Expand Up @@ -94,8 +95,8 @@ tokio-stream = { version = "0.1.17" }
tracing = { version = "0.1.41", features = ["log"] }
tracing-subscriber = { version = "0.3.19", features = ["json", "env-filter"] }
ulid = "1.1.4"
unleash-types = { version = "0.15.3", features = ["openapi", "hashes"] }
unleash-yggdrasil = { version = "0.14.5" }
unleash-types = { version = "0.15.4", features = ["openapi", "hashes"] }
unleash-yggdrasil = { version = "0.14.6" }
utoipa = { version = "5.3.1", features = ["actix_extras", "chrono"] }
utoipa-swagger-ui = { version = "8.1.1", features = ["actix-web"] }
[dev-dependencies]
Expand Down
51 changes: 46 additions & 5 deletions server/src/http/refresher/delta_refresher.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
use std::fs::File;
use std::io::Write;
use actix_web::http::header::EntityTag;
use json_structural_diff::JsonDiff;
use reqwest::StatusCode;
use serde_json::Value;
use tracing::{debug, info, warn};
use unleash_types::client_features::{ClientFeaturesDelta};
use unleash_yggdrasil::EngineState;

use crate::error::{EdgeError, FeatureError};
use crate::types::{ClientFeaturesDeltaResponse, ClientFeaturesRequest, EdgeToken, TokenRefresh};
use crate::types::{ClientFeaturesDeltaResponse, ClientFeaturesRequest, ClientFeaturesResponse, EdgeToken, TokenRefresh};
use crate::http::refresher::feature_refresher::FeatureRefresher;
use crate::tokens::cache_key;

Expand Down Expand Up @@ -47,22 +51,23 @@ impl FeatureRefresher {
}

pub async fn refresh_single_delta(&self, refresh: TokenRefresh) {
let features_result = self
let delta_result = self
.unleash_client
.get_client_features_delta(ClientFeaturesRequest {
api_key: refresh.token.token.clone(),
etag: refresh.etag,
etag: refresh.etag.clone(),
})
.await;
match features_result {
match delta_result {
Ok(delta_response) => match delta_response {
ClientFeaturesDeltaResponse::NoUpdate(tag) => {
debug!("No update needed. Will update last check time with {tag}");
self.update_last_check(&refresh.token.clone());
}
ClientFeaturesDeltaResponse::Updated(features, etag) => {
self.handle_client_features_delta_updated(&refresh.token, features, etag)
.await
.await;
self.compare_delta_cache(&refresh).await;
}
},
Err(e) => {
Expand Down Expand Up @@ -111,6 +116,42 @@ impl FeatureRefresher {
}
}
}

async fn compare_delta_cache(&self,
refresh: &TokenRefresh,
) {
let features_result = self
.unleash_client
.get_client_features(ClientFeaturesRequest {
api_key: refresh.token.token.clone(),
etag: refresh.clone().etag,
})
.await;

let key = cache_key(&refresh.token);
if let Some(delta_features) = self.features_cache.get(&key).as_ref() {
if let Ok(ClientFeaturesResponse::Updated(features, _etag)) = features_result {
let d_features = &delta_features.features;
let o_features = features.features;

let delta_json = serde_json::to_value(&d_features).unwrap();
let old_json = serde_json::to_value(&o_features).unwrap();

let delta_json_len = delta_json.to_string().len();
let old_json_len = old_json.to_string().len();

if delta_json_len == old_json_len {
println!("The JSON structures are identical.");
} else {
debug!("Structural differences found:");
debug!("Length of delta_json: {}", delta_json_len);
debug!("Length of old_json: {}", old_json_len);
let diff = JsonDiff::diff(&delta_json, &old_json, false);
debug!("{:?}", diff.diff.unwrap());
}
}
}
}
}


Expand Down

0 comments on commit f2af163

Please sign in to comment.