Implement logging/formatting
This commit is contained in:
parent
7c484b18d3
commit
83d77f8865
|
@ -1,6 +1,7 @@
|
||||||
import prologue
|
import prologue
|
||||||
import prologue/middlewares/staticfile
|
import prologue/middlewares/staticfile
|
||||||
import views
|
import views
|
||||||
|
import formatter
|
||||||
|
|
||||||
proc runWebsite(settings: Table[string, bool], dbSettings: Table[string, string]) =
|
proc runWebsite(settings: Table[string, bool], dbSettings: Table[string, string]) =
|
||||||
let prologueSettings = newSettings(
|
let prologueSettings = newSettings(
|
||||||
|
@ -13,6 +14,7 @@ proc runWebsite(settings: Table[string, bool], dbSettings: Table[string, string]
|
||||||
website.get("/about", getAbout)
|
website.get("/about", getAbout)
|
||||||
website.use(staticFileMiddleware("static"))
|
website.use(staticFileMiddleware("static"))
|
||||||
|
|
||||||
|
logPrint("Press Ctrl-C to stop site", "Info")
|
||||||
website.run()
|
website.run()
|
||||||
|
|
||||||
export runWebsite
|
export runWebsite
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import tables
|
import tables
|
||||||
import std/[os, db_sqlite, strutils, streams]
|
import std/[os, db_sqlite, strutils, streams]
|
||||||
|
import formatter
|
||||||
|
|
||||||
proc createDb(dbSettings: Table): bool =
|
proc createDb(dbSettings: Table): bool =
|
||||||
if not fileExists(dbSettings["path"]):
|
if not fileExists(dbSettings["path"]):
|
||||||
|
@ -25,7 +26,7 @@ proc createDb(dbSettings: Table): bool =
|
||||||
if command == "\c\n" or command == "\n":
|
if command == "\c\n" or command == "\n":
|
||||||
continue
|
continue
|
||||||
db.exec(sql(command.strip))
|
db.exec(sql(command.strip))
|
||||||
echo "Ran command: " & command.strip
|
logPrint("Ran SQL command from schema", "Info")
|
||||||
db.close()
|
db.close()
|
||||||
return true
|
return true
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
import tables
|
||||||
|
import strutils
|
||||||
|
import math
|
||||||
|
|
||||||
|
proc colorEsc(color: string): string {.gcsafe.} =
|
||||||
|
# Stored in proc to be gcsafe
|
||||||
|
let colors = {
|
||||||
|
"black": 30,
|
||||||
|
"red": 31,
|
||||||
|
"green": 32,
|
||||||
|
"orange": 33,
|
||||||
|
"blue": 34,
|
||||||
|
"purple": 35,
|
||||||
|
"cyan": 36,
|
||||||
|
"reset": 0
|
||||||
|
}.toTable()
|
||||||
|
|
||||||
|
return "\e[" & intToStr(colors[color]) & "m"
|
||||||
|
|
||||||
|
proc colorize(text: string, color: string): string {.gcsafe.} =
|
||||||
|
return colorEsc(color) & text & colorEsc("reset")
|
||||||
|
|
||||||
|
proc strCenter(text: string, filler: string = "-", length: int = 10): string {.gcsafe.} =
|
||||||
|
# Simply truncate and return if it fills the entire length
|
||||||
|
if text.len() > length:
|
||||||
|
return text[0..length-1]
|
||||||
|
|
||||||
|
# Find remaining characters and how much to pad each side
|
||||||
|
var remainHalf: float = (length - text.len()) / 2
|
||||||
|
var remainLeft: int = remainHalf.floor().int
|
||||||
|
var remainRight: int = remainHalf.ceil().int
|
||||||
|
|
||||||
|
return filler.repeat(remainLeft) & text & filler.repeat(remainRight)
|
||||||
|
|
||||||
|
proc logFormat(text: string, level: string = "undef"): string {.gcsafe.} =
|
||||||
|
# Stored in proc to be gcsafe
|
||||||
|
let colorMapping = {
|
||||||
|
"Main": "green",
|
||||||
|
"Error": "red",
|
||||||
|
"Info": "purple",
|
||||||
|
"Warning": "orange",
|
||||||
|
"undef": "cyan"
|
||||||
|
}.toTable()
|
||||||
|
|
||||||
|
var prefix = "[" & colorize(text=strCenter(level), color=colorMapping[level]) & "]"
|
||||||
|
return prefix & " " & text
|
||||||
|
|
||||||
|
proc logPrint(text: string = "Undefined error message", level: string = "undef") {.gcsafe.} =
|
||||||
|
# In separate function in case I need to for example also write it to a file in the future.
|
||||||
|
echo logFormat(text=text, level=level)
|
||||||
|
|
||||||
|
export logPrint
|
|
@ -1,7 +1,9 @@
|
||||||
import prologue
|
import prologue
|
||||||
import nimja/parser
|
import nimja/parser
|
||||||
|
import formatter
|
||||||
|
|
||||||
proc renderTemplate(templateName: static[string]): string =
|
proc renderTemplate(templateName: static[string]): string =
|
||||||
|
logPrint("Served template " & templateName, "Main")
|
||||||
compileTemplateFile(getScriptDir() & "/templates/" & templateName)
|
compileTemplateFile(getScriptDir() & "/templates/" & templateName)
|
||||||
|
|
||||||
proc getIndex*(ctx: Context) {.async.} =
|
proc getIndex*(ctx: Context) {.async.} =
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
when isMainModule:
|
when isMainModule:
|
||||||
import tables
|
import tables
|
||||||
import os
|
import os
|
||||||
import modules/[blog, env, db]
|
import modules/[blog, env, db, formatter]
|
||||||
|
|
||||||
let dataDir: string = "data"
|
let dataDir: string = "data"
|
||||||
|
|
||||||
|
@ -10,21 +10,25 @@ when isMainModule:
|
||||||
"logging": boolEnvOrDefault("NIMBLOG_LOG", true)
|
"logging": boolEnvOrDefault("NIMBLOG_LOG", true)
|
||||||
}.toTable()
|
}.toTable()
|
||||||
|
|
||||||
|
if settings["debug"]:
|
||||||
|
logPrint("Debug mode is enabled", "Warning")
|
||||||
|
|
||||||
let dbSettings = {
|
let dbSettings = {
|
||||||
"path": dataDir & "/" & "blog.db",
|
"path": dataDir & "/" & "blog.db",
|
||||||
"schema_path": "schema.sql"
|
"schema_path": "schema.sql"
|
||||||
}.toTable()
|
}.toTable()
|
||||||
|
|
||||||
|
logPrint("Starting website", "Main")
|
||||||
|
|
||||||
if not dirExists(dataDir):
|
if not dirExists(dataDir):
|
||||||
echo "Created data directory"
|
logPrint("Created data directory", "Info")
|
||||||
createDir(dataDir)
|
createDir(dataDir)
|
||||||
|
|
||||||
if not createDb(dbSettings):
|
if not createDb(dbSettings):
|
||||||
echo "Failed to prepare database"
|
logPrint("Failed to prepare database", "Error")
|
||||||
quit(QuitFailure)
|
quit(QuitFailure)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
echo "Starting website"
|
|
||||||
runWebsite(settings=settings, dbSettings=dbSettings)
|
runWebsite(settings=settings, dbSettings=dbSettings)
|
||||||
except:
|
except:
|
||||||
echo "Could not run website"
|
logPrint("Could not run website", "Error")
|
||||||
|
|
Loading…
Reference in New Issue