60 lines
2.0 KiB
Swift
60 lines
2.0 KiB
Swift
import Foundation
|
|
|
|
public struct OpenCodeUsageSnapshot: Sendable {
|
|
public let rollingUsagePercent: Double
|
|
public let weeklyUsagePercent: Double
|
|
public let rollingResetInSec: Int
|
|
public let weeklyResetInSec: Int
|
|
public let renewsAt: Date?
|
|
public let updatedAt: Date
|
|
|
|
public init(
|
|
rollingUsagePercent: Double,
|
|
weeklyUsagePercent: Double,
|
|
rollingResetInSec: Int,
|
|
weeklyResetInSec: Int,
|
|
renewsAt: Date? = nil,
|
|
updatedAt: Date)
|
|
{
|
|
self.rollingUsagePercent = rollingUsagePercent
|
|
self.weeklyUsagePercent = weeklyUsagePercent
|
|
self.rollingResetInSec = rollingResetInSec
|
|
self.weeklyResetInSec = weeklyResetInSec
|
|
self.renewsAt = renewsAt
|
|
self.updatedAt = updatedAt
|
|
}
|
|
|
|
public func toUsageSnapshot() -> UsageSnapshot {
|
|
let rollingReset = self.updatedAt.addingTimeInterval(TimeInterval(self.rollingResetInSec))
|
|
let weeklyReset = self.updatedAt.addingTimeInterval(TimeInterval(self.weeklyResetInSec))
|
|
|
|
let primary = RateWindow(
|
|
usedPercent: self.rollingUsagePercent,
|
|
windowMinutes: 5 * 60,
|
|
resetsAt: rollingReset,
|
|
resetDescription: nil)
|
|
let secondary = RateWindow(
|
|
usedPercent: self.weeklyUsagePercent,
|
|
windowMinutes: 7 * 24 * 60,
|
|
resetsAt: weeklyReset,
|
|
resetDescription: nil)
|
|
|
|
var extraWindows: [NamedRateWindow]?
|
|
if let renewsAt = self.renewsAt {
|
|
let renewalWindow = RateWindow(
|
|
usedPercent: 0,
|
|
windowMinutes: nil,
|
|
resetsAt: renewsAt,
|
|
resetDescription: nil)
|
|
extraWindows = [NamedRateWindow(id: "renewal", title: "Renews", window: renewalWindow)]
|
|
}
|
|
|
|
return UsageSnapshot(
|
|
primary: primary,
|
|
secondary: secondary,
|
|
extraRateWindows: extraWindows,
|
|
updatedAt: self.updatedAt,
|
|
identity: nil)
|
|
}
|
|
}
|