Skip to content

Commit af3e574

Browse files
committed
Migrate Stat Tracker
1 parent 958f430 commit af3e574

10 files changed

+46
-63
lines changed

lib/codelessly_sdk.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ export 'src/data/network_data_repository.dart';
1515
export 'src/data/web_data_repository.dart';
1616
export 'src/functions/functions.dart';
1717
export 'src/functions/functions_repository.dart';
18-
export 'src/logging/stat_tracker.dart';
1918
export 'src/model/asset_model.dart';
2019
export 'src/model/auth_data.dart';
2120
export 'src/model/custom_component.dart';

lib/src/codelessly.dart

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import 'package:http/http.dart';
1111
import '../codelessly_sdk.dart';
1212
import 'logging/debug_logger.dart';
1313
import 'logging/error_logger.dart';
14+
import 'logging/stat_tracker.dart';
1415
import 'utils/codelessly_http_client.dart';
1516

1617
typedef NavigationListener = void Function(
@@ -150,11 +151,6 @@ class Codelessly {
150151
final StreamController<CStatus> _statusStreamController =
151152
StreamController.broadcast()..add(CStatus.empty());
152153

153-
late final StatTracker _tracker = StatTracker(client: _client);
154-
155-
/// Tracks statistics of various operations in the SDK.
156-
StatTracker get tracker => _tracker;
157-
158154
/// Returns a stream of status updates for this SDK instance.
159155
Stream<CStatus> get statusStream => _statusStreamController.stream;
160156

@@ -592,15 +588,13 @@ class Codelessly {
592588
authManager: _authManager!,
593589
networkDataRepository: FirebaseDataRepository(
594590
firestore: firebaseFirestore,
595-
tracker: _tracker,
596591
config: _config!,
597592
),
598593
localDataRepository: LocalDataRepository(
599594
cacheManager: _cacheManager!,
600595
),
601596
firebaseFirestore: firebaseFirestore,
602597
errorLogger: errorLogger,
603-
tracker: _tracker,
604598
);
605599

606600
// Create the preview data manager.
@@ -613,14 +607,12 @@ class Codelessly {
613607
networkDataRepository: FirebaseDataRepository(
614608
firestore: firebaseFirestore,
615609
config: _config!,
616-
tracker: _tracker,
617610
),
618611
localDataRepository: LocalDataRepository(
619612
cacheManager: _cacheManager!,
620613
),
621614
firebaseFirestore: firebaseFirestore,
622615
errorLogger: errorLogger,
623-
tracker: _tracker,
624616
);
625617

626618
// Create the template data manager. This is always automatically
@@ -637,14 +629,12 @@ class Codelessly {
637629
networkDataRepository: FirebaseDataRepository(
638630
firestore: firebaseFirestore,
639631
config: _config!,
640-
tracker: _tracker,
641632
),
642633
localDataRepository: LocalDataRepository(
643634
cacheManager: _cacheManager!,
644635
),
645636
firebaseFirestore: firebaseFirestore,
646637
errorLogger: errorLogger,
647-
tracker: _tracker,
648638
);
649639

650640
status = CStatus.loading(CLoadingState.createdManagers);
@@ -666,7 +656,7 @@ class Codelessly {
666656
_config!.publishSource = _authManager!.getBestPublishSource(_config!);
667657

668658
if (_authManager?.authData?.projectId case String projectId) {
669-
tracker.init(
659+
StatTracker.instance.init(
670660
projectId: projectId,
671661
serverUrl: Uri.parse(
672662
'${_config!.firebaseCloudFunctionsBaseURL}/api/trackStatsRequest'),
@@ -720,7 +710,7 @@ class Codelessly {
720710
if (_authManager!.authData == null) return;
721711

722712
if (_authManager?.authData?.projectId case String projectId) {
723-
tracker.init(
713+
StatTracker.instance.init(
724714
projectId: projectId,
725715
serverUrl: Uri.parse(
726716
'${_config!.firebaseCloudFunctionsBaseURL}/api/trackStatsRequest'),

lib/src/data/cloud_database.dart

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:flutter/widgets.dart';
66

77
import '../../codelessly_sdk.dart';
88
import '../logging/debug_logger.dart';
9+
import '../logging/stat_tracker.dart';
910
import '../utils/constants.dart';
1011

1112
const List<String> privateDocumentFields = [
@@ -198,9 +199,6 @@ class FirestoreCloudDatabase extends CloudDatabase {
198199
/// Reference to the Firestore instance.
199200
final FirebaseFirestore firestore;
200201

201-
/// Reference to the StatTracker instance, used to track reads and writes.
202-
final StatTracker tracker;
203-
204202
/// Subscriptions to the streams that are being listened to.
205203
final List<StreamSubscription> _subscriptions = [];
206204

@@ -210,7 +208,6 @@ class FirestoreCloudDatabase extends CloudDatabase {
210208
super.identifier,
211209
super.publishSource, {
212210
required this.firestore,
213-
required this.tracker,
214211
});
215212

216213
/// Initializes the cloud storage for the given [identifier]. This must be
@@ -228,14 +225,14 @@ class FirestoreCloudDatabase extends CloudDatabase {
228225

229226
// Create project doc if missing.
230227
final snapshot = await rootRef.get();
231-
tracker.trackRead('cloudDatabase/init');
228+
StatTracker.instance.trackRead('cloudDatabase/init');
232229

233230
// Do nothing if project doc exists.
234231
if (snapshot.exists) return;
235232

236233
// Create project doc if it does not exist.
237234
await rootRef.set({'project': identifier});
238-
tracker.trackWrite('cloudDatabase/init');
235+
StatTracker.instance.trackWrite('cloudDatabase/init');
239236

240237
DebugLogger.instance
241238
.printInfo('Done initializing for $identifier', name: name);
@@ -317,7 +314,7 @@ class FirestoreCloudDatabase extends CloudDatabase {
317314
// Auto generate id if desired.
318315
if (autoGenerateId) {
319316
final document = await rootRef.collection(path).add(value);
320-
tracker.trackWrite('cloudDatabase/addDocument');
317+
StatTracker.instance.trackWrite('cloudDatabase/addDocument');
321318

322319
DebugLogger.instance.printInfo(
323320
'Document added: ${document.path}',
@@ -340,7 +337,7 @@ class FirestoreCloudDatabase extends CloudDatabase {
340337

341338
// Get snapshot to check if document exists.
342339
final snapshot = await docRef.get();
343-
tracker.trackRead('cloudDatabase/addDocument');
340+
StatTracker.instance.trackRead('cloudDatabase/addDocument');
344341

345342
if (skipCreationIfDocumentExists && snapshot.exists) {
346343
DebugLogger.instance.printInfo(
@@ -352,7 +349,7 @@ class FirestoreCloudDatabase extends CloudDatabase {
352349

353350
// Set document.
354351
await docRef.set(value);
355-
tracker.trackWrite('cloudDatabase/addDocument');
352+
StatTracker.instance.trackWrite('cloudDatabase/addDocument');
356353

357354
DebugLogger.instance.printInfo(
358355
'Document added: ${docRef.path}/$documentId',
@@ -384,7 +381,7 @@ class FirestoreCloudDatabase extends CloudDatabase {
384381

385382
// TODO: Should we do update instead of set?
386383
await docRef.set(value, SetOptions(merge: true));
387-
tracker.trackWrite('cloudDatabase/updateDocument');
384+
StatTracker.instance.trackWrite('cloudDatabase/updateDocument');
388385

389386
DebugLogger.instance.printInfo(
390387
'Document updated: ${docRef.path}',
@@ -398,13 +395,13 @@ class FirestoreCloudDatabase extends CloudDatabase {
398395
final docRef = getDocPath(path, documentId);
399396

400397
final snapshot = await docRef.get();
401-
tracker.trackRead('cloudDatabase/removeDocument');
398+
StatTracker.instance.trackRead('cloudDatabase/removeDocument');
402399

403400
// TODO: Do we have to check for existence?
404401
if (!snapshot.exists) return false;
405402

406403
await docRef.delete();
407-
tracker.trackWrite('cloudDatabase/removeDocument');
404+
StatTracker.instance.trackWrite('cloudDatabase/removeDocument');
408405

409406
return true;
410407
}
@@ -415,7 +412,7 @@ class FirestoreCloudDatabase extends CloudDatabase {
415412
final docRef = getDocPath(path, documentId);
416413

417414
final snapshot = await docRef.get();
418-
tracker.trackRead('cloudDatabase/getDocumentData');
415+
StatTracker.instance.trackRead('cloudDatabase/getDocumentData');
419416

420417
final data = snapshot.data() ?? {};
421418
return sanitizeCloudDataForUse(data, docId: snapshot.id);
@@ -425,7 +422,7 @@ class FirestoreCloudDatabase extends CloudDatabase {
425422
Stream<Map<String, dynamic>> streamDocument(String path, String documentId) {
426423
final docRef = getDocPath(path, documentId);
427424
return docRef.snapshots().map((snapshot) {
428-
tracker.trackRead('cloudDatabase/streamDocument');
425+
StatTracker.instance.trackRead('cloudDatabase/streamDocument');
429426

430427
return snapshot.data()?.let(
431428
(value) => sanitizeCloudDataForUse(value, docId: snapshot.id)) ??
@@ -453,7 +450,8 @@ class FirestoreCloudDatabase extends CloudDatabase {
453450
// Listen to the stream and update the variable.
454451
final subscription = stream.listen(
455452
(data) {
456-
tracker.trackRead('cloudDatabase/streamDocumentToVariable');
453+
StatTracker.instance
454+
.trackRead('cloudDatabase/streamDocumentToVariable');
457455

458456
DebugLogger.instance.printInfo(
459457
'Document stream update from cloud storage: $path/$documentId',
@@ -536,7 +534,8 @@ class FirestoreCloudDatabase extends CloudDatabase {
536534
// Listen to the stream and update the variable.
537535
final subscription = stream.listen(
538536
(snapshot) {
539-
tracker.trackRead('cloudDatabase/streamCollectionToVariable');
537+
StatTracker.instance
538+
.trackRead('cloudDatabase/streamCollectionToVariable');
540539

541540
final docs = snapshot.docs
542541
.map((doc) => sanitizeCloudDataForUse(doc.data(), docId: doc.id))

lib/src/data/data_manager.dart

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'package:logging/logging.dart';
99
import '../../codelessly_sdk.dart';
1010
import '../logging/debug_logger.dart';
1111
import '../logging/error_logger.dart';
12+
import '../logging/stat_tracker.dart';
1213

1314
/// Orchestrates the data flow for the SDK.
1415
class DataManager {
@@ -59,10 +60,6 @@ class DataManager {
5960
/// The error handler to use.
6061
final ErrorLogger errorLogger;
6162

62-
/// The stat tracker to use, used to track various reads and writes in this
63-
/// data manager.
64-
final StatTracker tracker;
65-
6663
SDKPublishModel? _publishModel;
6764

6865
// TODO(Saad): LocalDatabase is only initialized and never truly accessed by
@@ -121,7 +118,6 @@ class DataManager {
121118
required this.localDataRepository,
122119
required this.firebaseFirestore,
123120
required this.errorLogger,
124-
required this.tracker,
125121
SDKPublishModel? publishModel,
126122
}) : _publishModel = publishModel;
127123

@@ -617,7 +613,6 @@ class DataManager {
617613
projectId,
618614
config.publishSource,
619615
firestore: firebaseFirestore,
620-
tracker: tracker,
621616
);
622617
// initialize cloud storage.
623618
await instance.init();
@@ -1521,7 +1516,7 @@ class DataManager {
15211516
.printInfo('\tLayout [$layoutID] has no fonts.', name: name);
15221517
}
15231518

1524-
tracker.trackPopulatedLayoutDownload(layoutID);
1519+
StatTracker.instance.trackPopulatedLayoutDownload(layoutID);
15251520
return true;
15261521
}
15271522

lib/src/data/firebase_data_repository.dart

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:cloud_firestore/cloud_firestore.dart';
44

55
import '../../codelessly_sdk.dart';
66
import '../logging/error_logger.dart';
7+
import '../logging/stat_tracker.dart';
78

89
/// Handles the data flow of [SDKPublishModel] from the server.
910
class FirebaseDataRepository extends NetworkDataRepository {
@@ -15,7 +16,6 @@ class FirebaseDataRepository extends NetworkDataRepository {
1516
FirebaseDataRepository({
1617
required this.firestore,
1718
required super.config,
18-
required super.tracker,
1919
});
2020

2121
@override
@@ -27,7 +27,7 @@ class FirebaseDataRepository extends NetworkDataRepository {
2727
firestore.collection(source.serverPath).doc(projectID);
2828

2929
return publishModelDoc.snapshots().map((event) {
30-
tracker.trackRead('${source.serverPath}/streamPublishModel');
30+
StatTracker.instance.trackRead('${source.serverPath}/streamPublishModel');
3131

3232
final Map<String, dynamic>? data = event.data();
3333
if (data == null || data.isEmpty) {
@@ -69,7 +69,8 @@ class FirebaseDataRepository extends NetworkDataRepository {
6969
);
7070
return null;
7171
}
72-
tracker.trackRead('${source.serverPath}/downloadLayoutModel');
72+
StatTracker.instance
73+
.trackRead('${source.serverPath}/downloadLayoutModel');
7374

7475
final Map<String, dynamic> data = value.data() ?? {};
7576

@@ -104,7 +105,7 @@ class FirebaseDataRepository extends NetworkDataRepository {
104105
.doc(fontID);
105106

106107
return fontDoc.get().then((value) {
107-
tracker.trackRead('${source.serverPath}/downloadFontModel');
108+
StatTracker.instance.trackRead('${source.serverPath}/downloadFontModel');
108109

109110
final Map<String, dynamic> data = value.data() ?? {};
110111

@@ -138,7 +139,7 @@ class FirebaseDataRepository extends NetworkDataRepository {
138139
.doc(apiId);
139140

140141
return apiDoc.get().then((value) {
141-
tracker.trackRead('${source.serverPath}/downloadApi');
142+
StatTracker.instance.trackRead('${source.serverPath}/downloadApi');
142143

143144
final Map<String, dynamic> data = value.data() ?? {};
144145

@@ -172,7 +173,8 @@ class FirebaseDataRepository extends NetworkDataRepository {
172173
.doc(layoutID);
173174

174175
return variablesDoc.get().then((value) {
175-
tracker.trackRead('${source.serverPath}/downloadLayoutVariables');
176+
StatTracker.instance
177+
.trackRead('${source.serverPath}/downloadLayoutVariables');
176178

177179
final Map<String, dynamic> data = value.data() ?? {};
178180

@@ -207,7 +209,8 @@ class FirebaseDataRepository extends NetworkDataRepository {
207209
.doc(layoutID);
208210

209211
return conditionsDoc.get().then((value) {
210-
tracker.trackRead('${source.serverPath}/downloadLayoutConditions');
212+
StatTracker.instance
213+
.trackRead('${source.serverPath}/downloadLayoutConditions');
211214

212215
final Map<String, dynamic> data = value.data() ?? {};
213216

lib/src/data/network_data_repository.dart

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'package:logging/logging.dart';
88
import '../../codelessly_sdk.dart';
99
import '../logging/debug_logger.dart';
1010
import '../logging/error_logger.dart';
11+
import '../logging/stat_tracker.dart';
1112

1213
/// An abstract class that represents the operations that a [DataManager] will
1314
/// need to utilize to offer a complete usage experience of a [Codelessly]
@@ -18,13 +19,9 @@ abstract class NetworkDataRepository {
1819
/// The [CodelesslyConfig] instance that is used to configure the SDK.
1920
final CodelesslyConfig config;
2021

21-
/// The [StatTracker] instance to track the statistics of the data repository.
22-
final StatTracker tracker;
23-
2422
/// Creates a new instance of [NetworkDataRepository].
2523
NetworkDataRepository({
2624
required this.config,
27-
required this.tracker,
2825
});
2926

3027
/// Calls a cloud function that searches for the project associated with the
@@ -62,7 +59,7 @@ abstract class NetworkDataRepository {
6259
return null;
6360
}
6461

65-
tracker.trackBundleDownload();
62+
StatTracker.instance.trackBundleDownload();
6663

6764
final Map<String, dynamic> modelDoc =
6865
jsonDecode(utf8.decode(result.bodyBytes));
@@ -177,7 +174,7 @@ abstract class NetworkDataRepository {
177174
try {
178175
final http.Response response = await http.get(Uri.parse(url));
179176
if (response.statusCode != 200) return null;
180-
tracker.trackFontDownload();
177+
StatTracker.instance.trackFontDownload();
181178

182179
return Uint8List.view(response.bodyBytes.buffer);
183180
} catch (e) {

0 commit comments

Comments
 (0)