معالجة الأخطاء بشكل صحيح في Operations أمر حاسم لضمان الموثوقية.
// Retry Policy مع تأخير متزايد
Method OnRetry(pRequest, pResponse, pError) As %Status {
// تأخير متزايد: 1s, 5s, 15s, 60s
Set delay = $Case(..RetryCount, 0:1, 1:5, 2:15, :60)
Hang delay
Return $$$OK
}
// Alert على الأخطاء المتكررة
Method OnError(pRequest, pResponse, pError) As %Status {
If ..RetryCount >= 3 {
// إرسال تنبيه بعد 3 محاولات فاشلة
Do ..SendAlert(5001, "Operation failed after 3 retries: " _ $System.Status.GetErrorText(pError))
// تسجيل في سجل الأخطاء
Set log = ##class(MyApp.ErrorLog).%New()
Set log.Operation = ..%ConfigName
Set log.Error = $System.Status.GetErrorText(pError)
Set log.Timestamp = $ZDT($H, 3)
Set log.RetryCount = ..RetryCount
Do log.%Save()
}
Return pError
}
// Circuit Breaker Pattern
Method CheckCircuitBreaker() As %Boolean {
Set failures = $Get(^CircuitBreaker(..%ConfigName, "failures"), 0)
If failures >= 5 {
Set lastFailure = $Get(^CircuitBreaker(..%ConfigName, "lastFailure"), 0)
If $H - lastFailure < 300 {
Return 0 // Circuit open - لا ت试行
}
Kill ^CircuitBreaker(..%ConfigName) // Reset
}
Return 1 // Circuit closed - 可以试行
}