tangled
alpha
login
or
join now
altagos.dev
/
space
0
fork
atom
A SpaceTraders Agent
0
fork
atom
overview
issues
pulls
pipelines
track request stats
altagos.dev
4 months ago
960c034f
ca95640c
verified
This commit was signed with the committer's
known signature
.
altagos.dev
SSH Key Fingerprint:
SHA256:UbTjEcCZlc6GzQWLCuDK3D//HESWD2xFPkzue9XMras=
+40
-2
1 changed file
expand all
collapse all
unified
split
src
st
http.zig
+40
-2
src/st/http.zig
···
198
198
199
199
http: HTTPClient,
200
200
201
201
+
// Stats
202
202
+
total_requests: std.atomic.Value(u64) = .init(0),
203
203
+
successful_requests: std.atomic.Value(u64) = .init(0),
204
204
+
total_latency: std.atomic.Value(u64) = .init(0),
205
205
+
average_latency: std.atomic.Value(u64) = .init(0),
206
206
+
201
207
pub fn init(
202
208
allocator: std.mem.Allocator,
203
209
io: std.Io,
···
274
280
275
281
log.debug("requesting: {s}", .{uri.path.percent_encoded});
276
282
283
283
+
const start: ?Io.Timestamp = Io.Clock.now(.real, client.io) catch null;
284
284
+
277
285
switch (opts.body) {
278
286
.empty => try req.sendBodiless(),
279
287
.buffer => |body| try req.sendBodyComplete(body),
···
289
297
break :blk "\x1b[1m\x1b[91m";
290
298
}
291
299
};
300
300
+
301
301
+
_ = client.total_requests.fetchAdd(1, .seq_cst);
302
302
+
303
303
+
if (start) |s| blk: {
304
304
+
const latency: u64 = @intCast(s.durationTo(Io.Clock.now(.real, client.io) catch break :blk).toMilliseconds());
305
305
+
const old_average = client.average_latency.load(.seq_cst);
306
306
+
var new_average: u64 = 0;
307
307
+
308
308
+
if (old_average == 0) {
309
309
+
new_average = latency;
310
310
+
} else {
311
311
+
const total_reqs = client.total_requests.load(.seq_cst);
312
312
+
new_average = old_average * (total_reqs - 1) / total_reqs + latency / total_reqs;
313
313
+
}
314
314
+
315
315
+
client.average_latency.store(new_average, .seq_cst);
316
316
+
_ = client.total_latency.fetchAdd(latency, .seq_cst);
317
317
+
318
318
+
log.debug("latency: {} ms - average: {}ms", .{ latency, new_average });
319
319
+
}
320
320
+
292
321
log.debug(
293
322
"\x1b[2m[path = {s}]\x1b[0m received {s}{d} {s}\x1b[0m",
294
323
.{ url[client.base_url.len..], colour, response.head.status, response.head.reason },
···
308
337
var json_reader: json.Reader = .init(client.allocator, decompressed_body_reader);
309
338
defer json_reader.deinit();
310
339
311
311
-
return json.parseFromTokenSource(T, client.allocator, &json_reader, .{
340
340
+
const result = json.parseFromTokenSource(T, client.allocator, &json_reader, .{
312
341
.ignore_unknown_fields = true,
313
342
}) catch |err| {
314
314
-
log.err("Error parsing response: {}", .{err});
343
343
+
const body_reader = response.readerDecompressing(&transfer_buffer, &decompress, &decompress_buffer);
344
344
+
const body = body_reader.allocRemaining(client.allocator, .unlimited) catch return error.InvalidResponse;
345
345
+
defer client.allocator.free(body);
346
346
+
347
347
+
log.err("Error parsing response: {} - Body:\n{s}", .{ err, body });
348
348
+
315
349
return RequestError.InvalidResponse;
316
350
};
351
351
+
352
352
+
_ = client.successful_requests.fetchAdd(1, .seq_cst);
353
353
+
354
354
+
return result;
317
355
}
318
356
};