@@ -12,6 +12,8 @@ class UsageTracker : IUsageTracker
1212 {
1313 private static ILogging Logger { get ; } = LogHelper . GetLogger < UsageTracker > ( ) ;
1414
15+ private static object _lock = new object ( ) ;
16+
1517 private readonly ISettings userSettings ;
1618 private readonly IUsageLoader usageLoader ;
1719 private readonly IMetricsService metricsService ;
@@ -23,7 +25,7 @@ class UsageTracker : IUsageTracker
2325
2426 public UsageTracker ( IMetricsService metricsService , ISettings userSettings ,
2527 IEnvironment environment , string userId , string unityVersion , string instanceId )
26- : this ( metricsService , userSettings ,
28+ : this ( metricsService , userSettings ,
2729 new UsageLoader ( environment . UserCachePath . Combine ( Constants . UsageFile ) ) ,
2830 userId , unityVersion , instanceId )
2931 {
@@ -43,23 +45,23 @@ public UsageTracker(IMetricsService metricsService, ISettings userSettings,
4345
4446 Logger . Trace ( "userId:{0} instanceId:{1}" , userId , instanceId ) ;
4547 if ( Enabled )
46- RunTimer ( 3 * 60 ) ;
48+ RunTimer ( 3 * 60 ) ;
4749 }
4850
4951 private void RunTimer ( int seconds )
5052 {
51- timer = new Timer ( async _ =>
53+ timer = new Timer ( _ =>
5254 {
5355 try
5456 {
5557 timer . Dispose ( ) ;
56- await SendUsage ( ) ;
58+ SendUsage ( ) ;
5759 }
58- catch { }
60+ catch { }
5961 } , null , seconds * 1000 , Timeout . Infinite ) ;
6062 }
6163
62- private async Task SendUsage ( )
64+ private void SendUsage ( )
6365 {
6466 var usageStore = usageLoader . Load ( userId ) ;
6567
@@ -69,13 +71,16 @@ private async Task SendUsage()
6971 return ;
7072 }
7173
72- if ( usageStore . LastUpdated . Date != DateTimeOffset . UtcNow . Date )
74+ var currentTimeOffset = DateTimeOffset . UtcNow ;
75+ if ( usageStore . LastUpdated . Date == currentTimeOffset )
7376 {
74- var currentTimeOffset = DateTimeOffset . UtcNow ;
75- var beforeDate = currentTimeOffset . Date ;
77+ return ;
78+ }
7679
80+ lock ( _lock )
81+ {
7782 var success = false ;
78- var extractReports = usageStore . Model . SelectReports ( beforeDate ) ;
83+ var extractReports = usageStore . Model . SelectReports ( currentTimeOffset . Date ) ;
7984 if ( ! extractReports . Any ( ) )
8085 {
8186 Logger . Trace ( "No items to send" ) ;
@@ -90,7 +95,7 @@ private async Task SendUsage()
9095
9196 try
9297 {
93- await metricsService . PostUsage ( extractReports ) ;
98+ metricsService . PostUsage ( extractReports ) ;
9499 success = true ;
95100 }
96101 catch ( Exception ex )
@@ -101,7 +106,7 @@ private async Task SendUsage()
101106
102107 if ( success )
103108 {
104- usageStore . Model . RemoveReports ( beforeDate ) ;
109+ usageStore . Model . RemoveReports ( currentTimeOffset . Date ) ;
105110 usageStore . LastUpdated = currentTimeOffset ;
106111 usageLoader . Save ( usageStore ) ;
107112 }
@@ -110,130 +115,178 @@ private async Task SendUsage()
110115
111116 public void IncrementNumberOfStartups ( )
112117 {
113- var usage = usageLoader . Load ( userId ) ;
114- usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
115- . NumberOfStartups ++ ;
116- usageLoader . Save ( usage ) ;
118+ lock ( _lock )
119+ {
120+ var usage = usageLoader . Load ( userId ) ;
121+ usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
122+ . NumberOfStartups ++ ;
123+ usageLoader . Save ( usage ) ;
124+ }
117125 }
118126
119127 public void IncrementProjectsInitialized ( )
120128 {
121- var usage = usageLoader . Load ( userId ) ;
122- usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
123- . ProjectsInitialized ++ ;
124- usageLoader . Save ( usage ) ;
129+ lock ( _lock )
130+ {
131+ var usage = usageLoader . Load ( userId ) ;
132+ usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
133+ . ProjectsInitialized ++ ;
134+ usageLoader . Save ( usage ) ;
135+ }
125136 }
126137
127138 public void IncrementChangesViewButtonCommit ( )
128139 {
129- var usage = usageLoader . Load ( userId ) ;
130- usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
131- . ChangesViewButtonCommit ++ ;
132- usageLoader . Save ( usage ) ;
140+ lock ( _lock )
141+ {
142+ var usage = usageLoader . Load ( userId ) ;
143+ usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
144+ . ChangesViewButtonCommit ++ ;
145+ usageLoader . Save ( usage ) ;
146+ }
133147 }
134148
135149 public void IncrementHistoryViewToolbarFetch ( )
136150 {
137- var usage = usageLoader . Load ( userId ) ;
138- usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
139- . HistoryViewToolbarFetch ++ ;
140- usageLoader . Save ( usage ) ;
151+ lock ( _lock )
152+ {
153+ var usage = usageLoader . Load ( userId ) ;
154+ usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
155+ . HistoryViewToolbarFetch ++ ;
156+ usageLoader . Save ( usage ) ;
157+ }
141158 }
142159
143160 public void IncrementHistoryViewToolbarPush ( )
144161 {
145- var usage = usageLoader . Load ( userId ) ;
146- usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
147- . HistoryViewToolbarPush ++ ;
148- usageLoader . Save ( usage ) ;
162+ lock ( _lock )
163+ {
164+ var usage = usageLoader . Load ( userId ) ;
165+ usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
166+ . HistoryViewToolbarPush ++ ;
167+ usageLoader . Save ( usage ) ;
168+ }
149169 }
150170
151171 public void IncrementHistoryViewToolbarPull ( )
152172 {
153- var usage = usageLoader . Load ( userId ) ;
154- usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
155- . HistoryViewToolbarPull ++ ;
156- usageLoader . Save ( usage ) ;
173+ lock ( _lock )
174+ {
175+ var usage = usageLoader . Load ( userId ) ;
176+ usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
177+ . HistoryViewToolbarPull ++ ;
178+ usageLoader . Save ( usage ) ;
179+ }
157180 }
158181
159182 public void IncrementBranchesViewButtonCreateBranch ( )
160183 {
161- var usage = usageLoader . Load ( userId ) ;
162- usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
163- . BranchesViewButtonCreateBranch ++ ;
164- usageLoader . Save ( usage ) ;
184+ lock ( _lock )
185+ {
186+ var usage = usageLoader . Load ( userId ) ;
187+ usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
188+ . BranchesViewButtonCreateBranch ++ ;
189+ usageLoader . Save ( usage ) ;
190+ }
165191 }
166192
167193 public void IncrementBranchesViewButtonDeleteBranch ( )
168194 {
169- var usage = usageLoader . Load ( userId ) ;
170- usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
171- . BranchesViewButtonDeleteBranch ++ ;
172- usageLoader . Save ( usage ) ;
195+ lock ( _lock )
196+ {
197+ var usage = usageLoader . Load ( userId ) ;
198+ usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
199+ . BranchesViewButtonDeleteBranch ++ ;
200+ usageLoader . Save ( usage ) ;
201+ }
173202 }
174203
175204 public void IncrementBranchesViewButtonCheckoutLocalBranch ( )
176205 {
177- var usage = usageLoader . Load ( userId ) ;
178- usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
179- . BranchesViewButtonCheckoutLocalBranch ++ ;
180- usageLoader . Save ( usage ) ;
206+ lock ( _lock )
207+ {
208+ var usage = usageLoader . Load ( userId ) ;
209+ usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
210+ . BranchesViewButtonCheckoutLocalBranch ++ ;
211+ usageLoader . Save ( usage ) ;
212+ }
181213 }
182214
183215 public void IncrementBranchesViewButtonCheckoutRemoteBranch ( )
184216 {
185- var usage = usageLoader . Load ( userId ) ;
186- usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
187- . BranchesViewButtonCheckoutRemoteBranch ++ ;
188- usageLoader . Save ( usage ) ;
217+ lock ( _lock )
218+ {
219+ var usage = usageLoader . Load ( userId ) ;
220+ usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
221+ . BranchesViewButtonCheckoutRemoteBranch ++ ;
222+ usageLoader . Save ( usage ) ;
223+ }
189224 }
190225
191226 public void IncrementSettingsViewButtonLfsUnlock ( )
192227 {
193- var usage = usageLoader . Load ( userId ) ;
194- usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
195- . SettingsViewButtonLfsUnlock ++ ;
196- usageLoader . Save ( usage ) ;
228+ lock ( _lock )
229+ {
230+ var usage = usageLoader . Load ( userId ) ;
231+ usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
232+ . SettingsViewButtonLfsUnlock ++ ;
233+ usageLoader . Save ( usage ) ;
234+ }
197235 }
198236
199237 public void IncrementAuthenticationViewButtonAuthentication ( )
200238 {
201- var usage = usageLoader . Load ( userId ) ;
202- usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
203- . AuthenticationViewButtonAuthentication ++ ;
204- usageLoader . Save ( usage ) ;
239+ lock ( _lock )
240+ {
241+ var usage = usageLoader . Load ( userId ) ;
242+ usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
243+ . AuthenticationViewButtonAuthentication ++ ;
244+ usageLoader . Save ( usage ) ;
245+ }
205246 }
206247
207248 public void IncrementUnityProjectViewContextLfsLock ( )
208249 {
209- var usage = usageLoader . Load ( userId ) ;
210- usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
211- . UnityProjectViewContextLfsLock ++ ;
212- usageLoader . Save ( usage ) ;
250+ lock ( _lock )
251+ {
252+ var usage = usageLoader . Load ( userId ) ;
253+ usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
254+ . UnityProjectViewContextLfsLock ++ ;
255+ usageLoader . Save ( usage ) ;
256+ }
213257 }
214258
215259 public void IncrementUnityProjectViewContextLfsUnlock ( )
216260 {
217- var usage = usageLoader . Load ( userId ) ;
218- usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
219- . UnityProjectViewContextLfsUnlock ++ ;
220- usageLoader . Save ( usage ) ;
261+ lock ( _lock )
262+ {
263+ var usage = usageLoader . Load ( userId ) ;
264+ usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
265+ . UnityProjectViewContextLfsUnlock ++ ;
266+ usageLoader . Save ( usage ) ;
267+ }
221268 }
222269
223270 public void IncrementPublishViewButtonPublish ( )
224271 {
225- var usage = usageLoader . Load ( userId ) ;
226- usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
227- . PublishViewButtonPublish ++ ;
228- usageLoader . Save ( usage ) ;
272+ lock ( _lock )
273+ {
274+ var usage = usageLoader . Load ( userId ) ;
275+ usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
276+ . PublishViewButtonPublish ++ ;
277+ usageLoader . Save ( usage ) ;
278+ }
229279 }
230280
231281 public void IncrementApplicationMenuMenuItemCommandLine ( )
232282 {
233- var usage = usageLoader . Load ( userId ) ;
234- usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
235- . ApplicationMenuMenuItemCommandLine ++ ;
236- usageLoader . Save ( usage ) ;
283+ lock ( _lock )
284+ {
285+ var usage = usageLoader . Load ( userId ) ;
286+ usage . GetCurrentMeasures ( appVersion , unityVersion , instanceId )
287+ . ApplicationMenuMenuItemCommandLine ++ ;
288+ usageLoader . Save ( usage ) ;
289+ }
237290 }
238291
239292 public bool Enabled
@@ -293,7 +346,7 @@ public UsageStore Load(string userId)
293346 {
294347 path . DeleteIfExists ( ) ;
295348 }
296- catch { }
349+ catch { }
297350 }
298351 }
299352
0 commit comments