import times, strformat, strutils, prompt, terminal import std/[dirs, paths] import ../../common/[types, profile] proc makeAgentLogDirectory*(cq: Conquest, agentId: string): bool = try: let cqDir = cq.profile.getString("conquest_directory") createDir(cast[Path](fmt"{cqDir}/data/logs/{agentId}")) return true except OSError: return false proc log*(cq: Conquest, logEntry: string) = let date = now().format("dd-MM-yyyy") cqDir = cq.profile.getString("conquest_directory") agentLogPath = fmt"{cqDir}/data/logs/{cq.interactAgent.agentId}/{date}.session.log" # Write log entry to file let file = open(agentLogPath, fmAppend) file.writeLine(fmt"{logEntry}") file.flushFile() proc extractStrings*(args: string): string = if not args.startsWith("("): return args # Remove styling arguments, such as fgRed, styleBright, resetStyle, etc. by extracting only arguments that are quoted var message: string for str in args[1..^2].split(", "): if str.startsWith("\""): message &= str return message.replace("\"", "") proc getTimestamp*(): string = return now().format("dd-MM-yyyy HH:mm:ss") # Function templates and overwrites template writeLine*(cq: Conquest, args: varargs[untyped] = "") = cq.prompt.writeLine(args) if cq.interactAgent != nil: cq.log(extractStrings($(args))) # Wrapper functions for logging/console output template info*(cq: Conquest, args: varargs[untyped] = "") = cq.writeLine(fgBlack, styleBright, fmt"[{getTimestamp()}] ", $LOG_INFO, resetStyle, args) template error*(cq: Conquest, args: varargs[untyped] = "") = cq.writeLine(fgBlack, styleBright, fmt"[{getTimestamp()}] ", fgRed, $LOG_ERROR, resetStyle, args) template success*(cq: Conquest, args: varargs[untyped] = "") = cq.writeLine(fgBlack, styleBright, fmt"[{getTimestamp()}] ", fgGreen, $LOG_SUCCESS, resetStyle, args) template warning*(cq: Conquest, args: varargs[untyped] = "") = cq.writeLine(fgBlack, styleBright, fmt"[{getTimestamp()}] ", fgYellow, styleDim, $LOG_WARNING, resetStyle, args) template input*(cq: Conquest, args: varargs[untyped] = "") = if cq.interactAgent != nil: cq.writeLine(fgBlue, styleBright, fmt"[{getTimestamp()}] ", fgYellow, fmt"[{cq.interactAgent.agentId}] ", resetStyle, args) else: cq.writeLine(fgBlue, styleBright, fmt"[{getTimestamp()}] ", resetStyle, args) template output*(cq: Conquest, args: varargs[untyped] = "") = cq.writeLine(args)