Telemetry: tag relay fetches with X-Client (app/widget) — app via RelayFuelProvider, widget focused/fuel-only fetches + diag beacon; Siri untouched (cached-only). Purely observational for relay admin /stats.
This commit is contained in:
@@ -166,8 +166,7 @@ struct FuelPriceTimelineProvider<Configuration: WidgetConfigurationIntent & Widg
|
||||
URLQueryItem(name: "price", value: String(first?.prices[entry.fuel] ?? -1)),
|
||||
]
|
||||
guard let url = components.url else { return }
|
||||
var request = URLRequest(url: url)
|
||||
request.timeoutInterval = 2
|
||||
var request = RelayFuelProvider.relayRequest(url, client: "widget", timeout: 2)
|
||||
Task {
|
||||
_ = try? await URLSession.shared.data(for: request)
|
||||
}
|
||||
@@ -313,8 +312,7 @@ struct FuelPriceTimelineProvider<Configuration: WidgetConfigurationIntent & Widg
|
||||
URLQueryItem(name: "radius", value: String(radiusKM)),
|
||||
URLQueryItem(name: "limit", value: "500"),
|
||||
]
|
||||
var request = URLRequest(url: components.url!)
|
||||
request.timeoutInterval = 5
|
||||
var request = RelayFuelProvider.relayRequest(components.url!, client: "widget", timeout: 5)
|
||||
do {
|
||||
let (data, response) = try await URLSession.shared.data(for: request)
|
||||
guard let http = response as? HTTPURLResponse, http.statusCode == 200 else { return nil }
|
||||
@@ -337,8 +335,7 @@ struct FuelPriceTimelineProvider<Configuration: WidgetConfigurationIntent & Widg
|
||||
URLQueryItem(name: "fuel", value: fuel.rawValue),
|
||||
URLQueryItem(name: "limit", value: String(limit)),
|
||||
]
|
||||
var request = URLRequest(url: components.url!)
|
||||
request.timeoutInterval = 5
|
||||
var request = RelayFuelProvider.relayRequest(components.url!, client: "widget", timeout: 5)
|
||||
do {
|
||||
let (data, response) = try await URLSession.shared.data(for: request)
|
||||
guard let http = response as? HTTPURLResponse, http.statusCode == 200 else { return nil }
|
||||
|
||||
@@ -71,6 +71,19 @@ struct RelayFuelProvider: FuelPriceProviding {
|
||||
/// dataset update time). Written by fetchStations, read by the view.
|
||||
static var latestMeta: RelayMeta?
|
||||
|
||||
/// Admin telemetry: the relay tags inbound connections by client kind
|
||||
/// (app vs widget) so the developer can monitor the poll model. Siri
|
||||
/// never fetches (cached-data-first). Purely observational — the relay
|
||||
/// ignores the header for responses.
|
||||
static let clientTagHeader = "X-Client"
|
||||
|
||||
static func relayRequest(_ url: URL, client: String, timeout: TimeInterval = 30) -> URLRequest {
|
||||
var request = URLRequest(url: url)
|
||||
request.timeoutInterval = timeout
|
||||
request.setValue(client, forHTTPHeaderField: clientTagHeader)
|
||||
return request
|
||||
}
|
||||
|
||||
func fetchStations(near lat: Double?, lng: Double?, fuel: FuelType, radiusKM: Double?) async throws -> [FuelStation] {
|
||||
var components = URLComponents(url: baseURL.appendingPathComponent("api/v1/stations"), resolvingAgainstBaseURL: false)!
|
||||
var query: [URLQueryItem] = [URLQueryItem(name: "fuel", value: fuel.rawValue)]
|
||||
@@ -89,7 +102,8 @@ struct RelayFuelProvider: FuelPriceProviding {
|
||||
}
|
||||
components.queryItems = query
|
||||
|
||||
let (data, response) = try await URLSession.shared.data(from: components.url!)
|
||||
let request = RelayFuelProvider.relayRequest(components.url!, client: "app")
|
||||
let (data, response) = try await URLSession.shared.data(for: request)
|
||||
guard let http = response as? HTTPURLResponse, http.statusCode == 200 else {
|
||||
throw FuelProviderError.relayUnavailable
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user