Skip to content

Commit

Permalink
[rust] Change default TTLs in Selenium Manager (#11686)
Browse files Browse the repository at this point in the history
* add ttl parameter to cli

update documentation

* fix typo un64->u64

* fix typo for single quotes

* fix parameters short names

* fix devault_value for new parameters

* fix for type default value

* fix typo with duplicate args
  • Loading branch information
iampopovich committed Mar 3, 2023
1 parent 796b2d4 commit d7cbcbf
Show file tree
Hide file tree
Showing 9 changed files with 47 additions and 6 deletions.
4 changes: 4 additions & 0 deletions rust/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@ Options:
Print help information
-V, --version
Print version information
--driver_ttl <TTL IN SECONDS>
Set custom TTL for driver in seconds. Default value is 86400
--browser_ttl <TTL IN SECONDS>
Set custom TTL for browser in seconds default value is 0
```

For instance, the command required to manage chromedriver is the following:
Expand Down
2 changes: 2 additions & 0 deletions rust/src/chrome.rs
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ impl SeleniumManager for ChromeManager {
fn request_driver_version(&self) -> Result<String, Box<dyn Error>> {
let browser_version = self.get_browser_version();
let mut metadata = get_metadata(self.get_logger());
let driver_ttl = self.get_config().driver_ttl;

match get_driver_version_from_metadata(&metadata.drivers, self.driver_name, browser_version)
{
Expand Down Expand Up @@ -202,6 +203,7 @@ impl SeleniumManager for ChromeManager {
browser_version,
self.driver_name,
&driver_version,
driver_ttl,
));
write_metadata(&metadata, self.get_logger());
}
Expand Down
9 changes: 9 additions & 0 deletions rust/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@

use crate::config::OS::{LINUX, MACOS, WINDOWS};
use crate::REQUEST_TIMEOUT_SEC;
use crate::TTL_BROWSERS_SEC;
use crate::TTL_DRIVERS_SEC;

use std::env::consts::{ARCH, OS};

pub struct ManagerConfig {
Expand All @@ -27,6 +30,8 @@ pub struct ManagerConfig {
pub browser_path: String,
pub proxy: String,
pub timeout: u64,
pub browser_ttl: u64,
pub driver_ttl: u64,
}

impl ManagerConfig {
Expand All @@ -39,6 +44,8 @@ impl ManagerConfig {
browser_path: "".to_string(),
proxy: "".to_string(),
timeout: REQUEST_TIMEOUT_SEC,
browser_ttl: TTL_BROWSERS_SEC,
driver_ttl: TTL_DRIVERS_SEC,
}
}

Expand All @@ -52,6 +59,8 @@ impl ManagerConfig {
browser_path: config.browser_path.as_str().to_string(),
proxy: config.proxy.as_str().to_string(),
timeout: config.timeout,
browser_ttl: config.browser_ttl,
driver_ttl: config.driver_ttl,
}
}
}
Expand Down
2 changes: 2 additions & 0 deletions rust/src/edge.rs
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ impl SeleniumManager for EdgeManager {
fn request_driver_version(&self) -> Result<String, Box<dyn Error>> {
let browser_version = self.get_browser_version();
let mut metadata = get_metadata(self.get_logger());
let driver_ttl = self.get_config().driver_ttl;

match get_driver_version_from_metadata(&metadata.drivers, self.driver_name, browser_version)
{
Expand Down Expand Up @@ -183,6 +184,7 @@ impl SeleniumManager for EdgeManager {
browser_version,
self.driver_name,
&driver_version,
driver_ttl,
));
write_metadata(&metadata, self.get_logger());
}
Expand Down
2 changes: 2 additions & 0 deletions rust/src/firefox.rs
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ impl SeleniumManager for FirefoxManager {
fn request_driver_version(&self) -> Result<String, Box<dyn Error>> {
let browser_version = self.get_browser_version();
let mut metadata = get_metadata(self.get_logger());
let driver_ttl = self.get_config().driver_ttl;

match get_driver_version_from_metadata(&metadata.drivers, self.driver_name, browser_version)
{
Expand All @@ -162,6 +163,7 @@ impl SeleniumManager for FirefoxManager {
browser_version,
self.driver_name,
&driver_version,
driver_ttl,
));
write_metadata(&metadata, self.get_logger());
}
Expand Down
2 changes: 2 additions & 0 deletions rust/src/iexplorer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ impl SeleniumManager for IExplorerManager {
fn request_driver_version(&self) -> Result<String, Box<dyn Error>> {
let browser_version = self.get_browser_version();
let mut metadata = get_metadata(self.get_logger());
let driver_ttl = self.get_config().driver_ttl;

match get_driver_version_from_metadata(&metadata.drivers, self.driver_name, browser_version)
{
Expand Down Expand Up @@ -135,6 +136,7 @@ impl SeleniumManager for IExplorerManager {
browser_version,
self.driver_name,
&driver_version,
driver_ttl,
));
write_metadata(&metadata, self.get_logger());
}
Expand Down
9 changes: 8 additions & 1 deletion rust/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ pub const ENV_LOCALAPPDATA: &str = "LOCALAPPDATA";
pub const FALLBACK_RETRIES: u32 = 5;
pub const WHERE_COMMAND: &str = "where {}";
pub const WHICH_COMMAND: &str = "which {}";
pub const TTL_BROWSERS_SEC: u64 = 0;
pub const TTL_DRIVERS_SEC: u64 = 86400;

pub trait SeleniumManager {
// ----------------------------------------------------------
Expand Down Expand Up @@ -133,6 +135,7 @@ pub trait SeleniumManager {
fn detect_browser_version(&self, commands: Vec<String>) -> Option<String> {
let mut metadata = get_metadata(self.get_logger());
let browser_name = &self.get_browser_name();
let browser_ttl = self.get_config().browser_ttl;

match get_browser_version_from_metadata(&metadata.browsers, browser_name) {
Some(version) => {
Expand Down Expand Up @@ -170,7 +173,11 @@ pub trait SeleniumManager {
if !self.is_safari() {
metadata
.browsers
.push(create_browser_metadata(browser_name, &browser_version));
.push(create_browser_metadata(
browser_name,
&browser_version,
browser_ttl,
));
write_metadata(&metadata, self.get_logger());
}
if !browser_version.is_empty() {
Expand Down
10 changes: 10 additions & 0 deletions rust/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ use exitcode::{DATAERR, UNAVAILABLE};

use selenium_manager::logger::Logger;
use selenium_manager::REQUEST_TIMEOUT_SEC;
use selenium_manager::TTL_DRIVERS_SEC;
use selenium_manager::TTL_BROWSERS_SEC;
use selenium_manager::{
clear_cache, get_manager_by_browser, get_manager_by_driver, SeleniumManager,
};
Expand Down Expand Up @@ -82,6 +84,14 @@ struct Cli {
/// Clear driver cache
#[clap(short, long)]
clear_cache: bool,

/// Set default driver ttl
#[clap(long, value_parser, default_value_t = TTL_DRIVERS_SEC)]
driver_ttl: u64,

/// Set default browser ttl
#[clap(long, value_parser, default_value_t = TTL_BROWSERS_SEC)]
browser_ttl: u64,
}

fn main() -> Result<(), Box<dyn Error>> {
Expand Down
13 changes: 8 additions & 5 deletions rust/src/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@ use crate::files::get_cache_folder;
use crate::Logger;

const METADATA_FILE: &str = "selenium-manager.json";
const TTL_BROWSERS_SEC: u64 = 0;
const TTL_DRIVERS_SEC: u64 = 86400;

#[derive(Serialize, Deserialize)]
pub struct Browser {
Expand Down Expand Up @@ -121,24 +119,29 @@ pub fn get_driver_version_from_metadata(
}
}

pub fn create_browser_metadata(browser_name: &str, browser_version: &String) -> Browser {
pub fn create_browser_metadata(
browser_name: &str,
browser_version: &String,
browser_ttl: u64,
) -> Browser {
Browser {
browser_name: browser_name.to_string(),
browser_version: browser_version.to_string(),
browser_ttl: now_unix_timestamp() + TTL_BROWSERS_SEC,
browser_ttl: now_unix_timestamp() + browser_ttl,
}
}

pub fn create_driver_metadata(
browser_version: &str,
driver_name: &str,
driver_version: &str,
driver_ttl: u64,
) -> Driver {
Driver {
browser_version: browser_version.to_string(),
driver_name: driver_name.to_string(),
driver_version: driver_version.to_string(),
driver_ttl: now_unix_timestamp() + TTL_DRIVERS_SEC,
driver_ttl: now_unix_timestamp() + driver_ttl,
}
}

Expand Down

0 comments on commit d7cbcbf

Please sign in to comment.