@@ -4,13 +4,10 @@ mod macros;
4
4
use self :: macros:: MetricFromOpts ;
5
5
use crate :: db:: Pool ;
6
6
use crate :: BuildQueue ;
7
+ use dashmap:: DashMap ;
7
8
use failure:: Error ;
8
9
use prometheus:: proto:: MetricFamily ;
9
- use std:: {
10
- collections:: HashMap ,
11
- sync:: Mutex ,
12
- time:: { Duration , Instant } ,
13
- } ;
10
+ use std:: time:: { Duration , Instant } ;
14
11
15
12
load_metric_type ! ( IntGauge as single) ;
16
13
load_metric_type ! ( IntCounter as single) ;
@@ -80,39 +77,28 @@ metrics! {
80
77
namespace: "docsrs" ,
81
78
}
82
79
83
- #[ derive( Debug ) ]
80
+ #[ derive( Debug , Default ) ]
84
81
pub ( crate ) struct RecentReleases {
85
- krates : Mutex < HashMap < String , Instant > > ,
86
- versions : Mutex < HashMap < String , Instant > > ,
87
- platforms : Mutex < HashMap < String , Instant > > ,
82
+ krates : DashMap < String , Instant > ,
83
+ versions : DashMap < String , Instant > ,
84
+ platforms : DashMap < String , Instant > ,
88
85
}
89
86
90
87
impl RecentReleases {
91
88
pub ( crate ) fn new ( ) -> Self {
92
- Self {
93
- krates : Mutex :: new ( HashMap :: new ( ) ) ,
94
- versions : Mutex :: new ( HashMap :: new ( ) ) ,
95
- platforms : Mutex :: new ( HashMap :: new ( ) ) ,
96
- }
89
+ Self :: default ( )
97
90
}
98
91
99
92
pub ( crate ) fn record ( & self , krate : & str , version : & str , target : & str ) {
100
- self . krates
101
- . lock ( )
102
- . unwrap ( )
103
- . insert ( krate. to_owned ( ) , Instant :: now ( ) ) ;
93
+ self . krates . insert ( krate. to_owned ( ) , Instant :: now ( ) ) ;
104
94
self . versions
105
- . lock ( )
106
- . unwrap ( )
107
95
. insert ( format ! ( "{}/{}" , krate, version) , Instant :: now ( ) ) ;
108
96
self . platforms
109
- . lock ( )
110
- . unwrap ( )
111
97
. insert ( format ! ( "{}/{}/{}" , krate, version, target) , Instant :: now ( ) ) ;
112
98
}
113
99
114
100
pub ( crate ) fn gather ( & self , metrics : & Metrics ) {
115
- fn inner ( map : & mut HashMap < String , Instant > , metric : & IntGaugeVec ) {
101
+ fn inner ( map : & DashMap < String , Instant > , metric : & IntGaugeVec ) {
116
102
let mut hour_count = 0 ;
117
103
let mut half_hour_count = 0 ;
118
104
let mut five_minute_count = 0 ;
@@ -144,15 +130,9 @@ impl RecentReleases {
144
130
. set ( five_minute_count) ;
145
131
}
146
132
147
- inner ( & mut * self . krates . lock ( ) . unwrap ( ) , & metrics. recent_krates ) ;
148
- inner (
149
- & mut * self . versions . lock ( ) . unwrap ( ) ,
150
- & metrics. recent_versions ,
151
- ) ;
152
- inner (
153
- & mut * self . platforms . lock ( ) . unwrap ( ) ,
154
- & metrics. recent_platforms ,
155
- ) ;
133
+ inner ( & self . krates , & metrics. recent_krates ) ;
134
+ inner ( & self . versions , & metrics. recent_versions ) ;
135
+ inner ( & self . platforms , & metrics. recent_platforms ) ;
156
136
}
157
137
}
158
138
0 commit comments