@@ -9,21 +9,24 @@ class BenchmarkItem {
99 final String description;
1010
1111 final DateTime clientCreatedAt;
12+ final DateTime ? clientReceivedAt;
1213
1314 final DateTime ? serverCreatedAt;
1415
1516 BenchmarkItem (
1617 {required this .id,
1718 required this .description,
1819 required this .clientCreatedAt,
20+ this .clientReceivedAt,
1921 this .serverCreatedAt});
2022
2123 factory BenchmarkItem .fromRow (sqlite.Row row) {
2224 return BenchmarkItem (
2325 id: row['id' ],
2426 description: row['description' ] ?? '' ,
2527 clientCreatedAt: DateTime .parse (row['client_created_at' ]),
26- serverCreatedAt: DateTime .tryParse (row['client_created_at' ] ?? '' ));
28+ clientReceivedAt: DateTime .tryParse (row['client_received_at' ] ?? '' ),
29+ serverCreatedAt: DateTime .tryParse (row['server_created_at' ] ?? '' ));
2730 }
2831
2932 static Stream <List <BenchmarkItem >> watchItems () {
@@ -35,26 +38,50 @@ class BenchmarkItem {
3538 });
3639 }
3740
41+ static updateItemBenchmarks () async {
42+ await for (var _ in db.onChange (['benchmark_items' ],
43+ throttle: const Duration (milliseconds: 1 ))) {
44+ await db.execute (
45+ '''UPDATE benchmark_items SET client_received_at = datetime('now', 'subsecond') || 'Z' WHERE client_received_at IS NULL AND server_created_at IS NOT NULL''' );
46+ }
47+ }
48+
3849 /// Create a new list
3950 static Future <BenchmarkItem > create (String description) async {
4051 final results = await db.execute ('''
4152 INSERT INTO
4253 benchmark_items(id, description, client_created_at)
43- VALUES(uuid(), ?, datetime() )
54+ VALUES(uuid(), ?, datetime('now', 'subsecond') || 'Z' )
4455 RETURNING *
4556 ''' , [description]);
4657 return BenchmarkItem .fromRow (results.first);
4758 }
4859
49- /// Delete this item.
50- Future <void > delete () async {
51- await db.execute ('DELETE FROM benchmark_items WHERE id = ?' , [id]);
52- }
53-
5460 /// Find list item.
5561 static Future <BenchmarkItem > find (id) async {
5662 final results =
5763 await db.get ('SELECT * FROM benchmark_items WHERE id = ?' , [id]);
5864 return BenchmarkItem .fromRow (results);
5965 }
66+
67+ /// Delete this item.
68+ Future <void > delete () async {
69+ await db.execute ('DELETE FROM benchmark_items WHERE id = ?' , [id]);
70+ }
71+
72+ Duration ? get latency {
73+ if (clientReceivedAt == null ) {
74+ return null ;
75+ } else {
76+ return clientReceivedAt! .difference (clientCreatedAt);
77+ }
78+ }
79+
80+ Duration ? get uploadLatency {
81+ if (serverCreatedAt == null ) {
82+ return null ;
83+ } else {
84+ return serverCreatedAt! .difference (clientCreatedAt);
85+ }
86+ }
6087}
0 commit comments