Updates on error logging and handling

- iterative error log storage
- config like value storage
- updates logging format for improved readablility

Change-Id: I171a1b44452c1225340a7d7b1f7593ab9b8ce7c2
Related-PROD: PROD-28199
diff --git a/cfg_checker/common/file_utils.py b/cfg_checker/common/file_utils.py
new file mode 100644
index 0000000..d508121
--- /dev/null
+++ b/cfg_checker/common/file_utils.py
@@ -0,0 +1,84 @@
+import grp
+import os
+import pwd
+import time
+
+from cfg_checker.common import config
+
+_default_time_format = config.date_format
+
+
+def remove_file(filename):
+    os.remove(filename)
+    # open('filename', 'w').close()
+
+
+def write_str_to_file(filename, _str):
+    with open(filename, 'w') as fo:
+        fo.write(_str)
+
+
+def append_str_to_file(filename, _str):
+    with open(filename, 'a') as fa:
+        fa.write(_str)
+
+
+def write_lines_to_file(filename, source_list):
+    with open(filename, 'w') as fw:
+        fw.write("\n".join(source_list) + "\n")
+
+
+def append_lines_to_file(filename, source_list):
+    _buf = "\n".join(source_list)
+    with open(filename, 'a') as fw:
+        fw.write(_buf + "\n")
+
+
+def append_line_to_file(filename, _str):
+    with open(filename, 'a') as fa:
+        fa.write(_str+'\n')
+
+
+def read_file(filename):
+    _buf = None
+    with open(filename, 'rb') as fr:
+        _buf = fr.read()
+    return _buf
+
+
+def read_file_as_lines(filename):
+    _list = []
+    with open(filename, 'r') as fr:
+        for line in fr:
+            _list.append(line)
+    return _list
+
+
+def get_file_info_fd(fd, time_format=_default_time_format):
+
+    def format_time(unixtime):
+        return time.strftime(
+            time_format,
+            time.gmtime(unixtime)
+        )
+
+    (mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = \
+        os.fstat(fd.fileno())
+
+    _dict = {
+        'fd': fd.fileno(),
+        'mode': oct(mode & 0777),
+        'device': hex(dev),
+        'inode': ino,
+        'hard_links': nlink,
+        'owner_id': uid,
+        'owner_name': pwd.getpwuid(uid).pw_name,
+        'owner_group_name': grp.getgrgid(gid).gr_name,
+        'owner_group_id': gid,
+        'size': size,
+        'access_time': format_time(atime),
+        'modification_time': format_time(mtime),
+        'creation_time': format_time(ctime)
+    }
+
+    return _dict