)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"af9f4e6eb89e820d317f2be3b68b972422a45b7b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Niv Oppenhaim \u003cniv.oppenhaim@nokia.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-10-23 14:08:17 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added support and documentation for regular expressions in template entity definitions"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I5ac81912a88d9a38dc08b23d93e79042f0c62200"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3f4b6375_4f4a3eac","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":86},"updated":"2017-10-24 06:58:09.000000000","message":"Please add a blueprint here: https://blueprints.launchpad.net/vitrage\n\nAnd then add the following line to the commit message:\n\nImplements: blueprint \u003cyour-blueprint-name\u003e","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"}],"doc/source/contributor/vitrage-template-format.rst":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"af9f4e6eb89e820d317f2be3b68b972422a45b7b","unresolved":false,"context_lines":[{"line_number":379,"context_line":"|                   |                       | mark_down               |                                    |"},{"line_number":380,"context_line":"+-------------------+-----------------------+-------------------------+------------------------------------+"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"Using regular expressions in an entity definition:"},{"line_number":383,"context_line":"--------------------------------------------------"},{"line_number":384,"context_line":"All parameters within an entity defintion can be made to include regular"},{"line_number":385,"context_line":"expressions. To do this, simply add \".regex\" to their key. For example, as"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f4b6375_8fd956f4","line":382,"range":{"start_line":382,"start_character":49,"end_line":382,"end_character":50},"updated":"2017-10-24 06:58:09.000000000","message":"No need for that, it\u0027s a header format","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"af9f4e6eb89e820d317f2be3b68b972422a45b7b","unresolved":false,"context_lines":[{"line_number":382,"context_line":"Using regular expressions in an entity definition:"},{"line_number":383,"context_line":"--------------------------------------------------"},{"line_number":384,"context_line":"All parameters within an entity defintion can be made to include regular"},{"line_number":385,"context_line":"expressions. To do this, simply add \".regex\" to their key. For example, as"},{"line_number":386,"context_line":"Zabbix supports regular expressions, a Zabbix alarm entity may contain a"},{"line_number":387,"context_line":"\"rawtext\" field that is defined by a regular expression:"},{"line_number":388,"context_line":"::"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f4b6375_cfbaae6c","line":385,"range":{"start_line":385,"start_character":25,"end_line":385,"end_character":57},"updated":"2017-10-24 06:58:09.000000000","message":"What happens if there are both the regular key and the regex one?","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":26464,"name":"Niv Oppenhaim","email":"niv.oppenhaim@nokia.com","username":"nivolas"},"change_message_id":"d7613eae02eb40379dad67c9f8d2ccb0b03ad162","unresolved":false,"context_lines":[{"line_number":382,"context_line":"Using regular expressions in an entity definition:"},{"line_number":383,"context_line":"--------------------------------------------------"},{"line_number":384,"context_line":"All parameters within an entity defintion can be made to include regular"},{"line_number":385,"context_line":"expressions. To do this, simply add \".regex\" to their key. For example, as"},{"line_number":386,"context_line":"Zabbix supports regular expressions, a Zabbix alarm entity may contain a"},{"line_number":387,"context_line":"\"rawtext\" field that is defined by a regular expression:"},{"line_number":388,"context_line":"::"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f4b6375_53ce4082","line":385,"range":{"start_line":385,"start_character":25,"end_line":385,"end_character":57},"in_reply_to":"3f4b6375_cfbaae6c","updated":"2017-10-26 07:19:54.000000000","message":"Nothing. Should I check that there are no duplicates? I think its the same as if someone put rawtext1 and rawtext2 no?","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"af9f4e6eb89e820d317f2be3b68b972422a45b7b","unresolved":false,"context_lines":[{"line_number":384,"context_line":"All parameters within an entity defintion can be made to include regular"},{"line_number":385,"context_line":"expressions. To do this, simply add \".regex\" to their key. For example, as"},{"line_number":386,"context_line":"Zabbix supports regular expressions, a Zabbix alarm entity may contain a"},{"line_number":387,"context_line":"\"rawtext\" field that is defined by a regular expression:"},{"line_number":388,"context_line":"::"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"  - entity:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f4b6375_cfa18e48","line":387,"range":{"start_line":387,"start_character":1,"end_line":387,"end_character":8},"updated":"2017-10-24 06:58:09.000000000","message":"rawtext.regex.\n\nAlso, keep in mind that not everyone knows Zabbix, so you should make it clear that rawtext is a Zabbix property and it can be replaced with rawtext.regex.","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"}],"vitrage/evaluator/scenario_repository.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"af9f4e6eb89e820d317f2be3b68b972422a45b7b","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def get_scenarios_by_vertex(self, vertex):"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        entity_key \u003d vertex.properties.items()"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        scenarios \u003d []"},{"line_number":80,"context_line":"        for scenario_key, value in self.entity_scenarios.items():"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_2f65c21e","line":77,"range":{"start_line":77,"start_character":8,"end_line":77,"end_character":46},"updated":"2017-10-24 06:58:09.000000000","message":"Why did you remove the try/except?","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":26464,"name":"Niv Oppenhaim","email":"niv.oppenhaim@nokia.com","username":"nivolas"},"change_message_id":"d7613eae02eb40379dad67c9f8d2ccb0b03ad162","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def get_scenarios_by_vertex(self, vertex):"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        entity_key \u003d vertex.properties.items()"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        scenarios \u003d []"},{"line_number":80,"context_line":"        for scenario_key, value in self.entity_scenarios.items():"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_30005aab","line":77,"range":{"start_line":77,"start_character":8,"end_line":77,"end_character":46},"in_reply_to":"3f4b6375_2f65c21e","updated":"2017-10-26 07:19:54.000000000","message":"the try was for the frozenset, but frozenset is not needed anymore","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"af9f4e6eb89e820d317f2be3b68b972422a45b7b","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def _is_subset(self, scenario, entity):"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        regex \u003d \u0027.regex\u0027"},{"line_number":88,"context_line":"        for scenario_property in scenario:"},{"line_number":89,"context_line":"            key \u003d scenario_property[0]"},{"line_number":90,"context_line":"            if regex in key.lower():"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_4f7b5ebd","line":87,"range":{"start_line":87,"start_character":8,"end_line":87,"end_character":24},"updated":"2017-10-24 06:58:09.000000000","message":"It should be a constant value in the beginning of the file/class","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":26464,"name":"Niv Oppenhaim","email":"niv.oppenhaim@nokia.com","username":"nivolas"},"change_message_id":"d7613eae02eb40379dad67c9f8d2ccb0b03ad162","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def _is_subset(self, scenario, entity):"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        regex \u003d \u0027.regex\u0027"},{"line_number":88,"context_line":"        for scenario_property in scenario:"},{"line_number":89,"context_line":"            key \u003d scenario_property[0]"},{"line_number":90,"context_line":"            if regex in key.lower():"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_9efddf6f","line":87,"range":{"start_line":87,"start_character":8,"end_line":87,"end_character":24},"in_reply_to":"3f4b6375_4f7b5ebd","updated":"2017-10-26 07:19:54.000000000","message":"Done","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"af9f4e6eb89e820d317f2be3b68b972422a45b7b","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        regex \u003d \u0027.regex\u0027"},{"line_number":88,"context_line":"        for scenario_property in scenario:"},{"line_number":89,"context_line":"            key \u003d scenario_property[0]"},{"line_number":90,"context_line":"            if regex in key.lower():"},{"line_number":91,"context_line":"                new_scenario_property \u003d (key[:-len(regex)],"},{"line_number":92,"context_line":"                                         scenario_property[1])"},{"line_number":93,"context_line":"                if not self._check_property_with_regex(new_scenario_property,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_0f532641","line":90,"range":{"start_line":90,"start_character":21,"end_line":90,"end_character":35},"updated":"2017-10-24 06:58:09.000000000","message":"Do you want to use \u0027in\u0027? what if \u0027regex\u0027 appears in the middle? why not check only the end of the key?","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":26464,"name":"Niv Oppenhaim","email":"niv.oppenhaim@nokia.com","username":"nivolas"},"change_message_id":"d7613eae02eb40379dad67c9f8d2ccb0b03ad162","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        regex \u003d \u0027.regex\u0027"},{"line_number":88,"context_line":"        for scenario_property in scenario:"},{"line_number":89,"context_line":"            key \u003d scenario_property[0]"},{"line_number":90,"context_line":"            if regex in key.lower():"},{"line_number":91,"context_line":"                new_scenario_property \u003d (key[:-len(regex)],"},{"line_number":92,"context_line":"                                         scenario_property[1])"},{"line_number":93,"context_line":"                if not self._check_property_with_regex(new_scenario_property,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_7e022371","line":90,"range":{"start_line":90,"start_character":21,"end_line":90,"end_character":35},"in_reply_to":"3f4b6375_0f532641","updated":"2017-10-26 07:19:54.000000000","message":"Done","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"af9f4e6eb89e820d317f2be3b68b972422a45b7b","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        return True"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    # Check if one of an event vertex\u0027s properties matches a scenario"},{"line_number":103,"context_line":"    #  property containing a regex"},{"line_number":104,"context_line":"    def _check_property_with_regex(self, regex_property, entity):"},{"line_number":105,"context_line":"        for property in entity:"},{"line_number":106,"context_line":"            if regex_property[0] \u003d\u003d property[0]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_8f5ef641","line":103,"range":{"start_line":102,"start_character":0,"end_line":103,"end_character":34},"updated":"2017-10-24 06:58:09.000000000","message":"Please change it to function header syntax","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":26464,"name":"Niv Oppenhaim","email":"niv.oppenhaim@nokia.com","username":"nivolas"},"change_message_id":"d7613eae02eb40379dad67c9f8d2ccb0b03ad162","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        return True"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    # Check if one of an event vertex\u0027s properties matches a scenario"},{"line_number":103,"context_line":"    #  property containing a regex"},{"line_number":104,"context_line":"    def _check_property_with_regex(self, regex_property, entity):"},{"line_number":105,"context_line":"        for property in entity:"},{"line_number":106,"context_line":"            if regex_property[0] \u003d\u003d property[0]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_44f798d4","line":103,"range":{"start_line":102,"start_character":0,"end_line":103,"end_character":34},"in_reply_to":"3f4b6375_8f5ef641","updated":"2017-10-26 07:19:54.000000000","message":"Done","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":19194,"name":"Dan Offek","email":"dany.offek@gmail.com","username":"danoffek"},"change_message_id":"de16855412f8a5bb491ba29f5a740f67204b0c09","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        for scenario_key, value in self.relationship_scenarios.items():"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"            check_label \u003d key.label \u003d\u003d scenario_key.label"},{"line_number":92,"context_line":"            check_source_issubset \u003d check_subset("},{"line_number":93,"context_line":"                dict(key.source), dict(scenario_key.source))"},{"line_number":94,"context_line":"            check_target_issubset \u003d check_subset("},{"line_number":95,"context_line":"                dict(key.target), dict(scenario_key.target))"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f4b6375_ea2f6a85","line":92,"updated":"2017-10-25 13:52:02.000000000","message":"The checks (except for the first one) should be in the \"if\" for better performance.","commit_id":"87b153bb782496d73821b3d56164dfe939d2dd67"}],"vitrage/evaluator/template_validation/content/template_content_validator.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"af9f4e6eb89e820d317f2be3b68b972422a45b7b","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    for key, value in entity_dict.items():"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        if \u0027.regex\u0027 in key.lower():"},{"line_number":145,"context_line":"            try:"},{"line_number":146,"context_line":"                re.compile(value)"},{"line_number":147,"context_line":"            except Exception:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_4f023e0d","line":144,"range":{"start_line":144,"start_character":11,"end_line":144,"end_character":19},"updated":"2017-10-24 06:58:09.000000000","message":"Please use a constant that is common also to the scenario_repository","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"af9f4e6eb89e820d317f2be3b68b972422a45b7b","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    for key, value in entity_dict.items():"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        if \u0027.regex\u0027 in key.lower():"},{"line_number":145,"context_line":"            try:"},{"line_number":146,"context_line":"                re.compile(value)"},{"line_number":147,"context_line":"            except Exception:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_ca0bbc21","line":144,"range":{"start_line":144,"start_character":20,"end_line":144,"end_character":32},"updated":"2017-10-24 06:58:09.000000000","message":"regex should be the end of the key","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":26464,"name":"Niv Oppenhaim","email":"niv.oppenhaim@nokia.com","username":"nivolas"},"change_message_id":"d7613eae02eb40379dad67c9f8d2ccb0b03ad162","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    for key, value in entity_dict.items():"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        if \u0027.regex\u0027 in key.lower():"},{"line_number":145,"context_line":"            try:"},{"line_number":146,"context_line":"                re.compile(value)"},{"line_number":147,"context_line":"            except Exception:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_de4d979a","line":144,"range":{"start_line":144,"start_character":20,"end_line":144,"end_character":32},"in_reply_to":"3f4b6375_ca0bbc21","updated":"2017-10-26 07:19:54.000000000","message":"Done","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"688a855416d78d43bd3d3d66bcd5380e85cbd590","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    for key, value in entity_dict.items():"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        if TemplateFields.REGEX \u003d\u003d key.lower()[-len("},{"line_number":145,"context_line":"                TemplateFields.REGEX):len(key)]:"},{"line_number":146,"context_line":"            try:"},{"line_number":147,"context_line":"                re.compile(value)"},{"line_number":148,"context_line":"            except Exception:"},{"line_number":149,"context_line":"                LOG.error(\u0027%s %s status code: %s\u0027 % (status_msgs[47],"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_9f6dd9cd","line":146,"range":{"start_line":144,"start_character":8,"end_line":146,"end_character":16},"updated":"2017-10-25 11:05:38.000000000","message":"why cant you use string.endswith(\u0027.regx\u0027)","commit_id":"fd20aea86b1df6113a4c0fa53ddd465ef4256cce"},{"author":{"_account_id":26464,"name":"Niv Oppenhaim","email":"niv.oppenhaim@nokia.com","username":"nivolas"},"change_message_id":"d7613eae02eb40379dad67c9f8d2ccb0b03ad162","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    for key, value in entity_dict.items():"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        if TemplateFields.REGEX \u003d\u003d key.lower()[-len("},{"line_number":145,"context_line":"                TemplateFields.REGEX):len(key)]:"},{"line_number":146,"context_line":"            try:"},{"line_number":147,"context_line":"                re.compile(value)"},{"line_number":148,"context_line":"            except Exception:"},{"line_number":149,"context_line":"                LOG.error(\u0027%s %s status code: %s\u0027 % (status_msgs[47],"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_ffc3ad55","line":146,"range":{"start_line":144,"start_character":8,"end_line":146,"end_character":16},"in_reply_to":"3f4b6375_9f6dd9cd","updated":"2017-10-26 07:19:54.000000000","message":"Done","commit_id":"fd20aea86b1df6113a4c0fa53ddd465ef4256cce"},{"author":{"_account_id":19194,"name":"Dan Offek","email":"dany.offek@gmail.com","username":"danoffek"},"change_message_id":"de16855412f8a5bb491ba29f5a740f67204b0c09","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    for key, value in entity_dict.items():"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        if key.lower().endswith(TemplateFields.REGEX):"},{"line_number":145,"context_line":"            try:"},{"line_number":146,"context_line":"                re.compile(value)"},{"line_number":147,"context_line":"            except Exception:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f4b6375_aa31725c","line":144,"updated":"2017-10-25 13:52:02.000000000","message":"(not that important) - if someone ever changes \".REGEX\" value,\n\"if key.lower().endswith(TemplateFields.REGEX.lower())\" will always work.","commit_id":"87b153bb782496d73821b3d56164dfe939d2dd67"}],"vitrage/graph/filter.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"af9f4e6eb89e820d317f2be3b68b972422a45b7b","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    :param args: list of filter keys to ignore (if exist)"},{"line_number":26,"context_line":"    :rtype: bool"},{"line_number":27,"context_line":"    \"\"\""},{"line_number":28,"context_line":"    regex \u003d \u0027.regex\u0027"},{"line_number":29,"context_line":"    if not attr_filter:"},{"line_number":30,"context_line":"        return True"},{"line_number":31,"context_line":"    for key, content in attr_filter.items():"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_ea1f9858","line":28,"range":{"start_line":28,"start_character":4,"end_line":28,"end_character":20},"updated":"2017-10-24 06:58:09.000000000","message":"Should be defined in a single place","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"af9f4e6eb89e820d317f2be3b68b972422a45b7b","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            continue"},{"line_number":34,"context_line":"        if not isinstance(content, list):"},{"line_number":35,"context_line":"            content \u003d [content]"},{"line_number":36,"context_line":"        if regex in key.lower():"},{"line_number":37,"context_line":"            new_key \u003d key[:-len(regex)]"},{"line_number":38,"context_line":"            if not _check_property_with_regex(new_key, content[0],"},{"line_number":39,"context_line":"                                              data):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_4a30ece8","line":36,"range":{"start_line":36,"start_character":11,"end_line":36,"end_character":31},"updated":"2017-10-24 06:58:09.000000000","message":"regex should appear only in the end","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"af9f4e6eb89e820d317f2be3b68b972422a45b7b","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            continue"},{"line_number":34,"context_line":"        if not isinstance(content, list):"},{"line_number":35,"context_line":"            content \u003d [content]"},{"line_number":36,"context_line":"        if regex in key.lower():"},{"line_number":37,"context_line":"            new_key \u003d key[:-len(regex)]"},{"line_number":38,"context_line":"            if not _check_property_with_regex(new_key, content[0],"},{"line_number":39,"context_line":"                                              data):"},{"line_number":40,"context_line":"                return False"},{"line_number":41,"context_line":"        elif data.get(key) not in content:"},{"line_number":42,"context_line":"            return False"},{"line_number":43,"context_line":"    return True"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_ea6d58cc","line":40,"range":{"start_line":36,"start_character":0,"end_line":40,"end_character":28},"updated":"2017-10-24 06:58:09.000000000","message":"See if you can move this code + the _check_proprty_with_regex to a utility function, that will be used both here and in the scenario repository.","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":26464,"name":"Niv Oppenhaim","email":"niv.oppenhaim@nokia.com","username":"nivolas"},"change_message_id":"d7613eae02eb40379dad67c9f8d2ccb0b03ad162","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            continue"},{"line_number":34,"context_line":"        if not isinstance(content, list):"},{"line_number":35,"context_line":"            content \u003d [content]"},{"line_number":36,"context_line":"        if regex in key.lower():"},{"line_number":37,"context_line":"            new_key \u003d key[:-len(regex)]"},{"line_number":38,"context_line":"            if not _check_property_with_regex(new_key, content[0],"},{"line_number":39,"context_line":"                                              data):"},{"line_number":40,"context_line":"                return False"},{"line_number":41,"context_line":"        elif data.get(key) not in content:"},{"line_number":42,"context_line":"            return False"},{"line_number":43,"context_line":"    return True"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_1e57af28","line":40,"range":{"start_line":36,"start_character":0,"end_line":40,"end_character":28},"in_reply_to":"3f4b6375_ea6d58cc","updated":"2017-10-26 07:19:54.000000000","message":"Done","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"688a855416d78d43bd3d3d66bcd5380e85cbd590","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            continue"},{"line_number":34,"context_line":"        if not isinstance(content, list):"},{"line_number":35,"context_line":"            content \u003d [content]"},{"line_number":36,"context_line":"        if Fields.REGEX \u003d\u003d key.lower()[-len(Fields.REGEX):len(key)]:"},{"line_number":37,"context_line":"            new_key \u003d key[:-len(Fields.REGEX)]"},{"line_number":38,"context_line":"            if not check_property_with_regex(new_key, content[0],"},{"line_number":39,"context_line":"                                             data):"},{"line_number":40,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_9fa279fb","line":37,"range":{"start_line":36,"start_character":7,"end_line":37,"end_character":46},"updated":"2017-10-25 11:05:38.000000000","message":"why cant you use endswith(\u0027.regex\u0027)","commit_id":"fd20aea86b1df6113a4c0fa53ddd465ef4256cce"},{"author":{"_account_id":26464,"name":"Niv Oppenhaim","email":"niv.oppenhaim@nokia.com","username":"nivolas"},"change_message_id":"d7613eae02eb40379dad67c9f8d2ccb0b03ad162","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            continue"},{"line_number":34,"context_line":"        if not isinstance(content, list):"},{"line_number":35,"context_line":"            content \u003d [content]"},{"line_number":36,"context_line":"        if Fields.REGEX \u003d\u003d key.lower()[-len(Fields.REGEX):len(key)]:"},{"line_number":37,"context_line":"            new_key \u003d key[:-len(Fields.REGEX)]"},{"line_number":38,"context_line":"            if not check_property_with_regex(new_key, content[0],"},{"line_number":39,"context_line":"                                             data):"},{"line_number":40,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_9fa8398c","line":37,"range":{"start_line":36,"start_character":7,"end_line":37,"end_character":46},"in_reply_to":"3f4b6375_9fa279fb","updated":"2017-10-26 07:19:54.000000000","message":"Done","commit_id":"fd20aea86b1df6113a4c0fa53ddd465ef4256cce"},{"author":{"_account_id":19194,"name":"Dan Offek","email":"dany.offek@gmail.com","username":"danoffek"},"change_message_id":"de16855412f8a5bb491ba29f5a740f67204b0c09","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            continue"},{"line_number":34,"context_line":"        if not isinstance(content, list):"},{"line_number":35,"context_line":"            content \u003d [content]"},{"line_number":36,"context_line":"        if key.lower().endswith(Fields.REGEX):"},{"line_number":37,"context_line":"            new_key \u003d key[:-len(Fields.REGEX)]"},{"line_number":38,"context_line":"            if not check_property_with_regex(new_key, content[0],"},{"line_number":39,"context_line":"                                             data):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f4b6375_0a1f66b7","line":36,"updated":"2017-10-25 13:52:02.000000000","message":"(not that important) - if someone ever changes \".REGEX\" value,\n\"if key.lower().endswith(Fields.REGEX.lower())\" will always work.","commit_id":"87b153bb782496d73821b3d56164dfe939d2dd67"}],"vitrage/graph/utils.py":[{"author":{"_account_id":19194,"name":"Dan Offek","email":"dany.offek@gmail.com","username":"danoffek"},"change_message_id":"de16855412f8a5bb491ba29f5a740f67204b0c09","unresolved":false,"context_lines":[{"line_number":126,"context_line":"    :type: regex: str"},{"line_number":127,"context_line":"    :rtype: bool"},{"line_number":128,"context_line":"    \"\"\""},{"line_number":129,"context_line":"    value \u003d data.get(key)"},{"line_number":130,"context_line":"    if value is None:"},{"line_number":131,"context_line":"        return False"},{"line_number":132,"context_line":"    pattern \u003d re.compile(regex)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f4b6375_4ab31e99","line":129,"updated":"2017-10-25 13:52:02.000000000","message":"data can be empty ? Null ?","commit_id":"87b153bb782496d73821b3d56164dfe939d2dd67"}],"vitrage/tests/resources/templates/regex/basic_regex.yaml":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"af9f4e6eb89e820d317f2be3b68b972422a45b7b","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - entity:"},{"line_number":7,"context_line":"     category: ALARM"},{"line_number":8,"context_line":"     type: zabbix"},{"line_number":9,"context_line":"     rawtext.regex: TEST TEXT FOR \\w"},{"line_number":10,"context_line":"     template_id: zabbix_alarm_pass"},{"line_number":11,"context_line":"  - entity:"},{"line_number":12,"context_line":"     category: RESOURCE"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"3f4b6375_0a8b146e","line":9,"range":{"start_line":9,"start_character":5,"end_line":9,"end_character":36},"updated":"2017-10-24 06:58:09.000000000","message":"A specific question about Zabbix: the rawtext currently looks like this: Processor load is too high on {HOST.NAME}\n\nIf you change it to rawtext.regex:\nProcessor * is too high on {HOST.NAME}\n\nHow will the re.compile handle the {HOST.NAME} part? this is an integral part of the Zabbix alarm name","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":26464,"name":"Niv Oppenhaim","email":"niv.oppenhaim@nokia.com","username":"nivolas"},"change_message_id":"d7613eae02eb40379dad67c9f8d2ccb0b03ad162","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - entity:"},{"line_number":7,"context_line":"     category: ALARM"},{"line_number":8,"context_line":"     type: zabbix"},{"line_number":9,"context_line":"     rawtext.regex: TEST TEXT FOR \\w"},{"line_number":10,"context_line":"     template_id: zabbix_alarm_pass"},{"line_number":11,"context_line":"  - entity:"},{"line_number":12,"context_line":"     category: RESOURCE"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"3f4b6375_309cda68","line":9,"range":{"start_line":9,"start_character":5,"end_line":9,"end_character":36},"in_reply_to":"3f4b6375_0a8b146e","updated":"2017-10-26 07:19:54.000000000","message":"curly brackets are not special characters, so it works fine, it reads it as is","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"}],"vitrage/tests/resources/templates/regex/basic_regex_for_fail.yaml":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"af9f4e6eb89e820d317f2be3b68b972422a45b7b","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - entity:"},{"line_number":7,"context_line":"     category: ALARM"},{"line_number":8,"context_line":"     type: zabbix"},{"line_number":9,"context_line":"     rawtext.regex: TEST TEXT fail"},{"line_number":10,"context_line":"     template_id: zabbix_alarm"},{"line_number":11,"context_line":"  - entity:"},{"line_number":12,"context_line":"     category: RESOURCE"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"3f4b6375_caf5fcee","line":9,"range":{"start_line":9,"start_character":20,"end_line":9,"end_character":34},"updated":"2017-10-24 06:58:09.000000000","message":"Why should it fail?","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":26464,"name":"Niv Oppenhaim","email":"niv.oppenhaim@nokia.com","username":"nivolas"},"change_message_id":"d7613eae02eb40379dad67c9f8d2ccb0b03ad162","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - entity:"},{"line_number":7,"context_line":"     category: ALARM"},{"line_number":8,"context_line":"     type: zabbix"},{"line_number":9,"context_line":"     rawtext.regex: TEST TEXT fail"},{"line_number":10,"context_line":"     template_id: zabbix_alarm"},{"line_number":11,"context_line":"  - entity:"},{"line_number":12,"context_line":"     category: RESOURCE"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"3f4b6375_b081eafd","line":9,"range":{"start_line":9,"start_character":20,"end_line":9,"end_character":34},"in_reply_to":"3f4b6375_caf5fcee","updated":"2017-10-26 07:19:54.000000000","message":"in the test I compare it with a string that doesn\u0027t match this regular expression","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"}],"vitrage/tests/unit/evaluator/template_validation/content/test_template_content_validator.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"af9f4e6eb89e820d317f2be3b68b972422a45b7b","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        self._execute_condition_template_with_fault_result("},{"line_number":260,"context_line":"            \u0027complex_not_unsupported.yaml\u0027, 135)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def test_faulty_regex(self):"},{"line_number":263,"context_line":"        faulty_regex_path \u003d \\"},{"line_number":264,"context_line":"            REGEX_TEMPLATE_DIR % (utils.get_resources_dir(),"},{"line_number":265,"context_line":"                                  \"faulty_regex.yaml\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_8ac4a492","line":262,"range":{"start_line":262,"start_character":8,"end_line":262,"end_character":25},"updated":"2017-10-24 06:58:09.000000000","message":"What about testing the third yaml file that you added?","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":26464,"name":"Niv Oppenhaim","email":"niv.oppenhaim@nokia.com","username":"nivolas"},"change_message_id":"d7613eae02eb40379dad67c9f8d2ccb0b03ad162","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        self._execute_condition_template_with_fault_result("},{"line_number":260,"context_line":"            \u0027complex_not_unsupported.yaml\u0027, 135)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def test_faulty_regex(self):"},{"line_number":263,"context_line":"        faulty_regex_path \u003d \\"},{"line_number":264,"context_line":"            REGEX_TEMPLATE_DIR % (utils.get_resources_dir(),"},{"line_number":265,"context_line":"                                  \"faulty_regex.yaml\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_b9a1d5fa","line":262,"range":{"start_line":262,"start_character":8,"end_line":262,"end_character":25},"in_reply_to":"3f4b6375_8ac4a492","updated":"2017-10-26 07:19:54.000000000","message":"It is tested in another test","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"}],"vitrage/tests/unit/evaluator/test_scenario_repository.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"af9f4e6eb89e820d317f2be3b68b972422a45b7b","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            \"time\": 121354,"},{"line_number":123,"context_line":"            \"vitrage_type\": \"zabbix\","},{"line_number":124,"context_line":"            \"vitrage_category\": \"ALARM\","},{"line_number":125,"context_line":"            \"rawtext\": \"TEST TEXT FOR REGEX\","},{"line_number":126,"context_line":"            \"host\": \"some_host_kukoo\""},{"line_number":127,"context_line":"        }"},{"line_number":128,"context_line":"        event_vertex \u003d Vertex(vertex_id\u003d\"test_vertex\","}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_8a72647a","line":125,"range":{"start_line":125,"start_character":13,"end_line":125,"end_character":20},"updated":"2017-10-24 06:58:09.000000000","message":"It\u0027s not a regex","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":26464,"name":"Niv Oppenhaim","email":"niv.oppenhaim@nokia.com","username":"nivolas"},"change_message_id":"d7613eae02eb40379dad67c9f8d2ccb0b03ad162","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            \"time\": 121354,"},{"line_number":123,"context_line":"            \"vitrage_type\": \"zabbix\","},{"line_number":124,"context_line":"            \"vitrage_category\": \"ALARM\","},{"line_number":125,"context_line":"            \"rawtext\": \"TEST TEXT FOR REGEX\","},{"line_number":126,"context_line":"            \"host\": \"some_host_kukoo\""},{"line_number":127,"context_line":"        }"},{"line_number":128,"context_line":"        event_vertex \u003d Vertex(vertex_id\u003d\"test_vertex\","}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_99da9948","line":125,"range":{"start_line":125,"start_character":13,"end_line":125,"end_character":20},"in_reply_to":"3f4b6375_8a72647a","updated":"2017-10-26 07:19:54.000000000","message":"it is, but will change it to something more relevant","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"af9f4e6eb89e820d317f2be3b68b972422a45b7b","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        relevant_scenario \u003d relevant_scenarios[0]"},{"line_number":135,"context_line":"        self.assertEqual(\"zabbix_alarm_pass\", relevant_scenario[0].vertex_id)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def test_basic_wrong_regex(self):"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        event_properties \u003d {"},{"line_number":140,"context_line":"            \"time\": 121354,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_4afd8caf","line":137,"range":{"start_line":137,"start_character":8,"end_line":137,"end_character":30},"updated":"2017-10-24 06:58:09.000000000","message":"Please also test:\n\n1. a regex that \"really works\" like \"Alarm on interface *\" with an actual value of \"Alarm on interface if1\".\n\n2. a regex that equals the value exactly, like \"Alarm on interface if1 *\" with an actual value of \"Alarm on interface if1\"\n\n3. a non-regex field (just to make sure it still works as before)","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":26464,"name":"Niv Oppenhaim","email":"niv.oppenhaim@nokia.com","username":"nivolas"},"change_message_id":"d7613eae02eb40379dad67c9f8d2ccb0b03ad162","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        relevant_scenario \u003d relevant_scenarios[0]"},{"line_number":135,"context_line":"        self.assertEqual(\"zabbix_alarm_pass\", relevant_scenario[0].vertex_id)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def test_basic_wrong_regex(self):"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        event_properties \u003d {"},{"line_number":140,"context_line":"            \"time\": 121354,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_c4538816","line":137,"range":{"start_line":137,"start_character":8,"end_line":137,"end_character":30},"in_reply_to":"3f4b6375_4afd8caf","updated":"2017-10-26 07:19:54.000000000","message":"Done","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"af9f4e6eb89e820d317f2be3b68b972422a45b7b","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            \"time\": 121354,"},{"line_number":141,"context_line":"            \"vitrage_type\": \"zabbix\","},{"line_number":142,"context_line":"            \"vitrage_category\": \"ALARM\","},{"line_number":143,"context_line":"            \"rawtext\": \"Fail Text\","},{"line_number":144,"context_line":"            \"host\": \"some_host_kukoo\""},{"line_number":145,"context_line":"        }"},{"line_number":146,"context_line":"        event_vertex \u003d Vertex(vertex_id\u003d\"test_vertex\","}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_2a6250af","line":143,"range":{"start_line":143,"start_character":24,"end_line":143,"end_character":33},"updated":"2017-10-24 06:58:09.000000000","message":"Why is it wrong?","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":26464,"name":"Niv Oppenhaim","email":"niv.oppenhaim@nokia.com","username":"nivolas"},"change_message_id":"d7613eae02eb40379dad67c9f8d2ccb0b03ad162","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            \"time\": 121354,"},{"line_number":141,"context_line":"            \"vitrage_type\": \"zabbix\","},{"line_number":142,"context_line":"            \"vitrage_category\": \"ALARM\","},{"line_number":143,"context_line":"            \"rawtext\": \"Fail Text\","},{"line_number":144,"context_line":"            \"host\": \"some_host_kukoo\""},{"line_number":145,"context_line":"        }"},{"line_number":146,"context_line":"        event_vertex \u003d Vertex(vertex_id\u003d\"test_vertex\","}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_d33d908f","line":143,"range":{"start_line":143,"start_character":24,"end_line":143,"end_character":33},"in_reply_to":"3f4b6375_2a6250af","updated":"2017-10-26 07:19:54.000000000","message":"not wrong, just doesn\u0027t match any of the templates","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"}],"vitrage/tests/unit/graph/test_graph.py":[{"author":{"_account_id":19159,"name":"Ifat Afek","email":"ifat.afek@nokia.com","username":"ifat_afek"},"change_message_id":"af9f4e6eb89e820d317f2be3b68b972422a45b7b","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        self.assertEqual(True, check_filter(data\u003devent_properties,"},{"line_number":553,"context_line":"                                            attr_filter\u003dattr_filter))"},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"    def test_basic_wrong_regex(self):"},{"line_number":556,"context_line":"        event_properties \u003d {"},{"line_number":557,"context_line":"            \"time\": 121354,"},{"line_number":558,"context_line":"            \"vitrage_type\": \"zabbix\","}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_aa23e055","line":555,"range":{"start_line":555,"start_character":19,"end_line":555,"end_character":24},"updated":"2017-10-24 06:58:09.000000000","message":"It\u0027s not wrong, it just isn\u0027t equal to the event_properties","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"},{"author":{"_account_id":26464,"name":"Niv Oppenhaim","email":"niv.oppenhaim@nokia.com","username":"nivolas"},"change_message_id":"d7613eae02eb40379dad67c9f8d2ccb0b03ad162","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        self.assertEqual(True, check_filter(data\u003devent_properties,"},{"line_number":553,"context_line":"                                            attr_filter\u003dattr_filter))"},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"    def test_basic_wrong_regex(self):"},{"line_number":556,"context_line":"        event_properties \u003d {"},{"line_number":557,"context_line":"            \"time\": 121354,"},{"line_number":558,"context_line":"            \"vitrage_type\": \"zabbix\","}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_a40c0cec","line":555,"range":{"start_line":555,"start_character":19,"end_line":555,"end_character":24},"in_reply_to":"3f4b6375_aa23e055","updated":"2017-10-26 07:19:54.000000000","message":"Done","commit_id":"12a74b8d5befe4ef502a0058a8bf3d7c29a7c100"}]}
