@@ -113,7 +113,7 @@ impl Default for JobOpts {
113
113
/// use sidekiq::{Job, JobOpts};
114
114
///
115
115
/// // Create a job
116
- /// let class = "MyClass ".to_string();
116
+ /// let class = "Maman ".to_string();
117
117
/// let job_opts = JobOpts {
118
118
/// queue: "test".to_string(),
119
119
/// ..Default::default()
@@ -167,6 +167,7 @@ pub struct Client {
167
167
///
168
168
/// use sidekiq::{Job, Value};
169
169
/// use sidekiq::{Client, ClientOpts, create_redis_pool};
170
+ /// use time::{OffsetDateTime, Duration};
170
171
///
171
172
/// let ns = "test";
172
173
/// let client_opts = ClientOpts {
@@ -175,14 +176,30 @@ pub struct Client {
175
176
/// };
176
177
/// let pool = create_redis_pool().unwrap();
177
178
/// 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());
180
181
/// match client.push(job) {
181
182
/// Ok(_) => {},
182
183
/// Err(err) => {
183
184
/// println!("Sidekiq push failed: {}", err);
184
185
/// },
185
186
/// }
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
+ /// }
186
203
/// ```
187
204
impl Client {
188
205
pub fn new ( redis_pool : RedisPool , opts : ClientOpts ) -> Client {
@@ -202,14 +219,9 @@ impl Client {
202
219
}
203
220
204
221
fn calc_at ( & self , target_millsec_number : f64 ) -> Option < f64 > {
205
- let div: f64 = 1_000_f64 ;
206
222
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 ;
213
225
214
226
let start_at: f64 = if target_millsec < maximum_target {
215
227
now_millisec + target_millsec
@@ -224,22 +236,14 @@ impl Client {
224
236
}
225
237
}
226
238
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
-
237
239
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) )
239
242
}
240
243
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) )
243
247
}
244
248
245
249
pub fn push ( & self , job : Job ) -> Result < ( ) , ClientError > {
0 commit comments