From 2c2f53f6f43e425973a715e7e1f78afe31b24beb Mon Sep 17 00:00:00 2001 From: postmannen Date: Tue, 6 Apr 2021 09:06:26 +0200 Subject: [PATCH] errorLog handler writing to file structure --- configuration_flags.go | 2 +- data/ping/central/central.REQPing.log | 2 -- etc/config.toml | 2 +- example/toShip1-REQCliCommand.json | 2 +- server.go | 7 ++-- subscriber_method_types.go | 51 +++++++++++++++++++++++++-- 6 files changed, 57 insertions(+), 9 deletions(-) delete mode 100644 data/ping/central/central.REQPing.log diff --git a/configuration_flags.go b/configuration_flags.go index 79f475f..bc74a8f 100644 --- a/configuration_flags.go +++ b/configuration_flags.go @@ -132,7 +132,7 @@ func newConfigurationDefaults() Configuration { DefaultMessageTimeout: 10, DefaultMessageRetries: 1, StartPubREQHello: 30, - SubscribersDataFolder: "./data", + SubscribersDataFolder: "./var", CentralNodeName: "", StartSubREQErrorLog: flagNodeSlice{Values: []node{}}, StartSubREQHello: flagNodeSlice{OK: true, Values: []node{"*"}}, diff --git a/data/ping/central/central.REQPing.log b/data/ping/central/central.REQPing.log deleted file mode 100644 index 2c03f6c..0000000 --- a/data/ping/central/central.REQPing.log +++ /dev/null @@ -1,2 +0,0 @@ -2021-04-06 04:45:05.440035 +0000 UTC, ping reply sent from central -2021-04-06 04:45:13.980909 +0000 UTC, ping reply sent from central diff --git a/etc/config.toml b/etc/config.toml index f1b8c6d..e9d0e8c 100644 --- a/etc/config.toml +++ b/etc/config.toml @@ -7,7 +7,7 @@ NodeName = "central" ProfilingPort = "" PromHostAndPort = ":2112" StartPubREQHello = 0 -SubscribersDataFolder = "./data" +SubscribersDataFolder = "./var" [StartSubREQCliCommand] OK = true diff --git a/example/toShip1-REQCliCommand.json b/example/toShip1-REQCliCommand.json index 5ea4f16..4a6a30c 100644 --- a/example/toShip1-REQCliCommand.json +++ b/example/toShip1-REQCliCommand.json @@ -6,6 +6,6 @@ "method":"REQCliCommand", "timeout":10, "retries":3, - "methodTimeout": 2 + "methodTimeout": 4 } ] \ No newline at end of file diff --git a/server.go b/server.go index ee3cfe4..103e3c8 100644 --- a/server.go +++ b/server.go @@ -175,13 +175,16 @@ func sendErrorLogMessage(newMessagesCh chan<- []subjectAndMessage, FromNode node // createErrorMsgContent will prepare a subject and message with the content // of the error func createErrorMsgContent(FromNode node, theError error) subjectAndMessage { - fmt.Printf(" --- Sending error message to central !!!!!!!!!!!!!!!!!!!!!!!!!!!!\n") + // Add time stamp + er := fmt.Sprintf("%v, %v\n", time.Now().UTC(), theError.Error()) + sam := subjectAndMessage{ Subject: newSubject(REQErrorLog, "errorCentral"), Message: Message{ + Label: "errorLog", ToNode: "errorCentral", FromNode: FromNode, - Data: []string{theError.Error()}, + Data: []string{er}, Method: REQErrorLog, }, } diff --git a/subscriber_method_types.go b/subscriber_method_types.go index 790a6e0..9de2652 100644 --- a/subscriber_method_types.go +++ b/subscriber_method_types.go @@ -354,9 +354,56 @@ func (m methodREQErrorLog) handler(proc process, message Message, node string) ( // -- - // -- + // If it was a request type message we want to check what the initial messages + // method, so we can use that in creating the file name to store the data. + fmt.Printf(" ** DEBUG: %v\n", message.PreviousMessage) + var fileName string + var folderTree string + switch { + case message.PreviousMessage == nil: + // If this was a direct request there are no previous message to take + // information from, so we use the one that are in the current mesage. + fileName = fmt.Sprintf("%v.%v.log", message.ToNode, message.Method) + folderTree = filepath.Join(proc.configuration.SubscribersDataFolder, message.Label, string(message.FromNode)) + case message.PreviousMessage.ToNode != "": + fileName = fmt.Sprintf("%v.%v.log", message.PreviousMessage.ToNode, message.PreviousMessage.Method) + folderTree = filepath.Join(proc.configuration.SubscribersDataFolder, message.PreviousMessage.Label, string(message.PreviousMessage.ToNode)) + case message.PreviousMessage.ToNode == "": + fileName = fmt.Sprintf("%v.%v.log", message.FromNode, message.Method) + folderTree = filepath.Join(proc.configuration.SubscribersDataFolder, message.PreviousMessage.Label, string(message.PreviousMessage.ToNode)) + } - return nil, nil + // Check if folder structure exist, if not create it. + if _, err := os.Stat(folderTree); os.IsNotExist(err) { + err := os.MkdirAll(folderTree, 0700) + if err != nil { + return nil, fmt.Errorf("error: failed to create directory %v: %v", folderTree, err) + } + + log.Printf("info: Creating subscribers data folder at %v\n", folderTree) + } + + // Open file and write data. + file := filepath.Join(folderTree, fileName) + f, err := os.OpenFile(file, os.O_APPEND|os.O_RDWR|os.O_CREATE, os.ModeAppend) + if err != nil { + log.Printf("error: methodEventTextLogging.handler: failed to open file: %v\n", err) + return nil, err + } + defer f.Close() + + for _, d := range message.Data { + _, err := f.Write([]byte(d)) + f.Sync() + if err != nil { + log.Printf("error: methodEventTextLogging.handler: failed to write to file: %v\n", err) + } + } + + ackMsg := []byte("confirmed from: " + node + ": " + fmt.Sprint(message.ID)) + return ackMsg, nil + + // -- } // ---