mirror of
https://github.com/status-im/nim-dagger.git
synced 2025-01-09 14:15:41 +00:00
de88fd2c53
* implement a logging proxy The logging proxy: - prevents the need to import chronicles (as well as export except toJson), - prevents the need to override `writeValue` or use or import nim-json-seralization elsewhere in the codebase, allowing for sole use of utils/json for de/serialization, - and handles json formatting correctly in chronicles json sinks * Rename logging -> logutils to avoid ambiguity with common names * clean up * add setProperty for JsonRecord, remove nim-json-serialization conflict * Allow specifying textlines and json format separately Not specifying a LogFormat will apply the formatting to both textlines and json sinks. Specifying a LogFormat will apply the formatting to only that sink. * remove unneeded usages of std/json We only need to import utils/json instead of std/json * move serialization from rest/json to utils/json so it can be shared * fix NoColors ambiguity Was causing unit tests to fail on Windows. * Remove nre usage to fix Windows error Windows was erroring with `could not load: pcre64.dll`. Instead of fixing that error, remove the pcre usage :) * Add logutils module doc * Shorten logutils.formatIt for `NBytes` Both json and textlines formatIt were not needed, and could be combined into one formatIt * remove debug integration test config debug output and logformat of json for integration test logs * Use ## module doc to support docgen * bump nim-poseidon2 to export fromBytes Before the changes in this branch, fromBytes was likely being resolved by nim-stew, or other dependency. With the changes in this branch, that dependency was removed and fromBytes could no longer be resolved. By exporting fromBytes from nim-poseidon, the correct resolution is now happening. * fixes to get compiling after rebasing master * Add support for Result types being logged using formatIt
56 lines
1.5 KiB
Nim
56 lines
1.5 KiB
Nim
## Nim-Codex
|
|
## Copyright (c) 2023 Status Research & Development GmbH
|
|
## Licensed under either of
|
|
## * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE))
|
|
## * MIT license ([LICENSE-MIT](LICENSE-MIT))
|
|
## at your option.
|
|
## This file may not be copied, modified, or distributed except according to
|
|
## those terms.
|
|
|
|
## Timer
|
|
## Used to execute a callback in a loop
|
|
|
|
import pkg/upraises
|
|
|
|
push: {.upraises: [].}
|
|
|
|
import pkg/chronos
|
|
|
|
import ../logutils
|
|
|
|
type
|
|
TimerCallback* = proc(): Future[void] {.gcsafe, upraises:[].}
|
|
Timer* = ref object of RootObj
|
|
callback: TimerCallback
|
|
interval: Duration
|
|
name: string
|
|
loopFuture: Future[void]
|
|
|
|
proc new*(T: type Timer, timerName = "Unnamed Timer"): Timer =
|
|
## Create a new Timer intance with the given name
|
|
Timer(name: timerName)
|
|
|
|
proc timerLoop(timer: Timer) {.async.} =
|
|
try:
|
|
while true:
|
|
await timer.callback()
|
|
await sleepAsync(timer.interval)
|
|
except CancelledError:
|
|
raise
|
|
except CatchableError as exc:
|
|
error "Timer caught unhandled exception: ", name=timer.name, msg=exc.msg
|
|
|
|
method start*(timer: Timer, callback: TimerCallback, interval: Duration) {.base.} =
|
|
if timer.loopFuture != nil:
|
|
return
|
|
trace "Timer starting: ", name=timer.name
|
|
timer.callback = callback
|
|
timer.interval = interval
|
|
timer.loopFuture = timerLoop(timer)
|
|
|
|
method stop*(timer: Timer) {.async, base.} =
|
|
if timer.loopFuture != nil:
|
|
trace "Timer stopping: ", name=timer.name
|
|
await timer.loopFuture.cancelAndWait()
|
|
timer.loopFuture = nil
|