@@ -12,6 +12,8 @@ class UsageTracker : IUsageTracker
12
12
{
13
13
private static ILogging Logger { get ; } = LogHelper . GetLogger < UsageTracker > ( ) ;
14
14
15
+ private static object _lock = new object ( ) ;
16
+
15
17
private readonly ISettings userSettings ;
16
18
private readonly IUsageLoader usageLoader ;
17
19
private readonly IMetricsService metricsService ;
@@ -23,7 +25,7 @@ class UsageTracker : IUsageTracker
23
25
24
26
public UsageTracker ( IMetricsService metricsService , ISettings userSettings ,
25
27
IEnvironment environment , string userId , string unityVersion , string instanceId )
26
- : this ( metricsService , userSettings ,
28
+ : this ( metricsService , userSettings ,
27
29
new UsageLoader ( environment . UserCachePath . Combine ( Constants . UsageFile ) ) ,
28
30
userId , unityVersion , instanceId )
29
31
{
@@ -43,23 +45,23 @@ public UsageTracker(IMetricsService metricsService, ISettings userSettings,
43
45
44
46
Logger . Trace ( "userId:{0} instanceId:{1}" , userId , instanceId ) ;
45
47
if ( Enabled )
46
- RunTimer ( 3 * 60 ) ;
48
+ RunTimer ( 3 * 60 ) ;
47
49
}
48
50
49
51
private void RunTimer ( int seconds )
50
52
{
51
- timer = new Timer ( async _ =>
53
+ timer = new Timer ( _ =>
52
54
{
53
55
try
54
56
{
55
57
timer . Dispose ( ) ;
56
- await SendUsage ( ) ;
58
+ SendUsage ( ) ;
57
59
}
58
- catch { }
60
+ catch { }
59
61
} , null , seconds * 1000 , Timeout . Infinite ) ;
60
62
}
61
63
62
- private async Task SendUsage ( )
64
+ private void SendUsage ( )
63
65
{
64
66
var usageStore = usageLoader . Load ( userId ) ;
65
67
@@ -69,13 +71,16 @@ private async Task SendUsage()
69
71
return ;
70
72
}
71
73
72
- if ( usageStore . LastUpdated . Date != DateTimeOffset . UtcNow . Date )
74
+ var currentTimeOffset = DateTimeOffset . UtcNow ;
75
+ if ( usageStore . LastUpdated . Date == currentTimeOffset )
73
76
{
74
- var currentTimeOffset = DateTimeOffset . UtcNow ;
75
- var beforeDate = currentTimeOffset . Date ;
77
+ return ;
78
+ }
76
79
80
+ lock ( _lock )
81
+ {
77
82
var success = false ;
78
- var extractReports = usageStore . Model . SelectReports ( beforeDate ) ;
83
+ var extractReports = usageStore . Model . SelectReports ( currentTimeOffset . Date ) ;
79
84
if ( ! extractReports . Any ( ) )
80
85
{
81
86
Logger . Trace ( "No items to send" ) ;
@@ -90,7 +95,7 @@ private async Task SendUsage()
90
95
91
96
try
92
97
{
93
- await metricsService . PostUsage ( extractReports ) ;
98
+ metricsService . PostUsage ( extractReports ) ;
94
99
success = true ;
95
100
}
96
101
catch ( Exception ex )
@@ -101,7 +106,7 @@ private async Task SendUsage()
101
106
102
107
if ( success )
103
108
{
104
- usageStore . Model . RemoveReports ( beforeDate ) ;
109
+ usageStore . Model . RemoveReports ( currentTimeOffset . Date ) ;
105
110
usageStore . LastUpdated = currentTimeOffset ;
106
111
usageLoader . Save ( usageStore ) ;
107
112
}
@@ -110,130 +115,178 @@ private async Task SendUsage()
110
115
111
116
public void IncrementNumberOfStartups ( )
112
117
{
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
+ }
117
125
}
118
126
119
127
public void IncrementProjectsInitialized ( )
120
128
{
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
+ }
125
136
}
126
137
127
138
public void IncrementChangesViewButtonCommit ( )
128
139
{
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
+ }
133
147
}
134
148
135
149
public void IncrementHistoryViewToolbarFetch ( )
136
150
{
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
+ }
141
158
}
142
159
143
160
public void IncrementHistoryViewToolbarPush ( )
144
161
{
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
+ }
149
169
}
150
170
151
171
public void IncrementHistoryViewToolbarPull ( )
152
172
{
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
+ }
157
180
}
158
181
159
182
public void IncrementBranchesViewButtonCreateBranch ( )
160
183
{
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
+ }
165
191
}
166
192
167
193
public void IncrementBranchesViewButtonDeleteBranch ( )
168
194
{
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
+ }
173
202
}
174
203
175
204
public void IncrementBranchesViewButtonCheckoutLocalBranch ( )
176
205
{
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
+ }
181
213
}
182
214
183
215
public void IncrementBranchesViewButtonCheckoutRemoteBranch ( )
184
216
{
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
+ }
189
224
}
190
225
191
226
public void IncrementSettingsViewButtonLfsUnlock ( )
192
227
{
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
+ }
197
235
}
198
236
199
237
public void IncrementAuthenticationViewButtonAuthentication ( )
200
238
{
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
+ }
205
246
}
206
247
207
248
public void IncrementUnityProjectViewContextLfsLock ( )
208
249
{
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
+ }
213
257
}
214
258
215
259
public void IncrementUnityProjectViewContextLfsUnlock ( )
216
260
{
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
+ }
221
268
}
222
269
223
270
public void IncrementPublishViewButtonPublish ( )
224
271
{
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
+ }
229
279
}
230
280
231
281
public void IncrementApplicationMenuMenuItemCommandLine ( )
232
282
{
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
+ }
237
290
}
238
291
239
292
public bool Enabled
@@ -293,7 +346,7 @@ public UsageStore Load(string userId)
293
346
{
294
347
path . DeleteIfExists ( ) ;
295
348
}
296
- catch { }
349
+ catch { }
297
350
}
298
351
}
299
352
0 commit comments