refactor time functions to tools
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com> Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
This commit is contained in:
		
				
					committed by
					
						 Wolfgang Bumiller
						Wolfgang Bumiller
					
				
			
			
				
	
			
			
			
						parent
						
							3d68536fc2
						
					
				
				
					commit
					e693818afc
				
			| @ -10,6 +10,8 @@ use std::path::PathBuf; | ||||
| use proxmox::tools::fs::{file_get_contents, replace_file, CreateOptions}; | ||||
| use proxmox::try_block; | ||||
|  | ||||
| use crate::tools::epoch_now_u64; | ||||
|  | ||||
| fn compute_csrf_secret_digest( | ||||
|     timestamp: i64, | ||||
|     secret: &[u8], | ||||
| @ -29,8 +31,7 @@ pub fn assemble_csrf_prevention_token( | ||||
|     username: &str, | ||||
| ) -> String { | ||||
|  | ||||
|     let epoch = std::time::SystemTime::now().duration_since( | ||||
|         std::time::SystemTime::UNIX_EPOCH).unwrap().as_secs() as i64; | ||||
|     let epoch = epoch_now_u64().unwrap() as i64; | ||||
|  | ||||
|     let digest = compute_csrf_secret_digest(epoch, secret, username); | ||||
|  | ||||
| @ -67,8 +68,7 @@ pub fn verify_csrf_prevention_token( | ||||
|             bail!("invalid signature."); | ||||
|         } | ||||
|  | ||||
|         let now = std::time::SystemTime::now().duration_since( | ||||
|             std::time::SystemTime::UNIX_EPOCH)?.as_secs() as i64; | ||||
|         let now = epoch_now_u64()? as i64; | ||||
|  | ||||
|         let age = now - ttime; | ||||
|         if age < min_age { | ||||
|  | ||||
| @ -19,7 +19,7 @@ use super::read_chunk::ReadChunk; | ||||
| use super::Chunker; | ||||
| use super::IndexFile; | ||||
| use super::{DataBlob, DataChunkBuilder}; | ||||
| use crate::tools; | ||||
| use crate::tools::{self, epoch_now_u64}; | ||||
|  | ||||
| /// Header format definition for dynamic index files (`.dixd`) | ||||
| #[repr(C)] | ||||
| @ -479,9 +479,7 @@ impl DynamicIndexWriter { | ||||
|             panic!("got unexpected header size"); | ||||
|         } | ||||
|  | ||||
|         let ctime = std::time::SystemTime::now() | ||||
|             .duration_since(std::time::SystemTime::UNIX_EPOCH)? | ||||
|             .as_secs(); | ||||
|         let ctime = epoch_now_u64()?; | ||||
|  | ||||
|         let uuid = Uuid::generate(); | ||||
|  | ||||
|  | ||||
| @ -5,7 +5,7 @@ use std::io::{Seek, SeekFrom}; | ||||
| use super::chunk_stat::*; | ||||
| use super::chunk_store::*; | ||||
| use super::IndexFile; | ||||
| use crate::tools; | ||||
| use crate::tools::{self, epoch_now_u64}; | ||||
|  | ||||
| use chrono::{Local, TimeZone}; | ||||
| use std::fs::File; | ||||
| @ -290,9 +290,7 @@ impl FixedIndexWriter { | ||||
|             panic!("got unexpected header size"); | ||||
|         } | ||||
|  | ||||
|         let ctime = std::time::SystemTime::now() | ||||
|             .duration_since(std::time::SystemTime::UNIX_EPOCH)? | ||||
|             .as_secs(); | ||||
|         let ctime = epoch_now_u64()?; | ||||
|  | ||||
|         let uuid = Uuid::generate(); | ||||
|  | ||||
|  | ||||
| @ -12,7 +12,7 @@ use proxmox::api::RpcEnvironmentType; | ||||
| use proxmox_backup::configdir; | ||||
| use proxmox_backup::buildcfg; | ||||
| use proxmox_backup::server; | ||||
| use proxmox_backup::tools::daemon; | ||||
| use proxmox_backup::tools::{daemon, epoch_now, epoch_now_u64}; | ||||
| use proxmox_backup::server::{ApiConfig, rest::*}; | ||||
| use proxmox_backup::auth_helpers::*; | ||||
| use proxmox_backup::tools::disks::{ DiskManage, zfs_pool_stats }; | ||||
| @ -134,10 +134,10 @@ fn start_task_scheduler() { | ||||
|     tokio::spawn(task.map(|_| ())); | ||||
| } | ||||
|  | ||||
| use std::time:: {Instant, Duration, SystemTime, UNIX_EPOCH}; | ||||
| use std::time:: {Instant, Duration}; | ||||
|  | ||||
| fn next_minute() -> Result<Instant, Error> { | ||||
|     let epoch_now = SystemTime::now().duration_since(UNIX_EPOCH)?; | ||||
|     let epoch_now = epoch_now()?; | ||||
|     let epoch_next = Duration::from_secs((epoch_now.as_secs()/60 + 1)*60); | ||||
|     Ok(Instant::now() + epoch_next - epoch_now) | ||||
| } | ||||
| @ -296,8 +296,9 @@ async fn schedule_datastore_garbage_collection() { | ||||
|                 continue; | ||||
|             } | ||||
|         }; | ||||
|         let now = match SystemTime::now().duration_since(UNIX_EPOCH) { | ||||
|             Ok(epoch_now) => epoch_now.as_secs() as i64, | ||||
|  | ||||
|         let now = match epoch_now_u64() { | ||||
|             Ok(epoch_now) => epoch_now as i64, | ||||
|             Err(err) => { | ||||
|                 eprintln!("query system time failed - {}", err); | ||||
|                 continue; | ||||
| @ -407,8 +408,8 @@ async fn schedule_datastore_prune() { | ||||
|             } | ||||
|         }; | ||||
|  | ||||
|         let now = match SystemTime::now().duration_since(UNIX_EPOCH) { | ||||
|             Ok(epoch_now) => epoch_now.as_secs() as i64, | ||||
|         let now = match epoch_now_u64() { | ||||
|             Ok(epoch_now) => epoch_now as i64, | ||||
|             Err(err) => { | ||||
|                 eprintln!("query system time failed - {}", err); | ||||
|                 continue; | ||||
| @ -532,8 +533,8 @@ async fn schedule_datastore_sync_jobs() { | ||||
|             } | ||||
|         }; | ||||
|  | ||||
|         let now = match SystemTime::now().duration_since(UNIX_EPOCH) { | ||||
|             Ok(epoch_now) => epoch_now.as_secs() as i64, | ||||
|         let now = match epoch_now_u64() { | ||||
|             Ok(epoch_now) => epoch_now as i64, | ||||
|             Err(err) => { | ||||
|                 eprintln!("query system time failed - {}", err); | ||||
|                 continue; | ||||
|  | ||||
| @ -1,4 +1,3 @@ | ||||
| use std::time::{SystemTime, UNIX_EPOCH}; | ||||
| use std::path::PathBuf; | ||||
| use std::collections::HashMap; | ||||
| use std::sync::{RwLock}; | ||||
| @ -10,6 +9,7 @@ use serde_json::{json, Value}; | ||||
| use proxmox::tools::fs::{create_path, CreateOptions}; | ||||
|  | ||||
| use crate::api2::types::{RRDMode, RRDTimeFrameResolution}; | ||||
| use crate::tools::epoch_now_f64; | ||||
|  | ||||
| use super::*; | ||||
|  | ||||
| @ -35,11 +35,6 @@ pub fn create_rrdb_dir() -> Result<(), Error> { | ||||
|     Ok(()) | ||||
| } | ||||
|  | ||||
| fn now() -> Result<f64, Error> { | ||||
|     let time = SystemTime::now().duration_since(UNIX_EPOCH)?; | ||||
|     Ok(time.as_secs_f64()) | ||||
| } | ||||
|  | ||||
| pub fn update_value(rel_path: &str, value: f64, dst: DST, save: bool) -> Result<(), Error> { | ||||
|  | ||||
|     let mut path = PathBuf::from(PBS_RRD_BASEDIR); | ||||
| @ -48,7 +43,7 @@ pub fn update_value(rel_path: &str, value: f64, dst: DST, save: bool) -> Result< | ||||
|     std::fs::create_dir_all(path.parent().unwrap())?; | ||||
|  | ||||
|     let mut map = RRD_CACHE.write().unwrap(); | ||||
|     let now = now()?; | ||||
|     let now = epoch_now_f64()?; | ||||
|  | ||||
|     if let Some(rrd) = map.get_mut(rel_path) { | ||||
|         rrd.update(now, value); | ||||
| @ -115,7 +110,7 @@ pub fn extract_data( | ||||
|     mode: RRDMode, | ||||
| ) -> Result<Value, Error> { | ||||
|  | ||||
|     let now = now()?; | ||||
|     let now = epoch_now_f64()?; | ||||
|  | ||||
|     let map = RRD_CACHE.read().unwrap(); | ||||
|  | ||||
|  | ||||
							
								
								
									
										14
									
								
								src/tools.rs
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								src/tools.rs
									
									
									
									
									
								
							| @ -9,6 +9,7 @@ use std::io::{self, BufRead, ErrorKind, Read}; | ||||
| use std::os::unix::io::{AsRawFd, RawFd}; | ||||
| use std::path::Path; | ||||
| use std::time::Duration; | ||||
| use std::time::{SystemTime, SystemTimeError, UNIX_EPOCH}; | ||||
|  | ||||
| use anyhow::{bail, format_err, Error}; | ||||
| use serde_json::Value; | ||||
| @ -609,3 +610,16 @@ pub fn file_get_non_comment_lines<P: AsRef<Path>>( | ||||
|         Err(err) => Some(Err(err)), | ||||
|     })) | ||||
| } | ||||
|  | ||||
| pub fn epoch_now() -> Result<Duration, SystemTimeError> { | ||||
|     SystemTime::now().duration_since(UNIX_EPOCH) | ||||
| } | ||||
|  | ||||
| pub fn epoch_now_f64() -> Result<f64, SystemTimeError> { | ||||
|     Ok(epoch_now()?.as_secs_f64()) | ||||
| } | ||||
|  | ||||
| pub fn epoch_now_u64() -> Result<u64, SystemTimeError> { | ||||
|     Ok(epoch_now()?.as_secs()) | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -7,6 +7,8 @@ use openssl::pkey::{PKey, Public, Private}; | ||||
| use openssl::sign::{Signer, Verifier}; | ||||
| use openssl::hash::MessageDigest; | ||||
|  | ||||
| use crate::tools::epoch_now_u64; | ||||
|  | ||||
| pub const TICKET_LIFETIME: i64 = 3600*2; // 2 hours | ||||
|  | ||||
|  | ||||
| @ -17,8 +19,7 @@ pub fn assemble_rsa_ticket( | ||||
|     secret_data: Option<&str>, | ||||
| ) -> Result<String, Error> { | ||||
|  | ||||
|     let epoch = std::time::SystemTime::now().duration_since( | ||||
|         std::time::SystemTime::UNIX_EPOCH)?.as_secs(); | ||||
|     let epoch = epoch_now_u64()?; | ||||
|  | ||||
|     let timestamp = format!("{:08X}", epoch); | ||||
|  | ||||
| @ -101,8 +102,7 @@ pub fn verify_rsa_ticket( | ||||
|     } | ||||
|  | ||||
|     let timestamp = i64::from_str_radix(parts.pop_back().unwrap(), 16)?; | ||||
|     let now = std::time::SystemTime::now().duration_since( | ||||
|         std::time::SystemTime::UNIX_EPOCH)?.as_secs() as i64; | ||||
|     let now = epoch_now_u64()? as i64; | ||||
|  | ||||
|     let age = now - timestamp; | ||||
|     if age < min_age { | ||||
|  | ||||
		Reference in New Issue
	
	Block a user