Skip to content

Commit 98f1316

Browse files
authored
feat: add AnalyticsError type for setting fetch failed. (#366)
* feat: add AnalyticsError type for setting fetch failed. * feat: adding URL? to network error types. * feat: only pass url instead of entire request.
1 parent 825bac9 commit 98f1316

File tree

2 files changed

+20
-17
lines changed

2 files changed

+20
-17
lines changed

Sources/Segment/Errors.swift

+9-6
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import Foundation
99

10-
public enum AnalyticsError: Error {
10+
public indirect enum AnalyticsError: Error {
1111
case storageUnableToCreate(String)
1212
case storageUnableToWrite(String)
1313
case storageUnableToRename(String)
@@ -16,19 +16,22 @@ public enum AnalyticsError: Error {
1616
case storageInvalid(String)
1717
case storageUnknown(Error)
1818

19-
case networkUnexpectedHTTPCode(Int)
20-
case networkServerLimited(Int)
21-
case networkServerRejected(Int)
22-
case networkUnknown(Error)
19+
case networkUnexpectedHTTPCode(URL?, Int)
20+
case networkServerLimited(URL?, Int)
21+
case networkServerRejected(URL?, Int)
22+
case networkUnknown(URL?, Error)
2323
case networkInvalidData
2424

2525
case jsonUnableToSerialize(Error)
2626
case jsonUnableToDeserialize(Error)
2727
case jsonUnknown(Error)
2828

2929
case pluginError(Error)
30-
30+
3131
case enrichmentError(String)
32+
33+
case settingsFail(AnalyticsError)
34+
case batchUploadFail(AnalyticsError)
3235
}
3336

3437
extension Analytics {

Sources/Segment/Utilities/Networking/HTTPClient.swift

+11-11
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public class HTTPClient {
6363

6464
let dataTask = session.uploadTask(with: urlRequest, fromFile: batch) { [weak self] (data, response, error) in
6565
guard let self else { return }
66-
handleResponse(data: data, response: response, error: error, completion: completion)
66+
handleResponse(data: data, response: response, error: error, url: uploadURL, completion: completion)
6767
}
6868

6969
dataTask.resume()
@@ -88,31 +88,31 @@ public class HTTPClient {
8888

8989
let dataTask = session.uploadTask(with: urlRequest, from: data) { [weak self] (data, response, error) in
9090
guard let self else { return }
91-
handleResponse(data: data, response: response, error: error, completion: completion)
91+
handleResponse(data: data, response: response, error: error, url: uploadURL, completion: completion)
9292
}
9393

9494
dataTask.resume()
9595
return dataTask
9696
}
9797

98-
private func handleResponse(data: Data?, response: URLResponse?, error: Error?, completion: @escaping (_ result: Result<Bool, Error>) -> Void) {
98+
private func handleResponse(data: Data?, response: URLResponse?, error: Error?, url: URL?, completion: @escaping (_ result: Result<Bool, Error>) -> Void) {
9999
if let error = error {
100100
analytics?.log(message: "Error uploading request \(error.localizedDescription).")
101-
analytics?.reportInternalError(AnalyticsError.networkUnknown(error))
101+
analytics?.reportInternalError(AnalyticsError.networkUnknown(url, error))
102102
completion(.failure(HTTPClientErrors.unknown(error: error)))
103103
} else if let httpResponse = response as? HTTPURLResponse {
104104
switch (httpResponse.statusCode) {
105105
case 1..<300:
106106
completion(.success(true))
107107
return
108108
case 300..<400:
109-
analytics?.reportInternalError(AnalyticsError.networkUnexpectedHTTPCode(httpResponse.statusCode))
109+
analytics?.reportInternalError(AnalyticsError.networkUnexpectedHTTPCode(url, httpResponse.statusCode))
110110
completion(.failure(HTTPClientErrors.statusCode(code: httpResponse.statusCode)))
111111
case 429:
112-
analytics?.reportInternalError(AnalyticsError.networkServerLimited(httpResponse.statusCode))
112+
analytics?.reportInternalError(AnalyticsError.networkServerLimited(url, httpResponse.statusCode))
113113
completion(.failure(HTTPClientErrors.statusCode(code: httpResponse.statusCode)))
114114
default:
115-
analytics?.reportInternalError(AnalyticsError.networkServerRejected(httpResponse.statusCode))
115+
analytics?.reportInternalError(AnalyticsError.networkServerRejected(url, httpResponse.statusCode))
116116
completion(.failure(HTTPClientErrors.statusCode(code: httpResponse.statusCode)))
117117
}
118118
}
@@ -128,21 +128,21 @@ public class HTTPClient {
128128

129129
let dataTask = session.dataTask(with: urlRequest) { [weak self] (data, response, error) in
130130
if let error = error {
131-
self?.analytics?.reportInternalError(AnalyticsError.networkUnknown(error))
131+
self?.analytics?.reportInternalError(AnalyticsError.settingsFail(AnalyticsError.networkUnknown(settingsURL, error)))
132132
completion(false, nil)
133133
return
134134
}
135135

136136
if let httpResponse = response as? HTTPURLResponse {
137137
if httpResponse.statusCode > 300 {
138-
self?.analytics?.reportInternalError(AnalyticsError.networkUnexpectedHTTPCode(httpResponse.statusCode))
138+
self?.analytics?.reportInternalError(AnalyticsError.settingsFail(AnalyticsError.networkUnexpectedHTTPCode(settingsURL, httpResponse.statusCode)))
139139
completion(false, nil)
140140
return
141141
}
142142
}
143143

144144
guard let data = data else {
145-
self?.analytics?.reportInternalError(AnalyticsError.networkInvalidData)
145+
self?.analytics?.reportInternalError(AnalyticsError.settingsFail(AnalyticsError.networkInvalidData))
146146
completion(false, nil)
147147
return
148148
}
@@ -151,7 +151,7 @@ public class HTTPClient {
151151
let responseJSON = try JSONDecoder.default.decode(Settings.self, from: data)
152152
completion(true, responseJSON)
153153
} catch {
154-
self?.analytics?.reportInternalError(AnalyticsError.jsonUnableToDeserialize(error))
154+
self?.analytics?.reportInternalError(AnalyticsError.settingsFail(AnalyticsError.jsonUnableToDeserialize(error)))
155155
completion(false, nil)
156156
return
157157
}

0 commit comments

Comments
 (0)