15
15
// specific language governing permissions and limitations
16
16
// under the License.
17
17
18
+ use crate :: stats:: Props ;
18
19
use crate :: Logger ;
19
20
use serde:: { Deserialize , Serialize } ;
20
21
use std:: fs;
@@ -25,6 +26,17 @@ use std::time::{SystemTime, UNIX_EPOCH};
25
26
const METADATA_FILE_OLD : & str = "selenium-manager.json" ;
26
27
const METADATA_FILE : & str = "se-metadata.json" ;
27
28
29
+ #[ derive( Serialize , Deserialize ) ]
30
+ pub struct Stats {
31
+ pub browser : String ,
32
+ pub browser_version : String ,
33
+ pub os : String ,
34
+ pub arch : String ,
35
+ pub lang : String ,
36
+ pub selenium_version : String ,
37
+ pub stats_ttl : u64 ,
38
+ }
39
+
28
40
#[ derive( Serialize , Deserialize ) ]
29
41
pub struct Browser {
30
42
pub browser_name : String ,
@@ -45,6 +57,7 @@ pub struct Driver {
45
57
pub struct Metadata {
46
58
pub browsers : Vec < Browser > ,
47
59
pub drivers : Vec < Driver > ,
60
+ pub stats : Vec < Stats > ,
48
61
}
49
62
50
63
fn get_metadata_path ( cache_path : PathBuf ) -> PathBuf {
@@ -67,6 +80,7 @@ fn new_metadata(log: &Logger) -> Metadata {
67
80
Metadata {
68
81
browsers : Vec :: new ( ) ,
69
82
drivers : Vec :: new ( ) ,
83
+ stats : Vec :: new ( ) ,
70
84
}
71
85
}
72
86
@@ -82,6 +96,7 @@ pub fn get_metadata(log: &Logger, cache_path: &Option<PathBuf>) -> Metadata {
82
96
let now = now_unix_timestamp ( ) ;
83
97
meta. browsers . retain ( |b| b. browser_ttl > now) ;
84
98
meta. drivers . retain ( |d| d. driver_ttl > now) ;
99
+ meta. stats . retain ( |s| s. stats_ttl > now) ;
85
100
meta
86
101
}
87
102
Err ( _e) => new_metadata ( log) , // Empty metadata
@@ -128,6 +143,21 @@ pub fn get_driver_version_from_metadata(
128
143
}
129
144
}
130
145
146
+ pub fn is_stats_in_metadata ( stats_metadata : & [ Stats ] , props : & Props ) -> bool {
147
+ let props: Vec < & Stats > = stats_metadata
148
+ . iter ( )
149
+ . filter ( |p| {
150
+ p. browser . eq ( & props. browser )
151
+ && p. browser_version . eq ( & props. browser_version )
152
+ && p. os . eq ( & props. os )
153
+ && p. arch . eq ( & props. arch )
154
+ && p. lang . eq ( & props. lang )
155
+ && p. selenium_version . eq ( & props. selenium_version )
156
+ } )
157
+ . collect ( ) ;
158
+ !props. is_empty ( )
159
+ }
160
+
131
161
pub fn create_browser_metadata (
132
162
browser_name : & str ,
133
163
major_browser_version : & str ,
@@ -156,6 +186,18 @@ pub fn create_driver_metadata(
156
186
}
157
187
}
158
188
189
+ pub fn create_stats_metadata ( props : & Props , stats_ttl : u64 ) -> Stats {
190
+ Stats {
191
+ browser : props. browser . to_string ( ) ,
192
+ browser_version : props. browser_version . to_string ( ) ,
193
+ os : props. os . to_string ( ) ,
194
+ arch : props. arch . to_string ( ) ,
195
+ lang : props. lang . to_string ( ) ,
196
+ selenium_version : props. selenium_version . to_string ( ) ,
197
+ stats_ttl : now_unix_timestamp ( ) + stats_ttl,
198
+ }
199
+ }
200
+
159
201
pub fn write_metadata ( metadata : & Metadata , log : & Logger , cache_path : Option < PathBuf > ) {
160
202
if let Some ( cache) = cache_path {
161
203
let metadata_path = get_metadata_path ( cache. clone ( ) ) ;
0 commit comments