more logging
All checks were successful
Generic zig build / build (push) Successful in 1m19s
Generic zig build / deploy (push) Successful in 12s

This commit is contained in:
Emil Lerch 2026-01-05 15:20:31 -08:00
parent 83ce3afe58
commit a5afaeb848
Signed by: lobo
GPG key ID: A7B62D657EF764F8
4 changed files with 30 additions and 4 deletions

View file

@ -5,6 +5,8 @@ const RateLimiter = @import("RateLimiter.zig");
const Server = @This();
const log = std.log.scoped(.server);
allocator: std.mem.Allocator,
httpz_server: httpz.Server(*Context),
context: Context,
@ -12,6 +14,25 @@ context: Context,
const Context = struct {
options: handler.HandleWeatherOptions,
rate_limiter: *RateLimiter,
fn uncaughtError(req: *httpz.Request, res: *httpz.Response, err: anyerror) void {
res.status = 500;
res.body = "Internal Server Error";
log.warn("unhandled exception for request: {s}", .{req.url.raw});
var buf: [4096]u8 = undefined;
var fixed_writer: std.Io.Writer = .fixed(&buf);
var it = req.headers.iterator();
while (it.next()) |header|
fixed_writer.print("\t{s}: {s}\n", .{ header.key, header.value }) catch {
log.warn("headers: NOT AVAILABLE", .{});
log.warn("error: {}", .{err});
return;
};
log.warn("headers: \n{s}", .{fixed_writer.buffered()});
log.warn("error: {}", .{err});
}
};
pub fn init(
@ -62,7 +83,7 @@ fn rateLimitMiddleware(limiter: *RateLimiter, req: *httpz.Request, res: *httpz.R
}
pub fn listen(self: *Server) !void {
std.log.info("wttr listening on port {d}", .{self.httpz_server.config.port.?});
log.info("wttr listening on port {d}", .{self.httpz_server.config.port.?});
try self.httpz_server.listen();
}

View file

@ -36,6 +36,7 @@ pub fn handleWeather(
} else {
// Fall back to IP-based detection
const client_ip = getClientIP(req);
std.log.debug("No location requested, using IP address '{s}'", .{client_ip});
break :blk client_ip;
}
};

View file

@ -3,6 +3,8 @@ const Coordinates = @import("../Coordinates.zig");
const GeoCache = @This();
const log = std.log.scoped(.geocache);
allocator: std.mem.Allocator,
cache: std.StringHashMap(CachedLocation),
cache_file: ?[]const u8,
@ -20,7 +22,7 @@ pub fn init(allocator: std.mem.Allocator, cache_file: ?[]const u8) !GeoCache {
// Load from file if specified
if (cache_file) |file_path| {
loadFromFile(allocator, &cache, file_path) catch |err| {
std.log.warn("Failed to load geocoding cache from {s}: {}", .{ file_path, err });
log.warn("Failed to load geocoding cache from {s}: {}", .{ file_path, err });
};
}
@ -37,7 +39,7 @@ pub fn deinit(self: *GeoCache) void {
// Save to file if specified
if (self.cache_file) |file_path| {
self.saveToFile(file_path) catch |err| {
std.log.warn("Failed to save geocoding cache to {s}: {}", .{ file_path, err });
log.warn("Failed to save geocoding cache to {s}: {}", .{ file_path, err });
};
}
@ -78,7 +80,7 @@ pub fn saveIfNeeded(self: *GeoCache) void {
if (elapsed_ms < fifteen_minutes_ms) return;
self.saveToFile(cache_file) catch |err| {
std.log.warn("Failed to save geocoding cache to {s}: {}", .{ cache_file, err });
log.warn("Failed to save geocoding cache to {s}: {}", .{ cache_file, err });
return;
};

View file

@ -86,6 +86,8 @@ pub const Resolver = struct {
}
fn resolveGeocoded(self: *Resolver, name: []const u8) !Location {
// Don't bother passing this through
if (std.mem.eql(u8, name, "favicon.ico")) return error.GeocodingFailed;
// Check cache first
if (self.geocache.get(name)) |cached| {
return Location{