)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"b876b6afd3ffa984e0178c7a1a4de483b22a8a29","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Muhamad Najjar \u003cm.n3294@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-01-01 14:58:47 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"graph snapshooter"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I92ca74dabc22e8991c96d7f090be9978b8c93894"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9f91af0f_3e6d2998","line":7,"updated":"2018-01-02 01:27:22.000000000","message":"Too brief to be a commit message... Better to put some words on why adding this feature and main changes. Besides, is there a blueprint linked to this change?","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Muhamad Najjar \u003cm.n3294@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-01-01 14:58:47 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"graph snapshooter"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I92ca74dabc22e8991c96d7f090be9978b8c93894"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9f91af0f_e44c0f78","line":7,"in_reply_to":"9f91af0f_3e6d2998","updated":"2018-01-03 14:04:13.000000000","message":"Done","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"}],"vitrage/api_handler/apis/rca.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    @staticmethod"},{"line_number":147,"context_line":"    def _find_rca_index(found_graph, root):"},{"line_number":148,"context_line":"        for root_index, vertex in enumerate(found_graph.g):"},{"line_number":149,"context_line":"            if vertex \u003d\u003d root:"},{"line_number":150,"context_line":"                return root_index"},{"line_number":151,"context_line":"        return 0"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_8f7d211e","line":148,"range":{"start_line":148,"start_character":56,"end_line":148,"end_character":57},"updated":"2018-01-02 08:34:03.000000000","message":"Why did you rename it?","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    @staticmethod"},{"line_number":147,"context_line":"    def _find_rca_index(found_graph, root):"},{"line_number":148,"context_line":"        for root_index, vertex in enumerate(found_graph.g):"},{"line_number":149,"context_line":"            if vertex \u003d\u003d root:"},{"line_number":150,"context_line":"                return root_index"},{"line_number":151,"context_line":"        return 0"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_e72ad1e5","line":148,"range":{"start_line":148,"start_character":56,"end_line":148,"end_character":57},"in_reply_to":"9f91af0f_8f7d211e","updated":"2018-01-03 14:04:13.000000000","message":"reverted in patch 4","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"}],"vitrage/cli/persistor.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6f1574bf4c1d82f000127a6ebb212e1ae790b209","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from oslo_log import log"},{"line_number":18,"context_line":"from oslo_service import service as os_service"},{"line_number":19,"context_line":"from vitrage.cli import VITRAGE_TITLE"},{"line_number":20,"context_line":"from vitrage.persistency.service import PersistorService"},{"line_number":21,"context_line":"from vitrage import service"},{"line_number":22,"context_line":"from vitrage import storage"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_63d3e839","line":20,"range":{"start_line":20,"start_character":13,"end_line":20,"end_character":24},"updated":"2018-01-04 12:27:34.000000000","message":"I think that here it should remain \"persistor\"","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from oslo_log import log"},{"line_number":18,"context_line":"from oslo_service import service as os_service"},{"line_number":19,"context_line":"from vitrage.cli import VITRAGE_TITLE"},{"line_number":20,"context_line":"from vitrage.persistency.service import PersistorService"},{"line_number":21,"context_line":"from vitrage import service"},{"line_number":22,"context_line":"from vitrage import storage"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_83cefe7f","line":20,"range":{"start_line":20,"start_character":13,"end_line":20,"end_character":24},"in_reply_to":"9f91af0f_63d3e839","updated":"2018-01-06 21:37:22.000000000","message":"me, Idan and Eyal thought to put everything that related to persistency under same directory (this need came up when we thought where to put the shared flag for enabling persistency)","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"0abef3a0cdbcd3eaa742c9afa030501df5bd4de4","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from oslo_log import log"},{"line_number":18,"context_line":"from oslo_service import service as os_service"},{"line_number":19,"context_line":"from vitrage.cli import VITRAGE_TITLE"},{"line_number":20,"context_line":"from vitrage.persistency.service import PersistorService"},{"line_number":21,"context_line":"from vitrage import service"},{"line_number":22,"context_line":"from vitrage import storage"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_89b05d8c","line":20,"range":{"start_line":20,"start_character":13,"end_line":20,"end_character":24},"in_reply_to":"9f91af0f_83cefe7f","updated":"2018-01-07 07:42:06.000000000","message":"Ok","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"}],"vitrage/common/exception.py":[{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"0bff9627d2ddc48eef84d59b7ec418cded012c3f","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# the root of all Exceptions"},{"line_number":25,"context_line":"class VitrageException(Exception):"},{"line_number":26,"context_line":"    \"\"\"Base class for exceptions in Vitrage.\"\"\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def __init__(self, msg\u003d\u0027\u0027):"},{"line_number":29,"context_line":"        self._msg \u003d msg"},{"line_number":30,"context_line":"        Exception.__init__(self, msg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f91af0f_bdb55280","line":27,"updated":"2018-01-08 08:51:35.000000000","message":"Why are these required?","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"98f9a295fc211c67a052d1e89fba4e776c8abbed","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# the root of all Exceptions"},{"line_number":25,"context_line":"class VitrageException(Exception):"},{"line_number":26,"context_line":"    \"\"\"Base class for exceptions in Vitrage.\"\"\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def __init__(self, msg\u003d\u0027\u0027):"},{"line_number":29,"context_line":"        self._msg \u003d msg"},{"line_number":30,"context_line":"        Exception.__init__(self, msg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_996301dd","line":27,"in_reply_to":"9f91af0f_bdb55280","updated":"2018-01-14 14:33:48.000000000","message":"Done","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"0bff9627d2ddc48eef84d59b7ec418cded012c3f","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def __init__(self, msg\u003d\u0027\u0027):"},{"line_number":29,"context_line":"        self._msg \u003d msg"},{"line_number":30,"context_line":"        Exception.__init__(self, msg)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def __repr__(self):"},{"line_number":33,"context_line":"        return self._msg"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f91af0f_bd9c720e","line":30,"range":{"start_line":30,"start_character":8,"end_line":30,"end_character":37},"updated":"2018-01-08 08:51:35.000000000","message":"why not call super?","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"98f9a295fc211c67a052d1e89fba4e776c8abbed","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def __init__(self, msg\u003d\u0027\u0027):"},{"line_number":29,"context_line":"        self._msg \u003d msg"},{"line_number":30,"context_line":"        Exception.__init__(self, msg)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def __repr__(self):"},{"line_number":33,"context_line":"        return self._msg"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_b95efd0f","line":30,"range":{"start_line":30,"start_character":8,"end_line":30,"end_character":37},"in_reply_to":"9f91af0f_bd9c720e","updated":"2018-01-14 14:33:48.000000000","message":"Done","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"0bff9627d2ddc48eef84d59b7ec418cded012c3f","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class VitrageInputError(VitrageError):"},{"line_number":43,"context_line":"    \"\"\"Exception raised for errors in the input."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    Attributes:"},{"line_number":46,"context_line":"        msg -- explanation of the error"},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":"    def __init__(self, msg):"},{"line_number":49,"context_line":"        VitrageError.__init__(self, \u0027Input error! : %s\u0027 % msg)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class VitrageAlgorithmError(VitrageException):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f91af0f_611ac86f","line":49,"range":{"start_line":43,"start_character":0,"end_line":49,"end_character":62},"updated":"2018-01-08 08:51:35.000000000","message":"This doesnt seem right","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"98f9a295fc211c67a052d1e89fba4e776c8abbed","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class VitrageInputError(VitrageError):"},{"line_number":43,"context_line":"    \"\"\"Exception raised for errors in the input."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    Attributes:"},{"line_number":46,"context_line":"        msg -- explanation of the error"},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":"    def __init__(self, msg):"},{"line_number":49,"context_line":"        VitrageError.__init__(self, \u0027Input error! : %s\u0027 % msg)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class VitrageAlgorithmError(VitrageException):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_599b39c8","line":49,"range":{"start_line":43,"start_character":0,"end_line":49,"end_character":62},"in_reply_to":"9f91af0f_611ac86f","updated":"2018-01-14 14:33:48.000000000","message":"Done","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"}],"vitrage/common/utils.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6f1574bf4c1d82f000127a6ebb212e1ae790b209","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    return profiled_func"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def compare_dicts(d1, d2):"},{"line_number":61,"context_line":"    return six.viewitems(d1) \u003d\u003d six.viewitems(d2)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_e3e61817","line":60,"range":{"start_line":60,"start_character":4,"end_line":60,"end_character":17},"updated":"2018-01-04 12:27:34.000000000","message":"I think that a similar function already exists in another file","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"126089e712f7a167a166283cac836c2dad7dd5f8","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    return profiled_func"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def compare_dicts(d1, d2):"},{"line_number":61,"context_line":"    return six.viewitems(d1) \u003d\u003d six.viewitems(d2)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_3a1d150f","line":60,"updated":"2018-01-03 15:46:52.000000000","message":"None values are not handled","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    return profiled_func"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def compare_dicts(d1, d2):"},{"line_number":61,"context_line":"    return six.viewitems(d1) \u003d\u003d six.viewitems(d2)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_dd6971be","line":60,"in_reply_to":"9f91af0f_3a1d150f","updated":"2018-01-06 21:37:22.000000000","message":"none is not dict!\nthe one who uses this function should take care to not send something not dict!! i can add the following case:\n\"if type(d1) is not dict or type(d2) is not dict:\n   return False\n\"\nbut i don\u0027t think that if both d1 and d2 are none the func should return True!\n\ni will add extra checking on the parameters before sending them","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"9540b9ab5e26777f3e0521ac76c6be6a048a6ee9","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    return profiled_func"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def compare_dicts(d1, d2):"},{"line_number":61,"context_line":"    if d1 is None and d2 is None:"},{"line_number":62,"context_line":"        return True"},{"line_number":63,"context_line":"    elif d1 is None or d2 is None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f91af0f_8e5e1e42","line":60,"range":{"start_line":60,"start_character":4,"end_line":60,"end_character":17},"updated":"2018-01-08 00:58:44.000000000","message":"Normally a comparison would return -1, 0, 1.\n\nFor equality check, better to name it `is_equal_dict`. And this function seems have a limitation on value types. Can it handle list as value, or dict as value?\n\nSuggest using some existing module like deepdiff for this purpose. https://github.com/seperman/deepdiff","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"98f9a295fc211c67a052d1e89fba4e776c8abbed","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    return profiled_func"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def compare_dicts(d1, d2):"},{"line_number":61,"context_line":"    if d1 is None and d2 is None:"},{"line_number":62,"context_line":"        return True"},{"line_number":63,"context_line":"    elif d1 is None or d2 is None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_7e4ffb91","line":60,"range":{"start_line":60,"start_character":4,"end_line":60,"end_character":17},"in_reply_to":"9f91af0f_8e5e1e42","updated":"2018-01-14 14:33:48.000000000","message":"this function is removed in next patch","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"}],"vitrage/entity_graph/__init__.py":[{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"b876b6afd3ffa984e0178c7a1a4de483b22a8a29","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    cfg.StrOpt(\u0027graph_driver\u0027,"},{"line_number":31,"context_line":"               default\u003d\u0027networkx\u0027,"},{"line_number":32,"context_line":"               help\u003d\u0027graph driver implementation class\u0027),"},{"line_number":33,"context_line":"    cfg.BoolOpt(\u0027snapshot_graph\u0027,"},{"line_number":34,"context_line":"                default\u003dFalse,"},{"line_number":35,"context_line":"                help\u003d\u0027Whether or not take graph snapshots\u0027),"},{"line_number":36,"context_line":"    cfg.IntOpt(\u0027graph_snapshots_interval\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_fe04a1c8","line":33,"range":{"start_line":33,"start_character":17,"end_line":33,"end_character":31},"updated":"2018-01-02 01:27:22.000000000","message":"What about naming it `graph_snapshot` so that it looks like in the same group as other `graph_xxx` options?","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"5dbfa51520fc83eed58b5e8e2424af13f405b93b","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    cfg.StrOpt(\u0027graph_driver\u0027,"},{"line_number":31,"context_line":"               default\u003d\u0027networkx\u0027,"},{"line_number":32,"context_line":"               help\u003d\u0027graph driver implementation class\u0027),"},{"line_number":33,"context_line":"    cfg.BoolOpt(\u0027snapshot_graph\u0027,"},{"line_number":34,"context_line":"                default\u003dFalse,"},{"line_number":35,"context_line":"                help\u003d\u0027Whether or not take graph snapshots\u0027),"},{"line_number":36,"context_line":"    cfg.IntOpt(\u0027graph_snapshots_interval\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_0170f8a4","line":33,"range":{"start_line":33,"start_character":17,"end_line":33,"end_character":31},"in_reply_to":"9f91af0f_4ff079ca","updated":"2018-01-03 01:27:17.000000000","message":"\u003e Yujun: I think this is different. It is not the type of graph\n \u003e driver; it is a boolean saying whether to snapshot or not. Maybe we\n \u003e should rename it to persist_graph or enable_graph_persistency.\n\nBoth look good to me.\n\n`snapshot` is a noun, so snapshot_graph seems not correct in grammar.","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    cfg.StrOpt(\u0027graph_driver\u0027,"},{"line_number":31,"context_line":"               default\u003d\u0027networkx\u0027,"},{"line_number":32,"context_line":"               help\u003d\u0027graph driver implementation class\u0027),"},{"line_number":33,"context_line":"    cfg.BoolOpt(\u0027snapshot_graph\u0027,"},{"line_number":34,"context_line":"                default\u003dFalse,"},{"line_number":35,"context_line":"                help\u003d\u0027Whether or not take graph snapshots\u0027),"},{"line_number":36,"context_line":"    cfg.IntOpt(\u0027graph_snapshots_interval\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_2777593d","line":33,"range":{"start_line":33,"start_character":17,"end_line":33,"end_character":31},"in_reply_to":"9f91af0f_4ff079ca","updated":"2018-01-03 14:04:13.000000000","message":"changed to enable_persistency. see patch set 4","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    cfg.StrOpt(\u0027graph_driver\u0027,"},{"line_number":31,"context_line":"               default\u003d\u0027networkx\u0027,"},{"line_number":32,"context_line":"               help\u003d\u0027graph driver implementation class\u0027),"},{"line_number":33,"context_line":"    cfg.BoolOpt(\u0027snapshot_graph\u0027,"},{"line_number":34,"context_line":"                default\u003dFalse,"},{"line_number":35,"context_line":"                help\u003d\u0027Whether or not take graph snapshots\u0027),"},{"line_number":36,"context_line":"    cfg.IntOpt(\u0027graph_snapshots_interval\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_4ff079ca","line":33,"range":{"start_line":33,"start_character":17,"end_line":33,"end_character":31},"in_reply_to":"9f91af0f_fe04a1c8","updated":"2018-01-02 08:34:03.000000000","message":"Yujun: I think this is different. It is not the type of graph driver; it is a boolean saying whether to snapshot or not. Maybe we should rename it to persist_graph or enable_graph_persistency.\n\nMuhamad: Do you have a boolean for the persistor, to decide whether you want to persist the events? if so, I think the same boolean should be used for both the persistor and the snapshooter. I see no point in storing only the events or only the snapshots.","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    cfg.StrOpt(\u0027graph_driver\u0027,"},{"line_number":31,"context_line":"               default\u003d\u0027networkx\u0027,"},{"line_number":32,"context_line":"               help\u003d\u0027graph driver implementation class\u0027),"},{"line_number":33,"context_line":"    cfg.BoolOpt(\u0027snapshot_graph\u0027,"},{"line_number":34,"context_line":"                default\u003dFalse,"},{"line_number":35,"context_line":"                help\u003d\u0027Whether or not take graph snapshots\u0027),"},{"line_number":36,"context_line":"    cfg.IntOpt(\u0027graph_snapshots_interval\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_677d611b","line":33,"range":{"start_line":33,"start_character":17,"end_line":33,"end_character":31},"in_reply_to":"9f91af0f_fe04a1c8","updated":"2018-01-03 14:04:13.000000000","message":"changed to enable_persistency. see patch set 4","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"94a2d99cebc4ecdcb16272f8128b6f6532c2faac","unresolved":false,"context_lines":[{"line_number":32,"context_line":"               help\u003d\u0027graph driver implementation class\u0027),"},{"line_number":33,"context_line":"    cfg.BoolOpt(\u0027snapshot_graph\u0027,"},{"line_number":34,"context_line":"                default\u003dFalse,"},{"line_number":35,"context_line":"                help\u003d\u0027Whether or not take graph snapshots\u0027),"},{"line_number":36,"context_line":"    cfg.IntOpt(\u0027graph_snapshots_interval\u0027,"},{"line_number":37,"context_line":"               default\u003d60,"},{"line_number":38,"context_line":"               help\u003d\u0027Time to wait between subsequent graph snapshots\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_4ae62747","line":35,"range":{"start_line":35,"start_character":22,"end_line":35,"end_character":57},"updated":"2018-01-02 09:13:24.000000000","message":"\"Periodically store the entire graph snapshot to database\"","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":32,"context_line":"               help\u003d\u0027graph driver implementation class\u0027),"},{"line_number":33,"context_line":"    cfg.BoolOpt(\u0027snapshot_graph\u0027,"},{"line_number":34,"context_line":"                default\u003dFalse,"},{"line_number":35,"context_line":"                help\u003d\u0027Whether or not take graph snapshots\u0027),"},{"line_number":36,"context_line":"    cfg.IntOpt(\u0027graph_snapshots_interval\u0027,"},{"line_number":37,"context_line":"               default\u003d60,"},{"line_number":38,"context_line":"               help\u003d\u0027Time to wait between subsequent graph snapshots\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_070b358e","line":35,"range":{"start_line":35,"start_character":22,"end_line":35,"end_character":57},"in_reply_to":"9f91af0f_4ae62747","updated":"2018-01-03 14:04:13.000000000","message":"Done","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"94a2d99cebc4ecdcb16272f8128b6f6532c2faac","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    cfg.BoolOpt(\u0027snapshot_graph\u0027,"},{"line_number":34,"context_line":"                default\u003dFalse,"},{"line_number":35,"context_line":"                help\u003d\u0027Whether or not take graph snapshots\u0027),"},{"line_number":36,"context_line":"    cfg.IntOpt(\u0027graph_snapshots_interval\u0027,"},{"line_number":37,"context_line":"               default\u003d60,"},{"line_number":38,"context_line":"               help\u003d\u0027Time to wait between subsequent graph snapshots\u0027),"},{"line_number":39,"context_line":"]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"EVALUATOR_TOPIC \u003d \u0027vitrage.evaluator\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_ea393b41","line":38,"range":{"start_line":36,"start_character":0,"end_line":38,"end_character":71},"updated":"2018-01-02 09:13:24.000000000","message":"This is in seconds? minutes? not clear","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"5dbfa51520fc83eed58b5e8e2424af13f405b93b","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    cfg.BoolOpt(\u0027snapshot_graph\u0027,"},{"line_number":34,"context_line":"                default\u003dFalse,"},{"line_number":35,"context_line":"                help\u003d\u0027Whether or not take graph snapshots\u0027),"},{"line_number":36,"context_line":"    cfg.IntOpt(\u0027graph_snapshots_interval\u0027,"},{"line_number":37,"context_line":"               default\u003d60,"},{"line_number":38,"context_line":"               help\u003d\u0027Time to wait between subsequent graph snapshots\u0027),"},{"line_number":39,"context_line":"]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"EVALUATOR_TOPIC \u003d \u0027vitrage.evaluator\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_e16634ee","line":38,"range":{"start_line":36,"start_character":0,"end_line":38,"end_character":71},"in_reply_to":"9f91af0f_ea393b41","updated":"2018-01-03 01:27:17.000000000","message":"+1","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    cfg.BoolOpt(\u0027snapshot_graph\u0027,"},{"line_number":34,"context_line":"                default\u003dFalse,"},{"line_number":35,"context_line":"                help\u003d\u0027Whether or not take graph snapshots\u0027),"},{"line_number":36,"context_line":"    cfg.IntOpt(\u0027graph_snapshots_interval\u0027,"},{"line_number":37,"context_line":"               default\u003d60,"},{"line_number":38,"context_line":"               help\u003d\u0027Time to wait between subsequent graph snapshots\u0027),"},{"line_number":39,"context_line":"]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"EVALUATOR_TOPIC \u003d \u0027vitrage.evaluator\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_e7dc111a","line":38,"range":{"start_line":36,"start_character":0,"end_line":38,"end_character":71},"in_reply_to":"9f91af0f_ea393b41","updated":"2018-01-03 14:04:13.000000000","message":"took from other conf where its default value is number","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"}],"vitrage/entity_graph/graph_snapshots.py":[{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"3a275b5c307d270cd4033d8e40b798f606e79abe","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            last_event_timestamp\u003dlast_event_timestamp)"},{"line_number":44,"context_line":"        return NXGraph.from_json(db_row.graph_snapshot)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def update_last_event_timestamp(self, timestamp):"},{"line_number":47,"context_line":"        self.last_event_timestamp \u003d timestamp"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_9faf9493","line":47,"range":{"start_line":46,"start_character":4,"end_line":47,"end_character":45},"updated":"2018-01-01 14:09:21.000000000","message":"its redundant you can just assign the field","commit_id":"967e1993d73c5bcc6b3becc625341688983a1f50"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"6dc1b25c42a643d7ff1fa8e70c271e70a128dcfb","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            last_event_timestamp\u003dlast_event_timestamp)"},{"line_number":44,"context_line":"        return NXGraph.from_json(db_row.graph_snapshot)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def update_last_event_timestamp(self, timestamp):"},{"line_number":47,"context_line":"        self.last_event_timestamp \u003d timestamp"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_df18bcd4","line":47,"range":{"start_line":46,"start_character":4,"end_line":47,"end_character":45},"in_reply_to":"9f91af0f_9faf9493","updated":"2018-01-01 15:02:23.000000000","message":"Done","commit_id":"967e1993d73c5bcc6b3becc625341688983a1f50"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class GraphSnapshot(object):"},{"line_number":29,"context_line":"    def __init__(self, conf):"},{"line_number":30,"context_line":"        super(GraphSnapshot, self).__init__()"},{"line_number":31,"context_line":"        self.db_connection \u003d storage.get_connection_from_config(conf)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_0fbcb1da","line":28,"range":{"start_line":28,"start_character":6,"end_line":28,"end_character":19},"updated":"2018-01-02 08:34:03.000000000","message":"I think the name should be different. GraphSnapshot sounds like a data class, but this class is responsible for load/store. How about calling it GraphSnapshoter, or GraphSnapshotRepository?","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"5dbfa51520fc83eed58b5e8e2424af13f405b93b","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class GraphSnapshot(object):"},{"line_number":29,"context_line":"    def __init__(self, conf):"},{"line_number":30,"context_line":"        super(GraphSnapshot, self).__init__()"},{"line_number":31,"context_line":"        self.db_connection \u003d storage.get_connection_from_config(conf)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_a18eec75","line":28,"range":{"start_line":28,"start_character":6,"end_line":28,"end_character":19},"in_reply_to":"9f91af0f_0fbcb1da","updated":"2018-01-03 01:27:17.000000000","message":"There is already a PersistorService. What will be the relationship between this snapshoter and that one?","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class GraphSnapshot(object):"},{"line_number":29,"context_line":"    def __init__(self, conf):"},{"line_number":30,"context_line":"        super(GraphSnapshot, self).__init__()"},{"line_number":31,"context_line":"        self.db_connection \u003d storage.get_connection_from_config(conf)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_e713b1b7","line":28,"range":{"start_line":28,"start_character":6,"end_line":28,"end_character":19},"in_reply_to":"9f91af0f_0fbcb1da","updated":"2018-01-03 14:04:13.000000000","message":"patch 4: GraphPersistor.","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class GraphSnapshot(object):"},{"line_number":29,"context_line":"    def __init__(self, conf):"},{"line_number":30,"context_line":"        super(GraphSnapshot, self).__init__()"},{"line_number":31,"context_line":"        self.db_connection \u003d storage.get_connection_from_config(conf)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_65bf87fb","line":28,"range":{"start_line":28,"start_character":6,"end_line":28,"end_character":19},"in_reply_to":"9f91af0f_a18eec75","updated":"2018-01-03 14:04:13.000000000","message":"changing the repository to be \u0027persistency\u0027 which will contain persistorService aka event_persistor, and the functionality of graph persistence.","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"}],"vitrage/entity_graph/processor/processor.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        if event_vitrage_timestamp:"},{"line_number":72,"context_line":"            event_parsed_timestamp \u003d \\"},{"line_number":73,"context_line":"                dateutil.parser.parse(event_vitrage_timestamp)"},{"line_number":74,"context_line":"            self.graph_snapshooter.last_event_timestamp \u003d \\"},{"line_number":75,"context_line":"                event_parsed_timestamp"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def create_entity(self, new_vertex, neighbors):"},{"line_number":78,"context_line":"        \"\"\"Adds new vertex to the entity graph"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_0f8a711a","line":75,"range":{"start_line":74,"start_character":12,"end_line":75,"end_character":38},"updated":"2018-01-02 08:34:03.000000000","message":"I prefer to call a method of the snapshooter:\n\nself.graph_snapshooter.set_last_event_timestamp(event_parsed_timestamp)","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        if event_vitrage_timestamp:"},{"line_number":72,"context_line":"            event_parsed_timestamp \u003d \\"},{"line_number":73,"context_line":"                dateutil.parser.parse(event_vitrage_timestamp)"},{"line_number":74,"context_line":"            self.graph_snapshooter.last_event_timestamp \u003d \\"},{"line_number":75,"context_line":"                event_parsed_timestamp"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def create_entity(self, new_vertex, neighbors):"},{"line_number":78,"context_line":"        \"\"\"Adds new vertex to the entity graph"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_c7122db2","line":75,"range":{"start_line":74,"start_character":12,"end_line":75,"end_character":38},"in_reply_to":"9f91af0f_0f8a711a","updated":"2018-01-03 14:04:13.000000000","message":"Done","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"94a2d99cebc4ecdcb16272f8128b6f6532c2faac","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        if event_vitrage_timestamp:"},{"line_number":72,"context_line":"            event_parsed_timestamp \u003d \\"},{"line_number":73,"context_line":"                dateutil.parser.parse(event_vitrage_timestamp)"},{"line_number":74,"context_line":"            self.graph_snapshooter.last_event_timestamp \u003d \\"},{"line_number":75,"context_line":"                event_parsed_timestamp"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def create_entity(self, new_vertex, neighbors):"},{"line_number":78,"context_line":"        \"\"\"Adds new vertex to the entity graph"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_aaf573cd","line":75,"range":{"start_line":74,"start_character":12,"end_line":75,"end_character":38},"in_reply_to":"9f91af0f_0f8a711a","updated":"2018-01-02 09:13:24.000000000","message":"This method should be entirely in graph_snapshoot_repository","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        if event_vitrage_timestamp:"},{"line_number":72,"context_line":"            event_parsed_timestamp \u003d \\"},{"line_number":73,"context_line":"                dateutil.parser.parse(event_vitrage_timestamp)"},{"line_number":74,"context_line":"            self.graph_snapshooter.last_event_timestamp \u003d \\"},{"line_number":75,"context_line":"                event_parsed_timestamp"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def create_entity(self, new_vertex, neighbors):"},{"line_number":78,"context_line":"        \"\"\"Adds new vertex to the entity graph"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_471e1dbb","line":75,"range":{"start_line":74,"start_character":12,"end_line":75,"end_character":38},"in_reply_to":"9f91af0f_aaf573cd","updated":"2018-01-03 14:04:13.000000000","message":"Done","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"b876b6afd3ffa984e0178c7a1a4de483b22a8a29","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                        \"deleted_vertex - %s, graph_vertex - %s\","},{"line_number":200,"context_line":"                        vertex, graph_vertex)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def snapshot_graph(self):"},{"line_number":203,"context_line":"        self.graph_snapshooter.store_graph(self.entity_graph)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def handle_end_message(self, vertex, neighbors):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_de13dd0c","line":202,"range":{"start_line":202,"start_character":8,"end_line":202,"end_character":22},"updated":"2018-01-02 01:27:22.000000000","message":"Suggest to use `snapshoot_graph` or `take_graph_snapshot` (preferred).","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6f1574bf4c1d82f000127a6ebb212e1ae790b209","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.initialization_status \u003d initialization_status"},{"line_number":42,"context_line":"        self.entity_graph \u003d e_graph"},{"line_number":43,"context_line":"        self._notifier \u003d GraphNotifier(conf)"},{"line_number":44,"context_line":"        self._graph_persistor \u003d graph_persistor"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def process_event(self, event):"},{"line_number":47,"context_line":"        \"\"\"Decides which action to run on given event"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_c3ebd4d9","line":44,"range":{"start_line":44,"start_character":13,"end_line":44,"end_character":29},"updated":"2018-01-04 12:27:34.000000000","message":"I don\u0027t think it should start with an _","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6f1574bf4c1d82f000127a6ebb212e1ae790b209","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.initialization_status \u003d initialization_status"},{"line_number":42,"context_line":"        self.entity_graph \u003d e_graph"},{"line_number":43,"context_line":"        self._notifier \u003d GraphNotifier(conf)"},{"line_number":44,"context_line":"        self._graph_persistor \u003d graph_persistor"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def process_event(self, event):"},{"line_number":47,"context_line":"        \"\"\"Decides which action to run on given event"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_83bf0ccf","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":47},"updated":"2018-01-04 12:27:34.000000000","message":"Why do both the processor and the entity graph hold the persistor? isn\u0027t it enough that only one of them holds it?","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.initialization_status \u003d initialization_status"},{"line_number":42,"context_line":"        self.entity_graph \u003d e_graph"},{"line_number":43,"context_line":"        self._notifier \u003d GraphNotifier(conf)"},{"line_number":44,"context_line":"        self._graph_persistor \u003d graph_persistor"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def process_event(self, event):"},{"line_number":47,"context_line":"        \"\"\"Decides which action to run on given event"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_e3deea0f","line":44,"range":{"start_line":44,"start_character":13,"end_line":44,"end_character":29},"in_reply_to":"9f91af0f_c3ebd4d9","updated":"2018-01-06 21:37:22.000000000","message":"why not? it is private field","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"0abef3a0cdbcd3eaa742c9afa030501df5bd4de4","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.initialization_status \u003d initialization_status"},{"line_number":42,"context_line":"        self.entity_graph \u003d e_graph"},{"line_number":43,"context_line":"        self._notifier \u003d GraphNotifier(conf)"},{"line_number":44,"context_line":"        self._graph_persistor \u003d graph_persistor"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def process_event(self, event):"},{"line_number":47,"context_line":"        \"\"\"Decides which action to run on given event"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_49a6d555","line":44,"range":{"start_line":44,"start_character":13,"end_line":44,"end_character":29},"in_reply_to":"9f91af0f_e3deea0f","updated":"2018-01-07 07:42:06.000000000","message":"Ok","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"}],"vitrage/evaluator/scenario_evaluator.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6a9a7930a27227077f517de336176edf5ebe21d1","unresolved":false,"context_lines":[{"line_number":523,"context_line":""},{"line_number":524,"context_line":"    @classmethod"},{"line_number":525,"context_line":"    def _is_highest_score(cls, db_actions, action_info):"},{"line_number":526,"context_line":"        \"\"\"Get the top action from the list and equals to action_info"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"        Actions are sorted according to:"},{"line_number":529,"context_line":"        score - primary, ascending"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f91af0f_c243976b","line":526,"range":{"start_line":526,"start_character":48,"end_line":526,"end_character":54},"updated":"2018-01-08 07:42:46.000000000","message":"Why did you change it?","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"98f9a295fc211c67a052d1e89fba4e776c8abbed","unresolved":false,"context_lines":[{"line_number":523,"context_line":""},{"line_number":524,"context_line":"    @classmethod"},{"line_number":525,"context_line":"    def _is_highest_score(cls, db_actions, action_info):"},{"line_number":526,"context_line":"        \"\"\"Get the top action from the list and equals to action_info"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"        Actions are sorted according to:"},{"line_number":529,"context_line":"        score - primary, ascending"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_be54a322","line":526,"range":{"start_line":526,"start_character":48,"end_line":526,"end_character":54},"in_reply_to":"9f91af0f_c243976b","updated":"2018-01-14 14:33:48.000000000","message":"thanks for noticing! mistake","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"}],"vitrage/graph/algo_driver/networkx_algorithm.py":[{"author":{"_account_id":21414,"name":"Yujun Zhang","email":"zhang.yujunz@zte.com.cn","username":"yujunz"},"change_message_id":"b876b6afd3ffa984e0178c7a1a4de483b22a8a29","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def connected_component_subgraphs(self, subgraph):"},{"line_number":172,"context_line":"        return components.connected_component_subgraphs("},{"line_number":173,"context_line":"            subgraph.g.to_undirected(), copy\u003dFalse)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def all_simple_paths(self, source, target):"},{"line_number":176,"context_line":"        return simple_paths.all_simple_paths(self.graph.g,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_3e0209b6","line":173,"range":{"start_line":173,"start_character":23,"end_line":173,"end_character":36},"updated":"2018-01-02 01:27:22.000000000","message":"Why undirected? Isn\u0027t some relationship like \"cause\" directional?","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def connected_component_subgraphs(self, subgraph):"},{"line_number":172,"context_line":"        return components.connected_component_subgraphs("},{"line_number":173,"context_line":"            subgraph.g.to_undirected(), copy\u003dFalse)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def all_simple_paths(self, source, target):"},{"line_number":176,"context_line":"        return simple_paths.all_simple_paths(self.graph.g,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_af7a6521","line":173,"range":{"start_line":173,"start_character":23,"end_line":173,"end_character":36},"in_reply_to":"9f91af0f_3e0209b6","updated":"2018-01-02 08:34:03.000000000","message":"I assume that for finding a connected component the direction is not relevant. Anyway, Muhamad did not change it, he just renamed _g to g.","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def connected_component_subgraphs(self, subgraph):"},{"line_number":172,"context_line":"        return components.connected_component_subgraphs("},{"line_number":173,"context_line":"            subgraph.g.to_undirected(), copy\u003dFalse)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def all_simple_paths(self, source, target):"},{"line_number":176,"context_line":"        return simple_paths.all_simple_paths(self.graph.g,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_077ed5e3","line":173,"range":{"start_line":173,"start_character":23,"end_line":173,"end_character":36},"in_reply_to":"9f91af0f_af7a6521","updated":"2018-01-03 14:04:13.000000000","message":"reverted in patch 4","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"}],"vitrage/graph/driver/graph.py":[{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"126089e712f7a167a166283cac836c2dad7dd5f8","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    @abc.abstractmethod"},{"line_number":204,"context_line":"    def get_edges(self,"},{"line_number":205,"context_line":"                  v1_id\u003dNone,"},{"line_number":206,"context_line":"                  v2_id\u003dNone,"},{"line_number":207,"context_line":"                  direction\u003dDirection.BOTH,"},{"line_number":208,"context_line":"                  attr_filter\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_f771080e","line":205,"range":{"start_line":205,"start_character":23,"end_line":205,"end_character":28},"updated":"2018-01-03 15:46:52.000000000","message":"Please remove \u003dNone,as it is not supported","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    @abc.abstractmethod"},{"line_number":204,"context_line":"    def get_edges(self,"},{"line_number":205,"context_line":"                  v1_id\u003dNone,"},{"line_number":206,"context_line":"                  v2_id\u003dNone,"},{"line_number":207,"context_line":"                  direction\u003dDirection.BOTH,"},{"line_number":208,"context_line":"                  attr_filter\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_7d92a54d","line":205,"range":{"start_line":205,"start_character":23,"end_line":205,"end_character":28},"in_reply_to":"9f91af0f_f771080e","updated":"2018-01-06 21:37:22.000000000","message":"Done","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"}],"vitrage/graph/driver/networkx_graph.py":[{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"3a275b5c307d270cd4033d8e40b798f606e79abe","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    def algo(self):"},{"line_number":63,"context_line":"        return NXAlgorithm(self)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @property"},{"line_number":66,"context_line":"    def g(self):"},{"line_number":67,"context_line":"        return self._g"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def copy(self):"},{"line_number":70,"context_line":"        # Networkx graph copy is very slow, so we implement"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_3f944844","line":67,"range":{"start_line":65,"start_character":4,"end_line":67,"end_character":22},"updated":"2018-01-01 14:09:21.000000000","message":"wouldn\u0027t it be simpler to make it a \u0027g\u0027 and then you dont need this property ?","commit_id":"967e1993d73c5bcc6b3becc625341688983a1f50"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"6dc1b25c42a643d7ff1fa8e70c271e70a128dcfb","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    def algo(self):"},{"line_number":63,"context_line":"        return NXAlgorithm(self)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @property"},{"line_number":66,"context_line":"    def g(self):"},{"line_number":67,"context_line":"        return self._g"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def copy(self):"},{"line_number":70,"context_line":"        # Networkx graph copy is very slow, so we implement"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_7f0df08e","line":67,"range":{"start_line":65,"start_character":4,"end_line":67,"end_character":22},"in_reply_to":"9f91af0f_3f944844","updated":"2018-01-01 15:02:23.000000000","message":"Done","commit_id":"967e1993d73c5bcc6b3becc625341688983a1f50"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"90455ad0dac288c766f20b4228eba14a56d11173","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                 vertices\u003dNone,"},{"line_number":52,"context_line":"                 edges\u003dNone):"},{"line_number":53,"context_line":"        super(NXGraph, self).__init__(name, NXGraph.GRAPH_TYPE)"},{"line_number":54,"context_line":"        self.g \u003d nx.MultiDiGraph()"},{"line_number":55,"context_line":"        self.add_vertices(vertices)"},{"line_number":56,"context_line":"        self.add_edges(edges)"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_2a7ba38c","line":54,"range":{"start_line":54,"start_character":8,"end_line":54,"end_character":34},"updated":"2018-01-02 08:33:33.000000000","message":"g should remain private, if you need some functionality over it, you can implement it here, or consider using the Graph interface instead","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                 vertices\u003dNone,"},{"line_number":52,"context_line":"                 edges\u003dNone):"},{"line_number":53,"context_line":"        super(NXGraph, self).__init__(name, NXGraph.GRAPH_TYPE)"},{"line_number":54,"context_line":"        self.g \u003d nx.MultiDiGraph()"},{"line_number":55,"context_line":"        self.add_vertices(vertices)"},{"line_number":56,"context_line":"        self.add_edges(edges)"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_47f05d91","line":54,"range":{"start_line":54,"start_character":8,"end_line":54,"end_character":34},"in_reply_to":"9f91af0f_2a7ba38c","updated":"2018-01-03 14:04:13.000000000","message":"Done","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"126089e712f7a167a166283cac836c2dad7dd5f8","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        return None"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def get_edges(self,"},{"line_number":125,"context_line":"                  v1_id\u003dNone,"},{"line_number":126,"context_line":"                  v2_id\u003dNone,"},{"line_number":127,"context_line":"                  direction\u003dDirection.BOTH,"},{"line_number":128,"context_line":"                  attr_filter\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_b7f38073","line":125,"range":{"start_line":125,"start_character":23,"end_line":125,"end_character":28},"updated":"2018-01-03 15:46:52.000000000","message":"remove this, it is not supprted","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        return None"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def get_edges(self,"},{"line_number":125,"context_line":"                  v1_id\u003dNone,"},{"line_number":126,"context_line":"                  v2_id\u003dNone,"},{"line_number":127,"context_line":"                  direction\u003dDirection.BOTH,"},{"line_number":128,"context_line":"                  attr_filter\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_e32fca3c","line":125,"range":{"start_line":125,"start_character":23,"end_line":125,"end_character":28},"in_reply_to":"9f91af0f_b7f38073","updated":"2018-01-06 21:37:22.000000000","message":"Done","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"126089e712f7a167a166283cac836c2dad7dd5f8","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        \"\"\""},{"line_number":311,"context_line":"        self._g \u003d compose(self._g, other_graph._g)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def compare(self, other):"},{"line_number":314,"context_line":"        \"\"\"Compare vertices and edges with other graph"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        :type other: NXGraph"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_97951ce7","line":313,"range":{"start_line":313,"start_character":8,"end_line":313,"end_character":15},"updated":"2018-01-03 15:46:52.000000000","message":"rename to equals(?)","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        \"\"\""},{"line_number":311,"context_line":"        self._g \u003d compose(self._g, other_graph._g)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def compare(self, other):"},{"line_number":314,"context_line":"        \"\"\"Compare vertices and edges with other graph"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        :type other: NXGraph"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_e3d4aa22","line":313,"range":{"start_line":313,"start_character":8,"end_line":313,"end_character":15},"in_reply_to":"9f91af0f_97951ce7","updated":"2018-01-06 21:37:22.000000000","message":"Done","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"126089e712f7a167a166283cac836c2dad7dd5f8","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        \"\"\"Compare vertices and edges with other graph"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        :type other: NXGraph"},{"line_number":317,"context_line":"        :return:"},{"line_number":318,"context_line":"        \"\"\""},{"line_number":319,"context_line":"        g1_nodes \u003d self._g.node"},{"line_number":320,"context_line":"        g1_edges \u003d self._g.edge"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_97be7c63","line":317,"range":{"start_line":317,"start_character":8,"end_line":317,"end_character":16},"updated":"2018-01-03 15:46:52.000000000","message":"can write somthing here, or just remove","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        \"\"\"Compare vertices and edges with other graph"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        :type other: NXGraph"},{"line_number":317,"context_line":"        :return:"},{"line_number":318,"context_line":"        \"\"\""},{"line_number":319,"context_line":"        g1_nodes \u003d self._g.node"},{"line_number":320,"context_line":"        g1_edges \u003d self._g.edge"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_03daee4a","line":317,"range":{"start_line":317,"start_character":8,"end_line":317,"end_character":16},"in_reply_to":"9f91af0f_97be7c63","updated":"2018-01-06 21:37:22.000000000","message":"Done","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"126089e712f7a167a166283cac836c2dad7dd5f8","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        g1_edges \u003d self._g.edge"},{"line_number":321,"context_line":"        g2_nodes \u003d other._g.node"},{"line_number":322,"context_line":"        g2_edges \u003d other._g.edge"},{"line_number":323,"context_line":"        if not self.num_vertices() \u003d\u003d other.num_vertices():"},{"line_number":324,"context_line":"            return False"},{"line_number":325,"context_line":"        if not self.num_edges() \u003d\u003d other.num_edges():"},{"line_number":326,"context_line":"            return False"},{"line_number":327,"context_line":"        for n_id in g1_nodes:"},{"line_number":328,"context_line":"            if not compare_dicts(g1_nodes.get(n_id), g2_nodes.get(n_id)):"},{"line_number":329,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_7af63dfc","line":326,"range":{"start_line":323,"start_character":0,"end_line":326,"end_character":24},"updated":"2018-01-03 15:46:52.000000000","message":"if self.num_vertices() !\u003d other.num_vertices() or self.num_edges() !\u003d other.num_edges():\n    return False","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        g1_edges \u003d self._g.edge"},{"line_number":321,"context_line":"        g2_nodes \u003d other._g.node"},{"line_number":322,"context_line":"        g2_edges \u003d other._g.edge"},{"line_number":323,"context_line":"        if not self.num_vertices() \u003d\u003d other.num_vertices():"},{"line_number":324,"context_line":"            return False"},{"line_number":325,"context_line":"        if not self.num_edges() \u003d\u003d other.num_edges():"},{"line_number":326,"context_line":"            return False"},{"line_number":327,"context_line":"        for n_id in g1_nodes:"},{"line_number":328,"context_line":"            if not compare_dicts(g1_nodes.get(n_id), g2_nodes.get(n_id)):"},{"line_number":329,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_23ee12ed","line":326,"range":{"start_line":323,"start_character":0,"end_line":326,"end_character":24},"in_reply_to":"9f91af0f_7af63dfc","updated":"2018-01-06 21:37:22.000000000","message":"Done","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6a9a7930a27227077f517de336176edf5ebe21d1","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        self._g \u003d compose(self._g, other_graph._g)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def equals(self, other):"},{"line_number":314,"context_line":"        \"\"\"Check whether if vertices and edges of both graphs are equal"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        :type other: NXGraph"},{"line_number":317,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9f91af0f_62540b22","line":314,"range":{"start_line":314,"start_character":17,"end_line":314,"end_character":27},"updated":"2018-01-08 07:42:46.000000000","message":"Remove one of these words","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"98f9a295fc211c67a052d1e89fba4e776c8abbed","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        self._g \u003d compose(self._g, other_graph._g)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def equals(self, other):"},{"line_number":314,"context_line":"        \"\"\"Check whether if vertices and edges of both graphs are equal"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        :type other: NXGraph"},{"line_number":317,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_5e31df0a","line":314,"range":{"start_line":314,"start_character":17,"end_line":314,"end_character":27},"in_reply_to":"9f91af0f_62540b22","updated":"2018-01-14 14:33:48.000000000","message":"all this function is removed in next patch","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"}],"vitrage/persistency/__init__.py":[{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"126089e712f7a167a166283cac836c2dad7dd5f8","unresolved":false,"context_lines":[{"line_number":21,"context_line":"                    \u0027datasources to the persistor\u0027),"},{"line_number":22,"context_line":"    cfg.BoolOpt(\u0027enable_persistency\u0027,"},{"line_number":23,"context_line":"                default\u003dFalse,"},{"line_number":24,"context_line":"                help\u003d\u0027Whether or not persistency is enabled\u0027),"},{"line_number":25,"context_line":"    cfg.IntOpt(\u0027graph_snapshots_interval\u0027,"},{"line_number":26,"context_line":"               default\u003d60,"},{"line_number":27,"context_line":"               help\u003d\u0027Time to wait between subsequent graph snapshots\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_3ae2f502","line":24,"range":{"start_line":24,"start_character":22,"end_line":24,"end_character":59},"updated":"2018-01-03 15:46:52.000000000","message":"\"Periodically store the entire graph snapshot to database\"","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":21,"context_line":"                    \u0027datasources to the persistor\u0027),"},{"line_number":22,"context_line":"    cfg.BoolOpt(\u0027enable_persistency\u0027,"},{"line_number":23,"context_line":"                default\u003dFalse,"},{"line_number":24,"context_line":"                help\u003d\u0027Whether or not persistency is enabled\u0027),"},{"line_number":25,"context_line":"    cfg.IntOpt(\u0027graph_snapshots_interval\u0027,"},{"line_number":26,"context_line":"               default\u003d60,"},{"line_number":27,"context_line":"               help\u003d\u0027Time to wait between subsequent graph snapshots\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_c3e966b7","line":24,"range":{"start_line":24,"start_character":22,"end_line":24,"end_character":59},"in_reply_to":"9f91af0f_3ae2f502","updated":"2018-01-06 21:37:22.000000000","message":"but this flag is responsible for events persistence too (not just graph)","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"126089e712f7a167a166283cac836c2dad7dd5f8","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    cfg.BoolOpt(\u0027enable_persistency\u0027,"},{"line_number":23,"context_line":"                default\u003dFalse,"},{"line_number":24,"context_line":"                help\u003d\u0027Whether or not persistency is enabled\u0027),"},{"line_number":25,"context_line":"    cfg.IntOpt(\u0027graph_snapshots_interval\u0027,"},{"line_number":26,"context_line":"               default\u003d60,"},{"line_number":27,"context_line":"               help\u003d\u0027Time to wait between subsequent graph snapshots\u0027),"},{"line_number":28,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_5ab6d9fc","line":25,"range":{"start_line":25,"start_character":16,"end_line":25,"end_character":40},"updated":"2018-01-03 15:46:52.000000000","message":"graph_persistency_interval (?)","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    cfg.BoolOpt(\u0027enable_persistency\u0027,"},{"line_number":23,"context_line":"                default\u003dFalse,"},{"line_number":24,"context_line":"                help\u003d\u0027Whether or not persistency is enabled\u0027),"},{"line_number":25,"context_line":"    cfg.IntOpt(\u0027graph_snapshots_interval\u0027,"},{"line_number":26,"context_line":"               default\u003d60,"},{"line_number":27,"context_line":"               help\u003d\u0027Time to wait between subsequent graph snapshots\u0027),"},{"line_number":28,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_63d2da02","line":25,"range":{"start_line":25,"start_character":16,"end_line":25,"end_character":40},"in_reply_to":"9f91af0f_5ab6d9fc","updated":"2018-01-06 21:37:22.000000000","message":"Done","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"126089e712f7a167a166283cac836c2dad7dd5f8","unresolved":false,"context_lines":[{"line_number":23,"context_line":"                default\u003dFalse,"},{"line_number":24,"context_line":"                help\u003d\u0027Whether or not persistency is enabled\u0027),"},{"line_number":25,"context_line":"    cfg.IntOpt(\u0027graph_snapshots_interval\u0027,"},{"line_number":26,"context_line":"               default\u003d60,"},{"line_number":27,"context_line":"               help\u003d\u0027Time to wait between subsequent graph snapshots\u0027),"},{"line_number":28,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_3acbd572","line":26,"range":{"start_line":26,"start_character":23,"end_line":26,"end_character":25},"updated":"2018-01-03 15:46:52.000000000","message":"3600 (or 60 if can be in minutes?)","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"                default\u003dFalse,"},{"line_number":24,"context_line":"                help\u003d\u0027Whether or not persistency is enabled\u0027),"},{"line_number":25,"context_line":"    cfg.IntOpt(\u0027graph_snapshots_interval\u0027,"},{"line_number":26,"context_line":"               default\u003d60,"},{"line_number":27,"context_line":"               help\u003d\u0027Time to wait between subsequent graph snapshots\u0027),"},{"line_number":28,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_83f83e7b","line":26,"range":{"start_line":26,"start_character":23,"end_line":26,"end_character":25},"in_reply_to":"9f91af0f_3acbd572","updated":"2018-01-06 21:37:22.000000000","message":"Done","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6f1574bf4c1d82f000127a6ebb212e1ae790b209","unresolved":false,"context_lines":[{"line_number":23,"context_line":"                default\u003dFalse,"},{"line_number":24,"context_line":"                help\u003d\u0027Whether or not persistency is enabled\u0027),"},{"line_number":25,"context_line":"    cfg.IntOpt(\u0027graph_snapshots_interval\u0027,"},{"line_number":26,"context_line":"               default\u003d60,"},{"line_number":27,"context_line":"               help\u003d\u0027Time to wait between subsequent graph snapshots\u0027),"},{"line_number":28,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_e3d058fa","line":26,"range":{"start_line":26,"start_character":23,"end_line":26,"end_character":25},"in_reply_to":"9f91af0f_3acbd572","updated":"2018-01-04 12:27:34.000000000","message":"I think 3600, as our other intervals are in seconds","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"                default\u003dFalse,"},{"line_number":24,"context_line":"                help\u003d\u0027Whether or not persistency is enabled\u0027),"},{"line_number":25,"context_line":"    cfg.IntOpt(\u0027graph_snapshots_interval\u0027,"},{"line_number":26,"context_line":"               default\u003d60,"},{"line_number":27,"context_line":"               help\u003d\u0027Time to wait between subsequent graph snapshots\u0027),"},{"line_number":28,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_63fbba78","line":26,"range":{"start_line":26,"start_character":23,"end_line":26,"end_character":25},"in_reply_to":"9f91af0f_e3d058fa","updated":"2018-01-06 21:37:22.000000000","message":"Done","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"126089e712f7a167a166283cac836c2dad7dd5f8","unresolved":false,"context_lines":[{"line_number":24,"context_line":"                help\u003d\u0027Whether or not persistency is enabled\u0027),"},{"line_number":25,"context_line":"    cfg.IntOpt(\u0027graph_snapshots_interval\u0027,"},{"line_number":26,"context_line":"               default\u003d60,"},{"line_number":27,"context_line":"               help\u003d\u0027Time to wait between subsequent graph snapshots\u0027),"},{"line_number":28,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_da9e6962","line":27,"range":{"start_line":27,"start_character":21,"end_line":27,"end_character":68},"updated":"2018-01-03 15:46:52.000000000","message":"Store the graph to database every X seconds (?)","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":24,"context_line":"                help\u003d\u0027Whether or not persistency is enabled\u0027),"},{"line_number":25,"context_line":"    cfg.IntOpt(\u0027graph_snapshots_interval\u0027,"},{"line_number":26,"context_line":"               default\u003d60,"},{"line_number":27,"context_line":"               help\u003d\u0027Time to wait between subsequent graph snapshots\u0027),"},{"line_number":28,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_030d0ea0","line":27,"range":{"start_line":27,"start_character":21,"end_line":27,"end_character":68},"in_reply_to":"9f91af0f_da9e6962","updated":"2018-01-06 21:37:22.000000000","message":"Done","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6a9a7930a27227077f517de336176edf5ebe21d1","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    cfg.BoolOpt(\u0027enable_persistency\u0027,"},{"line_number":23,"context_line":"                default\u003dFalse,"},{"line_number":24,"context_line":"                help\u003d\u0027Periodically store the entire graph snapshot to \u0027"},{"line_number":25,"context_line":"                     \u0027database\u0027),"},{"line_number":26,"context_line":"    cfg.IntOpt(\u0027graph_persistency_interval\u0027,"},{"line_number":27,"context_line":"               default\u003d3600,"},{"line_number":28,"context_line":"               help\u003d\u0027Store the graph to database every X seconds\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f91af0f_0233bf15","line":25,"range":{"start_line":25,"start_character":22,"end_line":25,"end_character":30},"updated":"2018-01-08 07:42:46.000000000","message":"the database (also in the description below)","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"98f9a295fc211c67a052d1e89fba4e776c8abbed","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    cfg.BoolOpt(\u0027enable_persistency\u0027,"},{"line_number":23,"context_line":"                default\u003dFalse,"},{"line_number":24,"context_line":"                help\u003d\u0027Periodically store the entire graph snapshot to \u0027"},{"line_number":25,"context_line":"                     \u0027database\u0027),"},{"line_number":26,"context_line":"    cfg.IntOpt(\u0027graph_persistency_interval\u0027,"},{"line_number":27,"context_line":"               default\u003d3600,"},{"line_number":28,"context_line":"               help\u003d\u0027Store the graph to database every X seconds\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_3e3e53da","line":25,"range":{"start_line":25,"start_character":22,"end_line":25,"end_character":30},"in_reply_to":"9f91af0f_0233bf15","updated":"2018-01-14 14:33:48.000000000","message":"Done","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6a9a7930a27227077f517de336176edf5ebe21d1","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    cfg.IntOpt(\u0027graph_persistency_interval\u0027,"},{"line_number":27,"context_line":"               default\u003d3600,"},{"line_number":28,"context_line":"               help\u003d\u0027Store the graph to database every X seconds\u0027"},{"line_number":29,"context_line":"                    \u0027snapshots\u0027),"},{"line_number":30,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f91af0f_422c67ab","line":29,"range":{"start_line":29,"start_character":20,"end_line":29,"end_character":31},"updated":"2018-01-08 07:42:46.000000000","message":"Is \u0027snapshots\u0027 needed here?","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"98f9a295fc211c67a052d1e89fba4e776c8abbed","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    cfg.IntOpt(\u0027graph_persistency_interval\u0027,"},{"line_number":27,"context_line":"               default\u003d3600,"},{"line_number":28,"context_line":"               help\u003d\u0027Store the graph to database every X seconds\u0027"},{"line_number":29,"context_line":"                    \u0027snapshots\u0027),"},{"line_number":30,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_1e3b57eb","line":29,"range":{"start_line":29,"start_character":20,"end_line":29,"end_character":31},"in_reply_to":"9f91af0f_422c67ab","updated":"2018-01-14 14:33:48.000000000","message":"no, removed !","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":13861,"name":"yatin","email":"ykarel@redhat.com","username":"yatinkarel"},"change_message_id":"e9cc672a6e5f54fddcde53293be40820e7b78fcb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"7f96bb07_898a9abc","side":"PARENT","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":33},"updated":"2018-01-16 09:48:47.000000000","message":"Why this is not deprecated and kept backward compatible?","commit_id":"e0403bb3fe69b8374f5c1f1de8b9f79e0ef540ad"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"b43a5b32bd8616c3406e40e93a7961609a823eaf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"7f96bb07_a923d6bc","side":"PARENT","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":33},"in_reply_to":"7f96bb07_898a9abc","updated":"2018-01-16 09:51:31.000000000","message":"This is new code that is not fully functional yet, so by default it is disabled in Queens. We will change the default to True in a few weeks (in Rocky).","commit_id":"e0403bb3fe69b8374f5c1f1de8b9f79e0ef540ad"}],"vitrage/persistency/graph_persistor.py":[{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"126089e712f7a167a166283cac836c2dad7dd5f8","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from __future__ import print_function"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import dateutil.parser"},{"line_number":18,"context_line":"from oslo_log import log"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from vitrage.common.constants import DatasourceProperties as DSProps"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_1a3ff125","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":22},"updated":"2018-01-03 15:46:52.000000000","message":"from dateutil import parser","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from __future__ import print_function"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import dateutil.parser"},{"line_number":18,"context_line":"from oslo_log import log"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from vitrage.common.constants import DatasourceProperties as DSProps"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_8354be54","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":22},"in_reply_to":"9f91af0f_1a3ff125","updated":"2018-01-06 21:37:22.000000000","message":"Done","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"126089e712f7a167a166283cac836c2dad7dd5f8","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            graph_snapshot\u003dgraph_snapshot)"},{"line_number":41,"context_line":"        self.db_connection.graph_snapshots.create(db_row)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def load_graph(self, timestamp):"},{"line_number":44,"context_line":"        db_row \u003d self.db_connection.graph_snapshots.query(timestamp)"},{"line_number":45,"context_line":"        return NXGraph.from_json(db_row.graph_snapshot) if db_row else None"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_5ae7b9e5","line":43,"range":{"start_line":43,"start_character":25,"end_line":43,"end_character":34},"updated":"2018-01-03 15:46:52.000000000","message":"should also allow to get the latest, without timestamp","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            graph_snapshot\u003dgraph_snapshot)"},{"line_number":41,"context_line":"        self.db_connection.graph_snapshots.create(db_row)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def load_graph(self, timestamp):"},{"line_number":44,"context_line":"        db_row \u003d self.db_connection.graph_snapshots.query(timestamp)"},{"line_number":45,"context_line":"        return NXGraph.from_json(db_row.graph_snapshot) if db_row else None"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_833d9e2c","line":43,"range":{"start_line":43,"start_character":25,"end_line":43,"end_character":34},"in_reply_to":"9f91af0f_5ae7b9e5","updated":"2018-01-06 21:37:22.000000000","message":"Done","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"126089e712f7a167a166283cac836c2dad7dd5f8","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.db_connection.graph_snapshots.delete(timestamp)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def update_last_event_timestamp(self, event):"},{"line_number":52,"context_line":"        event_vitrage_timestamp \u003d event.get(DSProps.SAMPLE_DATE)"},{"line_number":53,"context_line":"        if event_vitrage_timestamp:"},{"line_number":54,"context_line":"            event_parsed_timestamp \u003d \\"},{"line_number":55,"context_line":"                dateutil.parser.parse(event_vitrage_timestamp)"},{"line_number":56,"context_line":"            self.last_event_timestamp \u003d event_parsed_timestamp"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_da766907","line":56,"range":{"start_line":52,"start_character":0,"end_line":56,"end_character":62},"updated":"2018-01-03 15:46:52.000000000","message":"timestamp \u003d event.get(DSProps.SAMPLE_DATE)\nself.last_timestamp \u003d parser.parse(timestamp) if timestamp else None","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.db_connection.graph_snapshots.delete(timestamp)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def update_last_event_timestamp(self, event):"},{"line_number":52,"context_line":"        event_vitrage_timestamp \u003d event.get(DSProps.SAMPLE_DATE)"},{"line_number":53,"context_line":"        if event_vitrage_timestamp:"},{"line_number":54,"context_line":"            event_parsed_timestamp \u003d \\"},{"line_number":55,"context_line":"                dateutil.parser.parse(event_vitrage_timestamp)"},{"line_number":56,"context_line":"            self.last_event_timestamp \u003d event_parsed_timestamp"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_63573a5a","line":56,"range":{"start_line":52,"start_character":0,"end_line":56,"end_character":62},"in_reply_to":"9f91af0f_da766907","updated":"2018-01-06 21:37:22.000000000","message":"Done","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"}],"vitrage/storage/base.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        \"\"\""},{"line_number":186,"context_line":"        raise NotImplementedError(\u0027create graph snapshot not implemented\u0027)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def update(self, graph_snapshot):"},{"line_number":189,"context_line":"        \"\"\"Update an graph snapshot."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        :type graph_snapshot: vitrage.storage.sqlalchemy.models.GraphSnapshot"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_4facf98b","line":188,"range":{"start_line":188,"start_character":8,"end_line":188,"end_character":14},"updated":"2018-01-02 08:34:03.000000000","message":"I don\u0027t think we will ever use it. I think it better be removed.","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        \"\"\""},{"line_number":186,"context_line":"        raise NotImplementedError(\u0027create graph snapshot not implemented\u0027)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def update(self, graph_snapshot):"},{"line_number":189,"context_line":"        \"\"\"Update an graph snapshot."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        :type graph_snapshot: vitrage.storage.sqlalchemy.models.GraphSnapshot"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_8c8e7876","line":188,"range":{"start_line":188,"start_character":8,"end_line":188,"end_character":14},"in_reply_to":"9f91af0f_4facf98b","updated":"2018-01-03 14:04:13.000000000","message":"it may be used in the future. i added basic implementation. further use may request adding extra logic","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def query(self,"},{"line_number":196,"context_line":"              last_event_timestamp\u003dNone,"},{"line_number":197,"context_line":"              graph_snapshot\u003dNone):"},{"line_number":198,"context_line":"        \"\"\"Yields a lists of graph snapshots that match filters."},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        :rtype: vitrage.storage.sqlalchemy.models.GraphSnapshot"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_cfb1e9e3","line":197,"range":{"start_line":197,"start_character":14,"end_line":197,"end_character":28},"updated":"2018-01-02 08:34:03.000000000","message":"What is the meaning of this parameter? you will not query by a graph snapshot, right?","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def query(self,"},{"line_number":196,"context_line":"              last_event_timestamp\u003dNone,"},{"line_number":197,"context_line":"              graph_snapshot\u003dNone):"},{"line_number":198,"context_line":"        \"\"\"Yields a lists of graph snapshots that match filters."},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        :rtype: vitrage.storage.sqlalchemy.models.GraphSnapshot"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_29764808","line":197,"range":{"start_line":197,"start_character":14,"end_line":197,"end_character":28},"in_reply_to":"9f91af0f_cfb1e9e3","updated":"2018-01-03 14:04:13.000000000","message":"Done","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def delete(self,"},{"line_number":205,"context_line":"               last_event_timestamp\u003dNone,"},{"line_number":206,"context_line":"               graph_snapshot\u003dNone):"},{"line_number":207,"context_line":"        \"\"\"Delete all graph snapshots that match the filters.\"\"\""},{"line_number":208,"context_line":"        raise NotImplementedError(\u0027delete graph snapshot not implemented\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_8fcbe151","line":206,"range":{"start_line":206,"start_character":15,"end_line":206,"end_character":29},"updated":"2018-01-02 08:34:03.000000000","message":"I think we will delete snapshots by time, or by id. Not by the snapshot object itself.","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def delete(self,"},{"line_number":205,"context_line":"               last_event_timestamp\u003dNone,"},{"line_number":206,"context_line":"               graph_snapshot\u003dNone):"},{"line_number":207,"context_line":"        \"\"\"Delete all graph snapshots that match the filters.\"\"\""},{"line_number":208,"context_line":"        raise NotImplementedError(\u0027delete graph snapshot not implemented\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_49738c16","line":206,"range":{"start_line":206,"start_character":15,"end_line":206,"end_character":29},"in_reply_to":"9f91af0f_8fcbe151","updated":"2018-01-03 14:04:13.000000000","message":"Done","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"126089e712f7a167a166283cac836c2dad7dd5f8","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        raise NotImplementedError(\u0027create graph snapshot not implemented\u0027)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def update(self, graph_snapshot):"},{"line_number":189,"context_line":"        \"\"\"Update an graph snapshot."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        :type graph_snapshot: vitrage.storage.sqlalchemy.models.GraphSnapshot"},{"line_number":192,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_fd17a744","line":189,"range":{"start_line":189,"start_character":18,"end_line":189,"end_character":20},"updated":"2018-01-03 15:46:52.000000000","message":"a","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        raise NotImplementedError(\u0027create graph snapshot not implemented\u0027)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def update(self, graph_snapshot):"},{"line_number":189,"context_line":"        \"\"\"Update an graph snapshot."},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        :type graph_snapshot: vitrage.storage.sqlalchemy.models.GraphSnapshot"},{"line_number":192,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_234db2c3","line":189,"range":{"start_line":189,"start_character":18,"end_line":189,"end_character":20},"in_reply_to":"9f91af0f_fd17a744","updated":"2018-01-06 21:37:22.000000000","message":"Done","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"126089e712f7a167a166283cac836c2dad7dd5f8","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        raise NotImplementedError(\u0027update graph snapshot not implemented\u0027)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def query(self, timestamp\u003dNone):"},{"line_number":196,"context_line":"        \"\"\"Yields last graph snapshot that was taken util timestamp."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        :rtype: vitrage.storage.sqlalchemy.models.GraphSnapshot"},{"line_number":199,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_7dcf17b0","line":196,"range":{"start_line":196,"start_character":18,"end_line":196,"end_character":52},"updated":"2018-01-03 15:46:52.000000000","message":"latest graph snapshot taken","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"126089e712f7a167a166283cac836c2dad7dd5f8","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        raise NotImplementedError(\u0027update graph snapshot not implemented\u0027)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def query(self, timestamp\u003dNone):"},{"line_number":196,"context_line":"        \"\"\"Yields last graph snapshot that was taken util timestamp."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        :rtype: vitrage.storage.sqlalchemy.models.GraphSnapshot"},{"line_number":199,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_3dc18f81","line":196,"range":{"start_line":196,"start_character":53,"end_line":196,"end_character":57},"updated":"2018-01-03 15:46:52.000000000","message":"until","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        raise NotImplementedError(\u0027update graph snapshot not implemented\u0027)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def query(self, timestamp\u003dNone):"},{"line_number":196,"context_line":"        \"\"\"Yields last graph snapshot that was taken util timestamp."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        :rtype: vitrage.storage.sqlalchemy.models.GraphSnapshot"},{"line_number":199,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_23fb7247","line":196,"range":{"start_line":196,"start_character":53,"end_line":196,"end_character":57},"in_reply_to":"9f91af0f_2335e046","updated":"2018-01-06 21:37:22.000000000","message":"timestamp can be the exact time of required snapshot. \u0027before\u0027 is not specifying that","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        raise NotImplementedError(\u0027update graph snapshot not implemented\u0027)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def query(self, timestamp\u003dNone):"},{"line_number":196,"context_line":"        \"\"\"Yields last graph snapshot that was taken util timestamp."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        :rtype: vitrage.storage.sqlalchemy.models.GraphSnapshot"},{"line_number":199,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_03f74e61","line":196,"range":{"start_line":196,"start_character":53,"end_line":196,"end_character":57},"in_reply_to":"9f91af0f_3dc18f81","updated":"2018-01-06 21:37:22.000000000","message":"Done","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6f1574bf4c1d82f000127a6ebb212e1ae790b209","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        raise NotImplementedError(\u0027update graph snapshot not implemented\u0027)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def query(self, timestamp\u003dNone):"},{"line_number":196,"context_line":"        \"\"\"Yields last graph snapshot that was taken util timestamp."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        :rtype: vitrage.storage.sqlalchemy.models.GraphSnapshot"},{"line_number":199,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_2335e046","line":196,"range":{"start_line":196,"start_character":53,"end_line":196,"end_character":57},"in_reply_to":"9f91af0f_3dc18f81","updated":"2018-01-04 12:27:34.000000000","message":"I think \u0027before\u0027 is more clear","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        raise NotImplementedError(\u0027update graph snapshot not implemented\u0027)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def query(self, timestamp\u003dNone):"},{"line_number":196,"context_line":"        \"\"\"Yields last graph snapshot that was taken util timestamp."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        :rtype: vitrage.storage.sqlalchemy.models.GraphSnapshot"},{"line_number":199,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_e3f10a6d","line":196,"range":{"start_line":196,"start_character":18,"end_line":196,"end_character":52},"in_reply_to":"9f91af0f_7dcf17b0","updated":"2018-01-06 21:37:22.000000000","message":"Done","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6f1574bf4c1d82f000127a6ebb212e1ae790b209","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        raise NotImplementedError(\u0027query graph snapshot not implemented\u0027)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def delete(self, timestamp\u003dNone):"},{"line_number":203,"context_line":"        \"\"\"Delete all graph snapshots that was taken until timestamp.\"\"\""},{"line_number":204,"context_line":"        raise NotImplementedError(\u0027delete graph snapshot not implemented\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_e33e1828","line":203,"range":{"start_line":203,"start_character":53,"end_line":203,"end_character":58},"updated":"2018-01-04 12:27:34.000000000","message":"before","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"126089e712f7a167a166283cac836c2dad7dd5f8","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        raise NotImplementedError(\u0027query graph snapshot not implemented\u0027)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def delete(self, timestamp\u003dNone):"},{"line_number":203,"context_line":"        \"\"\"Delete all graph snapshots that was taken until timestamp.\"\"\""},{"line_number":204,"context_line":"        raise NotImplementedError(\u0027delete graph snapshot not implemented\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_fdba4708","line":203,"range":{"start_line":203,"start_character":22,"end_line":203,"end_character":52},"updated":"2018-01-03 15:46:52.000000000","message":"graph snapshots taken","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        raise NotImplementedError(\u0027query graph snapshot not implemented\u0027)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def delete(self, timestamp\u003dNone):"},{"line_number":203,"context_line":"        \"\"\"Delete all graph snapshots that was taken until timestamp.\"\"\""},{"line_number":204,"context_line":"        raise NotImplementedError(\u0027delete graph snapshot not implemented\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_a39c620e","line":203,"range":{"start_line":203,"start_character":53,"end_line":203,"end_character":58},"in_reply_to":"9f91af0f_e33e1828","updated":"2018-01-06 21:37:22.000000000","message":"same like query","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        raise NotImplementedError(\u0027query graph snapshot not implemented\u0027)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def delete(self, timestamp\u003dNone):"},{"line_number":203,"context_line":"        \"\"\"Delete all graph snapshots that was taken until timestamp.\"\"\""},{"line_number":204,"context_line":"        raise NotImplementedError(\u0027delete graph snapshot not implemented\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_43f8f647","line":203,"range":{"start_line":203,"start_character":22,"end_line":203,"end_character":52},"in_reply_to":"9f91af0f_fdba4708","updated":"2018-01-06 21:37:22.000000000","message":"Done","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6f1574bf4c1d82f000127a6ebb212e1ae790b209","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def delete(self, timestamp\u003dNone):"},{"line_number":203,"context_line":"        \"\"\"Delete all graph snapshots that was taken until timestamp.\"\"\""},{"line_number":204,"context_line":"        raise NotImplementedError(\u0027delete graph snapshot not implemented\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_033a1c33","line":204,"range":{"start_line":204,"start_character":48,"end_line":204,"end_character":56},"updated":"2018-01-04 12:27:34.000000000","message":"snapshots","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def delete(self, timestamp\u003dNone):"},{"line_number":203,"context_line":"        \"\"\"Delete all graph snapshots that was taken until timestamp.\"\"\""},{"line_number":204,"context_line":"        raise NotImplementedError(\u0027delete graph snapshot not implemented\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_e396eaf0","line":204,"range":{"start_line":204,"start_character":48,"end_line":204,"end_character":56},"in_reply_to":"9f91af0f_033a1c33","updated":"2018-01-06 21:37:22.000000000","message":"Done","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"0bff9627d2ddc48eef84d59b7ec418cded012c3f","unresolved":false,"context_lines":[{"line_number":162,"context_line":"              lt_collector_timestamp\u003dNone):"},{"line_number":163,"context_line":"        \"\"\"Yields a lists of events that match filters."},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        :exception: `vitrage.common.exception.VitrageInputError`, as invalid"},{"line_number":166,"context_line":"        input."},{"line_number":167,"context_line":"        :rtype: list of vitrage.storage.sqlalchemy.models.Event"},{"line_number":168,"context_line":"        \"\"\""},{"line_number":169,"context_line":"        raise NotImplementedError(\u0027query events not implemented\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f91af0f_c1a15496","line":166,"range":{"start_line":165,"start_character":0,"end_line":166,"end_character":14},"updated":"2018-01-08 08:51:35.000000000","message":"Don\u0027t this it should be in the base class. as it only raises NotImplementedError","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"0bff9627d2ddc48eef84d59b7ec418cded012c3f","unresolved":false,"context_lines":[{"line_number":175,"context_line":"               lt_collector_timestamp\u003dNone):"},{"line_number":176,"context_line":"        \"\"\"Delete all events that match the filters."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        :exception: `vitrage.common.exception.VitrageInputError`, as invalid"},{"line_number":179,"context_line":"        input."},{"line_number":180,"context_line":"        \"\"\""},{"line_number":181,"context_line":"        raise NotImplementedError(\u0027delete events not implemented\u0027)"},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9f91af0f_81a7cca7","line":179,"range":{"start_line":178,"start_character":0,"end_line":179,"end_character":14},"updated":"2018-01-08 08:51:35.000000000","message":"same here","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"}],"vitrage/storage/impl_sqlalchemy.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        if collector_timestamp and (gt_collector_timestamp or"},{"line_number":216,"context_line":"                                    lt_collector_timestamp):"},{"line_number":217,"context_line":"            raise Exception(\"query doesn\u0027t make sense :-(\")"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        query \u003d self.query_filter("},{"line_number":220,"context_line":"            models.Event,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_8fd0c1f9","line":217,"range":{"start_line":217,"start_character":18,"end_line":217,"end_character":59},"updated":"2018-01-02 08:34:03.000000000","message":"1. Is it the way to raise an exception here? maybe use a specific type of exception? or better, write a message to the log and move on, without failing.\n\n2. Please write a more detailed message and explain what the problem is.","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        if collector_timestamp and (gt_collector_timestamp or"},{"line_number":216,"context_line":"                                    lt_collector_timestamp):"},{"line_number":217,"context_line":"            raise Exception(\"query doesn\u0027t make sense :-(\")"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        query \u003d self.query_filter("},{"line_number":220,"context_line":"            models.Event,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_994558b6","line":217,"range":{"start_line":217,"start_character":18,"end_line":217,"end_character":59},"in_reply_to":"9f91af0f_8fd0c1f9","updated":"2018-01-03 14:04:13.000000000","message":"review in patch 4 please","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":248,"context_line":"               lt_collector_timestamp\u003dNone):"},{"line_number":249,"context_line":"        if collector_timestamp and (gt_collector_timestamp or"},{"line_number":250,"context_line":"                                    lt_collector_timestamp):"},{"line_number":251,"context_line":"            raise Exception(\"query doesn\u0027t make sense :-(\")"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        query \u003d self.query_filter("},{"line_number":254,"context_line":"            models.Event,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_4fdab917","line":251,"range":{"start_line":251,"start_character":18,"end_line":251,"end_character":59},"updated":"2018-01-02 08:34:03.000000000","message":"Same comment","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":248,"context_line":"               lt_collector_timestamp\u003dNone):"},{"line_number":249,"context_line":"        if collector_timestamp and (gt_collector_timestamp or"},{"line_number":250,"context_line":"                                    lt_collector_timestamp):"},{"line_number":251,"context_line":"            raise Exception(\"query doesn\u0027t make sense :-(\")"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        query \u003d self.query_filter("},{"line_number":254,"context_line":"            models.Event,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_3979acfb","line":251,"range":{"start_line":251,"start_character":18,"end_line":251,"end_character":59},"in_reply_to":"9f91af0f_4fdab917","updated":"2018-01-03 14:04:13.000000000","message":"same comment","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":278,"context_line":"            session.merge(graph_snapshot)"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def query(self,"},{"line_number":281,"context_line":"              last_event_timestamp\u003dNone,"},{"line_number":282,"context_line":"              graph_snapshot\u003dNone):"},{"line_number":283,"context_line":"        query \u003d self.query_filter(models.GraphSnapshot,"},{"line_number":284,"context_line":"                                  graph_snapshot\u003dgraph_snapshot)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_aff6e58e","line":281,"range":{"start_line":281,"start_character":14,"end_line":281,"end_character":34},"updated":"2018-01-02 08:34:03.000000000","message":"It should be renamed to from_event_timestamp or something similar, to make it more clear that you return snapshots from this time on (and not from the exact time).","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":278,"context_line":"            session.merge(graph_snapshot)"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def query(self,"},{"line_number":281,"context_line":"              last_event_timestamp\u003dNone,"},{"line_number":282,"context_line":"              graph_snapshot\u003dNone):"},{"line_number":283,"context_line":"        query \u003d self.query_filter(models.GraphSnapshot,"},{"line_number":284,"context_line":"                                  graph_snapshot\u003dgraph_snapshot)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_19406856","line":281,"range":{"start_line":281,"start_character":14,"end_line":281,"end_character":34},"in_reply_to":"9f91af0f_aff6e58e","updated":"2018-01-03 14:04:13.000000000","message":"changed to \"timestamp\" and more accurate description added in interface.\nevery graph snapshot is known by the last event processed in the graph. to point to this event i used its vitrage timestamp (which is unique to every event because it is measured with milliseconds).\nthe query yields last snapshot that happened until timestamp parameter","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":290,"context_line":"            models.GraphSnapshot.last_event_timestamp).first()"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def delete(self,"},{"line_number":293,"context_line":"               last_event_timestamp\u003dNone,"},{"line_number":294,"context_line":"               graph_snapshot\u003dNone):"},{"line_number":295,"context_line":"        query \u003d self.query_filter(models.GraphSnapshot,"},{"line_number":296,"context_line":"                                  graph_snapshot\u003dgraph_snapshot)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_8f3e8127","line":293,"range":{"start_line":293,"start_character":15,"end_line":293,"end_character":35},"updated":"2018-01-02 08:34:03.000000000","message":"I don\u0027t think you will ever want to delete snapshots *bigger* than that time. The consistency should delete once in a while snapshots *smaller* than a certain time, or maybe the database itself can do that (by defining a TTL). In any case, this delete implementation seems dangerous.","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":290,"context_line":"            models.GraphSnapshot.last_event_timestamp).first()"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def delete(self,"},{"line_number":293,"context_line":"               last_event_timestamp\u003dNone,"},{"line_number":294,"context_line":"               graph_snapshot\u003dNone):"},{"line_number":295,"context_line":"        query \u003d self.query_filter(models.GraphSnapshot,"},{"line_number":296,"context_line":"                                  graph_snapshot\u003dgraph_snapshot)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_0c27c8b5","line":293,"range":{"start_line":293,"start_character":15,"end_line":293,"end_character":35},"in_reply_to":"9f91af0f_8f3e8127","updated":"2018-01-03 14:04:13.000000000","message":"the logic in delete is like the query above but deleteing all snapshots happened until timestamp","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6f1574bf4c1d82f000127a6ebb212e1ae790b209","unresolved":false,"context_lines":[{"line_number":215,"context_line":"              gt_collector_timestamp\u003dNone,"},{"line_number":216,"context_line":"              lt_collector_timestamp\u003dNone):"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        self._is_correct_call(collector_timestamp, gt_collector_timestamp,"},{"line_number":219,"context_line":"                              lt_collector_timestamp, payload)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        query \u003d self.query_filter("}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_83170ca4","line":218,"range":{"start_line":218,"start_character":13,"end_line":218,"end_character":29},"updated":"2018-01-04 12:27:34.000000000","message":"Are you sure you want to raise an exception? if so, I prefer to see it here and not in a sub-method. Or at least rename this method so it will be clear that it may raise an exception.","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"126089e712f7a167a166283cac836c2dad7dd5f8","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                         lt_collector_timestamp, payload):"},{"line_number":236,"context_line":"        if (collector_timestamp or payload) and \\"},{"line_number":237,"context_line":"                (gt_collector_timestamp or lt_collector_timestamp):"},{"line_number":238,"context_line":"            LOG.debug(\"Trying to \" + sys._getframe(1).f_code.co_name +"},{"line_number":239,"context_line":"                      \" both specific event and range of events in the same \""},{"line_number":240,"context_line":"                      \"time\")"},{"line_number":241,"context_line":"            raise VitrageError(\"Mismatch \" + sys._getframe(1).f_code.co_name)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_3a8435b1","line":238,"range":{"start_line":238,"start_character":37,"end_line":238,"end_character":68},"updated":"2018-01-03 15:46:52.000000000","message":"what does this do??","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                         lt_collector_timestamp, payload):"},{"line_number":236,"context_line":"        if (collector_timestamp or payload) and \\"},{"line_number":237,"context_line":"                (gt_collector_timestamp or lt_collector_timestamp):"},{"line_number":238,"context_line":"            LOG.debug(\"Trying to \" + sys._getframe(1).f_code.co_name +"},{"line_number":239,"context_line":"                      \" both specific event and range of events in the same \""},{"line_number":240,"context_line":"                      \"time\")"},{"line_number":241,"context_line":"            raise VitrageError(\"Mismatch \" + sys._getframe(1).f_code.co_name)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_63b3ba99","line":238,"range":{"start_line":238,"start_character":37,"end_line":238,"end_character":68},"in_reply_to":"9f91af0f_3a8435b1","updated":"2018-01-06 21:37:22.000000000","message":"return name of the calling function","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6f1574bf4c1d82f000127a6ebb212e1ae790b209","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                                 lt_collector_timestamp)"},{"line_number":253,"context_line":"        return query"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def delete(self,"},{"line_number":256,"context_line":"               event_id\u003dNone,"},{"line_number":257,"context_line":"               collector_timestamp\u003dNone,"},{"line_number":258,"context_line":"               payload\u003dNone,"},{"line_number":259,"context_line":"               gt_collector_timestamp\u003dNone,"},{"line_number":260,"context_line":"               lt_collector_timestamp\u003dNone):"},{"line_number":261,"context_line":"        self._is_correct_call(collector_timestamp, gt_collector_timestamp,"},{"line_number":262,"context_line":"                              lt_collector_timestamp, payload)"},{"line_number":263,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_e36cd837","line":260,"range":{"start_line":255,"start_character":4,"end_line":260,"end_character":44},"updated":"2018-01-04 12:27:34.000000000","message":"Why do we need this method? Will we ever want to delete snapshots by these parameters?","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"0abef3a0cdbcd3eaa742c9afa030501df5bd4de4","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                                 lt_collector_timestamp)"},{"line_number":253,"context_line":"        return query"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def delete(self,"},{"line_number":256,"context_line":"               event_id\u003dNone,"},{"line_number":257,"context_line":"               collector_timestamp\u003dNone,"},{"line_number":258,"context_line":"               payload\u003dNone,"},{"line_number":259,"context_line":"               gt_collector_timestamp\u003dNone,"},{"line_number":260,"context_line":"               lt_collector_timestamp\u003dNone):"},{"line_number":261,"context_line":"        self._is_correct_call(collector_timestamp, gt_collector_timestamp,"},{"line_number":262,"context_line":"                              lt_collector_timestamp, payload)"},{"line_number":263,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_e9648924","line":260,"range":{"start_line":255,"start_character":4,"end_line":260,"end_character":44},"in_reply_to":"9f91af0f_03c50ef1","updated":"2018-01-07 07:42:06.000000000","message":"I don\u0027t think we will ever delete by payload...","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                                 lt_collector_timestamp)"},{"line_number":253,"context_line":"        return query"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def delete(self,"},{"line_number":256,"context_line":"               event_id\u003dNone,"},{"line_number":257,"context_line":"               collector_timestamp\u003dNone,"},{"line_number":258,"context_line":"               payload\u003dNone,"},{"line_number":259,"context_line":"               gt_collector_timestamp\u003dNone,"},{"line_number":260,"context_line":"               lt_collector_timestamp\u003dNone):"},{"line_number":261,"context_line":"        self._is_correct_call(collector_timestamp, gt_collector_timestamp,"},{"line_number":262,"context_line":"                              lt_collector_timestamp, payload)"},{"line_number":263,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_03c50ef1","line":260,"range":{"start_line":255,"start_character":4,"end_line":260,"end_character":44},"in_reply_to":"9f91af0f_e36cd837","updated":"2018-01-06 21:37:22.000000000","message":"this method deletes snapshoted events. first three parameters is for deleting specific event. last two are for deleting range of events.\nuse: when we want to clear the database from old events.","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6f1574bf4c1d82f000127a6ebb212e1ae790b209","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        return query.order_by("},{"line_number":296,"context_line":"            models.GraphSnapshot.last_event_timestamp.desc()).first()"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    def delete(self, timestamp\u003dNone):"},{"line_number":299,"context_line":"        query \u003d self.query_filter(models.GraphSnapshot)"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        query \u003d query.filter(models.GraphSnapshot.last_event_timestamp \u003c\u003d"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_e355b851","line":298,"range":{"start_line":298,"start_character":3,"end_line":298,"end_character":37},"updated":"2018-01-04 12:27:34.000000000","message":"Please add a comment that explains the behavior","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"0abef3a0cdbcd3eaa742c9afa030501df5bd4de4","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        return query.order_by("},{"line_number":296,"context_line":"            models.GraphSnapshot.last_event_timestamp.desc()).first()"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    def delete(self, timestamp\u003dNone):"},{"line_number":299,"context_line":"        query \u003d self.query_filter(models.GraphSnapshot)"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        query \u003d query.filter(models.GraphSnapshot.last_event_timestamp \u003c\u003d"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_c96f45fa","line":298,"range":{"start_line":298,"start_character":3,"end_line":298,"end_character":37},"in_reply_to":"9f91af0f_23a93223","updated":"2018-01-07 07:42:06.000000000","message":"Then please copy\u0026paste the comment here, because people don\u0027t always look at the base class, and the behavior is not trivial","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        return query.order_by("},{"line_number":296,"context_line":"            models.GraphSnapshot.last_event_timestamp.desc()).first()"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    def delete(self, timestamp\u003dNone):"},{"line_number":299,"context_line":"        query \u003d self.query_filter(models.GraphSnapshot)"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        query \u003d query.filter(models.GraphSnapshot.last_event_timestamp \u003c\u003d"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_23a93223","line":298,"range":{"start_line":298,"start_character":3,"end_line":298,"end_character":37},"in_reply_to":"9f91af0f_e355b851","updated":"2018-01-06 21:37:22.000000000","message":"all behaviors are explained in base class","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"0bff9627d2ddc48eef84d59b7ec418cded012c3f","unresolved":false,"context_lines":[{"line_number":216,"context_line":"              lt_collector_timestamp\u003dNone):"},{"line_number":217,"context_line":"        \"\"\"Yields a lists of events that match filters."},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        :exception: `vitrage.common.exception.VitrageInputError`, as invalid"},{"line_number":220,"context_line":"        input."},{"line_number":221,"context_line":"        :rtype: list of vitrage.storage.sqlalchemy.models.Event"},{"line_number":222,"context_line":"        \"\"\""},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9f91af0f_c13dd42b","line":220,"range":{"start_line":219,"start_character":0,"end_line":220,"end_character":14},"updated":"2018-01-08 08:51:35.000000000","message":"shouldn\u0027t this be like:\n:raises: vitrage.common.exception.VitrageInputError","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"98f9a295fc211c67a052d1e89fba4e776c8abbed","unresolved":false,"context_lines":[{"line_number":216,"context_line":"              lt_collector_timestamp\u003dNone):"},{"line_number":217,"context_line":"        \"\"\"Yields a lists of events that match filters."},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        :exception: `vitrage.common.exception.VitrageInputError`, as invalid"},{"line_number":220,"context_line":"        input."},{"line_number":221,"context_line":"        :rtype: list of vitrage.storage.sqlalchemy.models.Event"},{"line_number":222,"context_line":"        \"\"\""},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_9e2e87a3","line":220,"range":{"start_line":219,"start_character":0,"end_line":220,"end_character":14},"in_reply_to":"9f91af0f_c13dd42b","updated":"2018-01-14 14:33:48.000000000","message":"Done","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6a9a7930a27227077f517de336176edf5ebe21d1","unresolved":false,"context_lines":[{"line_number":246,"context_line":"                             payload\u003dNone,"},{"line_number":247,"context_line":"                             gt_collector_timestamp\u003dNone,"},{"line_number":248,"context_line":"                             lt_collector_timestamp\u003dNone):"},{"line_number":249,"context_line":"        frame \u003d inspect.currentframe()"},{"line_number":250,"context_line":"        args, _, _, values \u003d inspect.getargvalues(frame)"},{"line_number":251,"context_line":"        called_values \u003d [(arg, values[arg]) for arg in args if values[arg]]"},{"line_number":252,"context_line":"        if (event_id or collector_timestamp or payload) and \\"},{"line_number":253,"context_line":"           (gt_collector_timestamp or lt_collector_timestamp):"},{"line_number":254,"context_line":"            msg \u003d \"Calling function with both specific event and range of \" \\"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f91af0f_3d0062ab","line":251,"range":{"start_line":249,"start_character":8,"end_line":251,"end_character":75},"updated":"2018-01-08 07:42:46.000000000","message":"1. Why is this code needed? why not just write to the log the specific parameters that conflict?\n\n2. If you this code is needed, please insert it inside the if statement\n\n3. According to the python documentation, in some python implementations currentframe() may not be implemented and return None","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"0bff9627d2ddc48eef84d59b7ec418cded012c3f","unresolved":false,"context_lines":[{"line_number":246,"context_line":"                             payload\u003dNone,"},{"line_number":247,"context_line":"                             gt_collector_timestamp\u003dNone,"},{"line_number":248,"context_line":"                             lt_collector_timestamp\u003dNone):"},{"line_number":249,"context_line":"        frame \u003d inspect.currentframe()"},{"line_number":250,"context_line":"        args, _, _, values \u003d inspect.getargvalues(frame)"},{"line_number":251,"context_line":"        called_values \u003d [(arg, values[arg]) for arg in args if values[arg]]"},{"line_number":252,"context_line":"        if (event_id or collector_timestamp or payload) and \\"},{"line_number":253,"context_line":"           (gt_collector_timestamp or lt_collector_timestamp):"},{"line_number":254,"context_line":"            msg \u003d \"Calling function with both specific event and range of \" \\"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f91af0f_c18714b5","line":251,"range":{"start_line":249,"start_character":0,"end_line":251,"end_character":75},"updated":"2018-01-08 08:51:35.000000000","message":"There must be a better way","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"98f9a295fc211c67a052d1e89fba4e776c8abbed","unresolved":false,"context_lines":[{"line_number":246,"context_line":"                             payload\u003dNone,"},{"line_number":247,"context_line":"                             gt_collector_timestamp\u003dNone,"},{"line_number":248,"context_line":"                             lt_collector_timestamp\u003dNone):"},{"line_number":249,"context_line":"        frame \u003d inspect.currentframe()"},{"line_number":250,"context_line":"        args, _, _, values \u003d inspect.getargvalues(frame)"},{"line_number":251,"context_line":"        called_values \u003d [(arg, values[arg]) for arg in args if values[arg]]"},{"line_number":252,"context_line":"        if (event_id or collector_timestamp or payload) and \\"},{"line_number":253,"context_line":"           (gt_collector_timestamp or lt_collector_timestamp):"},{"line_number":254,"context_line":"            msg \u003d \"Calling function with both specific event and range of \" \\"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_993541dd","line":251,"range":{"start_line":249,"start_character":8,"end_line":251,"end_character":75},"in_reply_to":"9f91af0f_3d0062ab","updated":"2018-01-14 14:33:48.000000000","message":"removed","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"98f9a295fc211c67a052d1e89fba4e776c8abbed","unresolved":false,"context_lines":[{"line_number":246,"context_line":"                             payload\u003dNone,"},{"line_number":247,"context_line":"                             gt_collector_timestamp\u003dNone,"},{"line_number":248,"context_line":"                             lt_collector_timestamp\u003dNone):"},{"line_number":249,"context_line":"        frame \u003d inspect.currentframe()"},{"line_number":250,"context_line":"        args, _, _, values \u003d inspect.getargvalues(frame)"},{"line_number":251,"context_line":"        called_values \u003d [(arg, values[arg]) for arg in args if values[arg]]"},{"line_number":252,"context_line":"        if (event_id or collector_timestamp or payload) and \\"},{"line_number":253,"context_line":"           (gt_collector_timestamp or lt_collector_timestamp):"},{"line_number":254,"context_line":"            msg \u003d \"Calling function with both specific event and range of \" \\"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_b9303dea","line":251,"range":{"start_line":249,"start_character":0,"end_line":251,"end_character":75},"in_reply_to":"9f91af0f_c18714b5","updated":"2018-01-14 14:33:48.000000000","message":"Done","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"0bff9627d2ddc48eef84d59b7ec418cded012c3f","unresolved":false,"context_lines":[{"line_number":275,"context_line":"               lt_collector_timestamp\u003dNone):"},{"line_number":276,"context_line":"        \"\"\"Delete all events that match the filters."},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        :exception: `vitrage.common.exception.VitrageInputError`, as invalid"},{"line_number":279,"context_line":"        input."},{"line_number":280,"context_line":"        \"\"\""},{"line_number":281,"context_line":"        self._verify_correct_call("},{"line_number":282,"context_line":"            event_id\u003devent_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f91af0f_c1263416","line":279,"range":{"start_line":278,"start_character":8,"end_line":279,"end_character":14},"updated":"2018-01-08 08:51:35.000000000","message":"same here","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"98f9a295fc211c67a052d1e89fba4e776c8abbed","unresolved":false,"context_lines":[{"line_number":275,"context_line":"               lt_collector_timestamp\u003dNone):"},{"line_number":276,"context_line":"        \"\"\"Delete all events that match the filters."},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        :exception: `vitrage.common.exception.VitrageInputError`, as invalid"},{"line_number":279,"context_line":"        input."},{"line_number":280,"context_line":"        \"\"\""},{"line_number":281,"context_line":"        self._verify_correct_call("},{"line_number":282,"context_line":"            event_id\u003devent_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_be29039c","line":279,"range":{"start_line":278,"start_character":8,"end_line":279,"end_character":14},"in_reply_to":"9f91af0f_c1263416","updated":"2018-01-14 14:33:48.000000000","message":"Done","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"0bff9627d2ddc48eef84d59b7ec418cded012c3f","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        :exception: `vitrage.common.exception.VitrageInputError`, as invalid"},{"line_number":279,"context_line":"        input."},{"line_number":280,"context_line":"        \"\"\""},{"line_number":281,"context_line":"        self._verify_correct_call("},{"line_number":282,"context_line":"            event_id\u003devent_id,"},{"line_number":283,"context_line":"            collector_timestamp\u003dcollector_timestamp,"},{"line_number":284,"context_line":"            gt_collector_timestamp\u003dgt_collector_timestamp,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f91af0f_617408ff","line":281,"range":{"start_line":281,"start_character":14,"end_line":281,"end_character":33},"updated":"2018-01-08 08:51:35.000000000","message":"perhaps validate_params sounds better","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"98f9a295fc211c67a052d1e89fba4e776c8abbed","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        :exception: `vitrage.common.exception.VitrageInputError`, as invalid"},{"line_number":279,"context_line":"        input."},{"line_number":280,"context_line":"        \"\"\""},{"line_number":281,"context_line":"        self._verify_correct_call("},{"line_number":282,"context_line":"            event_id\u003devent_id,"},{"line_number":283,"context_line":"            collector_timestamp\u003dcollector_timestamp,"},{"line_number":284,"context_line":"            gt_collector_timestamp\u003dgt_collector_timestamp,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_7950750b","line":281,"range":{"start_line":281,"start_character":14,"end_line":281,"end_character":33},"in_reply_to":"9f91af0f_617408ff","updated":"2018-01-14 14:33:48.000000000","message":"Done","commit_id":"fa31f475129d508c494fbed2d436d5b641123c6b"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"27ab482701ca7d6b6393df2356c93bfa50d39a24","unresolved":false,"context_lines":[{"line_number":209,"context_line":"    def query(self,"},{"line_number":210,"context_line":"              event_id\u003dNone,"},{"line_number":211,"context_line":"              collector_timestamp\u003dNone,"},{"line_number":212,"context_line":"              payload\u003dNone,"},{"line_number":213,"context_line":"              gt_collector_timestamp\u003dNone,"},{"line_number":214,"context_line":"              lt_collector_timestamp\u003dNone):"},{"line_number":215,"context_line":"        \"\"\"Yields a lists of events that match filters."}],"source_content_type":"text/x-python","patch_set":7,"id":"7f96bb07_ce6d3a99","line":212,"range":{"start_line":212,"start_character":0,"end_line":212,"end_character":27},"updated":"2018-01-14 16:39:21.000000000","message":"Will i want to query with the payload?","commit_id":"9c47a1178e93bc03643279748098f9e97dbbb3a2"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"27ab482701ca7d6b6393df2356c93bfa50d39a24","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        :rtype: list of vitrage.storage.sqlalchemy.models.Event"},{"line_number":219,"context_line":"        \"\"\""},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        if (event_id or collector_timestamp or payload) and \\"},{"line_number":222,"context_line":"           (gt_collector_timestamp or lt_collector_timestamp):"},{"line_number":223,"context_line":"            msg \u003d \"Calling function with both specific event and range of \" \\"},{"line_number":224,"context_line":"                  \"events parameters at the same time \""}],"source_content_type":"text/x-python","patch_set":7,"id":"7f96bb07_cec53a3e","line":221,"range":{"start_line":221,"start_character":12,"end_line":221,"end_character":54},"updated":"2018-01-14 16:39:21.000000000","message":"doesnt only the collector_timestamp matters?","commit_id":"9c47a1178e93bc03643279748098f9e97dbbb3a2"},{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"27ab482701ca7d6b6393df2356c93bfa50d39a24","unresolved":false,"context_lines":[{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        :raises: vitrage.common.exception.VitrageInputError."},{"line_number":260,"context_line":"        \"\"\""},{"line_number":261,"context_line":"        if (event_id or collector_timestamp) and \\"},{"line_number":262,"context_line":"           (gt_collector_timestamp or lt_collector_timestamp):"},{"line_number":263,"context_line":"            msg \u003d \"Calling function with both specific event and range of \" \\"},{"line_number":264,"context_line":"                  \"events parameters at the same time \""}],"source_content_type":"text/x-python","patch_set":7,"id":"7f96bb07_eec0362d","line":261,"range":{"start_line":261,"start_character":12,"end_line":261,"end_character":24},"updated":"2018-01-14 16:39:21.000000000","message":"same","commit_id":"9c47a1178e93bc03643279748098f9e97dbbb3a2"}],"vitrage/storage/sqlalchemy/models.py":[{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"126089e712f7a167a166283cac836c2dad7dd5f8","unresolved":false,"context_lines":[{"line_number":124,"context_line":"class GraphSnapshot(Base):"},{"line_number":125,"context_line":"    __tablename__ \u003d \u0027graph_snapshots\u0027"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    last_event_timestamp \u003d Column(DateTime, primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":128,"context_line":"    graph_snapshot \u003d Column(JSONEncodedDict(), nullable\u003dFalse)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def __repr__(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_fd4fa731","line":127,"range":{"start_line":127,"start_character":4,"end_line":127,"end_character":77},"updated":"2018-01-03 15:46:52.000000000","message":"should be indexed","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":124,"context_line":"class GraphSnapshot(Base):"},{"line_number":125,"context_line":"    __tablename__ \u003d \u0027graph_snapshots\u0027"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    last_event_timestamp \u003d Column(DateTime, primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":128,"context_line":"    graph_snapshot \u003d Column(JSONEncodedDict(), nullable\u003dFalse)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def __repr__(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_237e12af","line":127,"range":{"start_line":127,"start_character":4,"end_line":127,"end_character":77},"in_reply_to":"9f91af0f_fd4fa731","updated":"2018-01-06 21:37:22.000000000","message":"The primary key is always indexed","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"}],"vitrage/tests/base.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    \"\"\"Test case base class for all unit tests.\"\"\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    PROCESSOR_OPTS \u003d ["},{"line_number":42,"context_line":"        cfg.StrOpt(\u0027datasources_values_dir\u0027,"},{"line_number":43,"context_line":"                   default\u003dutils.get_resources_dir() + \u0027/datasources_values\u0027),"},{"line_number":44,"context_line":"        cfg.BoolOpt(\u0027snapshot_graph\u0027,"},{"line_number":45,"context_line":"                    default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_8f552153","line":42,"range":{"start_line":42,"start_character":20,"end_line":42,"end_character":42},"updated":"2018-01-02 08:34:03.000000000","message":"1. Why did you move it from ENTITY_GRAPH_OPTS? in the code it is defined under entity_graph, not under processor.\n\n2. If the OPTS are defined in this base class, then they should be registered here. It doesn\u0027t make sense to define them here and register them in the derived classes.","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    \"\"\"Test case base class for all unit tests.\"\"\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    PROCESSOR_OPTS \u003d ["},{"line_number":42,"context_line":"        cfg.StrOpt(\u0027datasources_values_dir\u0027,"},{"line_number":43,"context_line":"                   default\u003dutils.get_resources_dir() + \u0027/datasources_values\u0027),"},{"line_number":44,"context_line":"        cfg.BoolOpt(\u0027snapshot_graph\u0027,"},{"line_number":45,"context_line":"                    default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_afdc8e74","line":42,"range":{"start_line":42,"start_character":20,"end_line":42,"end_character":42},"in_reply_to":"9f91af0f_8f552153","updated":"2018-01-03 14:04:13.000000000","message":"1. i didn\u0027t change its location\n2. good point, reverting. patch 4","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"296abb25d9fce3018394365ede02cdfbbbee7e6a","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        g2_edges \u003d g2._g.edge"},{"line_number":78,"context_line":"        if g1.num_vertices() !\u003d g2.num_vertices() or \\"},{"line_number":79,"context_line":"           g1.num_edges() !\u003d g2.num_edges():"},{"line_number":80,"context_line":"            return False"},{"line_number":81,"context_line":"        for n_id in g1_nodes:"},{"line_number":82,"context_line":"            self.assert_dict_equal(g1_nodes.get(n_id),"},{"line_number":83,"context_line":"                                   g2_nodes.get(n_id),"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_ebfd88b1","line":80,"range":{"start_line":80,"start_character":12,"end_line":80,"end_character":24},"updated":"2018-01-14 13:24:59.000000000","message":"You should call assertTrue() for the equal number of vertices, and fail with an error message if they are not equal. Just like you fail below, if the ids are not the same.","commit_id":"0d1f415d9ff434805cbc5b8d0624fb2e2b399f9d"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"98f9a295fc211c67a052d1e89fba4e776c8abbed","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        g2_edges \u003d g2._g.edge"},{"line_number":78,"context_line":"        if g1.num_vertices() !\u003d g2.num_vertices() or \\"},{"line_number":79,"context_line":"           g1.num_edges() !\u003d g2.num_edges():"},{"line_number":80,"context_line":"            return False"},{"line_number":81,"context_line":"        for n_id in g1_nodes:"},{"line_number":82,"context_line":"            self.assert_dict_equal(g1_nodes.get(n_id),"},{"line_number":83,"context_line":"                                   g2_nodes.get(n_id),"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f96bb07_0b89d4c8","line":80,"range":{"start_line":80,"start_character":12,"end_line":80,"end_character":24},"in_reply_to":"7f96bb07_ebfd88b1","updated":"2018-01-14 14:33:48.000000000","message":"you are RIGHT","commit_id":"0d1f415d9ff434805cbc5b8d0624fb2e2b399f9d"}],"vitrage/tests/functional/datasources/aodh/test_aodh.py":[{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"126089e712f7a167a166283cac836c2dad7dd5f8","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        super(TestAodhAlarms, cls).setUpClass()"},{"line_number":50,"context_line":"        cls.conf \u003d cfg.ConfigOpts()"},{"line_number":51,"context_line":"        cls.conf.register_opts(cls.PROCESSOR_OPTS, group\u003d\u0027entity_graph\u0027)"},{"line_number":52,"context_line":"        cls.conf.register_opts(cls.PERSISTENCY_OPTS, group\u003d\u0027persistency\u0027)"},{"line_number":53,"context_line":"        cls.conf.register_opts(cls.DATASOURCES_OPTS, group\u003d\u0027datasources\u0027)"},{"line_number":54,"context_line":"        cls.load_datasources(cls.conf)"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_fdeb27d9","line":52,"range":{"start_line":52,"start_character":8,"end_line":52,"end_character":73},"updated":"2018-01-03 15:46:52.000000000","message":"I dont think this should be added to tests, as the processor should not require the persistency configuration.","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        super(TestAodhAlarms, cls).setUpClass()"},{"line_number":50,"context_line":"        cls.conf \u003d cfg.ConfigOpts()"},{"line_number":51,"context_line":"        cls.conf.register_opts(cls.PROCESSOR_OPTS, group\u003d\u0027entity_graph\u0027)"},{"line_number":52,"context_line":"        cls.conf.register_opts(cls.PERSISTENCY_OPTS, group\u003d\u0027persistency\u0027)"},{"line_number":53,"context_line":"        cls.conf.register_opts(cls.DATASOURCES_OPTS, group\u003d\u0027datasources\u0027)"},{"line_number":54,"context_line":"        cls.load_datasources(cls.conf)"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_43547621","line":52,"range":{"start_line":52,"start_character":8,"end_line":52,"end_character":73},"in_reply_to":"9f91af0f_fdeb27d9","updated":"2018-01-06 21:37:22.000000000","message":"Done","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"}],"vitrage/tests/functional/entity_graph/consistency/test_consistency.py":[{"author":{"_account_id":19184,"name":"Idan Hefetz","email":"idan.hefetz@nokia.com","username":"idan-hefetz"},"change_message_id":"126089e712f7a167a166283cac836c2dad7dd5f8","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            actions_callback,"},{"line_number":108,"context_line":"            cls.processor.entity_graph)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    @unittest.skip(\"test_take_graph_snapshot skipping\")"},{"line_number":111,"context_line":"    def test_initializing_process(self):"},{"line_number":112,"context_line":"        # Setup"},{"line_number":113,"context_line":"        num_of_host_alarms \u003d self.NUM_HOSTS - 2"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_3dcbcf72","line":110,"range":{"start_line":110,"start_character":25,"end_line":110,"end_character":44},"updated":"2018-01-03 15:46:52.000000000","message":"should this change?","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            actions_callback,"},{"line_number":108,"context_line":"            cls.processor.entity_graph)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    @unittest.skip(\"test_take_graph_snapshot skipping\")"},{"line_number":111,"context_line":"    def test_initializing_process(self):"},{"line_number":112,"context_line":"        # Setup"},{"line_number":113,"context_line":"        num_of_host_alarms \u003d self.NUM_HOSTS - 2"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_a311c25f","line":110,"range":{"start_line":110,"start_character":25,"end_line":110,"end_character":44},"in_reply_to":"9f91af0f_3dcbcf72","updated":"2018-01-06 21:37:22.000000000","message":"no, reverted","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"}],"vitrage/tests/functional/entity_graph/graph_persistor/test_graph_persistor.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6f1574bf4c1d82f000127a6ebb212e1ae790b209","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    PERSISTENCY_OPTS \u003d ["},{"line_number":30,"context_line":"        cfg.BoolOpt(\u0027enable_persistency\u0027,"},{"line_number":31,"context_line":"                    default\u003dTrue,"},{"line_number":32,"context_line":"                    help\u003d\u0027Whether or not take graph snapshots\u0027),"},{"line_number":33,"context_line":"    ]"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    # noinspection PyAttributeOutsideInit,PyPep8Naming"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_a3e490ad","line":32,"range":{"start_line":32,"start_character":26,"end_line":32,"end_character":61},"updated":"2018-01-04 12:27:34.000000000","message":"Change it according to Idan\u0027s suggestion","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    PERSISTENCY_OPTS \u003d ["},{"line_number":30,"context_line":"        cfg.BoolOpt(\u0027enable_persistency\u0027,"},{"line_number":31,"context_line":"                    default\u003dTrue,"},{"line_number":32,"context_line":"                    help\u003d\u0027Whether or not take graph snapshots\u0027),"},{"line_number":33,"context_line":"    ]"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    # noinspection PyAttributeOutsideInit,PyPep8Naming"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_3e170548","line":32,"range":{"start_line":32,"start_character":26,"end_line":32,"end_character":61},"in_reply_to":"9f91af0f_a3e490ad","updated":"2018-01-06 21:37:22.000000000","message":"no need for this opts! deleted","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6f1574bf4c1d82f000127a6ebb212e1ae790b209","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.graph_persistor.last_event_timestamp \u003d current_time"},{"line_number":56,"context_line":"        self.graph_persistor.store_graph(g)"},{"line_number":57,"context_line":"        graph_snapshot \u003d self.graph_persistor.load_graph(current_time)"},{"line_number":58,"context_line":"        equal_graphs \u003d NXGraph.compare(g, graph_snapshot)"},{"line_number":59,"context_line":"        self.assertTrue(equal_graphs)"},{"line_number":60,"context_line":"        self.graph_persistor.delete_graph_snapshots(utcnow())"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def test_persist_two_graphs(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_23b88074","line":59,"range":{"start_line":58,"start_character":8,"end_line":59,"end_character":37},"updated":"2018-01-04 12:27:34.000000000","message":"self.assertTrue(NXGraph.compare(g, graph_snapshot)","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.graph_persistor.last_event_timestamp \u003d current_time"},{"line_number":56,"context_line":"        self.graph_persistor.store_graph(g)"},{"line_number":57,"context_line":"        graph_snapshot \u003d self.graph_persistor.load_graph(current_time)"},{"line_number":58,"context_line":"        equal_graphs \u003d NXGraph.compare(g, graph_snapshot)"},{"line_number":59,"context_line":"        self.assertTrue(equal_graphs)"},{"line_number":60,"context_line":"        self.graph_persistor.delete_graph_snapshots(utcnow())"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def test_persist_two_graphs(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_9e06511c","line":59,"range":{"start_line":58,"start_character":8,"end_line":59,"end_character":37},"in_reply_to":"9f91af0f_23b88074","updated":"2018-01-06 21:37:22.000000000","message":"Done","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6f1574bf4c1d82f000127a6ebb212e1ae790b209","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        time_in_between \u003d utcnow()"},{"line_number":88,"context_line":"        time.sleep(1)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        g2 \u003d GraphGenerator(5).create_graph()"},{"line_number":91,"context_line":"        self.graph_persistor.last_event_timestamp \u003d utcnow()"},{"line_number":92,"context_line":"        self.graph_persistor.store_graph(g2)"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_7e029b0b","line":90,"range":{"start_line":90,"start_character":8,"end_line":90,"end_character":45},"updated":"2018-01-04 12:27:34.000000000","message":"Are g1 and g2 different? if not, then the test doesn\u0027t really check what it should","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        time_in_between \u003d utcnow()"},{"line_number":88,"context_line":"        time.sleep(1)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        g2 \u003d GraphGenerator(5).create_graph()"},{"line_number":91,"context_line":"        self.graph_persistor.last_event_timestamp \u003d utcnow()"},{"line_number":92,"context_line":"        self.graph_persistor.store_graph(g2)"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_830cbe41","line":90,"range":{"start_line":90,"start_character":8,"end_line":90,"end_character":45},"in_reply_to":"9f91af0f_7e029b0b","updated":"2018-01-06 21:37:22.000000000","message":"they are different, g2 has more nodes (vertices)","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"0abef3a0cdbcd3eaa742c9afa030501df5bd4de4","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        time_in_between \u003d utcnow()"},{"line_number":88,"context_line":"        time.sleep(1)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        g2 \u003d GraphGenerator(5).create_graph()"},{"line_number":91,"context_line":"        self.graph_persistor.last_event_timestamp \u003d utcnow()"},{"line_number":92,"context_line":"        self.graph_persistor.store_graph(g2)"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_697879c3","line":90,"range":{"start_line":90,"start_character":8,"end_line":90,"end_character":45},"in_reply_to":"9f91af0f_830cbe41","updated":"2018-01-07 07:42:06.000000000","message":"Ok","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6f1574bf4c1d82f000127a6ebb212e1ae790b209","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        time.sleep(1)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        g2 \u003d GraphGenerator(5).create_graph()"},{"line_number":91,"context_line":"        self.graph_persistor.last_event_timestamp \u003d utcnow()"},{"line_number":92,"context_line":"        self.graph_persistor.store_graph(g2)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        graph_snapshot \u003d self.graph_persistor.load_graph(time_in_between)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_a380108d","line":91,"range":{"start_line":91,"start_character":8,"end_line":91,"end_character":49},"updated":"2018-01-04 12:27:34.000000000","message":"Why do you set the last_event_timestamp like that?","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        time.sleep(1)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        g2 \u003d GraphGenerator(5).create_graph()"},{"line_number":91,"context_line":"        self.graph_persistor.last_event_timestamp \u003d utcnow()"},{"line_number":92,"context_line":"        self.graph_persistor.store_graph(g2)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        graph_snapshot \u003d self.graph_persistor.load_graph(time_in_between)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_de005904","line":91,"range":{"start_line":91,"start_character":8,"end_line":91,"end_character":49},"in_reply_to":"9f91af0f_a380108d","updated":"2018-01-06 21:37:22.000000000","message":"the timestamp is a key in the db.\ni updated it through function, but eyal said no need for this","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"}],"vitrage/tests/functional/entity_graph/graph_snapshooter/__init__.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"__author__ \u003d \u0027stack\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_cf0d6991","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":20},"updated":"2018-01-02 08:34:03.000000000","message":"You called the package graph_snapshooter, but the class name is GraphSnapshot. I think snapshooter is better, but in any case please keep consistent names between the code and the tests.","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"}],"vitrage/tests/functional/entity_graph/graph_snapshooter/test_graph_snapshot.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from vitrage.utils.datetime import utcnow"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def _compare_dict(d1, d2):"},{"line_number":29,"context_line":"    return six.viewitems(d1) \u003d\u003d six.viewitems(d2)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_6f4c5dc7","line":28,"range":{"start_line":28,"start_character":4,"end_line":28,"end_character":17},"updated":"2018-01-02 08:34:03.000000000","message":"I think we have other utils to compare two dictionaries","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from vitrage.utils.datetime import utcnow"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def _compare_dict(d1, d2):"},{"line_number":29,"context_line":"    return six.viewitems(d1) \u003d\u003d six.viewitems(d2)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_656d4797","line":28,"range":{"start_line":28,"start_character":4,"end_line":28,"end_character":17},"in_reply_to":"9f91af0f_6f4c5dc7","updated":"2018-01-03 14:04:13.000000000","message":"we don\u0027t. moved to /common/utils","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    return six.viewitems(d1) \u003d\u003d six.viewitems(d2)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TestGraphSnapshooterFunctional(TestFunctionalBase):"},{"line_number":33,"context_line":"    PROCESSOR_OPTS \u003d ["},{"line_number":34,"context_line":"        cfg.StrOpt(\u0027datasources_values_dir\u0027,"},{"line_number":35,"context_line":"                   default\u003dutils.get_resources_dir() + \u0027/datasources_values\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_efd5cdba","line":32,"range":{"start_line":32,"start_character":26,"end_line":32,"end_character":36},"updated":"2018-01-02 08:34:03.000000000","message":"Do we want all of our functional tests to include the word \u0027Functional\u0027? personally I don\u0027t think so.","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    return six.viewitems(d1) \u003d\u003d six.viewitems(d2)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TestGraphSnapshooterFunctional(TestFunctionalBase):"},{"line_number":33,"context_line":"    PROCESSOR_OPTS \u003d ["},{"line_number":34,"context_line":"        cfg.StrOpt(\u0027datasources_values_dir\u0027,"},{"line_number":35,"context_line":"                   default\u003dutils.get_resources_dir() + \u0027/datasources_values\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_a5f82fc4","line":32,"range":{"start_line":32,"start_character":26,"end_line":32,"end_character":36},"in_reply_to":"9f91af0f_efd5cdba","updated":"2018-01-03 14:04:13.000000000","message":"agree, removed","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TestGraphSnapshooterFunctional(TestFunctionalBase):"},{"line_number":33,"context_line":"    PROCESSOR_OPTS \u003d ["},{"line_number":34,"context_line":"        cfg.StrOpt(\u0027datasources_values_dir\u0027,"},{"line_number":35,"context_line":"                   default\u003dutils.get_resources_dir() + \u0027/datasources_values\u0027),"},{"line_number":36,"context_line":"        cfg.BoolOpt(\u0027snapshot_graph\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_4fe4f9ac","line":33,"range":{"start_line":33,"start_character":4,"end_line":33,"end_character":18},"updated":"2018-01-02 08:34:03.000000000","message":"Already defined in the base class","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TestGraphSnapshooterFunctional(TestFunctionalBase):"},{"line_number":33,"context_line":"    PROCESSOR_OPTS \u003d ["},{"line_number":34,"context_line":"        cfg.StrOpt(\u0027datasources_values_dir\u0027,"},{"line_number":35,"context_line":"                   default\u003dutils.get_resources_dir() + \u0027/datasources_values\u0027),"},{"line_number":36,"context_line":"        cfg.BoolOpt(\u0027snapshot_graph\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_c5f533cd","line":33,"range":{"start_line":33,"start_character":4,"end_line":33,"end_character":18},"in_reply_to":"9f91af0f_4fe4f9ac","updated":"2018-01-03 14:04:13.000000000","message":"turned on persistency flag for this test","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        cls.graph_snapshooter \u003d GraphSnapshot(cls.conf)"},{"line_number":56,"context_line":"        cls.graph \u003d GraphGenerator().create_graph()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def test_initializing_process(self):"},{"line_number":59,"context_line":"        current_time \u003d utcnow()"},{"line_number":60,"context_line":"        self.graph_snapshooter.last_event_timestamp \u003d current_time"},{"line_number":61,"context_line":"        self.graph_snapshooter.store_graph(self.graph)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_4a4aa755","line":58,"range":{"start_line":58,"start_character":8,"end_line":58,"end_character":33},"updated":"2018-01-02 08:34:03.000000000","message":"Please add other tests:\n\n1. two snapshots taken one after the other with no change in the middle\n\n2. one snapshot, make a few changes in the graph, another snapshot. Make sure you get the right changes. \n\n3. Query by different times: get one snapshot, get 2-3 snapshots, get no snapshot\n\n4. Delete snapshot, then try to get it. Delete one snapshot out of two, make sure you still get the other one. Delete the last snapshot, make sure you get none.\n\n5. Delete a snapshot and then add another one.","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        cls.graph_snapshooter \u003d GraphSnapshot(cls.conf)"},{"line_number":56,"context_line":"        cls.graph \u003d GraphGenerator().create_graph()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def test_initializing_process(self):"},{"line_number":59,"context_line":"        current_time \u003d utcnow()"},{"line_number":60,"context_line":"        self.graph_snapshooter.last_event_timestamp \u003d current_time"},{"line_number":61,"context_line":"        self.graph_snapshooter.store_graph(self.graph)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_a0b1fd91","line":58,"range":{"start_line":58,"start_character":8,"end_line":58,"end_character":33},"in_reply_to":"9f91af0f_4a4aa755","updated":"2018-01-03 14:04:13.000000000","message":"Done","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        self.graph_snapshooter.last_event_timestamp \u003d current_time"},{"line_number":61,"context_line":"        self.graph_snapshooter.store_graph(self.graph)"},{"line_number":62,"context_line":"        snapshooted_graph \u003d self.graph_snapshooter.load_graph(current_time)"},{"line_number":63,"context_line":"        equal_graphs \u003d self._compare_graphs(self.graph, snapshooted_graph)"},{"line_number":64,"context_line":"        self.assertEqual(True, equal_graphs)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_0ff03167","line":63,"range":{"start_line":63,"start_character":28,"end_line":63,"end_character":43},"updated":"2018-01-02 08:34:03.000000000","message":"You can rename this method to _assert_equal_graphs, and add the assertion inside the method.","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        self.graph_snapshooter.last_event_timestamp \u003d current_time"},{"line_number":61,"context_line":"        self.graph_snapshooter.store_graph(self.graph)"},{"line_number":62,"context_line":"        snapshooted_graph \u003d self.graph_snapshooter.load_graph(current_time)"},{"line_number":63,"context_line":"        equal_graphs \u003d self._compare_graphs(self.graph, snapshooted_graph)"},{"line_number":64,"context_line":"        self.assertEqual(True, equal_graphs)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_007229e6","line":63,"range":{"start_line":63,"start_character":28,"end_line":63,"end_character":43},"in_reply_to":"9f91af0f_0ff03167","updated":"2018-01-03 14:04:13.000000000","message":"moved to NXgraph and named \u0027compare\u0027","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        self.graph_snapshooter.store_graph(self.graph)"},{"line_number":62,"context_line":"        snapshooted_graph \u003d self.graph_snapshooter.load_graph(current_time)"},{"line_number":63,"context_line":"        equal_graphs \u003d self._compare_graphs(self.graph, snapshooted_graph)"},{"line_number":64,"context_line":"        self.assertEqual(True, equal_graphs)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @staticmethod"},{"line_number":67,"context_line":"    def _compare_graphs(g1, g2):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_cfe9e980","line":64,"range":{"start_line":64,"start_character":13,"end_line":64,"end_character":24},"updated":"2018-01-02 08:34:03.000000000","message":"You can use assertTrue","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        self.graph_snapshooter.store_graph(self.graph)"},{"line_number":62,"context_line":"        snapshooted_graph \u003d self.graph_snapshooter.load_graph(current_time)"},{"line_number":63,"context_line":"        equal_graphs \u003d self._compare_graphs(self.graph, snapshooted_graph)"},{"line_number":64,"context_line":"        self.assertEqual(True, equal_graphs)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @staticmethod"},{"line_number":67,"context_line":"    def _compare_graphs(g1, g2):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_a076ddd7","line":64,"range":{"start_line":64,"start_character":13,"end_line":64,"end_character":24},"in_reply_to":"9f91af0f_cfe9e980","updated":"2018-01-03 14:04:13.000000000","message":"Done","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        g1_edges \u003d g1.g.edge"},{"line_number":70,"context_line":"        g2_nodes \u003d g2.g.node"},{"line_number":71,"context_line":"        g2_edges \u003d g2.g.edge"},{"line_number":72,"context_line":"        if not len(g1_nodes) \u003d\u003d len(g2_nodes):"},{"line_number":73,"context_line":"            return False"},{"line_number":74,"context_line":"        if not len(g1_edges) \u003d\u003d len(g2_edges):"},{"line_number":75,"context_line":"            return False"},{"line_number":76,"context_line":"        for idn in g1_nodes:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_cf9ec906","line":73,"range":{"start_line":72,"start_character":8,"end_line":73,"end_character":24},"updated":"2018-01-02 08:34:03.000000000","message":"Instead, you can write:\n\nassertEqual(len(g1_nodes), len(g2_nodes), \u0027wrong number of nodes in the snapshot\u0027)","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            return False"},{"line_number":74,"context_line":"        if not len(g1_edges) \u003d\u003d len(g2_edges):"},{"line_number":75,"context_line":"            return False"},{"line_number":76,"context_line":"        for idn in g1_nodes:"},{"line_number":77,"context_line":"            if not _compare_dict(g1_nodes.get(idn), g2_nodes.get(idn)):"},{"line_number":78,"context_line":"                return False"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_efa38d4e","line":76,"range":{"start_line":76,"start_character":12,"end_line":76,"end_character":15},"updated":"2018-01-02 08:34:03.000000000","message":"What does idn stand for?","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            return False"},{"line_number":74,"context_line":"        if not len(g1_edges) \u003d\u003d len(g2_edges):"},{"line_number":75,"context_line":"            return False"},{"line_number":76,"context_line":"        for idn in g1_nodes:"},{"line_number":77,"context_line":"            if not _compare_dict(g1_nodes.get(idn), g2_nodes.get(idn)):"},{"line_number":78,"context_line":"                return False"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_004b0984","line":76,"range":{"start_line":76,"start_character":12,"end_line":76,"end_character":15},"in_reply_to":"9f91af0f_efa38d4e","updated":"2018-01-03 14:04:13.000000000","message":"node_id but now it is not relevant\nidn RIP","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"}],"vitrage/tests/functional/entity_graph/states/test_datasource_info_mapper.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6f1574bf4c1d82f000127a6ebb212e1ae790b209","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        super(TestDatasourceInfoMapperFunctional, cls).setUpClass()"},{"line_number":31,"context_line":"        cls.conf \u003d cfg.ConfigOpts()"},{"line_number":32,"context_line":"        cls.conf.register_opts(cls.PROCESSOR_OPTS, group\u003d\u0027entity_graph\u0027)"},{"line_number":33,"context_line":"        cls.conf.register_opts(cls.PERSISTENCY_OPTS, group\u003d\u0027persistency\u0027)"},{"line_number":34,"context_line":"        cls.conf.register_opts(cls.DATASOURCES_OPTS, group\u003d\u0027datasources\u0027)"},{"line_number":35,"context_line":"        cls.load_datasources(cls.conf)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_3e0c133a","line":33,"range":{"start_line":33,"start_character":8,"end_line":33,"end_character":73},"updated":"2018-01-04 12:27:34.000000000","message":"Is it needed? in all of the tests?","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        super(TestDatasourceInfoMapperFunctional, cls).setUpClass()"},{"line_number":31,"context_line":"        cls.conf \u003d cfg.ConfigOpts()"},{"line_number":32,"context_line":"        cls.conf.register_opts(cls.PROCESSOR_OPTS, group\u003d\u0027entity_graph\u0027)"},{"line_number":33,"context_line":"        cls.conf.register_opts(cls.PERSISTENCY_OPTS, group\u003d\u0027persistency\u0027)"},{"line_number":34,"context_line":"        cls.conf.register_opts(cls.DATASOURCES_OPTS, group\u003d\u0027datasources\u0027)"},{"line_number":35,"context_line":"        cls.load_datasources(cls.conf)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_fe2e7d90","line":33,"range":{"start_line":33,"start_character":8,"end_line":33,"end_character":73},"in_reply_to":"9f91af0f_3e0c133a","updated":"2018-01-06 21:37:22.000000000","message":"no! deleted","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"}],"vitrage/tests/mocks/graph_generator.py":[{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"cc5515f3b84ba76de260878080ff566d85db3c07","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                           edge_props_file):"},{"line_number":238,"context_line":"        round_robin_source_vertices \u003d itertools.cycle(source_vertices)"},{"line_number":239,"context_line":"        for v in target_vertices:"},{"line_number":240,"context_line":"            source_v \u003d round_robin_source_vertices.next()"},{"line_number":241,"context_line":"            graph.add_edge(self.file_to_edge(edge_props_file,"},{"line_number":242,"context_line":"                                             source_v.vertex_id,"},{"line_number":243,"context_line":"                                             v.vertex_id))"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_1f9b8472","line":240,"range":{"start_line":240,"start_character":23,"end_line":240,"end_character":57},"updated":"2018-01-01 14:12:12.000000000","message":"next(...)","commit_id":"967e1993d73c5bcc6b3becc625341688983a1f50"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"6dc1b25c42a643d7ff1fa8e70c271e70a128dcfb","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                           edge_props_file):"},{"line_number":238,"context_line":"        round_robin_source_vertices \u003d itertools.cycle(source_vertices)"},{"line_number":239,"context_line":"        for v in target_vertices:"},{"line_number":240,"context_line":"            source_v \u003d round_robin_source_vertices.next()"},{"line_number":241,"context_line":"            graph.add_edge(self.file_to_edge(edge_props_file,"},{"line_number":242,"context_line":"                                             source_v.vertex_id,"},{"line_number":243,"context_line":"                                             v.vertex_id))"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_9f1234b1","line":240,"range":{"start_line":240,"start_character":23,"end_line":240,"end_character":57},"in_reply_to":"9f91af0f_1f9b8472","updated":"2018-01-01 15:02:23.000000000","message":"Done","commit_id":"967e1993d73c5bcc6b3becc625341688983a1f50"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from vitrage.graph import Vertex"},{"line_number":23,"context_line":"from vitrage.tests.mocks import utils"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"resources_path \u003d utils.get_resources_dir() + \u0027/mock_configurations\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def file_to_json(full_path):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_cf6c890a","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":14},"updated":"2018-01-02 08:34:03.000000000","message":"Should be uppercase","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from vitrage.graph import Vertex"},{"line_number":23,"context_line":"from vitrage.tests.mocks import utils"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"resources_path \u003d utils.get_resources_dir() + \u0027/mock_configurations\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def file_to_json(full_path):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_1b4db871","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":14},"in_reply_to":"9f91af0f_cf6c890a","updated":"2018-01-03 14:04:13.000000000","message":"Done","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":25,"context_line":"resources_path \u003d utils.get_resources_dir() + \u0027/mock_configurations\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def file_to_json(full_path):"},{"line_number":29,"context_line":"    reader \u003d codecs.getreader(\"utf-8\")"},{"line_number":30,"context_line":"    with open(full_path, \"rb\") as infile:"},{"line_number":31,"context_line":"        return json.load(reader(infile))"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_af8585af","line":28,"range":{"start_line":28,"start_character":4,"end_line":28,"end_character":16},"updated":"2018-01-02 08:34:03.000000000","message":"I think we already have a utility for loading json files. If not, please add it next to the file that loads html, so it can be used in other places as well.","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":25,"context_line":"resources_path \u003d utils.get_resources_dir() + \u0027/mock_configurations\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def file_to_json(full_path):"},{"line_number":29,"context_line":"    reader \u003d codecs.getreader(\"utf-8\")"},{"line_number":30,"context_line":"    with open(full_path, \"rb\") as infile:"},{"line_number":31,"context_line":"        return json.load(reader(infile))"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_7b32c4f3","line":28,"range":{"start_line":28,"start_character":4,"end_line":28,"end_character":16},"in_reply_to":"9f91af0f_af8585af","updated":"2018-01-03 14:04:13.000000000","message":"Done","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self._num_of_zabbix_alarms_per_controller \u003d \\"},{"line_number":59,"context_line":"            num_of_zabbix_alarms_per_controller"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @property"},{"line_number":62,"context_line":"    def num_of_networks(self):"},{"line_number":63,"context_line":"        return self._num_of_networks"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @num_of_networks.setter"},{"line_number":66,"context_line":"    def num_of_networks(self, value):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_2fc3b5ef","line":63,"range":{"start_line":61,"start_character":0,"end_line":63,"end_character":36},"updated":"2018-01-02 08:34:03.000000000","message":"Are all of these properties used?","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self._num_of_zabbix_alarms_per_controller \u003d \\"},{"line_number":59,"context_line":"            num_of_zabbix_alarms_per_controller"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @property"},{"line_number":62,"context_line":"    def num_of_networks(self):"},{"line_number":63,"context_line":"        return self._num_of_networks"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @num_of_networks.setter"},{"line_number":66,"context_line":"    def num_of_networks(self, value):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_9b978891","line":63,"range":{"start_line":61,"start_character":0,"end_line":63,"end_character":36},"in_reply_to":"9f91af0f_2fc3b5ef","updated":"2018-01-03 14:04:13.000000000","message":"Done","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def create_graph(self):"},{"line_number":142,"context_line":"        graph \u003d NXGraph()"},{"line_number":143,"context_line":"        v1 \u003d self.file_to_vertex(\u0027openstack-cluster.json\u0027)"},{"line_number":144,"context_line":"        graph.add_vertex(v1)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        networks \u003d self._create_n_vertices(graph,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_afaee52b","line":143,"range":{"start_line":143,"start_character":18,"end_line":143,"end_character":32},"updated":"2018-01-02 08:34:03.000000000","message":"Please rename it to _file_to_vertex","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def create_graph(self):"},{"line_number":142,"context_line":"        graph \u003d NXGraph()"},{"line_number":143,"context_line":"        v1 \u003d self.file_to_vertex(\u0027openstack-cluster.json\u0027)"},{"line_number":144,"context_line":"        graph.add_vertex(v1)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        networks \u003d self._create_n_vertices(graph,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_7b47244d","line":143,"range":{"start_line":143,"start_character":18,"end_line":143,"end_character":32},"in_reply_to":"9f91af0f_afaee52b","updated":"2018-01-03 14:04:13.000000000","message":"Done","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        return v"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    @staticmethod"},{"line_number":253,"context_line":"    def file_to_edge(relative_path, source_id, target_id):"},{"line_number":254,"context_line":"        full_path \u003d resources_path + \"/edges/\" + relative_path"},{"line_number":255,"context_line":"        props \u003d file_to_json(full_path)"},{"line_number":256,"context_line":"        return Edge(source_id, target_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_8f7681d8","line":253,"range":{"start_line":253,"start_character":8,"end_line":253,"end_character":20},"updated":"2018-01-02 08:34:03.000000000","message":"_file_to_edge","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"6f1574bf4c1d82f000127a6ebb212e1ae790b209","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        graph.add_vertex(v1)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        networks \u003d self._create_n_vertices(graph,"},{"line_number":58,"context_line":"                                           self._num_of_networks,"},{"line_number":59,"context_line":"                                           \u0027neutron.network.json\u0027)"},{"line_number":60,"context_line":"        zones \u003d self._create_n_neighbors(graph,"},{"line_number":61,"context_line":"                                         self._num_of_zones_per_cluster,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_5e28f784","line":58,"range":{"start_line":58,"start_character":48,"end_line":58,"end_character":64},"updated":"2018-01-04 12:27:34.000000000","message":"Why did you add an _ ?","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"9efa23c667befe43acae9a291d7b26ed4031b61c","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        graph.add_vertex(v1)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        networks \u003d self._create_n_vertices(graph,"},{"line_number":58,"context_line":"                                           self._num_of_networks,"},{"line_number":59,"context_line":"                                           \u0027neutron.network.json\u0027)"},{"line_number":60,"context_line":"        zones \u003d self._create_n_neighbors(graph,"},{"line_number":61,"context_line":"                                         self._num_of_zones_per_cluster,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_be2475b0","line":58,"range":{"start_line":58,"start_character":48,"end_line":58,"end_character":64},"in_reply_to":"9f91af0f_5e28f784","updated":"2018-01-06 21:37:22.000000000","message":"they are private, why not ?","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"0abef3a0cdbcd3eaa742c9afa030501df5bd4de4","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        graph.add_vertex(v1)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        networks \u003d self._create_n_vertices(graph,"},{"line_number":58,"context_line":"                                           self._num_of_networks,"},{"line_number":59,"context_line":"                                           \u0027neutron.network.json\u0027)"},{"line_number":60,"context_line":"        zones \u003d self._create_n_neighbors(graph,"},{"line_number":61,"context_line":"                                         self._num_of_zones_per_cluster,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f91af0f_8975bdcd","line":58,"range":{"start_line":58,"start_character":48,"end_line":58,"end_character":64},"in_reply_to":"9f91af0f_be2475b0","updated":"2018-01-07 07:42:06.000000000","message":"Ok","commit_id":"dec1c68a0aa2825d71622590fe8610314b9e48be"}],"vitrage/tests/resources/mock_configurations/driver/driver_stack_snapshot_dynamic.json":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":7,"context_line":"  \"vitrage_datasource_action\": \"init_snapshot\","},{"line_number":8,"context_line":"  \"id\": \"f22416fb-b33c-4e24-822e-0174421f5ece\","},{"line_number":9,"context_line":"  \"stack_status\": \"CREATE_COMPLETE\","},{"line_number":10,"context_line":"  \"vitrage_sample_date\": \"2017-12-13 11:24:02.598358+00:00\","},{"line_number":11,"context_line":"  \"vitrage_entity_type\": \"heat.stack\","},{"line_number":12,"context_line":"  \"resources\": [{"},{"line_number":13,"context_line":"    \"resource_name\": \"cinder_volume_1\","}],"source_content_type":"application/json","patch_set":2,"id":"9f91af0f_0f1a717c","line":10,"range":{"start_line":10,"start_character":2,"end_line":10,"end_character":60},"updated":"2018-01-02 08:34:03.000000000","message":"Why did you change it?","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":7,"context_line":"  \"vitrage_datasource_action\": \"init_snapshot\","},{"line_number":8,"context_line":"  \"id\": \"f22416fb-b33c-4e24-822e-0174421f5ece\","},{"line_number":9,"context_line":"  \"stack_status\": \"CREATE_COMPLETE\","},{"line_number":10,"context_line":"  \"vitrage_sample_date\": \"2017-12-13 11:24:02.598358+00:00\","},{"line_number":11,"context_line":"  \"vitrage_entity_type\": \"heat.stack\","},{"line_number":12,"context_line":"  \"resources\": [{"},{"line_number":13,"context_line":"    \"resource_name\": \"cinder_volume_1\","}],"source_content_type":"application/json","patch_set":2,"id":"9f91af0f_5baca08b","line":10,"range":{"start_line":10,"start_character":2,"end_line":10,"end_character":60},"in_reply_to":"9f91af0f_0f1a717c","updated":"2018-01-03 14:04:13.000000000","message":"was wrong format","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"}],"vitrage/tests/resources/mock_configurations/vertices/zabbix.json":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  \"vitrage_id\": \"a508142a-b0c6-4880-8b05-38d252b0d840\","},{"line_number":4,"context_line":"  \"name\": \"Component etcd-1 is not in Healthy state\","},{"line_number":5,"context_line":"  \"update_timestamp\": \"2017-12-24T10:32:43Z\","},{"line_number":6,"context_line":"  \"resource_id\": \"k8s\","},{"line_number":7,"context_line":"  \"vitrage_category\": \"ALARM\","},{"line_number":8,"context_line":"  \"vitrage_is_deleted\": false,"},{"line_number":9,"context_line":"  \"state\": \"Active\","}],"source_content_type":"application/json","patch_set":2,"id":"9f91af0f_8f5f6140","line":6,"range":{"start_line":6,"start_character":2,"end_line":6,"end_character":23},"updated":"2018-01-02 08:34:03.000000000","message":"Does your test include a k8s resource?...","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  \"vitrage_id\": \"a508142a-b0c6-4880-8b05-38d252b0d840\","},{"line_number":4,"context_line":"  \"name\": \"Component etcd-1 is not in Healthy state\","},{"line_number":5,"context_line":"  \"update_timestamp\": \"2017-12-24T10:32:43Z\","},{"line_number":6,"context_line":"  \"resource_id\": \"k8s\","},{"line_number":7,"context_line":"  \"vitrage_category\": \"ALARM\","},{"line_number":8,"context_line":"  \"vitrage_is_deleted\": false,"},{"line_number":9,"context_line":"  \"state\": \"Active\","}],"source_content_type":"application/json","patch_set":2,"id":"9f91af0f_3bbd1cb7","line":6,"range":{"start_line":6,"start_character":2,"end_line":6,"end_character":23},"in_reply_to":"9f91af0f_8f5f6140","updated":"2018-01-03 14:04:13.000000000","message":"no.... just dummy template doesn\u0027t represent a real thing","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"}],"vitrage/tests/unit/entity_graph/states/test_datasource_info_mapper.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"576ba9950773fa95e219fa244a91f84e51052433","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class TestDatasourceInfoMapper(TestEntityGraphUnitBase):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    DATASOURCES_OPTS \u003d ["},{"line_number":37,"context_line":"        cfg.ListOpt(\u0027types\u0027,"},{"line_number":38,"context_line":"                    default\u003d[NAGIOS_DATASOURCE,"},{"line_number":39,"context_line":"                             NOVA_HOST_DATASOURCE,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_0f7911fb","line":36,"range":{"start_line":36,"start_character":4,"end_line":36,"end_character":20},"updated":"2018-01-02 08:34:03.000000000","message":"You already defined DATASOURCES_OPTS in BaseTest. Are these different? why?","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"},{"author":{"_account_id":26339,"name":"Muhamad Najjar","email":"muhamad.najjar@nokia.com","username":"7mode3294"},"change_message_id":"f887a7bcb15c97a509a323105bf83d0db6e164b5","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class TestDatasourceInfoMapper(TestEntityGraphUnitBase):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    DATASOURCES_OPTS \u003d ["},{"line_number":37,"context_line":"        cfg.ListOpt(\u0027types\u0027,"},{"line_number":38,"context_line":"                    default\u003d[NAGIOS_DATASOURCE,"},{"line_number":39,"context_line":"                             NOVA_HOST_DATASOURCE,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_cf47921d","line":36,"range":{"start_line":36,"start_character":4,"end_line":36,"end_character":20},"in_reply_to":"9f91af0f_0f7911fb","updated":"2018-01-03 14:04:13.000000000","message":"reverted","commit_id":"6d93ca107a2fda0fa9d35d64edf0e81b4b1dbd0e"}]}
