Fixes for cluster namings and cell enhancements
diff --git a/ci_checker/reclass_cmp.py b/ci_checker/reclass_cmp.py
index b55ab2e..53a47b6 100644
--- a/ci_checker/reclass_cmp.py
+++ b/ci_checker/reclass_cmp.py
@@ -12,6 +12,17 @@
 from ci_checker.common import base_config, logger, logger_cli, PKG_DIR
 
 
+global prefix_name
+global model_name_1, model_path_1
+global model_name_2, model_path_2
+
+prefix_name = "emk"
+model_name_1 = "dev"
+model_path_1 = "/Users/savex/proj/mediakind/reclass-dev"
+model_name_2 = "stg"
+model_path_2 = "/Users/savex/proj/mediakind/reclass-stg"
+
+
 class ModelComparer(object):
     """Collection of functions to compare model data.
     """
@@ -105,10 +116,28 @@
         def find_changes(dict1, dict2, path=""):
             _report = {}
             for k in dict1.keys():
-                _new_path = path + ":" + k
+                if not isinstance(k, str):
+                    _new_path = path + ":" + str(k)
+                else:
+                    _new_path = path + ":" + k
                 if k == "_source":
                     continue
-                if dict2 is None or k not in dict2:
+                # check if this is an env name cluster entry
+                if dict2 is not None and \
+                        k == model_name_1 and \
+                        model_name_2 in dict2.keys():
+                    k1 = model_name_1
+                    k2 = model_name_2
+                    if type(dict1[k1]) is dict:
+                        if path == "":
+                            _new_path = k1
+                        _child_report = find_changes(
+                            dict1[k1],
+                            dict2[k2],
+                            _new_path
+                        )
+                        _report.update(_child_report)
+                elif dict2 is None or k not in dict2:
                     # no key in dict2
                     _report[_new_path] = {
                         "type": "value",
@@ -116,10 +145,6 @@
                         "str_values": [
                             "{}".format(dict1[k]),
                             "n/a"
-                        ],
-                        "str_short": [
-                            "{:25.25}...".format(str(dict1[k])),
-                            "n/a"
                         ]
                     }
                     logger.info(
@@ -135,20 +160,38 @@
                             _new_path
                         )
                         _report.update(_child_report)
-                    elif type(dict1[k]) is list:
+                    elif type(dict1[k]) is list and type(dict2[k]) is list:
                         # use ifilterfalse to compare lists of dicts
-                        _removed = list(
-                            itertools.ifilterfalse(
-                                lambda x: x in dict2[k],
-                                dict1[k]
+                        try:
+                            _removed = list(
+                                itertools.ifilterfalse(
+                                    lambda x: x in dict2[k],
+                                    dict1[k]
+                                )
                             )
-                        )
-                        _added = list(
-                            itertools.ifilterfalse(
-                                lambda x: x in dict1[k],
-                                dict2[k]
+                            _added = list(
+                                itertools.ifilterfalse(
+                                    lambda x: x in dict1[k],
+                                    dict2[k]
+                                )
                             )
-                        )
+                        except TypeError as e:
+                            # debug routine,
+                            # should not happen, due to list check above
+                            logger.error(
+                                "Caught lambda type mismatch: {}".format(
+                                    e.message
+                                )
+                            )
+                            logger_cli.warning(
+                                "Types mismatch for correct compare: "
+                                "{}, {}".format(
+                                    type(dict1[k]),
+                                    type(dict2[k])
+                                )
+                            )
+                            _removed = None
+                            _added = None
                         _original = ["= {}".format(item) for item in dict1[k]]
                         if _removed or _added:
                             _removed_str_lst = ["- {}".format(item)
@@ -167,13 +210,6 @@
                                         '\n'.join(_removed_str_lst),
                                         '\n'.join(_added_str_lst)
                                     )
-                                ],
-                                "str_short": [
-                                    "{} items".format(len(dict1[k])),
-                                    "{}\n{}".format(
-                                        '\n'.join(_removed_str_lst),
-                                        '\n'.join(_added_str_lst)
-                                    )
                                 ]
                             }
                             logger.info(
@@ -192,33 +228,41 @@
                                     "{}".format('\n'.join(_added_str_lst))
                                 )
                     else:
