from datetime import datetime
from fluent import sender
import logging
+import pytz
class FluentLogHandler(logging.Handler):
def start_new_run(self):
'''Delimitate a new run in the stream of records with a new timestamp
'''
- self.runlogdate = str(datetime.now())
+ self.runlogdate = self.__get_timestamp()
# reset counters
self.__warning_counter = 0
self.__error_counter = 0
def emit(self, record):
data = {
- "runlogdate": self.runlogdate,
"loglevel": record.levelname,
- "message": self.formatter.format(record)
+ "message": self.formatter.format(record),
+ "@timestamp": self.__get_timestamp()
}
+ # if runlogdate is 0, it's a log from server (not an nfvbench run) so do not send runlogdate
+ if self.runlogdate != 0:
+ data["runlogdate"] = self.runlogdate
+
self.__update_stats(record.levelno)
self.sender.emit(None, data)
+ # this function is called by summarizer
+ def record_send(self, record):
+ self.sender.emit(None, record)
+
# send START record for each run
def __send_start_record(self):
data = {
"message": "NFVBENCH run is started",
"numloglevel": 0,
"numerrors": 0,
- "numwarnings": 0
+ "numwarnings": 0,
+ "@timestamp": self.__get_timestamp()
}
self.sender.emit(None, data)
def send_run_summary(self, run_summary_required):
if run_summary_required or self.__get_highest_level() == logging.ERROR:
data = {
- "runlogdate": self.runlogdate,
"loglevel": "RUN_SUMMARY",
"message": self.__get_highest_level_desc(),
"numloglevel": self.__get_highest_level(),
"numerrors": self.__error_counter,
- "numwarnings": self.__warning_counter
+ "numwarnings": self.__warning_counter,
+ "@timestamp": self.__get_timestamp()
}
+ # if runlogdate is 0, it's a log from server (not an nfvbench run)
+ # so don't send runlogdate
+ if self.runlogdate != 0:
+ data["runlogdate"] = self.runlogdate
self.sender.emit(None, data)
def __get_highest_level(self):
self.__warning_counter += 1
elif levelno == logging.ERROR:
self.__error_counter += 1
+
+ def __get_timestamp(self):
+ return datetime.utcnow().replace(tzinfo=pytz.utc).strftime(
+ "%Y-%m-%dT%H:%M:%S.%f%z")