Skip to content

Commit 1fdf7af

Browse files
committed
config - use analytics_find_limit & analytics_maxtime
1 parent 802a45a commit 1fdf7af

File tree

7 files changed

+53
-47
lines changed

7 files changed

+53
-47
lines changed

docs/config/dev.toml

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ spendable_find_limit = 200
77
wait_time = 500
88

99
msgs_find_limit = 10
10-
analytics_find_limit_v5 = 5000
11-
analytics_maxtime_v5 = 20000
10+
analytics_find_limit = 5000
11+
# in milliseconds
12+
analytics_maxtime = 20000
1213

1314
heartbeat_time = 30000
1415
health_threshold_promilles = 950

docs/config/ganache.toml

+16-21
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,32 @@
1-
# based on: prod.toml
21
# Maximum number of channels to return per request
32
max_channels = 512
43

5-
channels_find_limit = 512
6-
campaigns_find_limit = 512
7-
spendable_find_limit = 512
8-
9-
wait_time = 40000
10-
11-
# V4 Deprecated
12-
aggr_throttle = 0
13-
14-
events_find_limit = 100
4+
channels_find_limit = 200
5+
campaigns_find_limit = 200
6+
spendable_find_limit = 200
7+
wait_time = 500
158

169
msgs_find_limit = 10
17-
analytics_find_limit_v5 = 5000
18-
analytics_maxtime_v5 = 15000
10+
analytics_find_limit = 5000
11+
# in milliseconds
12+
analytics_maxtime = 20000
1913

20-
heartbeat_time = 60000
21-
health_threshold_promilles = 970
22-
health_unsignable_promilles = 770
23-
propagation_timeout = 3000
14+
heartbeat_time = 30000
15+
health_threshold_promilles = 950
16+
health_unsignable_promilles = 750
17+
propagation_timeout = 1000
2418

25-
fetch_timeout = 10000
26-
all_campaigns_timeout = 10000
27-
channel_tick_timeout = 10000
19+
fetch_timeout = 5000
20+
all_campaigns_timeout = 5000
21+
channel_tick_timeout = 5000
2822

2923
ip_rate_limit = { type = 'ip', timeframe = 1200000 }
3024
sid_rate_limit = { type = 'sid', timeframe = 0 }
3125

3226
creators_whitelist = []
3327
validators_whitelist = []
34-
admins = ['0x80690751969B234697e9059e04ed72195c3507fa']
28+
# Leader - 0xce07CbB7e054514D590a0262C93070D838bFBA2e
29+
admins = ['0xce07CbB7e054514D590a0262C93070D838bFBA2e']
3530

3631
# Ethereum mainnet tokens
3732
# [chain."Ganache #1"]

docs/config/prod.toml

+3-10
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ max_channels = 512
44
channels_find_limit = 512
55
campaigns_find_limit = 512
66
spendable_find_limit = 512
7-
87
wait_time = 40000
98

109
msgs_find_limit = 10
11-
analytics_find_limit_v5 = 5000
12-
analytics_maxtime_v5 = 15000
10+
analytics_find_limit = 5000
11+
# in milliseconds
12+
analytics_maxtime = 15000
1313

1414
heartbeat_time = 60000
1515
health_threshold_promilles = 970
@@ -23,13 +23,6 @@ channel_tick_timeout = 10000
2323
ip_rate_limit = { type = 'ip', timeframe = 1200000 }
2424
sid_rate_limit = { type = 'sid', timeframe = 0 }
2525

26-
# TODO: Replace with real contract address
27-
outpace_address = '0x333420fc6a897356e69b62417cd17ff012177d2b'
28-
# TODO: Replace with real contract address
29-
sweeper_address = '0x333420fc6a897356e69b62417cd17ff012177d2b'
30-
31-
ethereum_network = 'http://localhost:8545'
32-
3326
creators_whitelist = []
3427
validators_whitelist = []
3528
admins = ['0x5d6A3F1AD7b124ecDFDf4841D9bB246eD5fBF04c']

primitives/src/analytics.rs

-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ use serde::{Deserialize, Serialize};
77

88
use self::query::{AllowedKey, Time};
99

10-
pub const ANALYTICS_QUERY_LIMIT: u32 = 200;
11-
1210
#[cfg(feature = "postgres")]
1311
pub mod postgres {
1412
use super::{query::AllowedKey, AnalyticsQuery, OperatingSystem};

primitives/src/config.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,12 @@ pub struct Config {
4646
pub spendable_find_limit: u32,
4747
pub wait_time: u32,
4848
pub msgs_find_limit: u32,
49-
pub analytics_find_limit_v5: u32,
49+
/// The maximum analytic results you can receive per request.
50+
pub analytics_find_limit: u32,
51+
/// A timeout to be used when collecting the Analytics for a request.
5052
/// In milliseconds
51-
pub analytics_maxtime_v5: u32,
53+
pub analytics_maxtime: u32,
54+
/// The amount of time between heartbeats.
5255
/// In milliseconds
5356
pub heartbeat_time: u32,
5457
pub health_threshold_promilles: u32,

sentry/src/routes.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
//!
88
//! Paths which include these parameters are validated as follow:
99
//!
10-
//!
10+
//!
1111
//! - `:id` - [`ChannelId`][ChannelId]
1212
//! - `:addr` - either an [`Address`][Address] or [`ValidatorId`][ValidatorId].
1313
//!

sentry/src/routes/analytics.rs

+25-9
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use adapter::client::Locked;
88
use hyper::{Body, Request, Response};
99
use primitives::analytics::{
1010
query::{AllowedKey, ALLOWED_KEYS},
11-
AnalyticsQuery, AuthenticateAs, ANALYTICS_QUERY_LIMIT,
11+
AnalyticsQuery, AuthenticateAs,
1212
};
1313

1414
/// `GET /v5/analytics` request
@@ -21,7 +21,7 @@ pub async fn analytics<C: Locked + 'static>(
2121
) -> Result<Response<Body>, ResponseError> {
2222
let query = serde_urlencoded::from_str::<AnalyticsQuery>(req.uri().query().unwrap_or(""))?;
2323

24-
let applied_limit = query.limit.min(ANALYTICS_QUERY_LIMIT);
24+
let applied_limit = query.limit.min(app.config.analytics_find_limit);
2525

2626
let route_allowed_keys: HashSet<AllowedKey> =
2727
request_allowed.unwrap_or_else(|| ALLOWED_KEYS.clone());
@@ -54,14 +54,30 @@ pub async fn analytics<C: Locked + 'static>(
5454
)));
5555
}
5656

57-
let analytics = get_analytics(
58-
&app.pool,
59-
query.clone(),
60-
route_allowed_keys,
61-
authenticate_as,
62-
applied_limit,
57+
let analytics_maxtime = std::time::Duration::from_millis(app.config.analytics_maxtime.into());
58+
59+
let analytics = match tokio::time::timeout(
60+
analytics_maxtime,
61+
get_analytics(
62+
&app.pool,
63+
query.clone(),
64+
route_allowed_keys,
65+
authenticate_as,
66+
applied_limit,
67+
),
6368
)
64-
.await?;
69+
.await
70+
{
71+
Ok(Ok(analytics)) => analytics,
72+
// Error getting the analytics
73+
Ok(Err(err)) => return Err(err.into()),
74+
// Timeout error
75+
Err(_elapsed) => {
76+
return Err(ResponseError::BadRequest(
77+
"Timeout when fetching analytics data".into(),
78+
))
79+
}
80+
};
6581

6682
Ok(success_response(serde_json::to_string(&analytics)?))
6783
}

0 commit comments

Comments
 (0)