-                        if dict1[k] != dict2[k]:
-                            _str1 = str(dict1[k])
-                            _str1_cut = "{:20.20}...".format(str(dict1[k]))
-                            _str2 = str(dict2[k])
-                            _str2_cut = "{:20.20}...".format(str(dict2[k]))
+                        # in case of type mismatch
+                        # considering it as not equal
+                        d1 = dict1
+                        d2 = dict2
+                        val1 = d1[k] if isinstance(d1, dict) else d1
+                        val2 = d2[k] if isinstance(d2, dict) else d2
+                        try:
+                            match = val1 == val2
+                        except TypeError as e:
+                            logger.warning(
+                                "One of the values is not a dict: "
+                                "{}, {}".format(
+                                    str(dict1),
+                                    str(dict2)
+                                ))
+                            match = False
+                        if not match:
                             _report[_new_path] = {
                                 "type": "value",
-                                "raw_values": [dict1[k], dict2[k]],
+                                "raw_values": [val1, val2],
                                 "str_values": [
-                                    "{}".format(dict1[k]),
-                                    "{}".format(dict2[k])
-                                ],
-                                "str_short": [
-                                    _str1 if len(_str1) < 20 else _str1_cut,
-                                    _str2 if len(_str1) < 20 else _str2_cut,
+                                    "{}".format(val1),
+                                    "{}".format(val2)
                                 ]
                             }
                             logger.info("{}: {}, {}".format(
                                 _new_path,
-                                dict1[k],
-                                dict2[k]
+                                val1,
+                                val2
                             ))
             return _report
         # tmp report for keys
         diff_report = find_changes(
-            self.models["inspur_Aug"],
-            self.models["inspur_Original"]
+            self.models[model_name_1],
+            self.models[model_name_2]
         )
         # prettify the report
         for key in diff_report.keys():
@@ -236,7 +280,7 @@
                 "param": _param_path,
             })
 
-        diff_report["diff_names"] = ["inspur_Aug", "inspur_Original"]
+        diff_report["diff_names"] = [model_name_1, model_name_2]
         return diff_report
 
 
@@ -244,16 +288,17 @@
 if __name__ == '__main__':
     mComparer = ModelComparer()
     mComparer.load_model_tree(
-        'inspur_Aug',
-        '/Users/savex/proj/inspur_hc/reclass_cmp/reclass-20180810'
+        model_name_1,
+        model_path_1
     )
     mComparer.load_model_tree(
-        'inspur_Original',
-        '/Users/savex/proj/inspur_hc/reclass_cmp/reclass_original'
+        model_name_2,
+        model_path_2
     )
     diffs = mComparer.generate_model_report_tree()
 
-    report_file = "./mdl_diff_original.html"
+    report_file = \
+        prefix_name + "-" + model_name_1 + "-vs-" + model_name_2 + ".html"
     report = reporter.ReportToFile(
         reporter.HTMLModelCompare(),
         report_file
diff --git a/templates/model_tree_cmp_tmpl.j2 b/templates/model_tree_cmp_tmpl.j2
index 81cb2ae..cc543e0 100644
--- a/templates/model_tree_cmp_tmpl.j2
+++ b/templates/model_tree_cmp_tmpl.j2
@@ -120,11 +120,14 @@
         .pkgName {
             font-size: 1em;
             padding-left: 10px;
+            max-width: 800px;
         }
 
         .version {
-            font-size: 0.8em;
+            font-size: 1em;
             text-align: left;
+            max-width: 400px;
+            overflow-wrap: break-word;
         }
 
         .differ {
@@ -222,13 +225,10 @@
                 <div class="param">{{ diffs[diff]["param"] }}</div>
             </td>
             <td class="version">
-                <div class="tooltip">{{ diffs[diff]["str_short"][0] | linebreaks }}
-                    <pre class="tooltiptext">{{ diffs[diff]["str_values"][0] | linebreaks }}</pre>
-                </div>
+                <div><pre>{{ diffs[diff]["str_values"][0] | linebreaks }}</pre></div>
             </td>
             <td class="version">
-                <div class="tooltip">{{ diffs[diff]["str_short"][1] | linebreaks }}
-                    <pre class="tooltiptext">{{ diffs[diff]["str_values"][1] | linebreaks }}</pre>
+                <div><pre>{{ diffs[diff]["str_values"][1] | linebreaks }}</pre></div>
             </td>
         </tr>
         {% endfor %}