Skip to content

Instantly share code, notes, and snippets.

@jpvillaseca
Created October 22, 2019 20:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jpvillaseca/8cdc67772db6a40d8f1dfb8f190c49bf to your computer and use it in GitHub Desktop.
Save jpvillaseca/8cdc67772db6a40d8f1dfb8f190c49bf to your computer and use it in GitHub Desktop.
Vscode verbose gopls output
[Trace - 17:45:14.037 PM] Sending request 'textDocument/hover - (56)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/session.go"},"position":{"line":19,"character":17}}
[Trace - 17:45:14.038 PM] Received response 'textDocument/hover - (56)' in 0ms.
Result: {"contents":{"kind":"markdown","value":"Session stores the metadata of every connected client\n```go\nSession struct {\n\tgorm.Model\n\tAppVersion string\n\tInternalVersion string\n\tDevice string\n\tMacAddress string\n\tTenant string\n\tVanityID string\n\tIPAddress string\n}\n```"},"range":{"start":{"line":19,"character":14},"end":{"line":19,"character":21}}}
[Trace - 17:45:15.281 PM] Sending notification 'textDocument/didClose'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/session.go"}}
[Trace - 17:45:15.282 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///c:/Users/noflo/go/src/jarvis-server/app/models/session.go","diagnostics":[]}
[Trace - 17:45:15.282 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/asset.go","diagnostics":[]}
[Trace - 17:45:15.282 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/initialize.go","diagnostics":[]}
[Trace - 17:45:15.282 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/session.go","diagnostics":[]}
[Trace - 17:45:15.321 PM] Sending notification 'textDocument/didOpen'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go","languageId":"go","version":1,"text":"package models\r\n\r\nimport (\r\n\tlog \"github.com/sirupsen/logrus\"\r\n\t\"github.com/spf13/viper\"\r\n\r\n\t\"github.com/jinzhu/gorm\"\r\n\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\r\n)\r\n\r\n// DatabaseConfig stores the configuration parameters for the database\r\ntype DatabaseConfig struct {\r\n\tLogging bool\r\n\tAutomigrate bool\r\n\tConnectionstring string\r\n}\r\n\r\nvar db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\r\nvar Config DatabaseConfig // stores database connection parameters\r\n\r\n// OpenSqliteConnection opens the connection, it should be called once\r\nfunc OpenSqliteConnection() error {\r\n\tvar err error\r\n\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\r\n\r\n\tif err != nil {\r\n\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\r\n\t\treturn err\r\n\t}\r\n\r\n\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\r\n\r\n\tdb.LogMode(Config.Logging)\r\n\r\n\treturn nil\r\n}\r\n\r\n// ReadConfigFile sets configuration parameters based on config file\r\nfunc ReadConfigFile() {\r\n\tConfig = DatabaseConfig{\r\n\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\r\n\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\r\n\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\r\n\t}\r\n}\r\n\r\n// Automigrate drops and recreates the database schema if enabled in app config\r\nfunc Automigrate() error {\r\n\tif Config.Automigrate {\r\n\t\tlog.Warn(\"Running database automigration\")\r\n\t\tdb.AutoMigrate(&Asset{}, &Session{}) // not for production use, drops and recreates the schema\r\n\t}\r\n\r\n\treturn nil\r\n}\r\n"}}
[Trace - 17:45:15.321 PM] Sending request 'textDocument/documentLink - (57)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:15.321 PM] Sending request 'textDocument/codeAction - (58)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"context":{"diagnostics":[]}}
[Trace - 17:45:15.321 PM] Sending request 'textDocument/documentSymbol - (59)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:15.324 PM] Received response 'textDocument/documentLink - (57)' in 2ms.
Result: [{"range":{"start":{"line":3,"character":1},"end":{"line":3,"character":33}},"target":"https://godoc.org/github.com/sirupsen/logrus"},{"range":{"start":{"line":4,"character":1},"end":{"line":4,"character":25}},"target":"https://godoc.org/github.com/spf13/viper"},{"range":{"start":{"line":6,"character":1},"end":{"line":6,"character":25}},"target":"https://godoc.org/github.com/jinzhu/gorm"},{"range":{"start":{"line":7,"character":1},"end":{"line":7,"character":43}},"target":"https://godoc.org/github.com/jinzhu/gorm/dialects/sqlite"}]
[Trace - 17:45:15.324 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/asset.go","diagnostics":[]}
[Trace - 17:45:15.324 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/initialize.go","diagnostics":[]}
[Trace - 17:45:15.325 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/session.go","diagnostics":[]}
[Trace - 17:45:15.325 PM] Received response 'textDocument/codeAction - (58)' in 3ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:15.325 PM] Received response 'textDocument/documentSymbol - (59)' in 3ms.
Result: [{"name":"DatabaseConfig","detail":"struct{...}","kind":23,"range":{"start":{"line":11,"character":5},"end":{"line":15,"character":1}},"selectionRange":{"start":{"line":11,"character":5},"end":{"line":11,"character":19}},"children":[{"name":"Logging","detail":"bool","kind":8,"range":{"start":{"line":12,"character":1},"end":{"line":12,"character":22}},"selectionRange":{"start":{"line":12,"character":1},"end":{"line":12,"character":8}}},{"name":"Automigrate","detail":"bool","kind":8,"range":{"start":{"line":13,"character":1},"end":{"line":13,"character":22}},"selectionRange":{"start":{"line":13,"character":1},"end":{"line":13,"character":12}}},{"name":"Connectionstring","detail":"string","kind":8,"range":{"start":{"line":14,"character":1},"end":{"line":14,"character":24}},"selectionRange":{"start":{"line":14,"character":1},"end":{"line":14,"character":17}}}]},{"name":"db","detail":"*gorm.DB","kind":13,"range":{"start":{"line":17,"character":0},"end":{"line":17,"character":15}},"selectionRange":{"start":{"line":17,"character":4},"end":{"line":17,"character":6}}},{"name":"Config","detail":"DatabaseConfig","kind":13,"range":{"start":{"line":18,"character":0},"end":{"line":18,"character":25}},"selectionRange":{"start":{"line":18,"character":4},"end":{"line":18,"character":10}}},{"name":"OpenSqliteConnection","detail":"()","kind":12,"range":{"start":{"line":21,"character":0},"end":{"line":35,"character":1}},"selectionRange":{"start":{"line":21,"character":5},"end":{"line":21,"character":25}}},{"name":"ReadConfigFile","detail":"()","kind":12,"range":{"start":{"line":38,"character":0},"end":{"line":44,"character":1}},"selectionRange":{"start":{"line":38,"character":5},"end":{"line":38,"character":19}}},{"name":"Automigrate","detail":"()","kind":12,"range":{"start":{"line":47,"character":0},"end":{"line":54,"character":1}},"selectionRange":{"start":{"line":47,"character":5},"end":{"line":47,"character":16}}}]
[Trace - 17:45:15.489 PM] Sending request 'textDocument/foldingRange - (60)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:15.489 PM] Received response 'textDocument/foldingRange - (60)' in 0ms.
Result: [{"startLine":2,"startCharacter":8,"endLine":7,"endCharacter":43,"kind":"imports"},{"startLine":11,"startCharacter":28,"endLine":14,"endCharacter":24},{"startLine":21,"startCharacter":35,"endLine":34,"endCharacter":11},{"startLine":25,"startCharacter":16,"endLine":27,"endCharacter":12},{"startLine":38,"startCharacter":23,"endLine":43,"endCharacter":2},{"startLine":47,"startCharacter":26,"endLine":53,"endCharacter":11},{"startLine":48,"startCharacter":24,"endLine":50,"endCharacter":38}]
[Trace - 17:45:15.545 PM] Sending request 'textDocument/codeAction - (61)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":47,"character":5},"end":{"line":47,"character":18}},"context":{"diagnostics":[]}}
[Trace - 17:45:15.547 PM] Received response 'textDocument/codeAction - (61)' in 1ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:16.303 PM] Sending request 'textDocument/codeAction - (62)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":43,"character":2},"end":{"line":43,"character":2}},"context":{"diagnostics":[]}}
[Trace - 17:45:16.304 PM] Received response 'textDocument/codeAction - (62)' in 1ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:17.283 PM] Sending request 'textDocument/hover - (63)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"position":{"line":41,"character":13}}
[Trace - 17:45:17.283 PM] Received response 'textDocument/hover - (63)' in 0ms.
Result: {}
[Trace - 17:45:17.421 PM] Sending request 'textDocument/definition - (64)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"position":{"line":40,"character":13}}
[Trace - 17:45:17.421 PM] Received response 'textDocument/definition - (64)' in 0ms.
Result: [{"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/initialize.go","range":{"start":{"line":13,"character":1},"end":{"line":13,"character":12}}}]
[Trace - 17:45:17.480 PM] Sending request 'textDocument/hover - (65)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"position":{"line":40,"character":12}}
[Trace - 17:45:17.480 PM] Received response 'textDocument/hover - (65)' in 0ms.
Result: {"contents":{"kind":"markdown","value":"```go\nfield Automigrate bool\n```"},"range":{"start":{"line":40,"character":2},"end":{"line":40,"character":13}}}
[Trace - 17:45:17.560 PM] Sending request 'textDocument/codeAction - (66)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"context":{"diagnostics":[]}}
[Trace - 17:45:17.562 PM] Received response 'textDocument/codeAction - (66)' in 2ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:17.587 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go","version":2},"contentChanges":[{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\treturn nil\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tdb.AutoMigrate(&Asset{}, &Session{}) // not for production use, drops and recreates the schema\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tlog.Warn(\"Running database automigration\")\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tif Config.Automigrate {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"func Automigrate() error {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"// Automigrate drops and recreates the database schema if enabled in app config\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tConfig = DatabaseConfig{\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"func ReadConfigFile() {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"// ReadConfigFile sets configuration parameters based on config file\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\treturn nil\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tdb.LogMode(Config.Logging)\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\treturn err\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tif err != nil {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tvar err error\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"func OpenSqliteConnection() error {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"// OpenSqliteConnection opens the connection, it should be called once\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"var Config DatabaseConfig // stores database connection parameters\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tConnectionstring string\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tAutomigrate bool\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tLogging bool\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"type DatabaseConfig struct {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"// DatabaseConfig stores the configuration parameters for the database\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":")\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\"github.com/jinzhu/gorm\"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\"github.com/spf13/viper\"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tlog \"github.com/sirupsen/logrus\"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"import (\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"package models\r\n"},{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"rangeLength":1632,"text":""}]}
[Trace - 17:45:17.587 PM] Sending request 'textDocument/formatting - (67)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"options":{"tabSize":4,"insertSpaces":false}}
[Trace - 17:45:17.588 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/initialize.go","diagnostics":[]}
[Trace - 17:45:17.588 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/session.go","diagnostics":[]}
[Trace - 17:45:17.588 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/asset.go","diagnostics":[]}
[Trace - 17:45:17.589 PM] Received response 'textDocument/formatting - (67)' in 1ms.
Result: [{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]
[Trace - 17:45:17.625 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go","version":3},"contentChanges":[{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\treturn nil\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tdb.AutoMigrate(&Asset{}, &Session{}) // not for production use, drops and recreates the schema\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tlog.Warn(\"Running database automigration\")\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tif Config.Automigrate {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"func Automigrate() error {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"// Automigrate drops and recreates the database schema if enabled in app config\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tConfig = DatabaseConfig{\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"func ReadConfigFile() {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"// ReadConfigFile sets configuration parameters based on config file\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\treturn nil\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tdb.LogMode(Config.Logging)\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\treturn err\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tif err != nil {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tvar err error\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"func OpenSqliteConnection() error {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"// OpenSqliteConnection opens the connection, it should be called once\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"var Config DatabaseConfig // stores database connection parameters\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tConnectionstring string\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tAutomigrate bool\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tLogging bool\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"type DatabaseConfig struct {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"// DatabaseConfig stores the configuration parameters for the database\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":")\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\"github.com/jinzhu/gorm\"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\"github.com/spf13/viper\"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tlog \"github.com/sirupsen/logrus\"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"import (\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"package models\r\n"},{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"rangeLength":1632,"text":""}]}
[Trace - 17:45:17.625 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/asset.go","diagnostics":[]}
[Trace - 17:45:17.625 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/initialize.go","diagnostics":[]}
[Trace - 17:45:17.625 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/session.go","diagnostics":[]}
[Trace - 17:45:17.691 PM] Sending notification 'textDocument/didSave'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go","version":3}}
[Trace - 17:45:17.822 PM] Sending request 'textDocument/foldingRange - (68)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:17.822 PM] Received response 'textDocument/foldingRange - (68)' in 0ms.
Result: [{"startLine":2,"startCharacter":8,"endLine":7,"endCharacter":43,"kind":"imports"},{"startLine":11,"startCharacter":28,"endLine":14,"endCharacter":24},{"startLine":21,"startCharacter":35,"endLine":34,"endCharacter":11},{"startLine":25,"startCharacter":16,"endLine":27,"endCharacter":12},{"startLine":38,"startCharacter":23,"endLine":43,"endCharacter":2},{"startLine":47,"startCharacter":26,"endLine":53,"endCharacter":11},{"startLine":48,"startCharacter":24,"endLine":50,"endCharacter":38}]
[Trace - 17:45:17.975 PM] Sending request 'textDocument/documentSymbol - (69)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:17.976 PM] Received response 'textDocument/documentSymbol - (69)' in 0ms.
Result: [{"name":"DatabaseConfig","detail":"struct{...}","kind":23,"range":{"start":{"line":11,"character":5},"end":{"line":15,"character":1}},"selectionRange":{"start":{"line":11,"character":5},"end":{"line":11,"character":19}},"children":[{"name":"Logging","detail":"bool","kind":8,"range":{"start":{"line":12,"character":1},"end":{"line":12,"character":22}},"selectionRange":{"start":{"line":12,"character":1},"end":{"line":12,"character":8}}},{"name":"Automigrate","detail":"bool","kind":8,"range":{"start":{"line":13,"character":1},"end":{"line":13,"character":22}},"selectionRange":{"start":{"line":13,"character":1},"end":{"line":13,"character":12}}},{"name":"Connectionstring","detail":"string","kind":8,"range":{"start":{"line":14,"character":1},"end":{"line":14,"character":24}},"selectionRange":{"start":{"line":14,"character":1},"end":{"line":14,"character":17}}}]},{"name":"db","detail":"*gorm.DB","kind":13,"range":{"start":{"line":17,"character":0},"end":{"line":17,"character":15}},"selectionRange":{"start":{"line":17,"character":4},"end":{"line":17,"character":6}}},{"name":"Config","detail":"DatabaseConfig","kind":13,"range":{"start":{"line":18,"character":0},"end":{"line":18,"character":25}},"selectionRange":{"start":{"line":18,"character":4},"end":{"line":18,"character":10}}},{"name":"OpenSqliteConnection","detail":"()","kind":12,"range":{"start":{"line":21,"character":0},"end":{"line":35,"character":1}},"selectionRange":{"start":{"line":21,"character":5},"end":{"line":21,"character":25}}},{"name":"ReadConfigFile","detail":"()","kind":12,"range":{"start":{"line":38,"character":0},"end":{"line":44,"character":1}},"selectionRange":{"start":{"line":38,"character":5},"end":{"line":38,"character":19}}},{"name":"Automigrate","detail":"()","kind":12,"range":{"start":{"line":47,"character":0},"end":{"line":54,"character":1}},"selectionRange":{"start":{"line":47,"character":5},"end":{"line":47,"character":16}}}]
[Trace - 17:45:18.014 PM] Sending request 'textDocument/codeAction - (70)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"context":{"diagnostics":[]}}
[Trace - 17:45:18.015 PM] Received response 'textDocument/codeAction - (70)' in 0ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:18.584 PM] Sending request 'textDocument/documentLink - (71)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:18.584 PM] Received response 'textDocument/documentLink - (71)' in 0ms.
Result: [{"range":{"start":{"line":3,"character":1},"end":{"line":3,"character":33}},"target":"https://godoc.org/github.com/sirupsen/logrus"},{"range":{"start":{"line":4,"character":1},"end":{"line":4,"character":25}},"target":"https://godoc.org/github.com/spf13/viper"},{"range":{"start":{"line":6,"character":1},"end":{"line":6,"character":25}},"target":"https://godoc.org/github.com/jinzhu/gorm"},{"range":{"start":{"line":7,"character":1},"end":{"line":7,"character":43}},"target":"https://godoc.org/github.com/jinzhu/gorm/dialects/sqlite"}]
[Trace - 17:45:19.786 PM] Sending request 'textDocument/codeAction - (72)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":18,"character":4},"end":{"line":18,"character":66}},"context":{"diagnostics":[{"range":{"start":{"line":18,"character":4},"end":{"line":18,"character":66}},"message":"exported var Config should have comment or be unexported","severity":2,"source":"go-lint"}]}}
[Trace - 17:45:19.787 PM] Received response 'textDocument/codeAction - (72)' in 1ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:20.010 PM] Sending request 'textDocument/codeAction - (73)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":18,"character":4},"end":{"line":18,"character":66}},"context":{"diagnostics":[{"range":{"start":{"line":18,"character":4},"end":{"line":18,"character":66}},"message":"exported var Config should have comment or be unexported","severity":2,"source":"go-lint"}]}}
[Trace - 17:45:20.011 PM] Received response 'textDocument/codeAction - (73)' in 0ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:21.156 PM] Sending request 'textDocument/documentHighlight - (74)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"position":{"line":17,"character":38}}
[Trace - 17:45:21.156 PM] Received response 'textDocument/documentHighlight - (74)' in 0ms.
Result: []
[Trace - 17:45:21.386 PM] Sending request 'textDocument/codeAction - (75)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":17,"character":38},"end":{"line":17,"character":38}},"context":{"diagnostics":[]}}
[Trace - 17:45:21.390 PM] Received response 'textDocument/codeAction - (75)' in 4ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:22.227 PM] Sending request 'textDocument/documentHighlight - (76)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"position":{"line":18,"character":38}}
[Trace - 17:45:22.227 PM] Received response 'textDocument/documentHighlight - (76)' in 0ms.
Result: []
[Trace - 17:45:22.472 PM] Sending request 'textDocument/codeAction - (77)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":18,"character":38},"end":{"line":18,"character":38}},"context":{"diagnostics":[{"range":{"start":{"line":18,"character":4},"end":{"line":18,"character":66}},"message":"exported var Config should have comment or be unexported","severity":2,"source":"go-lint"}]}}
[Trace - 17:45:22.476 PM] Received response 'textDocument/codeAction - (77)' in 3ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:22.787 PM] Sending request 'textDocument/codeAction - (78)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":18,"character":37},"end":{"line":18,"character":37}},"context":{"diagnostics":[{"range":{"start":{"line":18,"character":4},"end":{"line":18,"character":66}},"message":"exported var Config should have comment or be unexported","severity":2,"source":"go-lint"}]}}
[Trace - 17:45:22.791 PM] Received response 'textDocument/codeAction - (78)' in 3ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:23.080 PM] Sending request 'textDocument/documentHighlight - (79)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"position":{"line":18,"character":35}}
[Trace - 17:45:23.080 PM] Received response 'textDocument/documentHighlight - (79)' in 0ms.
Result: []
[Trace - 17:45:23.410 PM] Sending request 'textDocument/documentHighlight - (80)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"position":{"line":18,"character":25}}
[Trace - 17:45:23.411 PM] Received response 'textDocument/documentHighlight - (80)' in 0ms.
Result: []
[Trace - 17:45:23.874 PM] Sending request 'textDocument/documentHighlight - (81)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"position":{"line":18,"character":10}}
[Trace - 17:45:23.874 PM] Received response 'textDocument/documentHighlight - (81)' in 0ms.
Result: []
[Trace - 17:45:24.389 PM] Sending request 'textDocument/documentHighlight - (82)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"position":{"line":18,"character":3}}
[Trace - 17:45:24.389 PM] Received response 'textDocument/documentHighlight - (82)' in 0ms.
Result: []
[Trace - 17:45:24.960 PM] Sending request 'textDocument/codeAction - (83)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":18,"character":1},"end":{"line":18,"character":1}},"context":{"diagnostics":[]}}
[Trace - 17:45:24.965 PM] Received response 'textDocument/codeAction - (83)' in 4ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:25.284 PM] Sending request 'textDocument/codeAction - (84)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":18,"character":0},"end":{"line":18,"character":0}},"context":{"diagnostics":[]}}
[Trace - 17:45:25.288 PM] Received response 'textDocument/codeAction - (84)' in 3ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:25.695 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go","version":4},"contentChanges":[{"range":{"start":{"line":18,"character":0},"end":{"line":18,"character":0}},"rangeLength":0,"text":"\r\n"}]}
[Trace - 17:45:25.695 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/asset.go","diagnostics":[]}
[Trace - 17:45:25.695 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/initialize.go","diagnostics":[]}
[Trace - 17:45:25.695 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/session.go","diagnostics":[]}
[Trace - 17:45:25.869 PM] Sending request 'textDocument/foldingRange - (85)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:25.870 PM] Received response 'textDocument/foldingRange - (85)' in 1ms.
Result: [{"startLine":2,"startCharacter":8,"endLine":7,"endCharacter":43,"kind":"imports"},{"startLine":11,"startCharacter":28,"endLine":14,"endCharacter":24},{"startLine":21,"startCharacter":35,"endLine":34,"endCharacter":11},{"startLine":25,"startCharacter":16,"endLine":27,"endCharacter":12},{"startLine":38,"startCharacter":23,"endLine":43,"endCharacter":2},{"startLine":47,"startCharacter":26,"endLine":53,"endCharacter":11},{"startLine":48,"startCharacter":24,"endLine":50,"endCharacter":38}]
[Trace - 17:45:25.919 PM] Sending request 'textDocument/codeAction - (86)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":19,"character":0},"end":{"line":19,"character":0}},"context":{"diagnostics":[]}}
[Trace - 17:45:25.919 PM] Received response 'textDocument/codeAction - (86)' in 0ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:26.018 PM] Sending request 'textDocument/documentSymbol - (87)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:26.019 PM] Received response 'textDocument/documentSymbol - (87)' in 0ms.
Result: [{"name":"DatabaseConfig","detail":"struct{...}","kind":23,"range":{"start":{"line":11,"character":5},"end":{"line":15,"character":1}},"selectionRange":{"start":{"line":11,"character":5},"end":{"line":11,"character":19}},"children":[{"name":"Logging","detail":"bool","kind":8,"range":{"start":{"line":12,"character":1},"end":{"line":12,"character":22}},"selectionRange":{"start":{"line":12,"character":1},"end":{"line":12,"character":8}}},{"name":"Automigrate","detail":"bool","kind":8,"range":{"start":{"line":13,"character":1},"end":{"line":13,"character":22}},"selectionRange":{"start":{"line":13,"character":1},"end":{"line":13,"character":12}}},{"name":"Connectionstring","detail":"string","kind":8,"range":{"start":{"line":14,"character":1},"end":{"line":14,"character":24}},"selectionRange":{"start":{"line":14,"character":1},"end":{"line":14,"character":17}}}]},{"name":"db","detail":"*gorm.DB","kind":13,"range":{"start":{"line":17,"character":0},"end":{"line":17,"character":15}},"selectionRange":{"start":{"line":17,"character":4},"end":{"line":17,"character":6}}},{"name":"Config","detail":"DatabaseConfig","kind":13,"range":{"start":{"line":18,"character":0},"end":{"line":18,"character":25}},"selectionRange":{"start":{"line":18,"character":4},"end":{"line":18,"character":10}}},{"name":"OpenSqliteConnection","detail":"()","kind":12,"range":{"start":{"line":21,"character":0},"end":{"line":35,"character":1}},"selectionRange":{"start":{"line":21,"character":5},"end":{"line":21,"character":25}}},{"name":"ReadConfigFile","detail":"()","kind":12,"range":{"start":{"line":38,"character":0},"end":{"line":44,"character":1}},"selectionRange":{"start":{"line":38,"character":5},"end":{"line":38,"character":19}}},{"name":"Automigrate","detail":"()","kind":12,"range":{"start":{"line":47,"character":0},"end":{"line":54,"character":1}},"selectionRange":{"start":{"line":47,"character":5},"end":{"line":47,"character":16}}}]
[Trace - 17:45:26.671 PM] Sending request 'textDocument/documentLink - (88)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:26.672 PM] Received response 'textDocument/documentLink - (88)' in 0ms.
Result: [{"range":{"start":{"line":3,"character":1},"end":{"line":3,"character":33}},"target":"https://godoc.org/github.com/sirupsen/logrus"},{"range":{"start":{"line":4,"character":1},"end":{"line":4,"character":25}},"target":"https://godoc.org/github.com/spf13/viper"},{"range":{"start":{"line":6,"character":1},"end":{"line":6,"character":25}},"target":"https://godoc.org/github.com/jinzhu/gorm"},{"range":{"start":{"line":7,"character":1},"end":{"line":7,"character":43}},"target":"https://godoc.org/github.com/jinzhu/gorm/dialects/sqlite"}]
[Trace - 17:45:27.482 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go","version":5},"contentChanges":[{"range":{"start":{"line":18,"character":0},"end":{"line":18,"character":0}},"rangeLength":0,"text":"\r\n"}]}
[Trace - 17:45:27.482 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/session.go","diagnostics":[]}
[Trace - 17:45:27.482 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/asset.go","diagnostics":[]}
[Trace - 17:45:27.482 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/initialize.go","diagnostics":[]}
[Trace - 17:45:27.670 PM] Sending request 'textDocument/foldingRange - (89)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:27.671 PM] Received response 'textDocument/foldingRange - (89)' in 1ms.
Result: [{"startLine":2,"startCharacter":8,"endLine":7,"endCharacter":43,"kind":"imports"},{"startLine":11,"startCharacter":28,"endLine":14,"endCharacter":24},{"startLine":21,"startCharacter":35,"endLine":34,"endCharacter":11},{"startLine":25,"startCharacter":16,"endLine":27,"endCharacter":12},{"startLine":38,"startCharacter":23,"endLine":43,"endCharacter":2},{"startLine":47,"startCharacter":26,"endLine":53,"endCharacter":11},{"startLine":48,"startCharacter":24,"endLine":50,"endCharacter":38}]
[Trace - 17:45:27.819 PM] Sending request 'textDocument/documentSymbol - (90)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:27.820 PM] Received response 'textDocument/documentSymbol - (90)' in 0ms.
Result: [{"name":"DatabaseConfig","detail":"struct{...}","kind":23,"range":{"start":{"line":11,"character":5},"end":{"line":15,"character":1}},"selectionRange":{"start":{"line":11,"character":5},"end":{"line":11,"character":19}},"children":[{"name":"Logging","detail":"bool","kind":8,"range":{"start":{"line":12,"character":1},"end":{"line":12,"character":22}},"selectionRange":{"start":{"line":12,"character":1},"end":{"line":12,"character":8}}},{"name":"Automigrate","detail":"bool","kind":8,"range":{"start":{"line":13,"character":1},"end":{"line":13,"character":22}},"selectionRange":{"start":{"line":13,"character":1},"end":{"line":13,"character":12}}},{"name":"Connectionstring","detail":"string","kind":8,"range":{"start":{"line":14,"character":1},"end":{"line":14,"character":24}},"selectionRange":{"start":{"line":14,"character":1},"end":{"line":14,"character":17}}}]},{"name":"db","detail":"*gorm.DB","kind":13,"range":{"start":{"line":17,"character":0},"end":{"line":17,"character":15}},"selectionRange":{"start":{"line":17,"character":4},"end":{"line":17,"character":6}}},{"name":"Config","detail":"DatabaseConfig","kind":13,"range":{"start":{"line":18,"character":0},"end":{"line":18,"character":25}},"selectionRange":{"start":{"line":18,"character":4},"end":{"line":18,"character":10}}},{"name":"OpenSqliteConnection","detail":"()","kind":12,"range":{"start":{"line":21,"character":0},"end":{"line":35,"character":1}},"selectionRange":{"start":{"line":21,"character":5},"end":{"line":21,"character":25}}},{"name":"ReadConfigFile","detail":"()","kind":12,"range":{"start":{"line":38,"character":0},"end":{"line":44,"character":1}},"selectionRange":{"start":{"line":38,"character":5},"end":{"line":38,"character":19}}},{"name":"Automigrate","detail":"()","kind":12,"range":{"start":{"line":47,"character":0},"end":{"line":54,"character":1}},"selectionRange":{"start":{"line":47,"character":5},"end":{"line":47,"character":16}}}]
[Trace - 17:45:28.468 PM] Sending request 'textDocument/documentLink - (91)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:28.468 PM] Received response 'textDocument/documentLink - (91)' in 0ms.
Result: [{"range":{"start":{"line":3,"character":1},"end":{"line":3,"character":33}},"target":"https://godoc.org/github.com/sirupsen/logrus"},{"range":{"start":{"line":4,"character":1},"end":{"line":4,"character":25}},"target":"https://godoc.org/github.com/spf13/viper"},{"range":{"start":{"line":6,"character":1},"end":{"line":6,"character":25}},"target":"https://godoc.org/github.com/jinzhu/gorm"},{"range":{"start":{"line":7,"character":1},"end":{"line":7,"character":43}},"target":"https://godoc.org/github.com/jinzhu/gorm/dialects/sqlite"}]
[Trace - 17:45:29.041 PM] Sending request 'textDocument/documentHighlight - (92)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"position":{"line":20,"character":29}}
[Trace - 17:45:29.041 PM] Received response 'textDocument/documentHighlight - (92)' in 0ms.
Result: []
[Trace - 17:45:29.452 PM] Sending request 'textDocument/codeAction - (93)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":20,"character":29},"end":{"line":20,"character":35}},"context":{"diagnostics":[]}}
[Trace - 17:45:29.454 PM] Received response 'textDocument/codeAction - (93)' in 2ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:30.551 PM] Sending request 'textDocument/codeAction - (94)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":20,"character":26},"end":{"line":20,"character":26}},"context":{"diagnostics":[]}}
[Trace - 17:45:30.554 PM] Received response 'textDocument/codeAction - (94)' in 2ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:31.292 PM] Sending request 'textDocument/codeAction - (95)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":20,"character":26},"end":{"line":20,"character":66}},"context":{"diagnostics":[]}}
[Trace - 17:45:31.296 PM] Received response 'textDocument/codeAction - (95)' in 3ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:31.478 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go","version":6},"contentChanges":[{"range":{"start":{"line":20,"character":26},"end":{"line":20,"character":66}},"rangeLength":40,"text":""}]}
[Trace - 17:45:31.478 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/asset.go","diagnostics":[]}
[Trace - 17:45:31.478 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/initialize.go","diagnostics":[]}
[Trace - 17:45:31.478 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/session.go","diagnostics":[]}
[Trace - 17:45:31.684 PM] Sending request 'textDocument/foldingRange - (96)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:31.684 PM] Received response 'textDocument/foldingRange - (96)' in 0ms.
Result: [{"startLine":2,"startCharacter":8,"endLine":7,"endCharacter":43,"kind":"imports"},{"startLine":11,"startCharacter":28,"endLine":14,"endCharacter":24},{"startLine":21,"startCharacter":35,"endLine":34,"endCharacter":11},{"startLine":25,"startCharacter":16,"endLine":27,"endCharacter":12},{"startLine":38,"startCharacter":23,"endLine":43,"endCharacter":2},{"startLine":47,"startCharacter":26,"endLine":53,"endCharacter":11},{"startLine":48,"startCharacter":24,"endLine":50,"endCharacter":38}]
[Trace - 17:45:31.830 PM] Sending request 'textDocument/documentSymbol - (97)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:31.830 PM] Received response 'textDocument/documentSymbol - (97)' in 0ms.
Result: [{"name":"DatabaseConfig","detail":"struct{...}","kind":23,"range":{"start":{"line":11,"character":5},"end":{"line":15,"character":1}},"selectionRange":{"start":{"line":11,"character":5},"end":{"line":11,"character":19}},"children":[{"name":"Logging","detail":"bool","kind":8,"range":{"start":{"line":12,"character":1},"end":{"line":12,"character":22}},"selectionRange":{"start":{"line":12,"character":1},"end":{"line":12,"character":8}}},{"name":"Automigrate","detail":"bool","kind":8,"range":{"start":{"line":13,"character":1},"end":{"line":13,"character":22}},"selectionRange":{"start":{"line":13,"character":1},"end":{"line":13,"character":12}}},{"name":"Connectionstring","detail":"string","kind":8,"range":{"start":{"line":14,"character":1},"end":{"line":14,"character":24}},"selectionRange":{"start":{"line":14,"character":1},"end":{"line":14,"character":17}}}]},{"name":"db","detail":"*gorm.DB","kind":13,"range":{"start":{"line":17,"character":0},"end":{"line":17,"character":15}},"selectionRange":{"start":{"line":17,"character":4},"end":{"line":17,"character":6}}},{"name":"Config","detail":"DatabaseConfig","kind":13,"range":{"start":{"line":18,"character":0},"end":{"line":18,"character":25}},"selectionRange":{"start":{"line":18,"character":4},"end":{"line":18,"character":10}}},{"name":"OpenSqliteConnection","detail":"()","kind":12,"range":{"start":{"line":21,"character":0},"end":{"line":35,"character":1}},"selectionRange":{"start":{"line":21,"character":5},"end":{"line":21,"character":25}}},{"name":"ReadConfigFile","detail":"()","kind":12,"range":{"start":{"line":38,"character":0},"end":{"line":44,"character":1}},"selectionRange":{"start":{"line":38,"character":5},"end":{"line":38,"character":19}}},{"name":"Automigrate","detail":"()","kind":12,"range":{"start":{"line":47,"character":0},"end":{"line":54,"character":1}},"selectionRange":{"start":{"line":47,"character":5},"end":{"line":47,"character":16}}}]
[Trace - 17:45:31.895 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go","version":7},"contentChanges":[{"range":{"start":{"line":20,"character":25},"end":{"line":20,"character":26}},"rangeLength":1,"text":""}]}
[Trace - 17:45:31.895 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/session.go","diagnostics":[]}
[Trace - 17:45:31.895 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/asset.go","diagnostics":[]}
[Trace - 17:45:31.895 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/initialize.go","diagnostics":[]}
[Trace - 17:45:32.071 PM] Sending request 'textDocument/foldingRange - (98)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:32.073 PM] Received response 'textDocument/foldingRange - (98)' in 1ms.
Result: [{"startLine":2,"startCharacter":8,"endLine":7,"endCharacter":43,"kind":"imports"},{"startLine":11,"startCharacter":28,"endLine":14,"endCharacter":24},{"startLine":21,"startCharacter":35,"endLine":34,"endCharacter":11},{"startLine":25,"startCharacter":16,"endLine":27,"endCharacter":12},{"startLine":38,"startCharacter":23,"endLine":43,"endCharacter":2},{"startLine":47,"startCharacter":26,"endLine":53,"endCharacter":11},{"startLine":48,"startCharacter":24,"endLine":50,"endCharacter":38}]
[Trace - 17:45:32.118 PM] Sending request 'textDocument/codeAction - (99)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":20,"character":25},"end":{"line":20,"character":25}},"context":{"diagnostics":[]}}
[Trace - 17:45:32.119 PM] Received response 'textDocument/codeAction - (99)' in 0ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:32.220 PM] Sending request 'textDocument/documentSymbol - (100)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:32.221 PM] Received response 'textDocument/documentSymbol - (100)' in 0ms.
Result: [{"name":"DatabaseConfig","detail":"struct{...}","kind":23,"range":{"start":{"line":11,"character":5},"end":{"line":15,"character":1}},"selectionRange":{"start":{"line":11,"character":5},"end":{"line":11,"character":19}},"children":[{"name":"Logging","detail":"bool","kind":8,"range":{"start":{"line":12,"character":1},"end":{"line":12,"character":22}},"selectionRange":{"start":{"line":12,"character":1},"end":{"line":12,"character":8}}},{"name":"Automigrate","detail":"bool","kind":8,"range":{"start":{"line":13,"character":1},"end":{"line":13,"character":22}},"selectionRange":{"start":{"line":13,"character":1},"end":{"line":13,"character":12}}},{"name":"Connectionstring","detail":"string","kind":8,"range":{"start":{"line":14,"character":1},"end":{"line":14,"character":24}},"selectionRange":{"start":{"line":14,"character":1},"end":{"line":14,"character":17}}}]},{"name":"db","detail":"*gorm.DB","kind":13,"range":{"start":{"line":17,"character":0},"end":{"line":17,"character":15}},"selectionRange":{"start":{"line":17,"character":4},"end":{"line":17,"character":6}}},{"name":"Config","detail":"DatabaseConfig","kind":13,"range":{"start":{"line":18,"character":0},"end":{"line":18,"character":25}},"selectionRange":{"start":{"line":18,"character":4},"end":{"line":18,"character":10}}},{"name":"OpenSqliteConnection","detail":"()","kind":12,"range":{"start":{"line":21,"character":0},"end":{"line":35,"character":1}},"selectionRange":{"start":{"line":21,"character":5},"end":{"line":21,"character":25}}},{"name":"ReadConfigFile","detail":"()","kind":12,"range":{"start":{"line":38,"character":0},"end":{"line":44,"character":1}},"selectionRange":{"start":{"line":38,"character":5},"end":{"line":38,"character":19}}},{"name":"Automigrate","detail":"()","kind":12,"range":{"start":{"line":47,"character":0},"end":{"line":54,"character":1}},"selectionRange":{"start":{"line":47,"character":5},"end":{"line":47,"character":16}}}]
[Trace - 17:45:32.477 PM] Sending request 'textDocument/documentLink - (101)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:32.477 PM] Received response 'textDocument/documentLink - (101)' in 0ms.
Result: [{"range":{"start":{"line":3,"character":1},"end":{"line":3,"character":33}},"target":"https://godoc.org/github.com/sirupsen/logrus"},{"range":{"start":{"line":4,"character":1},"end":{"line":4,"character":25}},"target":"https://godoc.org/github.com/spf13/viper"},{"range":{"start":{"line":6,"character":1},"end":{"line":6,"character":25}},"target":"https://godoc.org/github.com/jinzhu/gorm"},{"range":{"start":{"line":7,"character":1},"end":{"line":7,"character":43}},"target":"https://godoc.org/github.com/jinzhu/gorm/dialects/sqlite"}]
[Trace - 17:45:33.244 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go","version":8},"contentChanges":[{"range":{"start":{"line":19,"character":0},"end":{"line":19,"character":0}},"rangeLength":0,"text":"// stores database connection parameters"}]}
[Trace - 17:45:33.245 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/asset.go","diagnostics":[]}
[Trace - 17:45:33.245 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/initialize.go","diagnostics":[]}
[Trace - 17:45:33.245 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/session.go","diagnostics":[]}
[Trace - 17:45:33.423 PM] Sending request 'textDocument/foldingRange - (102)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:33.424 PM] Received response 'textDocument/foldingRange - (102)' in 0ms.
Result: [{"startLine":2,"startCharacter":8,"endLine":7,"endCharacter":43,"kind":"imports"},{"startLine":11,"startCharacter":28,"endLine":14,"endCharacter":24},{"startLine":21,"startCharacter":35,"endLine":34,"endCharacter":11},{"startLine":25,"startCharacter":16,"endLine":27,"endCharacter":12},{"startLine":38,"startCharacter":23,"endLine":43,"endCharacter":2},{"startLine":47,"startCharacter":26,"endLine":53,"endCharacter":11},{"startLine":48,"startCharacter":24,"endLine":50,"endCharacter":38}]
[Trace - 17:45:33.473 PM] Sending request 'textDocument/codeAction - (103)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":19,"character":40},"end":{"line":19,"character":40}},"context":{"diagnostics":[]}}
[Trace - 17:45:33.474 PM] Received response 'textDocument/codeAction - (103)' in 1ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:33.573 PM] Sending request 'textDocument/documentSymbol - (104)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:33.573 PM] Received response 'textDocument/documentSymbol - (104)' in 0ms.
Result: [{"name":"DatabaseConfig","detail":"struct{...}","kind":23,"range":{"start":{"line":11,"character":5},"end":{"line":15,"character":1}},"selectionRange":{"start":{"line":11,"character":5},"end":{"line":11,"character":19}},"children":[{"name":"Logging","detail":"bool","kind":8,"range":{"start":{"line":12,"character":1},"end":{"line":12,"character":22}},"selectionRange":{"start":{"line":12,"character":1},"end":{"line":12,"character":8}}},{"name":"Automigrate","detail":"bool","kind":8,"range":{"start":{"line":13,"character":1},"end":{"line":13,"character":22}},"selectionRange":{"start":{"line":13,"character":1},"end":{"line":13,"character":12}}},{"name":"Connectionstring","detail":"string","kind":8,"range":{"start":{"line":14,"character":1},"end":{"line":14,"character":24}},"selectionRange":{"start":{"line":14,"character":1},"end":{"line":14,"character":17}}}]},{"name":"db","detail":"*gorm.DB","kind":13,"range":{"start":{"line":17,"character":0},"end":{"line":17,"character":15}},"selectionRange":{"start":{"line":17,"character":4},"end":{"line":17,"character":6}}},{"name":"Config","detail":"DatabaseConfig","kind":13,"range":{"start":{"line":18,"character":0},"end":{"line":18,"character":25}},"selectionRange":{"start":{"line":18,"character":4},"end":{"line":18,"character":10}}},{"name":"OpenSqliteConnection","detail":"()","kind":12,"range":{"start":{"line":21,"character":0},"end":{"line":35,"character":1}},"selectionRange":{"start":{"line":21,"character":5},"end":{"line":21,"character":25}}},{"name":"ReadConfigFile","detail":"()","kind":12,"range":{"start":{"line":38,"character":0},"end":{"line":44,"character":1}},"selectionRange":{"start":{"line":38,"character":5},"end":{"line":38,"character":19}}},{"name":"Automigrate","detail":"()","kind":12,"range":{"start":{"line":47,"character":0},"end":{"line":54,"character":1}},"selectionRange":{"start":{"line":47,"character":5},"end":{"line":47,"character":16}}}]
[Trace - 17:45:34.225 PM] Sending request 'textDocument/documentLink - (105)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:34.225 PM] Received response 'textDocument/documentLink - (105)' in 0ms.
Result: [{"range":{"start":{"line":3,"character":1},"end":{"line":3,"character":33}},"target":"https://godoc.org/github.com/sirupsen/logrus"},{"range":{"start":{"line":4,"character":1},"end":{"line":4,"character":25}},"target":"https://godoc.org/github.com/spf13/viper"},{"range":{"start":{"line":6,"character":1},"end":{"line":6,"character":25}},"target":"https://godoc.org/github.com/jinzhu/gorm"},{"range":{"start":{"line":7,"character":1},"end":{"line":7,"character":43}},"target":"https://godoc.org/github.com/jinzhu/gorm/dialects/sqlite"}]
[Trace - 17:45:34.569 PM] Sending request 'textDocument/hover - (106)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"position":{"line":22,"character":5}}
[Trace - 17:45:34.569 PM] Received response 'textDocument/hover - (106)' in 0ms.
Result: {"contents":{"kind":"markdown","value":"```go\nvar err error\n```"},"range":{"start":{"line":22,"character":5},"end":{"line":22,"character":8}}}
[Trace - 17:45:34.872 PM] Sending request 'textDocument/hover - (107)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"position":{"line":19,"character":2}}
[Trace - 17:45:34.873 PM] Received response 'textDocument/hover - (107)' in 1ms.
Result: {}
[Trace - 17:45:34.953 PM] Sending request 'textDocument/documentHighlight - (108)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"position":{"line":19,"character":3}}
[Trace - 17:45:34.953 PM] Received response 'textDocument/documentHighlight - (108)' in 0ms.
Result: []
[Trace - 17:45:35.200 PM] Sending request 'textDocument/codeAction - (109)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":19,"character":3},"end":{"line":19,"character":3}},"context":{"diagnostics":[]}}
[Trace - 17:45:35.203 PM] Received response 'textDocument/codeAction - (109)' in 3ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:35.502 PM] Sending request 'textDocument/hover - (110)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"position":{"line":20,"character":6}}
[Trace - 17:45:35.502 PM] Received response 'textDocument/hover - (110)' in 0ms.
Result: {}
[Trace - 17:45:35.601 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go","version":9},"contentChanges":[{"range":{"start":{"line":19,"character":3},"end":{"line":19,"character":3}},"rangeLength":0,"text":"C"}]}
[Trace - 17:45:35.601 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/asset.go","diagnostics":[]}
[Trace - 17:45:35.602 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/initialize.go","diagnostics":[]}
[Trace - 17:45:35.602 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/session.go","diagnostics":[]}
[Trace - 17:45:35.789 PM] Sending request 'textDocument/foldingRange - (111)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:35.790 PM] Received response 'textDocument/foldingRange - (111)' in 0ms.
Result: [{"startLine":2,"startCharacter":8,"endLine":7,"endCharacter":43,"kind":"imports"},{"startLine":11,"startCharacter":28,"endLine":14,"endCharacter":24},{"startLine":21,"startCharacter":35,"endLine":34,"endCharacter":11},{"startLine":25,"startCharacter":16,"endLine":27,"endCharacter":12},{"startLine":38,"startCharacter":23,"endLine":43,"endCharacter":2},{"startLine":47,"startCharacter":26,"endLine":53,"endCharacter":11},{"startLine":48,"startCharacter":24,"endLine":50,"endCharacter":38}]
[Trace - 17:45:35.843 PM] Sending request 'textDocument/codeAction - (112)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":19,"character":4},"end":{"line":19,"character":4}},"context":{"diagnostics":[]}}
[Trace - 17:45:35.844 PM] Received response 'textDocument/codeAction - (112)' in 0ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:35.938 PM] Sending request 'textDocument/documentSymbol - (113)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:35.939 PM] Received response 'textDocument/documentSymbol - (113)' in 0ms.
Result: [{"name":"DatabaseConfig","detail":"struct{...}","kind":23,"range":{"start":{"line":11,"character":5},"end":{"line":15,"character":1}},"selectionRange":{"start":{"line":11,"character":5},"end":{"line":11,"character":19}},"children":[{"name":"Logging","detail":"bool","kind":8,"range":{"start":{"line":12,"character":1},"end":{"line":12,"character":22}},"selectionRange":{"start":{"line":12,"character":1},"end":{"line":12,"character":8}}},{"name":"Automigrate","detail":"bool","kind":8,"range":{"start":{"line":13,"character":1},"end":{"line":13,"character":22}},"selectionRange":{"start":{"line":13,"character":1},"end":{"line":13,"character":12}}},{"name":"Connectionstring","detail":"string","kind":8,"range":{"start":{"line":14,"character":1},"end":{"line":14,"character":24}},"selectionRange":{"start":{"line":14,"character":1},"end":{"line":14,"character":17}}}]},{"name":"db","detail":"*gorm.DB","kind":13,"range":{"start":{"line":17,"character":0},"end":{"line":17,"character":15}},"selectionRange":{"start":{"line":17,"character":4},"end":{"line":17,"character":6}}},{"name":"Config","detail":"DatabaseConfig","kind":13,"range":{"start":{"line":18,"character":0},"end":{"line":18,"character":25}},"selectionRange":{"start":{"line":18,"character":4},"end":{"line":18,"character":10}}},{"name":"OpenSqliteConnection","detail":"()","kind":12,"range":{"start":{"line":21,"character":0},"end":{"line":35,"character":1}},"selectionRange":{"start":{"line":21,"character":5},"end":{"line":21,"character":25}}},{"name":"ReadConfigFile","detail":"()","kind":12,"range":{"start":{"line":38,"character":0},"end":{"line":44,"character":1}},"selectionRange":{"start":{"line":38,"character":5},"end":{"line":38,"character":19}}},{"name":"Automigrate","detail":"()","kind":12,"range":{"start":{"line":47,"character":0},"end":{"line":54,"character":1}},"selectionRange":{"start":{"line":47,"character":5},"end":{"line":47,"character":16}}}]
[Trace - 17:45:36.369 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go","version":10},"contentChanges":[{"range":{"start":{"line":19,"character":4},"end":{"line":19,"character":4}},"rangeLength":0,"text":"o"}]}
[Trace - 17:45:36.369 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/asset.go","diagnostics":[]}
[Trace - 17:45:36.369 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/initialize.go","diagnostics":[]}
[Trace - 17:45:36.369 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/session.go","diagnostics":[]}
[Trace - 17:45:36.559 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go","version":11},"contentChanges":[{"range":{"start":{"line":19,"character":5},"end":{"line":19,"character":5}},"rangeLength":0,"text":"n"}]}
[Trace - 17:45:36.560 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/asset.go","diagnostics":[]}
[Trace - 17:45:36.560 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/initialize.go","diagnostics":[]}
[Trace - 17:45:36.560 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/session.go","diagnostics":[]}
[Trace - 17:45:36.586 PM] Sending request 'textDocument/documentLink - (114)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:36.586 PM] Received response 'textDocument/documentLink - (114)' in 0ms.
Result: [{"range":{"start":{"line":3,"character":1},"end":{"line":3,"character":33}},"target":"https://godoc.org/github.com/sirupsen/logrus"},{"range":{"start":{"line":4,"character":1},"end":{"line":4,"character":25}},"target":"https://godoc.org/github.com/spf13/viper"},{"range":{"start":{"line":6,"character":1},"end":{"line":6,"character":25}},"target":"https://godoc.org/github.com/jinzhu/gorm"},{"range":{"start":{"line":7,"character":1},"end":{"line":7,"character":43}},"target":"https://godoc.org/github.com/jinzhu/gorm/dialects/sqlite"}]
[Trace - 17:45:36.651 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go","version":12},"contentChanges":[{"range":{"start":{"line":19,"character":6},"end":{"line":19,"character":6}},"rangeLength":0,"text":"f"}]}
[Trace - 17:45:36.651 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/asset.go","diagnostics":[]}
[Trace - 17:45:36.651 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/initialize.go","diagnostics":[]}
[Trace - 17:45:36.651 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/session.go","diagnostics":[]}
[Trace - 17:45:36.777 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go","version":13},"contentChanges":[{"range":{"start":{"line":19,"character":7},"end":{"line":19,"character":7}},"rangeLength":0,"text":"i"}]}
[Trace - 17:45:36.777 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/asset.go","diagnostics":[]}
[Trace - 17:45:36.777 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/initialize.go","diagnostics":[]}
[Trace - 17:45:36.777 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/session.go","diagnostics":[]}
[Trace - 17:45:36.895 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go","version":14},"contentChanges":[{"range":{"start":{"line":19,"character":8},"end":{"line":19,"character":8}},"rangeLength":0,"text":"g"}]}
[Trace - 17:45:36.895 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/asset.go","diagnostics":[]}
[Trace - 17:45:36.895 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/initialize.go","diagnostics":[]}
[Trace - 17:45:36.895 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/session.go","diagnostics":[]}
[Trace - 17:45:37.054 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go","version":15},"contentChanges":[{"range":{"start":{"line":19,"character":9},"end":{"line":19,"character":9}},"rangeLength":0,"text":" "}]}
[Trace - 17:45:37.055 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/asset.go","diagnostics":[]}
[Trace - 17:45:37.055 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/initialize.go","diagnostics":[]}
[Trace - 17:45:37.055 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/session.go","diagnostics":[]}
[Trace - 17:45:37.232 PM] Sending request 'textDocument/foldingRange - (115)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:37.233 PM] Received response 'textDocument/foldingRange - (115)' in 0ms.
Result: [{"startLine":2,"startCharacter":8,"endLine":7,"endCharacter":43,"kind":"imports"},{"startLine":11,"startCharacter":28,"endLine":14,"endCharacter":24},{"startLine":21,"startCharacter":35,"endLine":34,"endCharacter":11},{"startLine":25,"startCharacter":16,"endLine":27,"endCharacter":12},{"startLine":38,"startCharacter":23,"endLine":43,"endCharacter":2},{"startLine":47,"startCharacter":26,"endLine":53,"endCharacter":11},{"startLine":48,"startCharacter":24,"endLine":50,"endCharacter":38}]
[Trace - 17:45:37.282 PM] Sending request 'textDocument/codeAction - (116)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":19,"character":10},"end":{"line":19,"character":10}},"context":{"diagnostics":[]}}
[Trace - 17:45:37.284 PM] Received response 'textDocument/codeAction - (116)' in 1ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:37.381 PM] Sending request 'textDocument/documentSymbol - (117)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:37.382 PM] Received response 'textDocument/documentSymbol - (117)' in 0ms.
Result: [{"name":"DatabaseConfig","detail":"struct{...}","kind":23,"range":{"start":{"line":11,"character":5},"end":{"line":15,"character":1}},"selectionRange":{"start":{"line":11,"character":5},"end":{"line":11,"character":19}},"children":[{"name":"Logging","detail":"bool","kind":8,"range":{"start":{"line":12,"character":1},"end":{"line":12,"character":22}},"selectionRange":{"start":{"line":12,"character":1},"end":{"line":12,"character":8}}},{"name":"Automigrate","detail":"bool","kind":8,"range":{"start":{"line":13,"character":1},"end":{"line":13,"character":22}},"selectionRange":{"start":{"line":13,"character":1},"end":{"line":13,"character":12}}},{"name":"Connectionstring","detail":"string","kind":8,"range":{"start":{"line":14,"character":1},"end":{"line":14,"character":24}},"selectionRange":{"start":{"line":14,"character":1},"end":{"line":14,"character":17}}}]},{"name":"db","detail":"*gorm.DB","kind":13,"range":{"start":{"line":17,"character":0},"end":{"line":17,"character":15}},"selectionRange":{"start":{"line":17,"character":4},"end":{"line":17,"character":6}}},{"name":"Config","detail":"DatabaseConfig","kind":13,"range":{"start":{"line":18,"character":0},"end":{"line":18,"character":25}},"selectionRange":{"start":{"line":18,"character":4},"end":{"line":18,"character":10}}},{"name":"OpenSqliteConnection","detail":"()","kind":12,"range":{"start":{"line":21,"character":0},"end":{"line":35,"character":1}},"selectionRange":{"start":{"line":21,"character":5},"end":{"line":21,"character":25}}},{"name":"ReadConfigFile","detail":"()","kind":12,"range":{"start":{"line":38,"character":0},"end":{"line":44,"character":1}},"selectionRange":{"start":{"line":38,"character":5},"end":{"line":38,"character":19}}},{"name":"Automigrate","detail":"()","kind":12,"range":{"start":{"line":47,"character":0},"end":{"line":54,"character":1}},"selectionRange":{"start":{"line":47,"character":5},"end":{"line":47,"character":16}}}]
[Trace - 17:45:37.640 PM] Sending request 'textDocument/codeAction - (118)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":0,"character":0},"end":{"line":57,"character":0}},"context":{"diagnostics":[{"range":{"start":{"line":18,"character":4},"end":{"line":18,"character":66}},"message":"exported var Config should have comment or be unexported","severity":2,"source":"go-lint"}]}}
[Trace - 17:45:37.641 PM] Sending request 'textDocument/documentLink - (119)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:37.641 PM] Received response 'textDocument/documentLink - (119)' in 0ms.
Result: [{"range":{"start":{"line":3,"character":1},"end":{"line":3,"character":33}},"target":"https://godoc.org/github.com/sirupsen/logrus"},{"range":{"start":{"line":4,"character":1},"end":{"line":4,"character":25}},"target":"https://godoc.org/github.com/spf13/viper"},{"range":{"start":{"line":6,"character":1},"end":{"line":6,"character":25}},"target":"https://godoc.org/github.com/jinzhu/gorm"},{"range":{"start":{"line":7,"character":1},"end":{"line":7,"character":43}},"target":"https://godoc.org/github.com/jinzhu/gorm/dialects/sqlite"}]
[Trace - 17:45:37.641 PM] Received response 'textDocument/codeAction - (118)' in 1ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:37.656 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go","version":16},"contentChanges":[{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\treturn nil\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tdb.AutoMigrate(&Asset{}, &Session{}) // not for production use, drops and recreates the schema\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tlog.Warn(\"Running database automigration\")\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tif Config.Automigrate {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"func Automigrate() error {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"// Automigrate drops and recreates the database schema if enabled in app config\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tConfig = DatabaseConfig{\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"func ReadConfigFile() {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"// ReadConfigFile sets configuration parameters based on config file\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\treturn nil\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tdb.LogMode(Config.Logging)\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\treturn err\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tif err != nil {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tvar err error\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"func OpenSqliteConnection() error {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"// OpenSqliteConnection opens the connection, it should be called once\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"var Config DatabaseConfig // stores database connection parameters\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tConnectionstring string\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tAutomigrate bool\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tLogging bool\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"type DatabaseConfig struct {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"// DatabaseConfig stores the configuration parameters for the database\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":")\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\"github.com/jinzhu/gorm\"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\"github.com/spf13/viper\"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tlog \"github.com/sirupsen/logrus\"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"import (\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"package models\r\n"},{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"rangeLength":1626,"text":""}]}
[Trace - 17:45:37.656 PM] Sending request 'textDocument/formatting - (120)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"options":{"tabSize":4,"insertSpaces":false}}
[Trace - 17:45:37.657 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/initialize.go","diagnostics":[]}
[Trace - 17:45:37.657 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/session.go","diagnostics":[]}
[Trace - 17:45:37.657 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/asset.go","diagnostics":[]}
[Trace - 17:45:37.657 PM] Received response 'textDocument/formatting - (120)' in 0ms.
Result: [{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]
[Trace - 17:45:37.712 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go","version":17},"contentChanges":[{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\treturn nil\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tdb.AutoMigrate(&Asset{}, &Session{}) // not for production use, drops and recreates the schema\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tlog.Warn(\"Running database automigration\")\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tif Config.Automigrate {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"func Automigrate() error {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"// Automigrate drops and recreates the database schema if enabled in app config\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tConfig = DatabaseConfig{\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"func ReadConfigFile() {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"// ReadConfigFile sets configuration parameters based on config file\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\treturn nil\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tdb.LogMode(Config.Logging)\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\treturn err\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tif err != nil {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tvar err error\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"func OpenSqliteConnection() error {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"// OpenSqliteConnection opens the connection, it should be called once\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"var Config DatabaseConfig // stores database connection parameters\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"}\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tConnectionstring string\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tAutomigrate bool\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tLogging bool\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"type DatabaseConfig struct {\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"// DatabaseConfig stores the configuration parameters for the database\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":")\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\"github.com/jinzhu/gorm\"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\t\"github.com/spf13/viper\"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\tlog \"github.com/sirupsen/logrus\"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"import (\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"\r\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"rangeLength":0,"text":"package models\r\n"},{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"rangeLength":1632,"text":""}]}
[Trace - 17:45:37.713 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/initialize.go","diagnostics":[]}
[Trace - 17:45:37.713 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/session.go","diagnostics":[]}
[Trace - 17:45:37.713 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///C:/Users/noflo/go/src/jarvis-server/app/models/asset.go","diagnostics":[]}
[Trace - 17:45:37.750 PM] Sending notification 'textDocument/didSave'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go","version":17}}
[Trace - 17:45:37.892 PM] Sending request 'textDocument/foldingRange - (121)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:37.892 PM] Received response 'textDocument/foldingRange - (121)' in 0ms.
Result: [{"startLine":2,"startCharacter":8,"endLine":7,"endCharacter":43,"kind":"imports"},{"startLine":11,"startCharacter":28,"endLine":14,"endCharacter":24},{"startLine":21,"startCharacter":35,"endLine":34,"endCharacter":11},{"startLine":25,"startCharacter":16,"endLine":27,"endCharacter":12},{"startLine":38,"startCharacter":23,"endLine":43,"endCharacter":2},{"startLine":47,"startCharacter":26,"endLine":53,"endCharacter":11},{"startLine":48,"startCharacter":24,"endLine":50,"endCharacter":38}]
[Trace - 17:45:38.012 PM] Sending request 'textDocument/codeAction - (122)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"},"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"context":{"diagnostics":[]}}
[Trace - 17:45:38.014 PM] Received response 'textDocument/codeAction - (122)' in 1ms.
Result: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///c:/Users/noflo/go/src/jarvis-server/app/models/initialize.go":[{"range":{"start":{"line":0,"character":0},"end":{"line":55,"character":0}},"newText":""},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"package models\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"import (\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog \"github.com/sirupsen/logrus\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/spf13/viper\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\"github.com/jinzhu/gorm\"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t_ \"github.com/jinzhu/gorm/dialects/sqlite\" // importing sqlite dialect for gorm\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// DatabaseConfig stores the configuration parameters for the database\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"type DatabaseConfig struct {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tLogging bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tAutomigrate bool\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConnectionstring string\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var db *gorm.DB // gorm handles the connection pool using the recommended approach for each database engine\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"var Config DatabaseConfig // stores database connection parameters\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// OpenSqliteConnection opens the connection, it should be called once\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func OpenSqliteConnection() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tvar err error\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb, err = gorm.Open(\"sqlite3\", Config.Connectionstring)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif err != nil {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Errorf(\"OpenSqliteConnection failed on %s: %v\", Config.Connectionstring, err)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\treturn err\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tlog.Infof(\"OpenSqliteConnection OK: %+v\", Config)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tdb.LogMode(Config.Logging)\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// ReadConfigFile sets configuration parameters based on config file\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func ReadConfigFile() {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tConfig = DatabaseConfig{\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tAutomigrate: viper.GetBool(\"digitaltwin-sqlite.automigrate\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tLogging: viper.GetBool(\"digitaltwin-sqlite.logging\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tConnectionstring: viper.GetString(\"digitaltwin-sqlite.connectionstring\"),\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"// Automigrate drops and recreates the database schema if enabled in app config\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"func Automigrate() error {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\tif Config.Automigrate {\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tlog.Warn(\"Running database automigration\")\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t\tdb.AutoMigrate(\u0026Asset{}, \u0026Session{}) // not for production use, drops and recreates the schema\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\t}\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"\treturn nil\n"},{"range":{"start":{"line":55,"character":0},"end":{"line":55,"character":0}},"newText":"}\n"}]}}}]
[Trace - 17:45:38.043 PM] Sending request 'textDocument/documentSymbol - (123)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:38.043 PM] Received response 'textDocument/documentSymbol - (123)' in 0ms.
Result: [{"name":"DatabaseConfig","detail":"struct{...}","kind":23,"range":{"start":{"line":11,"character":5},"end":{"line":15,"character":1}},"selectionRange":{"start":{"line":11,"character":5},"end":{"line":11,"character":19}},"children":[{"name":"Logging","detail":"bool","kind":8,"range":{"start":{"line":12,"character":1},"end":{"line":12,"character":22}},"selectionRange":{"start":{"line":12,"character":1},"end":{"line":12,"character":8}}},{"name":"Automigrate","detail":"bool","kind":8,"range":{"start":{"line":13,"character":1},"end":{"line":13,"character":22}},"selectionRange":{"start":{"line":13,"character":1},"end":{"line":13,"character":12}}},{"name":"Connectionstring","detail":"string","kind":8,"range":{"start":{"line":14,"character":1},"end":{"line":14,"character":24}},"selectionRange":{"start":{"line":14,"character":1},"end":{"line":14,"character":17}}}]},{"name":"db","detail":"*gorm.DB","kind":13,"range":{"start":{"line":17,"character":0},"end":{"line":17,"character":15}},"selectionRange":{"start":{"line":17,"character":4},"end":{"line":17,"character":6}}},{"name":"Config","detail":"DatabaseConfig","kind":13,"range":{"start":{"line":18,"character":0},"end":{"line":18,"character":25}},"selectionRange":{"start":{"line":18,"character":4},"end":{"line":18,"character":10}}},{"name":"OpenSqliteConnection","detail":"()","kind":12,"range":{"start":{"line":21,"character":0},"end":{"line":35,"character":1}},"selectionRange":{"start":{"line":21,"character":5},"end":{"line":21,"character":25}}},{"name":"ReadConfigFile","detail":"()","kind":12,"range":{"start":{"line":38,"character":0},"end":{"line":44,"character":1}},"selectionRange":{"start":{"line":38,"character":5},"end":{"line":38,"character":19}}},{"name":"Automigrate","detail":"()","kind":12,"range":{"start":{"line":47,"character":0},"end":{"line":54,"character":1}},"selectionRange":{"start":{"line":47,"character":5},"end":{"line":47,"character":16}}}]
[Trace - 17:45:38.656 PM] Sending request 'textDocument/documentLink - (124)'.
Params: {"textDocument":{"uri":"file:///c%3A/Users/noflo/go/src/jarvis-server/app/models/initialize.go"}}
[Trace - 17:45:38.656 PM] Received response 'textDocument/documentLink - (124)' in 0ms.
Result: [{"range":{"start":{"line":3,"character":1},"end":{"line":3,"character":33}},"target":"https://godoc.org/github.com/sirupsen/logrus"},{"range":{"start":{"line":4,"character":1},"end":{"line":4,"character":25}},"target":"https://godoc.org/github.com/spf13/viper"},{"range":{"start":{"line":6,"character":1},"end":{"line":6,"character":25}},"target":"https://godoc.org/github.com/jinzhu/gorm"},{"range":{"start":{"line":7,"character":1},"end":{"line":7,"character":43}},"target":"https://godoc.org/github.com/jinzhu/gorm/dialects/sqlite"}]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment