Log collector module

New:
  - [Done] multiple namespace selector
  - [Done] keyword-based pod selector
  - [Done] per-pod logs syntax detection and parsing
  - [Differed] in-place filtering for shorter logs
  - [Done] individual logs timestamp detection
  - [Done] Unix time bases Timestamp sorting
  - [Done] Single file logs output using common format
  - [Done] add all log types from all MOS namespaces and pods

Update:
  - resource preparation can be skipped per module
  - updated log collection using multiple threads
  - new setting LOG_COLLECT_THREADS

Fixes:
  - Network MTU fix
  - Faster cmd execution on single pod
  - Ceph benchmark validations
  - Ceph benchmark report sorting
  - Daemonset deployment with nodes skipped
  - Network tree debugging script
  - Tree depth limiter, i.e. stackoverflow prevention

  Related-PROD: PROD-36845

Change-Id: Icf229ac62078c6418ab4dbdff12b0d27ed42af1d
diff --git a/templates/ceph_info_html.j2 b/templates/ceph_info_html.j2
index ac4d83f..49371df 100644
--- a/templates/ceph_info_html.j2
+++ b/templates/ceph_info_html.j2
@@ -142,7 +142,7 @@
         }
         td > .osdconf_group {
             display: inline-block;
-            grid-template-columns: repeat(3, auto);
+            grid-template-columns: repeat(4, auto);
             padding-left: 0px;
             padding-right: 0px;
             margin: 1px;
@@ -227,9 +227,13 @@
         .lat_apply { border-color: #a0c0c0; background-color: rgb(255, 250, 250); text-align: left;  width: 35px}
         .meta_name { border-color: #c4b890; background-color: #e7dbb6; text-align: left; width: 150px;}
         .meta_value { border-color: #c6c3ba;background-color: #d4d4d4; text-align: left; width: 480px;}
-        .conf_name { border-color: #c4b890; background-color: #e7dbb6; text-align: left; width: 295px; word-break: break-all;}
-        .conf_value { border-color: #c6c3ba;background-color: #d4d4d4; text-align: left; width: 280px; word-break: break-all;}
-        .conf_source { border-color: #c6c3ba;background-color: #a4a4a4; text-align: left; width: 50px;}
+        .conf_name, .conf_name_uniq { border-color: #c4b890; background-color: #e7dbb6; text-align: left; width: 295px; word-break: break-all;}
+        .conf_value, .conf_value_uniq { border-color: #c6c3ba;background-color: #d4d4d4; text-align: left; width: 280px; word-break: break-all;}
+        .conf_source, .conf_source_uniq { border-color: #c6c3ba;background-color: #a4a4a4; text-align: left; width: 50px;}
+        .osd_name { border-color: gray; background-color: #bdb396; text-align: left; width: 120px;}
+        .conf_name_uniq { width: 410px;}
+        .conf_value_uniq { width: 600px;}
+        .conf_source_uniq { width: 140px;}
 
         .map_grid {
             display: grid;
@@ -664,22 +668,23 @@
             </td></tr>
         </tbody></table>
     </div>
-    {% for osdname in cuniq.keys() | sort %}
-    <button type="button" class="row_button">{{ osdname }}: {{ cuniq[osdname] | length }} uniq values</button>
+    <button type="button" class="row_button">Uniq values</button>
     <div class="row_content">
         <table class="ceph_status"><tbody>
+            {% for osdname in cuniq.keys() | sort %}
             <tr><td class="metadata">
             {% for tname, tdata in cuniq[osdname].items() %}
                 <div class="osdconf_group">
-                    <div class="item conf_name">{{ tname }}</div>
-                    <div class="item conf_value">{{ tdata["value"] }}</div>
-                    <div class="item conf_source">{{ tdata["source"] }}</div>
+                    <div class="item osd_name">{{ osdname }}</div>
+                    <div class="item conf_name_uniq">{{ tname }}</div>
+                    <div class="item conf_value_uniq">{{ tdata["value"] }}</div>
+                    <div class="item conf_source_uniq">{{ tdata["source"] }}</div>
                 </div>
             {% endfor %}
             </td></tr>
+            {% endfor %}
         </tbody></table>
     </div>
-    {% endfor %}
 </div>
 {% endmacro %}