)]}'
{"vitrage/correlation_engine/__init__.py":[{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"343355c395020d3c652dc1846505d733e9c28201","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 - Alcatel-Lucent"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_cda53eb6","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2016-12-29 13:22:57.000000000","message":"should be nokia 2016","commit_id":"338fa3bb737d42ab8bcb4bd7b87958dfa308c36b"}],"vitrage/correlation_engine/accumulative_data_manager.py":[{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"343355c395020d3c652dc1846505d733e9c28201","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                                self.active_alarms_start_times.items())"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def get_alarm_ids(self):"},{"line_number":54,"context_line":"        alarms \u003d []"},{"line_number":55,"context_line":"        for alarm_id in self.alarms_activity_durations:"},{"line_number":56,"context_line":"            alarms.append(alarm_id)"},{"line_number":57,"context_line":"        return alarms"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def get_activity_duration(self, alarm_id):"},{"line_number":60,"context_line":"        if alarm_id not in self.alarms_activity_durations:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_2d95ea3f","line":57,"range":{"start_line":54,"start_character":8,"end_line":57,"end_character":21},"updated":"2016-12-29 13:22:57.000000000","message":"use comprehension list","commit_id":"338fa3bb737d42ab8bcb4bd7b87958dfa308c36b"},{"author":{"_account_id":19233,"name":"Elisha Rosensweig","email":"elisha@chorus.ai","username":"elisha.rosensweig"},"change_message_id":"d2a5e9d74a9fbcfcf622bda165907e7db837b69a","unresolved":false,"context_lines":[{"line_number":29,"context_line":"            IntersectionCollection(accumulated_data[1])"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def append_active(self, alarm_id, timestamp):"},{"line_number":32,"context_line":"        # alarm_id should be a tupple"},{"line_number":33,"context_line":"        if alarm_id in self.active_alarms_start_times:"},{"line_number":34,"context_line":"            LOG.error(\"alarm {} started again at {}\"."},{"line_number":35,"context_line":"                      format(alarm_id, timestamp))"}],"source_content_type":"text/x-python","patch_set":3,"id":"da36d5c6_9502fa6d","line":32,"updated":"2017-02-22 16:38:50.000000000","message":"tupple --\u003e tuple","commit_id":"c004e216095489ebbc9b4e4697c4a08c8cd43ff2"},{"author":{"_account_id":19233,"name":"Elisha Rosensweig","email":"elisha@chorus.ai","username":"elisha.rosensweig"},"change_message_id":"d2a5e9d74a9fbcfcf622bda165907e7db837b69a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.active_alarms_start_times[alarm_id] \u003d timestamp"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def append_inactive(self, alarm_id, inactive_end_time):"},{"line_number":40,"context_line":"        # alarm_id should be a tupple"},{"line_number":41,"context_line":"        if alarm_id not in self.active_alarms_start_times:"},{"line_number":42,"context_line":"            LOG.error(\"a notification for the end of alarm {} at {} \" +"},{"line_number":43,"context_line":"                      \"was retrieved before it started\"."}],"source_content_type":"text/x-python","patch_set":3,"id":"da36d5c6_8413a90c","line":40,"updated":"2017-02-22 16:38:50.000000000","message":"tupple --\u003e tuple","commit_id":"c004e216095489ebbc9b4e4697c4a08c8cd43ff2"},{"author":{"_account_id":19233,"name":"Elisha Rosensweig","email":"elisha@chorus.ai","username":"elisha.rosensweig"},"change_message_id":"d2a5e9d74a9fbcfcf622bda165907e7db837b69a","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def get_intersection_duration(self, alarm_id_left, alarm_id_right):"},{"line_number":71,"context_line":"        # alarm_left \u0026 alarm_id_right should be a tupple"},{"line_number":72,"context_line":"        left_resource_id \u003d AlarmMapper.get_resource_id(alarm_id_left)"},{"line_number":73,"context_line":"        left_resource_type \u003d AlarmMapper.get_resource_type(alarm_id_left)"},{"line_number":74,"context_line":"        left_alarm_type \u003d AlarmMapper.get_alarm_type(alarm_id_left)"},{"line_number":75,"context_line":"        right_resource_id \u003d AlarmMapper.get_resource_id(alarm_id_right)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da36d5c6_4478d18f","line":72,"updated":"2017-02-22 16:38:50.000000000","message":"This method can be made much clearer:\n- refactor lines 72-74 to a method that returns a 3-tuple with these parameters.\n- use the same method for lines 75-77\n- change the signature of \"alarms_intersection_durations.get\" to receive two tuples, instead of six parameters. If you look at that method (I\u0027ll comment on it too) you will see that already now you use two tuples there, not six individual variables.","commit_id":"c004e216095489ebbc9b4e4697c4a08c8cd43ff2"}],"vitrage/correlation_engine/alarm_mapper.py":[{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"343355c395020d3c652dc1846505d733e9c28201","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @staticmethod"},{"line_number":43,"context_line":"    def get_timestamp(alarm, format\u003dSTATE_CHANGE_TIMESTAMP_FORMAT):"},{"line_number":44,"context_line":"        return datetime.datetime.strptime("},{"line_number":45,"context_line":"            alarm[AlarmMapper.STATE_CHANGE_TIMESTAMP], format)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_2d7c0a20","line":44,"range":{"start_line":44,"start_character":15,"end_line":44,"end_character":32},"updated":"2016-12-29 13:22:57.000000000","message":"do  from datetime import dateime","commit_id":"338fa3bb737d42ab8bcb4bd7b87958dfa308c36b"},{"author":{"_account_id":19233,"name":"Elisha Rosensweig","email":"elisha@chorus.ai","username":"elisha.rosensweig"},"change_message_id":"d2a5e9d74a9fbcfcf622bda165907e7db837b69a","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @staticmethod"},{"line_number":32,"context_line":"    def get_id(alarm):"},{"line_number":33,"context_line":"        return (alarm[AlarmMapper.RESOURCE_ID],"},{"line_number":34,"context_line":"                alarm[AlarmMapper.RESOURCE_TYPE],"},{"line_number":35,"context_line":"                alarm[AlarmMapper.ALARM_TYPE])"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da36d5c6_87b80be7","line":33,"updated":"2017-02-22 16:38:50.000000000","message":"see the comment below - use a namedtuple for this tuple, which will make things neater.","commit_id":"c004e216095489ebbc9b4e4697c4a08c8cd43ff2"},{"author":{"_account_id":19233,"name":"Elisha Rosensweig","email":"elisha@chorus.ai","username":"elisha.rosensweig"},"change_message_id":"d2a5e9d74a9fbcfcf622bda165907e7db837b69a","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def normalize_gap(gap):"},{"line_number":52,"context_line":"        return gap.total_seconds()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    # ToDo may use named tuple"},{"line_number":55,"context_line":"    @staticmethod"},{"line_number":56,"context_line":"    def get_resource_id(alarm_id):"},{"line_number":57,"context_line":"        return alarm_id[0]"}],"source_content_type":"text/x-python","patch_set":3,"id":"da36d5c6_c747631b","line":54,"updated":"2017-02-22 16:38:50.000000000","message":"yes, please do this TODO... :)","commit_id":"c004e216095489ebbc9b4e4697c4a08c8cd43ff2"}],"vitrage/correlation_engine/alarms_file_transformer.py":[{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"343355c395020d3c652dc1846505d733e9c28201","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class AlarmsFileTransformer(object):"},{"line_number":24,"context_line":"    alarms \u003d []"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def __init__(self, file_path):"},{"line_number":27,"context_line":"        with open(file_path, \u0027r\u0027) as f:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_2da32aa0","line":24,"range":{"start_line":24,"start_character":4,"end_line":24,"end_character":10},"updated":"2016-12-29 13:22:57.000000000","message":"is this static on purpose ?","commit_id":"338fa3bb737d42ab8bcb4bd7b87958dfa308c36b"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"343355c395020d3c652dc1846505d733e9c28201","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    def __init__(self, file_path):"},{"line_number":27,"context_line":"        with open(file_path, \u0027r\u0027) as f:"},{"line_number":28,"context_line":"            for line in f:"},{"line_number":29,"context_line":"                jline \u003d json.loads("},{"line_number":30,"context_line":"                    line.replace(\"\\\"\", \u0027\\\\\"\u0027)"},{"line_number":31,"context_line":"                        .replace(\"u\\\u0027\", \u0027\"\u0027).replace(\"\\\u0027\", \u0027\"\u0027))"},{"line_number":32,"context_line":"                jline[AlarmMapper.STATE_CHANGE_TIMESTAMP] \u003d\\"},{"line_number":33,"context_line":"                    datetime.datetime.strptime("},{"line_number":34,"context_line":"                        jline[AlarmMapper.STATE_CHANGE_TIMESTAMP],"},{"line_number":35,"context_line":"                        \"%Y-%m-%dT%H:%M:%SZ\").strftime("},{"line_number":36,"context_line":"                        AlarmMapper.STATE_CHANGE_TIMESTAMP_FORMAT + \" UTC\")"},{"line_number":37,"context_line":"                if not jline[AlarmMapper.RESOURCE_ID] \\"},{"line_number":38,"context_line":"                        or not jline[AlarmMapper.ALARM_TYPE] \\"},{"line_number":39,"context_line":"                        or not jline[AlarmMapper.RESOURCE_TYPE] \\"},{"line_number":40,"context_line":"                        or not jline[AlarmMapper.STATE_CHANGE_TIMESTAMP]\\"},{"line_number":41,"context_line":"                        or not jline[AlarmMapper.STATE]:"},{"line_number":42,"context_line":"                    LOG.error(\"missing parameters for \" +"},{"line_number":43,"context_line":"                              str(jline))"},{"line_number":44,"context_line":"                else:"},{"line_number":45,"context_line":"                    self.alarms.append(jline)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def get_alarms(self):"},{"line_number":48,"context_line":"        return self.alarms"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_4da06e91","line":45,"range":{"start_line":29,"start_character":16,"end_line":45,"end_character":45},"updated":"2016-12-29 13:22:57.000000000","message":"extract mehtod","commit_id":"338fa3bb737d42ab8bcb4bd7b87958dfa308c36b"},{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"343355c395020d3c652dc1846505d733e9c28201","unresolved":false,"context_lines":[{"line_number":51,"context_line":"class AlarmsFileTransformerTestData(object):"},{"line_number":52,"context_line":"    def __init__(self, file_path):"},{"line_number":53,"context_line":"        with open(file_path, \u0027r\u0027) as f:"},{"line_number":54,"context_line":"            for line in f:"},{"line_number":55,"context_line":"                jline \u003d \\"},{"line_number":56,"context_line":"                    json.loads(line.replace(\"\\\"\", \u0027\\\\\"\u0027).replace(\"\\\u0027\", \u0027\"\u0027))"},{"line_number":57,"context_line":"                # push active alarm"},{"line_number":58,"context_line":"                transformed_line \u003d {}"},{"line_number":59,"context_line":"                transformed_line[AlarmMapper.ALARM_TYPE] \u003d jline[\u0027alertType\u0027]"},{"line_number":60,"context_line":"                transformed_line[AlarmMapper.STATE] \u003d AlarmMapper.ACTIVE"},{"line_number":61,"context_line":"                transformed_line[AlarmMapper.RESOURCE_TYPE] \u003d \\"},{"line_number":62,"context_line":"                    jline[\u0027resourceType\u0027]"},{"line_number":63,"context_line":"                transformed_line[AlarmMapper.RESOURCE_ID] \u003d jline[\u0027resourceId\u0027]"},{"line_number":64,"context_line":"                transformed_line[AlarmMapper.STATE_CHANGE_TIMESTAMP] \u003d \\"},{"line_number":65,"context_line":"                    jline[\u0027activeTimestamp\u0027]"},{"line_number":66,"context_line":"                if not jline[\u0027resourceId\u0027] \\"},{"line_number":67,"context_line":"                        or not jline[\u0027alertType\u0027] \\"},{"line_number":68,"context_line":"                        or not jline[\u0027resourceType\u0027] \\"},{"line_number":69,"context_line":"                        or not jline[\u0027activeTimestamp\u0027]:"},{"line_number":70,"context_line":"                    LOG.error(\"missing parameters for \" +"},{"line_number":71,"context_line":"                              str(transformed_line))"},{"line_number":72,"context_line":"                else:"},{"line_number":73,"context_line":"                    self.alarms.append(transformed_line)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"                # push inactive portion of alarm,"},{"line_number":76,"context_line":"                # since in that case the source contains both active \u0026 inactive"},{"line_number":77,"context_line":"                if jline[\u0027state\u0027] !\u003d \"ACTIVE\":"},{"line_number":78,"context_line":"                    transformed_line \u003d {}"},{"line_number":79,"context_line":"                    transformed_line[AlarmMapper.ALARM_TYPE] \u003d \\"},{"line_number":80,"context_line":"                        jline[\u0027alertType\u0027]"},{"line_number":81,"context_line":"                    transformed_line[AlarmMapper.STATE] \u003d AlarmMapper.INACTIVE"},{"line_number":82,"context_line":"                    transformed_line[AlarmMapper.RESOURCE_TYPE] \u003d \\"},{"line_number":83,"context_line":"                        jline[\u0027resourceType\u0027]"},{"line_number":84,"context_line":"                    transformed_line[AlarmMapper.RESOURCE_ID] \u003d \\"},{"line_number":85,"context_line":"                        jline[\u0027resourceId\u0027]"},{"line_number":86,"context_line":"                    transformed_line[AlarmMapper.STATE_CHANGE_TIMESTAMP] \u003d\\"},{"line_number":87,"context_line":"                        jline[\u0027inactiveTimestamp\u0027]"},{"line_number":88,"context_line":"                    if not jline[\u0027resourceId\u0027] or not jline[\u0027alertType\u0027] \\"},{"line_number":89,"context_line":"                            or not jline[\u0027resourceType\u0027] or \\"},{"line_number":90,"context_line":"                            not jline[\u0027activeTimestamp\u0027]:"},{"line_number":91,"context_line":"                        LOG.error(\"missing parameters for \" +"},{"line_number":92,"context_line":"                                  str(transformed_line))"},{"line_number":93,"context_line":"                    else:"},{"line_number":94,"context_line":"                        self.alarms.append(transformed_line)"},{"line_number":95,"context_line":"        self.alarms \u003d sorted(self.alarms,"},{"line_number":96,"context_line":"                             key\u003dlambda x:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_8d73364d","line":93,"range":{"start_line":54,"start_character":11,"end_line":93,"end_character":25},"updated":"2016-12-29 13:22:57.000000000","message":"extract mehtod","commit_id":"338fa3bb737d42ab8bcb4bd7b87958dfa308c36b"},{"author":{"_account_id":19233,"name":"Elisha Rosensweig","email":"elisha@chorus.ai","username":"elisha.rosensweig"},"change_message_id":"d2a5e9d74a9fbcfcf622bda165907e7db837b69a","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                        jline[AlarmMapper.STATE_CHANGE_TIMESTAMP],"},{"line_number":35,"context_line":"                        \"%Y-%m-%dT%H:%M:%SZ\").strftime("},{"line_number":36,"context_line":"                        AlarmMapper.STATE_CHANGE_TIMESTAMP_FORMAT + \" UTC\")"},{"line_number":37,"context_line":"                if not jline[AlarmMapper.RESOURCE_ID] \\"},{"line_number":38,"context_line":"                        or not jline[AlarmMapper.ALARM_TYPE] \\"},{"line_number":39,"context_line":"                        or not jline[AlarmMapper.RESOURCE_TYPE] \\"},{"line_number":40,"context_line":"                        or not jline[AlarmMapper.STATE_CHANGE_TIMESTAMP]\\"}],"source_content_type":"text/x-python","patch_set":3,"id":"da36d5c6_3d869065","line":37,"updated":"2017-02-22 16:38:50.000000000","message":"In these lines (37-41) you assume the key exists but that you might get \"None\" as the value. Is that the case? If the key could not exist, you need to use \".get\"\n\nAlso, might be nicer to write these lines like this:\n\nrequired_params \u003d [AlarmMapper.RESOURCE_ID,\n                                   AlarmMapper.ALARM_TYPE,\n                                   AlarmMapper.RESOURCE_TYPE,\n                              AlarmMapper.STATE_CHANGE_TIMESTAMP,\n                                   AlarmMapper.STATE]\n                for param in required_params:\n                    if not jline[param]:\n                        LOG.error(\"missing parameters for \" + str(jline))","commit_id":"c004e216095489ebbc9b4e4697c4a08c8cd43ff2"},{"author":{"_account_id":19233,"name":"Elisha Rosensweig","email":"elisha@chorus.ai","username":"elisha.rosensweig"},"change_message_id":"d2a5e9d74a9fbcfcf622bda165907e7db837b69a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                if not jline[AlarmMapper.RESOURCE_ID] \\"},{"line_number":38,"context_line":"                        or not jline[AlarmMapper.ALARM_TYPE] \\"},{"line_number":39,"context_line":"                        or not jline[AlarmMapper.RESOURCE_TYPE] \\"},{"line_number":40,"context_line":"                        or not jline[AlarmMapper.STATE_CHANGE_TIMESTAMP]\\"},{"line_number":41,"context_line":"                        or not jline[AlarmMapper.STATE]:"},{"line_number":42,"context_line":"                    LOG.error(\"missing parameters for \" +"},{"line_number":43,"context_line":"                              str(jline))"}],"source_content_type":"text/x-python","patch_set":3,"id":"da36d5c6_fd19587a","line":40,"updated":"2017-02-22 16:38:50.000000000","message":"since you set AlarmMapper.STATE_CHANGE_TIMESTAMP just a few lines before, no need to check again... right?","commit_id":"c004e216095489ebbc9b4e4697c4a08c8cd43ff2"},{"author":{"_account_id":19233,"name":"Elisha Rosensweig","email":"elisha@chorus.ai","username":"elisha.rosensweig"},"change_message_id":"d2a5e9d74a9fbcfcf622bda165907e7db837b69a","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                    json.loads(line.replace(\"\\\"\", \u0027\\\\\"\u0027).replace(\"\\\u0027\", \u0027\"\u0027))"},{"line_number":60,"context_line":"                # push active alarm"},{"line_number":61,"context_line":"                transformed_line \u003d {}"},{"line_number":62,"context_line":"                transformed_line[AlarmMapper.ALARM_TYPE] \u003d jline[\u0027alertType\u0027]"},{"line_number":63,"context_line":"                transformed_line[AlarmMapper.STATE] \u003d AlarmMapper.ACTIVE"},{"line_number":64,"context_line":"                transformed_line[AlarmMapper.RESOURCE_TYPE] \u003d \\"},{"line_number":65,"context_line":"                    jline[\u0027resourceType\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"da36d5c6_3dd77024","line":62,"updated":"2017-02-22 16:38:50.000000000","message":"in many lines here below you use strings instead of ENUMS (VertexProperties?)","commit_id":"c004e216095489ebbc9b4e4697c4a08c8cd43ff2"}],"vitrage/correlation_engine/correlation_collection.py":[{"author":{"_account_id":19233,"name":"Elisha Rosensweig","email":"elisha@chorus.ai","username":"elisha.rosensweig"},"change_message_id":"d2a5e9d74a9fbcfcf622bda165907e7db837b69a","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.correlation_list \u003d []"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def set(self, alarm_id_left, alarm_id_right,"},{"line_number":37,"context_line":"            # left_resource_id, left_resource_type, left_alarm_type,"},{"line_number":38,"context_line":"            # right_resource_id, right_resource_type, right_alarm_type,"},{"line_number":39,"context_line":"            delta_offset, correlation_score):"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da36d5c6_dd773438","line":37,"updated":"2017-02-22 16:38:50.000000000","message":"remove comment","commit_id":"c004e216095489ebbc9b4e4697c4a08c8cd43ff2"},{"author":{"_account_id":19233,"name":"Elisha Rosensweig","email":"elisha@chorus.ai","username":"elisha.rosensweig"},"change_message_id":"d2a5e9d74a9fbcfcf622bda165907e7db837b69a","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            delta_offset, correlation_score):"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        (left_resource_id, left_resource_type, left_alarm_type) \u003d \\"},{"line_number":42,"context_line":"            min(alarm_id_left, alarm_id_right)"},{"line_number":43,"context_line":"        (right_resource_id, right_resource_type, right_alarm_type) \u003d \\"},{"line_number":44,"context_line":"            max(alarm_id_left, alarm_id_right)"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da36d5c6_9dcbfc52","line":42,"updated":"2017-02-22 16:38:50.000000000","message":"what does min on the id do? perhaps a comment?","commit_id":"c004e216095489ebbc9b4e4697c4a08c8cd43ff2"},{"author":{"_account_id":19233,"name":"Elisha Rosensweig","email":"elisha@chorus.ai","username":"elisha.rosensweig"},"change_message_id":"d2a5e9d74a9fbcfcf622bda165907e7db837b69a","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        (right_resource_id, right_resource_type, right_alarm_type) \u003d \\"},{"line_number":44,"context_line":"            max(alarm_id_left, alarm_id_right)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        self.correlation_list.append((left_resource_id,"},{"line_number":47,"context_line":"                                      left_resource_type,"},{"line_number":48,"context_line":"                                      left_alarm_type,"},{"line_number":49,"context_line":"                                      right_resource_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da36d5c6_5de8a4b4","line":46,"updated":"2017-02-22 16:38:50.000000000","message":"use the namedtuple here as well","commit_id":"c004e216095489ebbc9b4e4697c4a08c8cd43ff2"},{"author":{"_account_id":19233,"name":"Elisha Rosensweig","email":"elisha@chorus.ai","username":"elisha.rosensweig"},"change_message_id":"d2a5e9d74a9fbcfcf622bda165907e7db837b69a","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                               left_alarm_type, right_resource_id,"},{"line_number":60,"context_line":"                               right_resource_type, right_alarm_type,"},{"line_number":61,"context_line":"                               correlation_score in group]))"},{"line_number":62,"context_line":"                for key, group in groupby(alarms, key\u003ditemgetter(1, 2, 4, 5))]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @staticmethod"},{"line_number":65,"context_line":"    def get_aggregated_per_score(alarms):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da36d5c6_1d054c79","line":62,"updated":"2017-02-22 16:38:50.000000000","message":"here as well the namedtuple could help make it clearer and not need to use indices (1,2,4,5)","commit_id":"c004e216095489ebbc9b4e4697c4a08c8cd43ff2"},{"author":{"_account_id":19233,"name":"Elisha Rosensweig","email":"elisha@chorus.ai","username":"elisha.rosensweig"},"change_message_id":"d2a5e9d74a9fbcfcf622bda165907e7db837b69a","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        return [(key, [x for x, y in group]) for"},{"line_number":67,"context_line":"                key, group in groupby(sorted(alarms, key\u003ditemgetter(1)),"},{"line_number":68,"context_line":"                                      key\u003dlambda x: \"HIGH\" if"},{"line_number":69,"context_line":"                                      x[1] \u003e 0.9 else \"MEDIUM\" if"},{"line_number":70,"context_line":"                                      x[1] \u003e 0.1 else \"LOW\")]"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def get_sorted(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da36d5c6_1d2c6c01","line":69,"updated":"2017-02-22 16:38:50.000000000","message":"parameters (0.9, 0.1) should be configurable, not constants","commit_id":"c004e216095489ebbc9b4e4697c4a08c8cd43ff2"},{"author":{"_account_id":19233,"name":"Elisha Rosensweig","email":"elisha@chorus.ai","username":"elisha.rosensweig"},"change_message_id":"d2a5e9d74a9fbcfcf622bda165907e7db837b69a","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                -1 if x[CorrelationCollection.index_right_resource_id] \u003c\\"},{"line_number":99,"context_line":"                y[CorrelationCollection.index_right_resource_id] else 0"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        return map(lambda x: x[:6] + x[-1:],"},{"line_number":102,"context_line":"                   sorted(self.correlation_list,"},{"line_number":103,"context_line":"                          cmp\u003dcompare_and_prioritize_zero_deltas))"}],"source_content_type":"text/x-python","patch_set":3,"id":"da36d5c6_fdf8784b","line":101,"updated":"2017-02-22 16:38:50.000000000","message":"what do these indices mean? comment or clarify code","commit_id":"c004e216095489ebbc9b4e4697c4a08c8cd43ff2"}],"vitrage/correlation_engine/correlation_manager.py":[{"author":{"_account_id":19134,"name":"Eyal","email":"eyalb1@gmail.com","username":"eyalb"},"change_message_id":"343355c395020d3c652dc1846505d733e9c28201","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        return correlation_table.get_map()"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"if __name__ \u003d\u003d \"__main__\":"},{"line_number":89,"context_line":"    # out_correlation out_itersection out_activity"},{"line_number":90,"context_line":"    input \u003d sys.argv[1]"},{"line_number":91,"context_line":"    base_output_folder \u003d sys.argv[2]"},{"line_number":92,"context_line":"    if len(sys.argv) \u003d\u003d 4:"},{"line_number":93,"context_line":"        correlation_threshold \u003d float(sys.argv[3])"},{"line_number":94,"context_line":"    else:"},{"line_number":95,"context_line":"        correlation_threshold \u003d 0"},{"line_number":96,"context_line":"    transformer \u003d AlarmsFileTransformer(input)"},{"line_number":97,"context_line":"    alarms \u003d transformer.get_alarms()"},{"line_number":98,"context_line":"    alarm_manager \u003d CorrelationManager()"},{"line_number":99,"context_line":"    for alarm in alarms:"},{"line_number":100,"context_line":"        alarm_manager.process_alarm(alarm)"},{"line_number":101,"context_line":"    now \u003d int(time.time())"},{"line_number":102,"context_line":"    report \u003d alarm_manager.generate_report()"},{"line_number":103,"context_line":"    with open(\"{}/{}_out_activity\".format(base_output_folder, now), \u0027w\u0027) as f:"},{"line_number":104,"context_line":"        f.write(\"resource_id, resource_type, alarm_type, activity_duration\\n\")"},{"line_number":105,"context_line":"        for alarm in alarm_manager.\\"},{"line_number":106,"context_line":"                accumulative_data.alarms_activity_durations.items():"},{"line_number":107,"context_line":"            f.write(str(map(str,"},{"line_number":108,"context_line":"                            alarm[0] + (alarm[1].total_seconds(), alarm[1])))"},{"line_number":109,"context_line":"                    [1:][:-1].replace(\"\u0027\", \"\")."},{"line_number":110,"context_line":"                    replace(\"[\", \"\").replace(\"]\", \"\")"},{"line_number":111,"context_line":"                    + \"\\n\")"},{"line_number":112,"context_line":"    with open(\"{}/{}_out_intersection\".format(base_output_folder, now), \u0027w\u0027) as f:"},{"line_number":113,"context_line":"        f.write(\"left_resource_id, left_resource_type, left_alarm_type,\""},{"line_number":114,"context_line":"                \"right_resource_id, right_resource_type, right_alarm_type,\""},{"line_number":115,"context_line":"                \"intersection_duration\\n\")"},{"line_number":116,"context_line":"        for alarm in alarm_manager.accumulative_data.\\"},{"line_number":117,"context_line":"                alarms_intersection_durations.alarms_intersections.items():"},{"line_number":118,"context_line":"            f.write(str(map(str,"},{"line_number":119,"context_line":"                            alarm[0] + (alarm[1].total_seconds(), alarm[1])))"},{"line_number":120,"context_line":"                    [1:][:-1].replace(\"\u0027\", \"\")."},{"line_number":121,"context_line":"                    replace(\"[\", \"\").replace(\"]\", \"\")"},{"line_number":122,"context_line":"                    + \"\\n\")"},{"line_number":123,"context_line":"    with open(\"{}/{}_out_correlation\".format(base_output_folder, now), \u0027w\u0027) as f:"},{"line_number":124,"context_line":"        f.write(\"left_resource_id, left_resource_type, left_alarm_type,\""},{"line_number":125,"context_line":"                \"right_resource_id, right_resource_type, right_alarm_type,\""},{"line_number":126,"context_line":"                \"jaccard_correlation_score\\n\")"},{"line_number":127,"context_line":"        for alarm_correlation in report.items():"},{"line_number":128,"context_line":"            if correlation_threshold \u003c\u003d alarm_correlation[1]:"},{"line_number":129,"context_line":"                f.write(str(map(str, alarm_correlation[0][0]"},{"line_number":130,"context_line":"                                + alarm_correlation[0][1]"},{"line_number":131,"context_line":"                                + (alarm_correlation[1], )))"},{"line_number":132,"context_line":"                        [1:][:-1].replace(\"\u0027\", \"\")."},{"line_number":133,"context_line":"                        replace(\"[\", \"\").replace(\"]\", \"\")"},{"line_number":134,"context_line":"                        + \"\\n\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_6dad3288","line":134,"range":{"start_line":89,"start_character":4,"end_line":134,"end_character":31},"updated":"2016-12-29 13:22:57.000000000","message":"extract method","commit_id":"338fa3bb737d42ab8bcb4bd7b87958dfa308c36b"},{"author":{"_account_id":19233,"name":"Elisha Rosensweig","email":"elisha@chorus.ai","username":"elisha.rosensweig"},"change_message_id":"d2a5e9d74a9fbcfcf622bda165907e7db837b69a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        if not intersection \\"},{"line_number":39,"context_line":"                or not alarm_left_activity or not alarm_right_activity:"},{"line_number":40,"context_line":"            return 0"},{"line_number":41,"context_line":"        return intersection.total_seconds() / \\"},{"line_number":42,"context_line":"            (alarm_left_activity + alarm_right_activity -"},{"line_number":43,"context_line":"                intersection).total_seconds()"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da36d5c6_3803fe0e","line":41,"updated":"2017-02-22 16:38:50.000000000","message":"refactor this computation step (perhaps before the return step?) so its clearer whats happening","commit_id":"c004e216095489ebbc9b4e4697c4a08c8cd43ff2"},{"author":{"_account_id":19233,"name":"Elisha Rosensweig","email":"elisha@chorus.ai","username":"elisha.rosensweig"},"change_message_id":"d2a5e9d74a9fbcfcf622bda165907e7db837b69a","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        with open(\"{}/{}\".format(base_output_folder, output_path),"},{"line_number":98,"context_line":"                  \u0027w\u0027) as f:"},{"line_number":99,"context_line":"            for correlation_level, correlation_bar \\"},{"line_number":100,"context_line":"                    in [(\"HIGH\", \" (\u003e 0.9)\"),"},{"line_number":101,"context_line":"                        (\"MEDIUM\", \" (\u003e 0.1)\"),"},{"line_number":102,"context_line":"                        (\"LOW\", \"\")]:"},{"line_number":103,"context_line":"                if correlation_level in alarms:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da36d5c6_7d71e8df","line":100,"updated":"2017-02-22 16:38:50.000000000","message":"the threshold should not be hard-coded. commented also elsewhere about the parameter","commit_id":"c004e216095489ebbc9b4e4697c4a08c8cd43ff2"}],"vitrage/correlation_engine/intersection_collection.py":[{"author":{"_account_id":19233,"name":"Elisha Rosensweig","email":"elisha@chorus.ai","username":"elisha.rosensweig"},"change_message_id":"d2a5e9d74a9fbcfcf622bda165907e7db837b69a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        return inactive_end_time - max(inactive_start_time,"},{"line_number":28,"context_line":"                                       active_alarm_start_time)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def get(self, left_resource_id, left_resource_type, left_alarm_type,"},{"line_number":31,"context_line":"            right_resource_id, right_resource_type, right_alarm_type):"},{"line_number":32,"context_line":"        key \u003d \\"},{"line_number":33,"context_line":"            frozenset([(left_resource_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da36d5c6_a4deed6a","line":30,"updated":"2017-02-22 16:38:50.000000000","message":"As commented in \"accumulative_data_manager.py\", change the signature to receive two 3-tuples, not six parameters.","commit_id":"c004e216095489ebbc9b4e4697c4a08c8cd43ff2"}],"vitrage/correlation_engine/utils/accumulation_persistor.py":[{"author":{"_account_id":19233,"name":"Elisha Rosensweig","email":"elisha@chorus.ai","username":"elisha.rosensweig"},"change_message_id":"d2a5e9d74a9fbcfcf622bda165907e7db837b69a","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class AccumulationPersistor(object):"},{"line_number":21,"context_line":"    ACTIVITY_DEFAULT_PATH \u003d \"/tmp/alarms_activity_durations_file\""},{"line_number":22,"context_line":"    INTERSECTIONS_DEFAULT_PATH \u003d \"/tmp/alarms_intersections_file\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def __init__(self,"},{"line_number":25,"context_line":"                 alarms_activity_durations_file_path\u003dACTIVITY_DEFAULT_PATH,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da36d5c6_4a937d4f","line":22,"updated":"2017-02-22 16:38:50.000000000","message":"rename files - don\u0027t end with \"_file\", end with \".txt\" or equivalent.","commit_id":"c004e216095489ebbc9b4e4697c4a08c8cd43ff2"},{"author":{"_account_id":19233,"name":"Elisha Rosensweig","email":"elisha@chorus.ai","username":"elisha.rosensweig"},"change_message_id":"d2a5e9d74a9fbcfcf622bda165907e7db837b69a","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            return ({}, {})"},{"line_number":35,"context_line":"        with open(self.alarms_activity_durations_file_path, \u0027r\u0027) as \\"},{"line_number":36,"context_line":"                alarms_activity_durations_file:"},{"line_number":37,"context_line":"            alarms_activity_durations \u003d \\"},{"line_number":38,"context_line":"                dict(map(lambda x: ("},{"line_number":39,"context_line":"                    tuple(map(lambda y: y.replace(\"u\u0027\", \"\").replace(\"\u0027\", \"\"),"},{"line_number":40,"context_line":"                              tuple(str(x[0])[1:-1].split(\u0027,\u0027)))),"}],"source_content_type":"text/x-python","patch_set":3,"id":"da36d5c6_8a71f5e2","line":37,"updated":"2017-02-22 16:38:50.000000000","message":"add a comment explaining what is happening in this line","commit_id":"c004e216095489ebbc9b4e4697c4a08c8cd43ff2"},{"author":{"_account_id":19233,"name":"Elisha Rosensweig","email":"elisha@chorus.ai","username":"elisha.rosensweig"},"change_message_id":"d2a5e9d74a9fbcfcf622bda165907e7db837b69a","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                        x[0][1:-1].split(\u0027), (\u0027))),"},{"line_number":51,"context_line":"                    datetime.timedelta(seconds\u003dint(x[1]))),"},{"line_number":52,"context_line":"                    json.load(alarms_intersections_file).items()))"},{"line_number":53,"context_line":"        return (alarms_activity_durations,"},{"line_number":54,"context_line":"                alarms_intersections)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def save_accumulated_data(self, alarms_activity_durations,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da36d5c6_6a3cc1e2","line":53,"updated":"2017-02-22 16:38:50.000000000","message":"place this return statement in a SINGLE line","commit_id":"c004e216095489ebbc9b4e4697c4a08c8cd43ff2"}]}
