)]}'
{"watcher/api/controllers/v1/service.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"3a3a1d5d74f3d267c0071fed7f8d926ac2a3028f","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    between the internal object model and the API representation of a service."},{"line_number":51,"context_line":"    \"\"\""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    _status \u003d \u0027FAILED\u0027"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def _get_status(self):"},{"line_number":56,"context_line":"        return self._status"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a8bc5a2_de2bfc92","line":53,"range":{"start_line":53,"start_character":14,"end_line":53,"end_character":22},"updated":"2016-09-23 09:35:47.000000000","message":"can you make an Enum that would regroup all the possible service states? It would nbe similar to the audit states handling in https://github.com/openstack/watcher/blob/master/watcher/objects/audit.py#L60-L67","commit_id":"37d3f31af63da95d60375480c3ed8aef74ecd2d4"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"d162c982429566b44c4ac88f8c0db996c6cd870f","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    between the internal object model and the API representation of a service."},{"line_number":51,"context_line":"    \"\"\""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    _status \u003d \u0027FAILED\u0027"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def _get_status(self):"},{"line_number":56,"context_line":"        return self._status"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a8bc5a2_a6d0de54","line":53,"range":{"start_line":53,"start_character":14,"end_line":53,"end_character":22},"in_reply_to":"5a8bc5a2_de2bfc92","updated":"2016-09-23 12:57:54.000000000","message":"Done","commit_id":"37d3f31af63da95d60375480c3ed8aef74ecd2d4"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"3a3a1d5d74f3d267c0071fed7f8d926ac2a3028f","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                      {\u0027name\u0027: service.get(\u0027name\u0027),"},{"line_number":77,"context_line":"                       \u0027host\u0027: service.get(\u0027host\u0027),"},{"line_number":78,"context_line":"                       \u0027lhb\u0027: str(last_heartbeat), \u0027el\u0027: str(elapsed)})"},{"line_number":79,"context_line":"            self._status \u003d \u0027FAILED\u0027"},{"line_number":80,"context_line":"        else:"},{"line_number":81,"context_line":"            self._status \u003d \u0027ACTIVE\u0027"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a8bc5a2_282ade7e","line":79,"range":{"start_line":79,"start_character":27,"end_line":79,"end_character":35},"updated":"2016-09-23 09:35:47.000000000","message":"ditto","commit_id":"37d3f31af63da95d60375480c3ed8aef74ecd2d4"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"d162c982429566b44c4ac88f8c0db996c6cd870f","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                      {\u0027name\u0027: service.get(\u0027name\u0027),"},{"line_number":77,"context_line":"                       \u0027host\u0027: service.get(\u0027host\u0027),"},{"line_number":78,"context_line":"                       \u0027lhb\u0027: str(last_heartbeat), \u0027el\u0027: str(elapsed)})"},{"line_number":79,"context_line":"            self._status \u003d \u0027FAILED\u0027"},{"line_number":80,"context_line":"        else:"},{"line_number":81,"context_line":"            self._status \u003d \u0027ACTIVE\u0027"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a8bc5a2_c6d32a5e","line":79,"range":{"start_line":79,"start_character":27,"end_line":79,"end_character":35},"in_reply_to":"5a8bc5a2_282ade7e","updated":"2016-09-23 12:57:54.000000000","message":"Done","commit_id":"37d3f31af63da95d60375480c3ed8aef74ecd2d4"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"3a3a1d5d74f3d267c0071fed7f8d926ac2a3028f","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                       \u0027lhb\u0027: str(last_heartbeat), \u0027el\u0027: str(elapsed)})"},{"line_number":79,"context_line":"            self._status \u003d \u0027FAILED\u0027"},{"line_number":80,"context_line":"        else:"},{"line_number":81,"context_line":"            self._status \u003d \u0027ACTIVE\u0027"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    id \u003d wsme.wsattr(int, readonly\u003dTrue)"},{"line_number":84,"context_line":"    \"\"\"ID for this service.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a8bc5a2_6824e6ae","line":81,"range":{"start_line":81,"start_character":27,"end_line":81,"end_character":35},"updated":"2016-09-23 09:35:47.000000000","message":"ditto","commit_id":"37d3f31af63da95d60375480c3ed8aef74ecd2d4"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"d162c982429566b44c4ac88f8c0db996c6cd870f","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                       \u0027lhb\u0027: str(last_heartbeat), \u0027el\u0027: str(elapsed)})"},{"line_number":79,"context_line":"            self._status \u003d \u0027FAILED\u0027"},{"line_number":80,"context_line":"        else:"},{"line_number":81,"context_line":"            self._status \u003d \u0027ACTIVE\u0027"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    id \u003d wsme.wsattr(int, readonly\u003dTrue)"},{"line_number":84,"context_line":"    \"\"\"ID for this service.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a8bc5a2_e6cae6a0","line":81,"range":{"start_line":81,"start_character":27,"end_line":81,"end_character":35},"in_reply_to":"5a8bc5a2_6824e6ae","updated":"2016-09-23 12:57:54.000000000","message":"Done","commit_id":"37d3f31af63da95d60375480c3ed8aef74ecd2d4"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"3a3a1d5d74f3d267c0071fed7f8d926ac2a3028f","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        super(Service, self).__init__()"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        self.fields \u003d []"},{"line_number":104,"context_line":"        self.fields.append(\u0027id\u0027)"},{"line_number":105,"context_line":"        self.fields.append(\u0027name\u0027)"},{"line_number":106,"context_line":"        self.fields.append(\u0027host\u0027)"},{"line_number":107,"context_line":"        self.fields.append(\u0027last_seen_up\u0027)"},{"line_number":108,"context_line":"        self.fields.append(\u0027status\u0027)"},{"line_number":109,"context_line":"        setattr(self, \u0027id\u0027, kwargs.get(\u0027id\u0027, wtypes.Unset))"},{"line_number":110,"context_line":"        setattr(self, \u0027name\u0027, kwargs.get(\u0027name\u0027, wtypes.Unset))"},{"line_number":111,"context_line":"        setattr(self, \u0027host\u0027, kwargs.get(\u0027host\u0027, wtypes.Unset))"},{"line_number":112,"context_line":"        setattr(self, \u0027last_seen_up\u0027, kwargs.get(\u0027last_seen_up\u0027, wtypes.Unset))"},{"line_number":113,"context_line":"        setattr(self, \u0027status\u0027, kwargs.get(\u0027name\u0027, wtypes.Unset))"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @staticmethod"},{"line_number":116,"context_line":"    def _convert_with_links(service, url, expand\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a8bc5a2_68cea6b5","line":113,"range":{"start_line":104,"start_character":0,"end_line":113,"end_character":65},"updated":"2016-09-23 09:35:47.000000000","message":"can you make a loop like:\n\nfields \u003d list(objects.Service.fields.keys())\nfor field in fields:\n    setattr(self, field, kwargs.get(field, wtypes.Unset))\n\nand then do the \u0027status\u0027 special case separately?","commit_id":"37d3f31af63da95d60375480c3ed8aef74ecd2d4"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"d162c982429566b44c4ac88f8c0db996c6cd870f","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        super(Service, self).__init__()"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        self.fields \u003d []"},{"line_number":104,"context_line":"        self.fields.append(\u0027id\u0027)"},{"line_number":105,"context_line":"        self.fields.append(\u0027name\u0027)"},{"line_number":106,"context_line":"        self.fields.append(\u0027host\u0027)"},{"line_number":107,"context_line":"        self.fields.append(\u0027last_seen_up\u0027)"},{"line_number":108,"context_line":"        self.fields.append(\u0027status\u0027)"},{"line_number":109,"context_line":"        setattr(self, \u0027id\u0027, kwargs.get(\u0027id\u0027, wtypes.Unset))"},{"line_number":110,"context_line":"        setattr(self, \u0027name\u0027, kwargs.get(\u0027name\u0027, wtypes.Unset))"},{"line_number":111,"context_line":"        setattr(self, \u0027host\u0027, kwargs.get(\u0027host\u0027, wtypes.Unset))"},{"line_number":112,"context_line":"        setattr(self, \u0027last_seen_up\u0027, kwargs.get(\u0027last_seen_up\u0027, wtypes.Unset))"},{"line_number":113,"context_line":"        setattr(self, \u0027status\u0027, kwargs.get(\u0027name\u0027, wtypes.Unset))"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @staticmethod"},{"line_number":116,"context_line":"    def _convert_with_links(service, url, expand\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a8bc5a2_463b9a38","line":113,"range":{"start_line":104,"start_character":0,"end_line":113,"end_character":65},"in_reply_to":"5a8bc5a2_68cea6b5","updated":"2016-09-23 12:57:54.000000000","message":"Done","commit_id":"37d3f31af63da95d60375480c3ed8aef74ecd2d4"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"827a68e0ef126b4c8ffd3c3a3b01fdedafb169db","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        elapsed \u003d timeutils.delta_seconds(last_heartbeat, timeutils.utcnow())"},{"line_number":72,"context_line":"        is_up \u003d abs(elapsed) \u003c\u003d CONF.service_down_time"},{"line_number":73,"context_line":"        if not is_up:"},{"line_number":74,"context_line":"            LOG.debug(\u0027Seems service %(name)s on host %(host)s is down. \u0027"},{"line_number":75,"context_line":"                      \u0027Last heartbeat was %(lhb)s. Elapsed time is %(el)s\u0027,"},{"line_number":76,"context_line":"                      {\u0027name\u0027: service.name,"},{"line_number":77,"context_line":"                       \u0027host\u0027: service.host,"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a95cdbc_b602b56d","line":74,"range":{"start_line":74,"start_character":16,"end_line":74,"end_character":21},"updated":"2016-10-06 12:51:12.000000000","message":"it should be, at least, a warning log","commit_id":"4fbfcfdace1025d91dc4d88f71871a69288a26de"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"9187b23d141ed8cfeb17a1ed381496fd47669112","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        elapsed \u003d timeutils.delta_seconds(last_heartbeat, timeutils.utcnow())"},{"line_number":72,"context_line":"        is_up \u003d abs(elapsed) \u003c\u003d CONF.service_down_time"},{"line_number":73,"context_line":"        if not is_up:"},{"line_number":74,"context_line":"            LOG.debug(\u0027Seems service %(name)s on host %(host)s is down. \u0027"},{"line_number":75,"context_line":"                      \u0027Last heartbeat was %(lhb)s. Elapsed time is %(el)s\u0027,"},{"line_number":76,"context_line":"                      {\u0027name\u0027: service.name,"},{"line_number":77,"context_line":"                       \u0027host\u0027: service.host,"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_456e5bca","line":74,"range":{"start_line":74,"start_character":16,"end_line":74,"end_character":21},"in_reply_to":"1a95cdbc_b602b56d","updated":"2016-10-11 10:06:21.000000000","message":"Done","commit_id":"4fbfcfdace1025d91dc4d88f71871a69288a26de"}],"watcher/api/controllers/v1/utils.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"3a3a1d5d74f3d267c0071fed7f8d926ac2a3028f","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    return filters_dict"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"def get_resource(resource, resource_ident):"},{"line_number":84,"context_line":"    \"\"\"Get the resource from the uuid, id or logical name."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    :param resource: the resource type."}],"source_content_type":"text/x-python","patch_set":3,"id":"5a8bc5a2_019c25bf","line":83,"range":{"start_line":83,"start_character":27,"end_line":83,"end_character":41},"updated":"2016-09-23 09:35:47.000000000","message":"s/resource_ident/resource_id","commit_id":"37d3f31af63da95d60375480c3ed8aef74ecd2d4"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"d162c982429566b44c4ac88f8c0db996c6cd870f","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    return filters_dict"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"def get_resource(resource, resource_ident):"},{"line_number":84,"context_line":"    \"\"\"Get the resource from the uuid, id or logical name."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    :param resource: the resource type."}],"source_content_type":"text/x-python","patch_set":3,"id":"5a8bc5a2_c6988a1e","line":83,"range":{"start_line":83,"start_character":27,"end_line":83,"end_character":41},"in_reply_to":"5a8bc5a2_019c25bf","updated":"2016-09-23 12:57:54.000000000","message":"Done","commit_id":"37d3f31af63da95d60375480c3ed8aef74ecd2d4"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"3a3a1d5d74f3d267c0071fed7f8d926ac2a3028f","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    \"\"\""},{"line_number":91,"context_line":"    resource \u003d getattr(objects, resource)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    if resource_ident.isdigit():"},{"line_number":94,"context_line":"        resource_ident \u003d int(resource_ident)"},{"line_number":95,"context_line":"        return resource.get(pecan.request.context, resource_ident)"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a8bc5a2_41f46df1","line":93,"range":{"start_line":93,"start_character":7,"end_line":93,"end_character":31},"updated":"2016-09-23 09:35:47.000000000","message":"To keep it consistent with the rest of the code I would reuse the is_int_like function (see https://github.com/openstack/watcher/blob/master/watcher/common/utils.py) like::\n\nfrom watcher.common import utils\n\n[...] \nif is_int_like(resource_id):\n    # Do stuff","commit_id":"37d3f31af63da95d60375480c3ed8aef74ecd2d4"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"d162c982429566b44c4ac88f8c0db996c6cd870f","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    \"\"\""},{"line_number":91,"context_line":"    resource \u003d getattr(objects, resource)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    if resource_ident.isdigit():"},{"line_number":94,"context_line":"        resource_ident \u003d int(resource_ident)"},{"line_number":95,"context_line":"        return resource.get(pecan.request.context, resource_ident)"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a8bc5a2_e69f4601","line":93,"range":{"start_line":93,"start_character":7,"end_line":93,"end_character":31},"in_reply_to":"5a8bc5a2_41f46df1","updated":"2016-09-23 12:57:54.000000000","message":"Done","commit_id":"37d3f31af63da95d60375480c3ed8aef74ecd2d4"}],"watcher/applier/manager.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"491100807fb2b7054ade48759a5a27859247dd2c","unresolved":false,"context_lines":[{"line_number":60,"context_line":"CONF.register_opts(APPLIER_MANAGER_OPTS, opt_group)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"class ApplierManager(object):"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    API_VERSION \u003d \u00271.0\u0027"},{"line_number":66,"context_line":"    SERVICE_NAME \u003d \u0027watcher-applier\u0027"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    conductor_endpoints \u003d [trigger.TriggerActionPlan]"},{"line_number":69,"context_line":"    status_endpoints \u003d []"},{"line_number":70,"context_line":"    notification_endpoints \u003d []"},{"line_number":71,"context_line":"    notification_topics \u003d []"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def __init__(self):"},{"line_number":74,"context_line":"        self.publisher_id \u003d CONF.watcher_applier.publisher_id"},{"line_number":75,"context_line":"        self.conductor_topic \u003d CONF.watcher_applier.conductor_topic"},{"line_number":76,"context_line":"        self.status_topic \u003d CONF.watcher_applier.status_topic"},{"line_number":77,"context_line":"        self.api_version \u003d self.API_VERSION"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_c6508a0d","line":77,"range":{"start_line":63,"start_character":0,"end_line":77,"end_character":43},"updated":"2016-09-23 10:13:48.000000000","message":"Service managers have way to many attributes now.\n\nIMHO, we should build some BaseManager (in watcher/common/service.py ?) abstract class that would make sure that all the variables we expect are being set.\n\nThat would also avoid the ugly \"if\" statement I see in https://review.openstack.org/#/c/371632/4/watcher/common/service.py@204","commit_id":"98278a1e584ad49e1ad6d32ce3140bf59bee2955"}],"watcher/common/service.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"ef53fda109ce4a39148ee45afd30602d7021ca4c","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            self.notification_handler \u003d self.build_notification_handler("},{"line_number":202,"context_line":"                self.notification_topics, self.notification_endpoints"},{"line_number":203,"context_line":"            )"},{"line_number":204,"context_line":"        if hasattr(self.manager, \u0027service_name\u0027):"},{"line_number":205,"context_line":"            self.heartbeat \u003d ServiceHeartbeat("},{"line_number":206,"context_line":"                service_name\u003dself.manager.service_name)"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a8bc5a2_bfde9cda","line":204,"range":{"start_line":204,"start_character":0,"end_line":204,"end_character":49},"updated":"2016-09-27 07:32:27.000000000","message":"You can now rewrite this as below since we now can tell for sure that the service_name property will exist:\n\nself.service_name \u003d self.manager.service_name\nif self.service_name:\n    [...]","commit_id":"3ba9130661770fa4c8eaf3d749084f4b8fbcf9dc"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"60158a7508baa5ef4e660db92383c0a3afd36736","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            self.notification_handler \u003d self.build_notification_handler("},{"line_number":202,"context_line":"                self.notification_topics, self.notification_endpoints"},{"line_number":203,"context_line":"            )"},{"line_number":204,"context_line":"        if hasattr(self.manager, \u0027service_name\u0027):"},{"line_number":205,"context_line":"            self.heartbeat \u003d ServiceHeartbeat("},{"line_number":206,"context_line":"                service_name\u003dself.manager.service_name)"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a8bc5a2_b0b32b97","line":204,"range":{"start_line":204,"start_character":0,"end_line":204,"end_character":49},"in_reply_to":"5a8bc5a2_bfde9cda","updated":"2016-09-27 09:19:45.000000000","message":"Done","commit_id":"3ba9130661770fa4c8eaf3d749084f4b8fbcf9dc"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"4ae43779a2b3f8082f454e184c10aa45d32b4e01","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def __init__(self, gconfig\u003dNone, service_name\u003dNone, **kwargs):"},{"line_number":114,"context_line":"        gconfig \u003d None or {}"},{"line_number":115,"context_line":"        self.service_name \u003d service_name"},{"line_number":116,"context_line":"        self.context \u003d context.make_context()"},{"line_number":117,"context_line":"        super(ServiceHeartbeat, self).__init__(gconfig, **kwargs)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def send_beat(self):"},{"line_number":120,"context_line":"        host \u003d CONF.host"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a98d1f4_8a5e5e74","line":117,"range":{"start_line":115,"start_character":7,"end_line":117,"end_character":65},"updated":"2016-09-30 09:46:57.000000000","message":"I think that super should be the first running code.\nlike looks below:\nsuper(ServiceHeartbeat, self).__init__(gconfig, **kwargs)\nself.service_name \u003d service_name\nself.context \u003d context.make_context()","commit_id":"ace921d4b2eecff31aaa408d13be1c5449536d06"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"85028ee7465e844797d4c2734e0c70bf229e8534","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def __init__(self, gconfig\u003dNone, service_name\u003dNone, **kwargs):"},{"line_number":114,"context_line":"        gconfig \u003d None or {}"},{"line_number":115,"context_line":"        self.service_name \u003d service_name"},{"line_number":116,"context_line":"        self.context \u003d context.make_context()"},{"line_number":117,"context_line":"        super(ServiceHeartbeat, self).__init__(gconfig, **kwargs)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def send_beat(self):"},{"line_number":120,"context_line":"        host \u003d CONF.host"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a98d1f4_c5abf7d4","line":117,"range":{"start_line":115,"start_character":7,"end_line":117,"end_character":65},"in_reply_to":"3a98d1f4_8a5e5e74","updated":"2016-09-30 09:50:36.000000000","message":"In this case it is not very important, but ok, I agree with you","commit_id":"ace921d4b2eecff31aaa408d13be1c5449536d06"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"58cf5af07a5655edb8410b3497392cbf58fc782b","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        self.context \u003d context.make_context()"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def send_beat(self):"},{"line_number":120,"context_line":"        host \u003d CONF.host"},{"line_number":121,"context_line":"        watcher_list \u003d service_object.Service.list("},{"line_number":122,"context_line":"            self.context, filters\u003d{\u0027name\u0027: self.service_name,"},{"line_number":123,"context_line":"                                   \u0027host\u0027: socket.gethostname()})"},{"line_number":124,"context_line":"        if watcher_list:"},{"line_number":125,"context_line":"            watcher_service \u003d watcher_list[0]"},{"line_number":126,"context_line":"            watcher_service.last_seen_up \u003d datetime.datetime.utcnow()"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a95cdbc_74c14ae4","line":123,"range":{"start_line":120,"start_character":8,"end_line":123,"end_character":65},"updated":"2016-10-05 09:06:33.000000000","message":"host \u003d CONF.host or \nhost \u003d socket.gethostname() ? it could be not the same value.","commit_id":"32eac6c2f5fa409f1f9bb75ab111fa8018e150e8"}],"watcher/common/service_manager.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"ef53fda109ce4a39148ee45afd30602d7021ca4c","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    def notification_endpoints(self):"},{"line_number":56,"context_line":"        raise NotImplementedError()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @abc.abstractproperty"},{"line_number":59,"context_line":"    def collector_manager(self):"},{"line_number":60,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a8bc5a2_9fe9e0b9","line":60,"range":{"start_line":58,"start_character":0,"end_line":60,"end_character":35},"updated":"2016-09-27 07:32:27.000000000","message":"This one is not really expected by the Service class as it is only used to fill the notification_endpoints property in https://review.openstack.org/#/c/371632/4..7/watcher/decision_engine/manager.py@118","commit_id":"3ba9130661770fa4c8eaf3d749084f4b8fbcf9dc"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"60158a7508baa5ef4e660db92383c0a3afd36736","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    def notification_endpoints(self):"},{"line_number":56,"context_line":"        raise NotImplementedError()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @abc.abstractproperty"},{"line_number":59,"context_line":"    def collector_manager(self):"},{"line_number":60,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a8bc5a2_50c2e7e9","line":60,"range":{"start_line":58,"start_character":0,"end_line":60,"end_character":35},"in_reply_to":"5a8bc5a2_9fe9e0b9","updated":"2016-09-27 09:19:45.000000000","message":"Done","commit_id":"3ba9130661770fa4c8eaf3d749084f4b8fbcf9dc"}],"watcher/objects/service.py":[{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"2627c3ce348e45cb3e58baee27ea12a3349b00a7","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        \u0027last_seen_up\u0027: obj_utils.datetime_or_str_or_none"},{"line_number":38,"context_line":"    }"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    _attr_last_seen_up_to_primitive \u003d obj_utils.dt_serializer(\u0027last_seen_up\u0027)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @staticmethod"},{"line_number":43,"context_line":"    def _from_db_object(service, db_service):"}],"source_content_type":"text/x-python","patch_set":20,"id":"1a95cdbc_5a00bdaa","line":40,"range":{"start_line":40,"start_character":0,"end_line":40,"end_character":77},"updated":"2016-10-06 09:56:03.000000000","message":"if I not remove this line, I have this error\n\n2016-10-06 11:50:24.762 TRACE apscheduler.executors.default DBError: (pymysql.err.InternalError) (1292, u\"Incorrect datetime value: \u00272016-10-06T09:50:24Z\u0027 for column \u0027last_seen_up\u0027 at row 1\") [SQL: u\u0027UPDATE services SET updated_at\u003d%(updated_at)s, last_seen_up\u003d%(last_seen_up)s WHERE services.id \u003d %(services_id)s\u0027] [parameters: {\u0027last_seen_up\u0027: \u00272016-10-06T09:50:24Z\u0027, \u0027services_id\u0027: 11416, \u0027updated_at\u0027: datetime.datetime(2016, 10, 6, 9, 50, 24, 753627)}]","commit_id":"d170b0ab4ed250fecca3bf5c2257eff46fa59f3a"}],"watcher/objects/utils.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"491100807fb2b7054ade48759a5a27859247dd2c","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def datetime_or_none(dt):"},{"line_number":29,"context_line":"    \"\"\"Validate a datetime or None value.\"\"\""},{"line_number":30,"context_line":"    #print dt"},{"line_number":31,"context_line":"    if dt is None:"},{"line_number":32,"context_line":"        return None"},{"line_number":33,"context_line":"    elif isinstance(dt, datetime.datetime):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_237840c4","line":30,"range":{"start_line":30,"start_character":4,"end_line":30,"end_character":13},"updated":"2016-09-23 10:13:48.000000000","message":"nit: can you remove this?","commit_id":"98278a1e584ad49e1ad6d32ce3140bf59bee2955"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"0589b48b8eeee6632901f33e779fc84a5dd7d785","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def datetime_or_none(dt):"},{"line_number":29,"context_line":"    \"\"\"Validate a datetime or None value.\"\"\""},{"line_number":30,"context_line":"    #print dt"},{"line_number":31,"context_line":"    if dt is None:"},{"line_number":32,"context_line":"        return None"},{"line_number":33,"context_line":"    elif isinstance(dt, datetime.datetime):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_86a68251","line":30,"range":{"start_line":30,"start_character":4,"end_line":30,"end_character":13},"in_reply_to":"5a8bc5a2_237840c4","updated":"2016-09-23 12:57:59.000000000","message":"Done","commit_id":"98278a1e584ad49e1ad6d32ce3140bf59bee2955"}]}
