Skip to content

Commit 3b4b7f0

Browse files
committed
Finish switch to time crate
Fix perform_{in,at} calc_at broken in commit de8b088
1 parent 61405c2 commit 3b4b7f0

File tree

2 files changed

+35
-55
lines changed

2 files changed

+35
-55
lines changed

src/sidekiq/mod.rs

+27-23
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ impl Default for JobOpts {
113113
/// use sidekiq::{Job, JobOpts};
114114
///
115115
/// // Create a job
116-
/// let class = "MyClass".to_string();
116+
/// let class = "Maman".to_string();
117117
/// let job_opts = JobOpts {
118118
/// queue: "test".to_string(),
119119
/// ..Default::default()
@@ -167,6 +167,7 @@ pub struct Client {
167167
///
168168
/// use sidekiq::{Job, Value};
169169
/// use sidekiq::{Client, ClientOpts, create_redis_pool};
170+
/// use time::{OffsetDateTime, Duration};
170171
///
171172
/// let ns = "test";
172173
/// let client_opts = ClientOpts {
@@ -175,14 +176,30 @@ pub struct Client {
175176
/// };
176177
/// let pool = create_redis_pool().unwrap();
177178
/// let client = Client::new(pool, client_opts);
178-
/// let class = "MyClass".to_string();
179-
/// let job = Job::new(class, vec![sidekiq::Value::Null], Default::default());
179+
/// let class = "Maman";
180+
/// let job = Job::new(class.to_string(), vec![sidekiq::Value::Null], Default::default());
180181
/// match client.push(job) {
181182
/// Ok(_) => {},
182183
/// Err(err) => {
183184
/// println!("Sidekiq push failed: {}", err);
184185
/// },
185186
/// }
187+
/// let job = Job::new(class.to_string(), vec![sidekiq::Value::Null], Default::default());
188+
/// let interval = Duration::hours(1);
189+
/// match client.perform_in(interval, job) {
190+
/// Ok(_) => {},
191+
/// Err(err) => {
192+
/// println!("Sidekiq push failed: {}", err);
193+
/// },
194+
/// }
195+
/// let job = Job::new(class.to_string(), vec![sidekiq::Value::Null], Default::default());
196+
/// let start_at = OffsetDateTime::now_utc().checked_add(Duration::HOUR).unwrap();
197+
/// match client.perform_at(start_at, job) {
198+
/// Ok(_) => {},
199+
/// Err(err) => {
200+
/// println!("Sidekiq push failed: {}", err);
201+
/// },
202+
/// }
186203
/// ```
187204
impl Client {
188205
pub fn new(redis_pool: RedisPool, opts: ClientOpts) -> Client {
@@ -202,14 +219,9 @@ impl Client {
202219
}
203220

204221
fn calc_at(&self, target_millsec_number: f64) -> Option<f64> {
205-
let div: f64 = 1_000_f64;
206222
let maximum_target: f64 = 1_000_000_000_f64;
207-
let target_millsec: f64 = target_millsec_number / div;
208-
let now_millisec = SystemTime::now()
209-
.duration_since(UNIX_EPOCH)
210-
.unwrap()
211-
.as_secs() as f64
212-
/ div;
223+
let target_millsec: f64 = target_millsec_number;
224+
let now_millisec = OffsetDateTime::now_utc().unix_timestamp() as f64;
213225

214226
let start_at: f64 = if target_millsec < maximum_target {
215227
now_millisec + target_millsec
@@ -224,22 +236,14 @@ impl Client {
224236
}
225237
}
226238

227-
fn convert_duration_to_millsec(&self, interval: Duration) -> Option<f64> {
228-
let interval_millsec: f64 = interval.subsec_milliseconds() as f64;
229-
self.calc_at(interval_millsec)
230-
}
231-
232-
fn convert_datetime_to_millsec(&self, datetime: OffsetDateTime) -> Option<f64> {
233-
let timestamp_millsec: f64 = datetime.millisecond() as f64;
234-
self.calc_at(timestamp_millsec)
235-
}
236-
237239
pub fn perform_in(&self, interval: Duration, job: Job) -> Result<(), ClientError> {
238-
self.raw_push(&[job], self.convert_duration_to_millsec(interval))
240+
let interval: f64 = interval.whole_seconds() as f64;
241+
self.raw_push(&[job], self.calc_at(interval))
239242
}
240243

241-
pub fn perform_at(&self, local_datetime: OffsetDateTime, job: Job) -> Result<(), ClientError> {
242-
self.raw_push(&[job], self.convert_datetime_to_millsec(local_datetime))
244+
pub fn perform_at(&self, datetime: OffsetDateTime, job: Job) -> Result<(), ClientError> {
245+
let timestamp: f64 = datetime.unix_timestamp() as f64;
246+
self.raw_push(&[job], self.calc_at(timestamp))
243247
}
244248

245249
pub fn push(&self, job: Job) -> Result<(), ClientError> {

tests/lib.rs

+8-32
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ fn time_ok(time: u64) -> bool {
4444

4545
#[test]
4646
fn test_job_format_with_default() {
47-
let class = "MyClass".to_string();
47+
let class = "Maman".to_string();
4848
let job = Job::new(class.clone(), args(), Default::default());
4949
assert_eq!(job.class, class);
5050
assert_eq!(job.retry, 25);
@@ -55,8 +55,8 @@ fn test_job_format_with_default() {
5555
}
5656

5757
#[test]
58-
fn test_client_push() {
59-
let class = "MyClass".to_string();
58+
fn test_client_push_single() {
59+
let class = "Maman".to_string();
6060
let job = Job::new(class, args(), Default::default());
6161
let client = get_client();
6262
match client.push(job) {
@@ -70,7 +70,7 @@ fn test_client_push() {
7070

7171
#[test]
7272
fn test_client_push_bulk() {
73-
let class = "MyClass".to_string();
73+
let class = "Maman".to_string();
7474
let jobs = &vec![
7575
Job::new(class.clone(), args(), Default::default()),
7676
Job::new(class, args(), Default::default()),
@@ -87,22 +87,10 @@ fn test_client_push_bulk() {
8787

8888
#[test]
8989
fn test_client_perform_in() {
90-
let class = "MyClass".to_string();
90+
let class = "Maman".to_string();
9191
let job = Job::new(class, args(), Default::default());
9292
let client = get_client();
93-
let interval = Duration::hours(1);
94-
match client.perform_in(interval, job) {
95-
Ok(_) => {}
96-
Err(err) => {
97-
println!("Sidekiq push failed: {}", err);
98-
unreachable!()
99-
}
100-
}
101-
102-
let class = "MyClass".to_string();
103-
let job = Job::new(class, args(), Default::default());
104-
let client = get_client();
105-
let interval = Duration::hours(0);
93+
let interval = Duration::minutes(1);
10694
match client.perform_in(interval, job) {
10795
Ok(_) => {}
10896
Err(err) => {
@@ -114,23 +102,11 @@ fn test_client_perform_in() {
114102

115103
#[test]
116104
fn test_client_perform_at() {
117-
let class = "MyClass".to_string();
118-
let job = Job::new(class, args(), Default::default());
119-
let client = get_client();
120-
let start_at = OffsetDateTime::now_utc();
121-
match client.perform_at(start_at, job) {
122-
Ok(_) => {}
123-
Err(err) => {
124-
println!("Sidekiq push failed: {}", err);
125-
unreachable!()
126-
}
127-
}
128-
129-
let class = "MyClass".to_string();
105+
let class = "Maman".to_string();
130106
let job = Job::new(class, args(), Default::default());
131107
let client = get_client();
132108
let start_at = OffsetDateTime::now_utc()
133-
.checked_add(Duration::HOUR)
109+
.checked_add(Duration::MINUTE)
134110
.unwrap();
135111
match client.perform_at(start_at, job) {
136112
Ok(_) => {}

0 commit comments

Comments
 (0)