57 lines
1.3 KiB
Nim
57 lines
1.3 KiB
Nim
# ©AngelaMos | 2026
|
|
# runner.nim
|
|
|
|
{.push raises: [].}
|
|
|
|
import std/[monotimes, times]
|
|
import types
|
|
import config
|
|
import collectors/ssh
|
|
import collectors/git
|
|
import collectors/cloud
|
|
import collectors/browser
|
|
import collectors/history
|
|
import collectors/keyring
|
|
import collectors/apptoken
|
|
|
|
proc getCollector(cat: Category): CollectorProc =
|
|
case cat
|
|
of catBrowser: browser.collect
|
|
of catSsh: ssh.collect
|
|
of catCloud: cloud.collect
|
|
of catHistory: history.collect
|
|
of catKeyring: keyring.collect
|
|
of catGit: git.collect
|
|
of catApptoken: apptoken.collect
|
|
|
|
proc runCollectors*(config: HarvestConfig): Report =
|
|
let start = getMonoTime()
|
|
|
|
var results: seq[CollectorResult] = @[]
|
|
var moduleNames: seq[string] = @[]
|
|
|
|
for cat in config.enabledModules:
|
|
moduleNames.add(ModuleNames[cat])
|
|
let collector = getCollector(cat)
|
|
let res = collector(config)
|
|
results.add(res)
|
|
|
|
let elapsed = getMonoTime() - start
|
|
|
|
var summary: array[Severity, int]
|
|
for res in results:
|
|
for finding in res.findings:
|
|
inc summary[finding.severity]
|
|
|
|
result = Report(
|
|
metadata: ReportMetadata(
|
|
timestamp: "",
|
|
target: config.targetDir,
|
|
version: AppVersion,
|
|
durationMs: elapsed.inMilliseconds,
|
|
modules: moduleNames
|
|
),
|
|
results: results,
|
|
summary: summary
|
|
)
|