53 lines
1.8 KiB
Swift
53 lines
1.8 KiB
Swift
|
// SPDX-License-Identifier: MIT
|
||
|
// Copyright © 2018-2019 WireGuard LLC. All Rights Reserved.
|
||
|
|
||
|
import Foundation
|
||
|
|
||
|
public class LogViewHelper {
|
||
|
var log: OpaquePointer
|
||
|
var cursor: UInt32 = UINT32_MAX
|
||
|
static let formatOptions: ISO8601DateFormatter.Options = [
|
||
|
.withYear, .withMonth, .withDay, .withTime,
|
||
|
.withDashSeparatorInDate, .withColonSeparatorInTime, .withSpaceBetweenDateAndTime,
|
||
|
.withFractionalSeconds
|
||
|
]
|
||
|
|
||
|
struct LogEntry {
|
||
|
let timestamp: String
|
||
|
let message: String
|
||
|
|
||
|
func text() -> String {
|
||
|
return timestamp + " " + message
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static var logEntries = [LogEntry]()
|
||
|
|
||
|
init?(logFilePath: String?) {
|
||
|
guard let logFilePath = logFilePath else { return nil }
|
||
|
guard let log = open_log(logFilePath) else { return nil }
|
||
|
self.log = log
|
||
|
}
|
||
|
|
||
|
deinit {
|
||
|
close_log(self.log)
|
||
|
}
|
||
|
|
||
|
func fetchLogEntriesSinceLastFetch(completion: @escaping ([LogViewHelper.LogEntry]) -> Void) {
|
||
|
LogViewHelper.logEntries = []
|
||
|
DispatchQueue.global(qos: .userInitiated).async { [weak self] in
|
||
|
guard let self = self else { return }
|
||
|
let newCursor = view_lines_from_cursor(self.log, self.cursor) { cStr, timestamp in
|
||
|
let message = cStr != nil ? String(cString: cStr!) : ""
|
||
|
let date = Date(timeIntervalSince1970: Double(timestamp) / 1000000000)
|
||
|
let dateString = ISO8601DateFormatter.string(from: date, timeZone: TimeZone.current, formatOptions: LogViewHelper.formatOptions)
|
||
|
LogViewHelper.logEntries.append(LogEntry(timestamp: dateString, message: message))
|
||
|
}
|
||
|
DispatchQueue.main.async { [weak self] in
|
||
|
self?.cursor = newCursor
|
||
|
completion(LogViewHelper.logEntries)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|