)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"95591ddb03ba52e12dea83cdaca3485ac7d49e88","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Tong Li \u003clitong01@us.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-06-25 20:02:54 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Multiple dispatcher enablment"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Ceilometer does not allow multiple dispatchers to be configured."},{"line_number":10,"context_line":"With this implementation, a deployment can be configured to have"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAPn%2F%2FauY%3D","line":7,"updated":"2013-07-02 12:40:33.000000000","message":"enablement","commit_id":"18262ccb21e84333045a35804c4298ebbef006d1"}],"ceilometer/collector/dispatcher/database.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"5839bb08075d73b3d6ca91e8972c77df83df94b0","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    def record_metering_data(self, context, data):"},{"line_number":45,"context_line":"        # We may have receive only one counter on the wire"},{"line_number":46,"context_line":"        if not isinstance(data, list):"},{"line_number":47,"context_line":"            data \u003d [data]"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        for meter in data:"},{"line_number":50,"context_line":"            LOG.info(\u0027metering data %s for %s @ %s: %s\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAP3%2F%2FkJ8%3D","line":47,"updated":"2013-07-16 14:48:13.000000000","message":"Safer as:\n\n  if not isinstance(data, collections.Iterable)","commit_id":"4ab22bd6f0b5fc724e08e668a3ba82b96ed9130c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"65c656fccaa7dd1a901aa9a3c1c4385840e8fcae","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    def record_metering_data(self, context, data):"},{"line_number":45,"context_line":"        # We may have receive only one counter on the wire"},{"line_number":46,"context_line":"        if not isinstance(data, list):"},{"line_number":47,"context_line":"            data \u003d [data]"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        for meter in data:"},{"line_number":50,"context_line":"            LOG.info(\u0027metering data %s for %s @ %s: %s\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAP3%2F%2FkAM%3D","line":47,"in_reply_to":"AAAAP3%2F%2FkJ8%3D","updated":"2013-07-16 15:01:29.000000000","message":"Moved code so can be fixed later.","commit_id":"4ab22bd6f0b5fc724e08e668a3ba82b96ed9130c"}],"ceilometer/collector/dispatcher/file.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b7ec129c06f6eebc9ddd57d0c783e16224279978","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        # if the directory and path are configured, then log to the file"},{"line_number":63,"context_line":"        if self.conf.dispatcher_file.file_path:"},{"line_number":64,"context_line":"            logger_name \u003d \u0027dispather.file.\u0027 + uuidutils.generate_uuid()"},{"line_number":65,"context_line":"            dispatcher_logger \u003d logging.Logger(logger_name)"},{"line_number":66,"context_line":"            dispatcher_logger.setLevel(logging.INFO)"},{"line_number":67,"context_line":"            # Use rotating file handler only when max_bytes and backup_count"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fo%2BI%3D","line":64,"updated":"2013-07-15 14:30:34.000000000","message":"You don\u0027t really need to use an UUID here, since you\u0027re creating an object each time. And I think it just makes the thing less readable in case the logger name would be logged too.\n\nThere\u0027s a type in the name also.","commit_id":"5cf8bba6badbf945c23a299160287835dde0fb2e"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"7cfef260a9b65ecc6ea855e1df1279dd9d5c6d2e","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        # if the directory and path are configured, then log to the file"},{"line_number":63,"context_line":"        if self.conf.dispatcher_file.file_path:"},{"line_number":64,"context_line":"            logger_name \u003d \u0027dispather.file.\u0027 + uuidutils.generate_uuid()"},{"line_number":65,"context_line":"            dispatcher_logger \u003d logging.Logger(logger_name)"},{"line_number":66,"context_line":"            dispatcher_logger.setLevel(logging.INFO)"},{"line_number":67,"context_line":"            # Use rotating file handler only when max_bytes and backup_count"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fo14%3D","line":64,"in_reply_to":"AAAAP3%2F%2Fo%2BI%3D","updated":"2013-07-15 14:49:46.000000000","message":"Done","commit_id":"5cf8bba6badbf945c23a299160287835dde0fb2e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b7ec129c06f6eebc9ddd57d0c783e16224279978","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            if (self.conf.dispatcher_file.max_bytes and"},{"line_number":70,"context_line":"                    self.conf.dispatcher_file.backup_count):"},{"line_number":71,"context_line":"                # create RatatingFile handler which logs meters"},{"line_number":72,"context_line":"                rfh \u003d logging.handlers.RotatingFileHandler("},{"line_number":73,"context_line":"                    self.conf.dispatcher_file.file_path,"},{"line_number":74,"context_line":"                    maxBytes\u003dself.conf.dispatcher_file.max_bytes,"},{"line_number":75,"context_line":"                    backupCount\u003dself.conf.dispatcher_file.backup_count,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fo9Y%3D","line":72,"updated":"2013-07-15 14:30:34.000000000","message":"If I read the documentation of RotatingFileHandler correctly, you could always use it with max_bytes\u003d0 and backupCount\u003d0 (the default for these values) in order to have the behaviour of FileHandler. That would simplify the code, especially if you you set the CONF value for these to 0 rather than None.","commit_id":"5cf8bba6badbf945c23a299160287835dde0fb2e"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"7cfef260a9b65ecc6ea855e1df1279dd9d5c6d2e","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            if (self.conf.dispatcher_file.max_bytes and"},{"line_number":70,"context_line":"                    self.conf.dispatcher_file.backup_count):"},{"line_number":71,"context_line":"                # create RatatingFile handler which logs meters"},{"line_number":72,"context_line":"                rfh \u003d logging.handlers.RotatingFileHandler("},{"line_number":73,"context_line":"                    self.conf.dispatcher_file.file_path,"},{"line_number":74,"context_line":"                    maxBytes\u003dself.conf.dispatcher_file.max_bytes,"},{"line_number":75,"context_line":"                    backupCount\u003dself.conf.dispatcher_file.backup_count,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fo10%3D","line":72,"in_reply_to":"AAAAP3%2F%2Fo9Y%3D","updated":"2013-07-15 14:49:46.000000000","message":"will try that.","commit_id":"5cf8bba6badbf945c23a299160287835dde0fb2e"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"5839bb08075d73b3d6ca91e8972c77df83df94b0","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from ceilometer.collector import dispatcher"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"file_dispatcher_opts \u003d ["},{"line_number":25,"context_line":"    cfg.StrOpt(\u0027file-path\u0027,"},{"line_number":26,"context_line":"               default\u003dNone,"},{"line_number":27,"context_line":"               help\u003d\u0027Name and the location of the file to record \u0027"},{"line_number":28,"context_line":"                    \u0027meters.\u0027),"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAP3%2F%2FkJY%3D","line":25,"updated":"2013-07-16 14:48:13.000000000","message":"s/-/_/g\n\n(we tend to use underscores in config option names, with the exception of those inherited from common)","commit_id":"4ab22bd6f0b5fc724e08e668a3ba82b96ed9130c"}],"ceilometer/collector/service.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"95591ddb03ba52e12dea83cdaca3485ac7d49e88","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import msgpack"},{"line_number":21,"context_line":"import socket"},{"line_number":22,"context_line":"from stevedore import extension"},{"line_number":23,"context_line":"from stevedore.named import NamedExtensionManager"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from ceilometer.service import prepare_service"},{"line_number":26,"context_line":"from ceilometer.openstack.common import context"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2FauQ%3D","line":23,"updated":"2013-07-02 12:40:33.000000000","message":"Import modules not classes as per HACKING guide.","commit_id":"18262ccb21e84333045a35804c4298ebbef006d1"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"7477c2713fdc6f9668e71eadf42e22a18470e338","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        # since the default for service is to use create_consumer()."},{"line_number":150,"context_line":"        self.conn.create_worker("},{"line_number":151,"context_line":"            cfg.CONF.publisher_rpc.metering_topic,"},{"line_number":152,"context_line":"            rpc_dispatcher.RpcDispatcher(self.dispatchers),"},{"line_number":153,"context_line":"            \u0027ceilometer.collector.\u0027 + cfg.CONF.publisher_rpc.metering_topic,"},{"line_number":154,"context_line":"        )"},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2FnwU%3D","line":152,"updated":"2013-06-26 15:35:55.000000000","message":"I\u0027m not sure this is going to do what you want. I think the RpcDispatcher only invokes the first \"compatible\" API object it is given, not all of them.","commit_id":"18262ccb21e84333045a35804c4298ebbef006d1"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"993616a0c1b8d0a94f80f0743a462472c463f780","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        # since the default for service is to use create_consumer()."},{"line_number":150,"context_line":"        self.conn.create_worker("},{"line_number":151,"context_line":"            cfg.CONF.publisher_rpc.metering_topic,"},{"line_number":152,"context_line":"            rpc_dispatcher.RpcDispatcher(self.dispatchers),"},{"line_number":153,"context_line":"            \u0027ceilometer.collector.\u0027 + cfg.CONF.publisher_rpc.metering_topic,"},{"line_number":154,"context_line":"        )"},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2Fnos%3D","line":152,"in_reply_to":"AAAAPn%2F%2FnwU%3D","updated":"2013-06-26 16:20:36.000000000","message":"It does what I wanted it to do.","commit_id":"18262ccb21e84333045a35804c4298ebbef006d1"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c93309fda74e8891163a3b006a69ded97df3427d","unresolved":false,"context_lines":[{"line_number":46,"context_line":"cfg.CONF.register_opts(OPTS, group\u003d\"collector\")"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"cfg.CONF.register_opts(["},{"line_number":49,"context_line":"    cfg.ListOpt(\u0027dispatchers\u0027,"},{"line_number":50,"context_line":"                default\u003d[\u0027database\u0027],"},{"line_number":51,"context_line":"                help\u003d\u0027dispatchers to record metering data\u0027)])"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2F%2BPk%3D","line":49,"updated":"2013-07-08 10:04:57.000000000","message":"There\u0027s a collector group used for the configuration option right above this…\n\nAlso, MultiStrOpt maybe? Not sure.","commit_id":"6d976394547b5e7ac9c370a4978fcea5ee9be442"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"8a58ec1ace245c107d38f693e64c42df56174e84","unresolved":false,"context_lines":[{"line_number":46,"context_line":"cfg.CONF.register_opts(OPTS, group\u003d\"collector\")"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"cfg.CONF.register_opts(["},{"line_number":49,"context_line":"    cfg.ListOpt(\u0027dispatchers\u0027,"},{"line_number":50,"context_line":"                default\u003d[\u0027database\u0027],"},{"line_number":51,"context_line":"                help\u003d\u0027dispatchers to record metering data\u0027)])"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2F8J0%3D","line":49,"in_reply_to":"AAAAP3%2F%2F%2BPk%3D","updated":"2013-07-08 20:30:26.000000000","message":"MultiStrList, I think. Did not want to mess with the udp stuff. Can add to it\nif no objections.","commit_id":"6d976394547b5e7ac9c370a4978fcea5ee9be442"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"5839bb08075d73b3d6ca91e8972c77df83df94b0","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    cfg.BoolOpt(\u0027store_events\u0027,"},{"line_number":51,"context_line":"                default\u003dFalse,"},{"line_number":52,"context_line":"                help\u003d\u0027Save event details\u0027),"},{"line_number":53,"context_line":"    cfg.ListOpt(\u0027dispatchers\u0027,"},{"line_number":54,"context_line":"                default\u003d[\u0027database\u0027],"},{"line_number":55,"context_line":"                help\u003d\u0027dispatchers to process metering data\u0027),"},{"line_number":56,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAP3%2F%2FkGE%3D","line":53,"updated":"2013-07-16 14:48:13.000000000","message":"Another option would be to make this a MultiStrOpt, which is arguably more convenient for adding addition dispatchers to a pre-existing config file.\n\ni.e. instead of:\n\n  s/dispatchers\u003ddatabase/dispatchers\u003dfile,database/\n\njust add the additional line:\n\n  dispatcher\u003dfile\n  + dispatcher\u003ddatabase","commit_id":"4ab22bd6f0b5fc724e08e668a3ba82b96ed9130c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"65c656fccaa7dd1a901aa9a3c1c4385840e8fcae","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    cfg.BoolOpt(\u0027store_events\u0027,"},{"line_number":51,"context_line":"                default\u003dFalse,"},{"line_number":52,"context_line":"                help\u003d\u0027Save event details\u0027),"},{"line_number":53,"context_line":"    cfg.ListOpt(\u0027dispatchers\u0027,"},{"line_number":54,"context_line":"                default\u003d[\u0027database\u0027],"},{"line_number":55,"context_line":"                help\u003d\u0027dispatchers to process metering data\u0027),"},{"line_number":56,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAP3%2F%2FkAA%3D","line":53,"in_reply_to":"AAAAP3%2F%2FkGE%3D","updated":"2013-07-16 15:01:29.000000000","message":"+1","commit_id":"4ab22bd6f0b5fc724e08e668a3ba82b96ed9130c"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"5a64a8f7b75ada0fb3e0081fe9d652ce1bf6afff","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    cfg.BoolOpt(\u0027store_events\u0027,"},{"line_number":51,"context_line":"                default\u003dFalse,"},{"line_number":52,"context_line":"                help\u003d\u0027Save event details\u0027),"},{"line_number":53,"context_line":"    cfg.ListOpt(\u0027dispatchers\u0027,"},{"line_number":54,"context_line":"                default\u003d[\u0027database\u0027],"},{"line_number":55,"context_line":"                help\u003d\u0027dispatchers to process metering data\u0027),"},{"line_number":56,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAP3%2F%2Fj9g%3D","line":53,"in_reply_to":"AAAAP3%2F%2FkGE%3D","updated":"2013-07-16 15:14:45.000000000","message":"I thought that the oneliner is more precise and also make the config small.","commit_id":"4ab22bd6f0b5fc724e08e668a3ba82b96ed9130c"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"5839bb08075d73b3d6ca91e8972c77df83df94b0","unresolved":false,"context_lines":[{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def record_metering_data(self, context, data):"},{"line_number":184,"context_line":"        for dispatcher in self.dispatchers:"},{"line_number":185,"context_line":"            dispatcher.record_metering_data(context, data)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def process_notification(self, notification):"},{"line_number":188,"context_line":"        \"\"\"Make a notification processed by an handler.\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAP3%2F%2FkIQ%3D","line":185,"updated":"2013-07-16 14:48:13.000000000","message":"Why not split these data into individual meters (if necessary) here instead of within the individual dispatchers, e.g.\n\n  https://review.openstack.org/#/c/34301/15/ceilometer/collector/dispatcher/database.py","commit_id":"4ab22bd6f0b5fc724e08e668a3ba82b96ed9130c"}],"ceilometer/dispatcher/__init__.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"92c8574805969ced72cb1beb086787bce18cbb62","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright © 2013 IBM"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Author: Tong Li \u003clitong01@us.ibm.com\u003e"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2Ft7s%3D","line":2,"updated":"2013-07-12 14:32:28.000000000","message":"This should go under collector/ since is related to collector only.","commit_id":"67e6e04700b963e1ea40356c3e674ad7694b0584"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"5e38156a5c52f209a6915dba647c41c4f0e6aecc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright © 2013 IBM"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Author: Tong Li \u003clitong01@us.ibm.com\u003e"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2FtjM%3D","line":2,"in_reply_to":"AAAAP3%2F%2Ft7s%3D","updated":"2013-07-12 16:04:09.000000000","message":"Done","commit_id":"67e6e04700b963e1ea40356c3e674ad7694b0584"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"92c8574805969ced72cb1beb086787bce18cbb62","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import abc"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class _Base(object):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    __metaclass__ \u003d abc.ABCMeta"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2Ft74%3D","line":22,"updated":"2013-07-12 14:32:28.000000000","message":"You should find a real name that can be imported. Things starting with underscore are supposed to be private.","commit_id":"67e6e04700b963e1ea40356c3e674ad7694b0584"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"5e38156a5c52f209a6915dba647c41c4f0e6aecc","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import abc"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class _Base(object):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    __metaclass__ \u003d abc.ABCMeta"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2FtjQ%3D","line":22,"in_reply_to":"AAAAP3%2F%2Ft74%3D","updated":"2013-07-12 16:04:09.000000000","message":"Done","commit_id":"67e6e04700b963e1ea40356c3e674ad7694b0584"}],"ceilometer/dispatcher/database.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"92c8574805969ced72cb1beb086787bce18cbb62","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    dispatchers \u003d database"},{"line_number":39,"context_line":"    \u0027\u0027\u0027"},{"line_number":40,"context_line":"    def __init__(self):"},{"line_number":41,"context_line":"        super(DatabaseDispatcher, self).__init__()"},{"line_number":42,"context_line":"        self.storage_conn \u003d storage.get_connection(cfg.CONF)"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2Ft7k%3D","line":40,"updated":"2013-07-12 14:32:28.000000000","message":"It would be better to pass the conf as an argument rather than using the global cfg.CONF.","commit_id":"67e6e04700b963e1ea40356c3e674ad7694b0584"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"5e38156a5c52f209a6915dba647c41c4f0e6aecc","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    dispatchers \u003d database"},{"line_number":39,"context_line":"    \u0027\u0027\u0027"},{"line_number":40,"context_line":"    def __init__(self):"},{"line_number":41,"context_line":"        super(DatabaseDispatcher, self).__init__()"},{"line_number":42,"context_line":"        self.storage_conn \u003d storage.get_connection(cfg.CONF)"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2FtjA%3D","line":40,"in_reply_to":"AAAAP3%2F%2Ft7k%3D","updated":"2013-07-12 16:04:09.000000000","message":"Done","commit_id":"67e6e04700b963e1ea40356c3e674ad7694b0584"}],"ceilometer/dispatcher/dispatcher_db.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"95591ddb03ba52e12dea83cdaca3485ac7d49e88","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo.config import cfg"},{"line_number":20,"context_line":"from ceilometer import storage"},{"line_number":21,"context_line":"from ceilometer.publisher import rpc as publisher_rpc"},{"line_number":22,"context_line":"from ceilometer.openstack.common import log"},{"line_number":23,"context_line":"from ceilometer.openstack.common import timeutils"},{"line_number":24,"context_line":"from . import _Base"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2Fats%3D","line":21,"updated":"2013-07-02 12:40:33.000000000","message":"Ordering should be alphabetical as per HACKING","commit_id":"18262ccb21e84333045a35804c4298ebbef006d1"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"95591ddb03ba52e12dea83cdaca3485ac7d49e88","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from ceilometer.publisher import rpc as publisher_rpc"},{"line_number":22,"context_line":"from ceilometer.openstack.common import log"},{"line_number":23,"context_line":"from ceilometer.openstack.common import timeutils"},{"line_number":24,"context_line":"from . import _Base"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2Fatw%3D","line":24,"updated":"2013-07-02 12:40:33.000000000","message":"Import module not class ... which is going to be tricky given this notation.","commit_id":"18262ccb21e84333045a35804c4298ebbef006d1"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"7477c2713fdc6f9668e71eadf42e22a18470e338","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                     meter[\u0027counter_volume\u0027])"},{"line_number":55,"context_line":"            if publisher_rpc.verify_signature("},{"line_number":56,"context_line":"                    meter,"},{"line_number":57,"context_line":"                    cfg.CONF.publisher_rpc.metering_secret):"},{"line_number":58,"context_line":"                try:"},{"line_number":59,"context_line":"                    # Convert the timestamp to a datetime instance."},{"line_number":60,"context_line":"                    # Storage engines are responsible for converting"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2Fnvs%3D","line":57,"updated":"2013-06-26 15:35:55.000000000","message":"This config option needs to be imported here using import_opt() to ensure that it is set up before it is used.","commit_id":"18262ccb21e84333045a35804c4298ebbef006d1"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"993616a0c1b8d0a94f80f0743a462472c463f780","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                     meter[\u0027counter_volume\u0027])"},{"line_number":55,"context_line":"            if publisher_rpc.verify_signature("},{"line_number":56,"context_line":"                    meter,"},{"line_number":57,"context_line":"                    cfg.CONF.publisher_rpc.metering_secret):"},{"line_number":58,"context_line":"                try:"},{"line_number":59,"context_line":"                    # Convert the timestamp to a datetime instance."},{"line_number":60,"context_line":"                    # Storage engines are responsible for converting"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2FnoU%3D","line":57,"in_reply_to":"AAAAPn%2F%2Fnvs%3D","updated":"2013-06-26 16:20:36.000000000","message":"Done","commit_id":"18262ccb21e84333045a35804c4298ebbef006d1"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"95591ddb03ba52e12dea83cdaca3485ac7d49e88","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                        meter[\u0027timestamp\u0027] \u003d timeutils.normalize_time(ts)"},{"line_number":65,"context_line":"                    self.storage_conn.record_metering_data(meter)"},{"line_number":66,"context_line":"                except Exception as err:"},{"line_number":67,"context_line":"                    LOG.error(\u0027Failed to record metering data: %s\u0027, err)"},{"line_number":68,"context_line":"                    LOG.exception(err)"},{"line_number":69,"context_line":"            else:"},{"line_number":70,"context_line":"                LOG.warning("}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2Fatg%3D","line":67,"updated":"2013-07-02 12:40:33.000000000","message":"Do we need .error and .exception calls?","commit_id":"18262ccb21e84333045a35804c4298ebbef006d1"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c93309fda74e8891163a3b006a69ded97df3427d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2013 IBM Corp"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2F%2BPc%3D","line":1,"updated":"2013-07-08 10:04:57.000000000","message":"Could you just name this file database.py?","commit_id":"6d976394547b5e7ac9c370a4978fcea5ee9be442"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"8a58ec1ace245c107d38f693e64c42df56174e84","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2013 IBM Corp"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2F8Jk%3D","line":1,"in_reply_to":"AAAAP3%2F%2F%2BPc%3D","updated":"2013-07-08 20:30:26.000000000","message":"Done","commit_id":"6d976394547b5e7ac9c370a4978fcea5ee9be442"}],"ceilometer/dispatcher/dispatcher_file.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"7477c2713fdc6f9668e71eadf42e22a18470e338","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        # if the directory and path are configured, then log to the file"},{"line_number":60,"context_line":"        if CONF.file_dispatcher.file_path:"},{"line_number":61,"context_line":"            import logging"},{"line_number":62,"context_line":"            import logging.handlers"},{"line_number":63,"context_line":"            dispatcher_logger \u003d logging.getLogger(\u0027file_dispatcher\u0027)"},{"line_number":64,"context_line":"            dispatcher_logger.setLevel(logging.INFO)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2Fnxg%3D","line":61,"updated":"2013-06-26 15:35:55.000000000","message":"Imports should be at the top of the module.","commit_id":"18262ccb21e84333045a35804c4298ebbef006d1"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"993616a0c1b8d0a94f80f0743a462472c463f780","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        # if the directory and path are configured, then log to the file"},{"line_number":60,"context_line":"        if CONF.file_dispatcher.file_path:"},{"line_number":61,"context_line":"            import logging"},{"line_number":62,"context_line":"            import logging.handlers"},{"line_number":63,"context_line":"            dispatcher_logger \u003d logging.getLogger(\u0027file_dispatcher\u0027)"},{"line_number":64,"context_line":"            dispatcher_logger.setLevel(logging.INFO)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2Fnn4%3D","line":61,"in_reply_to":"AAAAPn%2F%2Fnxg%3D","updated":"2013-06-26 16:20:36.000000000","message":"not if I will never use it. It is done this way to avoid loading unnecessary\nmodules. Only it is configured to do this, the modules will be loaded.","commit_id":"18262ccb21e84333045a35804c4298ebbef006d1"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"7477c2713fdc6f9668e71eadf42e22a18470e338","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            dispatcher_logger \u003d logging.getLogger(\u0027file_dispatcher\u0027)"},{"line_number":64,"context_line":"            dispatcher_logger.setLevel(logging.INFO)"},{"line_number":65,"context_line":"            # create RatatingFile handler which logs meters"},{"line_number":66,"context_line":"            rfh \u003d logging.handlers.RotatingFileHandler("},{"line_number":67,"context_line":"                CONF.file_dispatcher.file_path, encoding\u003d\u0027utf8\u0027,"},{"line_number":68,"context_line":"                maxBytes\u003d10000000, backupCount\u003d5)"},{"line_number":69,"context_line":"            rfh.setLevel(logging.INFO)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2FnxY%3D","line":66,"updated":"2013-06-26 15:35:55.000000000","message":"We should figure out how to tie this in with the existing logging configuration, rather than hard coding the maxBytes and backupCount values. We should not create new config options, since the user can already control the handler through the common.log module.","commit_id":"18262ccb21e84333045a35804c4298ebbef006d1"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"993616a0c1b8d0a94f80f0743a462472c463f780","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            dispatcher_logger \u003d logging.getLogger(\u0027file_dispatcher\u0027)"},{"line_number":64,"context_line":"            dispatcher_logger.setLevel(logging.INFO)"},{"line_number":65,"context_line":"            # create RatatingFile handler which logs meters"},{"line_number":66,"context_line":"            rfh \u003d logging.handlers.RotatingFileHandler("},{"line_number":67,"context_line":"                CONF.file_dispatcher.file_path, encoding\u003d\u0027utf8\u0027,"},{"line_number":68,"context_line":"                maxBytes\u003d10000000, backupCount\u003d5)"},{"line_number":69,"context_line":"            rfh.setLevel(logging.INFO)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2FnnU%3D","line":66,"in_reply_to":"AAAAPn%2F%2FnxY%3D","updated":"2013-06-26 16:20:36.000000000","message":"This is really just using an existing technology to create a brand new file. \nThe content should not be mixed with the error logging. This can be an\noption for sure.","commit_id":"18262ccb21e84333045a35804c4298ebbef006d1"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c93309fda74e8891163a3b006a69ded97df3427d","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"file_dispatcher_opts \u003d ["},{"line_number":26,"context_line":"    cfg.StrOpt(\u0027file-path\u0027,"},{"line_number":27,"context_line":"               default\u003d\u0027/tmp/meters\u0027,"},{"line_number":28,"context_line":"               help\u003d\u0027(Optional) Name and the location of the file to record \u0027"},{"line_number":29,"context_line":"                    \u0027meters.\u0027),"},{"line_number":30,"context_line":"    cfg.IntOpt(\u0027max-bytes\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2F%2BPQ%3D","line":27,"updated":"2013-07-08 10:04:57.000000000","message":"This is bad default value. Use something in /var or the like with a correct computed prefix value, I\u0027m sure Nova has some examples of this.","commit_id":"6d976394547b5e7ac9c370a4978fcea5ee9be442"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"8a58ec1ace245c107d38f693e64c42df56174e84","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"file_dispatcher_opts \u003d ["},{"line_number":26,"context_line":"    cfg.StrOpt(\u0027file-path\u0027,"},{"line_number":27,"context_line":"               default\u003d\u0027/tmp/meters\u0027,"},{"line_number":28,"context_line":"               help\u003d\u0027(Optional) Name and the location of the file to record \u0027"},{"line_number":29,"context_line":"                    \u0027meters.\u0027),"},{"line_number":30,"context_line":"    cfg.IntOpt(\u0027max-bytes\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2F8I8%3D","line":27,"in_reply_to":"AAAAP3%2F%2F%2BPQ%3D","updated":"2013-07-08 20:30:26.000000000","message":"Done","commit_id":"6d976394547b5e7ac9c370a4978fcea5ee9be442"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c93309fda74e8891163a3b006a69ded97df3427d","unresolved":false,"context_lines":[{"line_number":28,"context_line":"               help\u003d\u0027(Optional) Name and the location of the file to record \u0027"},{"line_number":29,"context_line":"                    \u0027meters.\u0027),"},{"line_number":30,"context_line":"    cfg.IntOpt(\u0027max-bytes\u0027,"},{"line_number":31,"context_line":"               default\u003d10000000,"},{"line_number":32,"context_line":"               help\u003d\u0027(Optional) The max size of the file\u0027),"},{"line_number":33,"context_line":"    cfg.IntOpt(\u0027backup-count\u0027,"},{"line_number":34,"context_line":"               default\u003d5,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2F%2BPA%3D","line":31,"updated":"2013-07-08 10:04:57.000000000","message":"Please set None as value for this kind of thing","commit_id":"6d976394547b5e7ac9c370a4978fcea5ee9be442"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"8a58ec1ace245c107d38f693e64c42df56174e84","unresolved":false,"context_lines":[{"line_number":28,"context_line":"               help\u003d\u0027(Optional) Name and the location of the file to record \u0027"},{"line_number":29,"context_line":"                    \u0027meters.\u0027),"},{"line_number":30,"context_line":"    cfg.IntOpt(\u0027max-bytes\u0027,"},{"line_number":31,"context_line":"               default\u003d10000000,"},{"line_number":32,"context_line":"               help\u003d\u0027(Optional) The max size of the file\u0027),"},{"line_number":33,"context_line":"    cfg.IntOpt(\u0027backup-count\u0027,"},{"line_number":34,"context_line":"               default\u003d5,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2F8Iw%3D","line":31,"in_reply_to":"AAAAP3%2F%2F%2BPA%3D","updated":"2013-07-08 20:30:26.000000000","message":"hmmmm, None can not be used as a value for this though. Not sure I am\nfollowing.","commit_id":"6d976394547b5e7ac9c370a4978fcea5ee9be442"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c93309fda74e8891163a3b006a69ded97df3427d","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    cfg.IntOpt(\u0027max-bytes\u0027,"},{"line_number":31,"context_line":"               default\u003d10000000,"},{"line_number":32,"context_line":"               help\u003d\u0027(Optional) The max size of the file\u0027),"},{"line_number":33,"context_line":"    cfg.IntOpt(\u0027backup-count\u0027,"},{"line_number":34,"context_line":"               default\u003d5,"},{"line_number":35,"context_line":"               help\u003d\u0027(Optional) The max number of the files to keep\u0027),"},{"line_number":36,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2F%2BPI%3D","line":33,"updated":"2013-07-08 10:04:57.000000000","message":"I don\u0027t think you have to write Optional. These are options. Options are optional right? :-)","commit_id":"6d976394547b5e7ac9c370a4978fcea5ee9be442"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"8a58ec1ace245c107d38f693e64c42df56174e84","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    cfg.IntOpt(\u0027max-bytes\u0027,"},{"line_number":31,"context_line":"               default\u003d10000000,"},{"line_number":32,"context_line":"               help\u003d\u0027(Optional) The max size of the file\u0027),"},{"line_number":33,"context_line":"    cfg.IntOpt(\u0027backup-count\u0027,"},{"line_number":34,"context_line":"               default\u003d5,"},{"line_number":35,"context_line":"               help\u003d\u0027(Optional) The max number of the files to keep\u0027),"},{"line_number":36,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2F8JE%3D","line":33,"in_reply_to":"AAAAP3%2F%2F%2BPI%3D","updated":"2013-07-08 20:30:26.000000000","message":"Done","commit_id":"6d976394547b5e7ac9c370a4978fcea5ee9be442"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c93309fda74e8891163a3b006a69ded97df3427d","unresolved":false,"context_lines":[{"line_number":35,"context_line":"               help\u003d\u0027(Optional) The max number of the files to keep\u0027),"},{"line_number":36,"context_line":"]"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"cfg.CONF.register_opts(file_dispatcher_opts, group\u003d\"file_dispatcher\")"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2F%2BPM%3D","line":38,"updated":"2013-07-08 10:04:57.000000000","message":"We would rather use dispatch_file.","commit_id":"6d976394547b5e7ac9c370a4978fcea5ee9be442"}],"ceilometer/dispatcher/file.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"92c8574805969ced72cb1beb086787bce18cbb62","unresolved":false,"context_lines":[{"line_number":35,"context_line":"               help\u003d\u0027The max number of the files to keep\u0027),"},{"line_number":36,"context_line":"]"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"cfg.CONF.register_opts(file_dispatcher_opts, group\u003d\"dispatcher_file\")"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class FileDispatcher(dispatcher._Base):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2Ft7M%3D","line":38,"updated":"2013-07-12 14:32:28.000000000","message":"wondering if the group shouldn\u0027t be collector_dispatcher_file for sake of consistency but that might be too much.","commit_id":"67e6e04700b963e1ea40356c3e674ad7694b0584"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"5e38156a5c52f209a6915dba647c41c4f0e6aecc","unresolved":false,"context_lines":[{"line_number":35,"context_line":"               help\u003d\u0027The max number of the files to keep\u0027),"},{"line_number":36,"context_line":"]"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"cfg.CONF.register_opts(file_dispatcher_opts, group\u003d\"dispatcher_file\")"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class FileDispatcher(dispatcher._Base):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2Fti0%3D","line":38,"in_reply_to":"AAAAP3%2F%2Ft7M%3D","updated":"2013-07-12 16:04:09.000000000","message":"it will be too long. keep it for now.","commit_id":"67e6e04700b963e1ea40356c3e674ad7694b0584"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"92c8574805969ced72cb1beb086787bce18cbb62","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        # if the directory and path are configured, then log to the file"},{"line_number":63,"context_line":"        if cfg.CONF.dispatcher_file.file_path:"},{"line_number":64,"context_line":"            logger_name \u003d \u0027dispather.file.\u0027 + uuidutils.generate_uuid()"},{"line_number":65,"context_line":"            dispatcher_logger \u003d logging.getLogger(logger_name)"},{"line_number":66,"context_line":"            dispatcher_logger.setLevel(logging.INFO)"},{"line_number":67,"context_line":"            # Use rotating file handler only when max_bytes and backup_count"},{"line_number":68,"context_line":"            # are present"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2Ft7U%3D","line":65,"updated":"2013-07-12 14:32:28.000000000","message":"Don\u0027t use getLogger, just instanciate a Logger()","commit_id":"67e6e04700b963e1ea40356c3e674ad7694b0584"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"5e38156a5c52f209a6915dba647c41c4f0e6aecc","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        # if the directory and path are configured, then log to the file"},{"line_number":63,"context_line":"        if cfg.CONF.dispatcher_file.file_path:"},{"line_number":64,"context_line":"            logger_name \u003d \u0027dispather.file.\u0027 + uuidutils.generate_uuid()"},{"line_number":65,"context_line":"            dispatcher_logger \u003d logging.getLogger(logger_name)"},{"line_number":66,"context_line":"            dispatcher_logger.setLevel(logging.INFO)"},{"line_number":67,"context_line":"            # Use rotating file handler only when max_bytes and backup_count"},{"line_number":68,"context_line":"            # are present"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2Ftiw%3D","line":65,"in_reply_to":"AAAAP3%2F%2Ft7U%3D","updated":"2013-07-12 16:04:09.000000000","message":"Done","commit_id":"67e6e04700b963e1ea40356c3e674ad7694b0584"}],"doc/source/install/manual.rst":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c93309fda74e8891163a3b006a69ded97df3427d","unresolved":false,"context_lines":[{"line_number":411,"context_line":"   the line like the following:"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        dispatchers\u003d"},{"line_number":414,"context_line":"        "},{"line_number":415,"context_line":"   With above configuration, no dispatcher is used by Ceilometer collector"},{"line_number":416,"context_line":"   service, all metering data received by Ceilometer collector will be dropped."}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAP3%2F%2F%2BO8%3D","line":414,"updated":"2013-07-08 10:04:57.000000000","message":"Whitespace","commit_id":"6d976394547b5e7ac9c370a4978fcea5ee9be442"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"8a58ec1ace245c107d38f693e64c42df56174e84","unresolved":false,"context_lines":[{"line_number":411,"context_line":"   the line like the following:"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        dispatchers\u003d"},{"line_number":414,"context_line":"        "},{"line_number":415,"context_line":"   With above configuration, no dispatcher is used by Ceilometer collector"},{"line_number":416,"context_line":"   service, all metering data received by Ceilometer collector will be dropped."}],"source_content_type":"text/x-rst","patch_set":5,"id":"AAAAP3%2F%2F8Io%3D","line":414,"in_reply_to":"AAAAP3%2F%2F%2BO8%3D","updated":"2013-07-08 20:30:26.000000000","message":"Done","commit_id":"6d976394547b5e7ac9c370a4978fcea5ee9be442"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"92c8574805969ced72cb1beb086787bce18cbb62","unresolved":false,"context_lines":[{"line_number":383,"context_line":"   double: installing; multiple dispatchers"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":".. note::"},{"line_number":386,"context_line":"   The Ceilometer server allows multiple dispatchers to be configured so that"},{"line_number":387,"context_line":"   metering data can be easily sent to multiple internal andexternal systems."},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"   Ceilometer by default only save metering data in a database, to allow"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAP3%2F%2Ft7A%3D","line":386,"updated":"2013-07-12 14:32:28.000000000","message":"s/server/collector/","commit_id":"67e6e04700b963e1ea40356c3e674ad7694b0584"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"5e38156a5c52f209a6915dba647c41c4f0e6aecc","unresolved":false,"context_lines":[{"line_number":383,"context_line":"   double: installing; multiple dispatchers"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":".. note::"},{"line_number":386,"context_line":"   The Ceilometer server allows multiple dispatchers to be configured so that"},{"line_number":387,"context_line":"   metering data can be easily sent to multiple internal andexternal systems."},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"   Ceilometer by default only save metering data in a database, to allow"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAP3%2F%2Fth8%3D","line":386,"in_reply_to":"AAAAP3%2F%2Ft7A%3D","updated":"2013-07-12 16:04:09.000000000","message":"Done","commit_id":"67e6e04700b963e1ea40356c3e674ad7694b0584"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"92c8574805969ced72cb1beb086787bce18cbb62","unresolved":false,"context_lines":[{"line_number":384,"context_line":""},{"line_number":385,"context_line":".. note::"},{"line_number":386,"context_line":"   The Ceilometer server allows multiple dispatchers to be configured so that"},{"line_number":387,"context_line":"   metering data can be easily sent to multiple internal andexternal systems."},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"   Ceilometer by default only save metering data in a database, to allow"},{"line_number":390,"context_line":"   Ceilometer to send metering data to other systems in addition to the"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAP3%2F%2Ft68%3D","line":387,"updated":"2013-07-12 14:32:28.000000000","message":"and external","commit_id":"67e6e04700b963e1ea40356c3e674ad7694b0584"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"5e38156a5c52f209a6915dba647c41c4f0e6aecc","unresolved":false,"context_lines":[{"line_number":384,"context_line":""},{"line_number":385,"context_line":".. note::"},{"line_number":386,"context_line":"   The Ceilometer server allows multiple dispatchers to be configured so that"},{"line_number":387,"context_line":"   metering data can be easily sent to multiple internal andexternal systems."},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"   Ceilometer by default only save metering data in a database, to allow"},{"line_number":390,"context_line":"   Ceilometer to send metering data to other systems in addition to the"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAP3%2F%2Fth0%3D","line":387,"in_reply_to":"AAAAP3%2F%2Ft68%3D","updated":"2013-07-12 16:04:09.000000000","message":"Done","commit_id":"67e6e04700b963e1ea40356c3e674ad7694b0584"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"92c8574805969ced72cb1beb086787bce18cbb62","unresolved":false,"context_lines":[{"line_number":386,"context_line":"   The Ceilometer server allows multiple dispatchers to be configured so that"},{"line_number":387,"context_line":"   metering data can be easily sent to multiple internal andexternal systems."},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"   Ceilometer by default only save metering data in a database, to allow"},{"line_number":390,"context_line":"   Ceilometer to send metering data to other systems in addition to the"},{"line_number":391,"context_line":"   database, multiple dispatchers can be developed and enabled by modifying"},{"line_number":392,"context_line":"   Ceilometer configuration file."}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAP3%2F%2Ft64%3D","line":389,"updated":"2013-07-12 14:32:28.000000000","message":"saves","commit_id":"67e6e04700b963e1ea40356c3e674ad7694b0584"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"5e38156a5c52f209a6915dba647c41c4f0e6aecc","unresolved":false,"context_lines":[{"line_number":386,"context_line":"   The Ceilometer server allows multiple dispatchers to be configured so that"},{"line_number":387,"context_line":"   metering data can be easily sent to multiple internal andexternal systems."},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"   Ceilometer by default only save metering data in a database, to allow"},{"line_number":390,"context_line":"   Ceilometer to send metering data to other systems in addition to the"},{"line_number":391,"context_line":"   database, multiple dispatchers can be developed and enabled by modifying"},{"line_number":392,"context_line":"   Ceilometer configuration file."}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAP3%2F%2Fthw%3D","line":389,"in_reply_to":"AAAAP3%2F%2Ft64%3D","updated":"2013-07-12 16:04:09.000000000","message":"Done","commit_id":"67e6e04700b963e1ea40356c3e674ad7694b0584"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"92c8574805969ced72cb1beb086787bce18cbb62","unresolved":false,"context_lines":[{"line_number":395,"context_line":"   dispatcher, and the other is called file dispatcher. As the names imply,"},{"line_number":396,"context_line":"   database dispatcher basically sends metering data to a database driver,"},{"line_number":397,"context_line":"   eventually metering data will be saved in database. file dispatcher sends"},{"line_number":398,"context_line":"   metering data into a file, the location and name of the file can be"},{"line_number":399,"context_line":"   configured in ceilometer configuration file. These two dispatchers are"},{"line_number":400,"context_line":"   shipped in Ceilometer egg and defined in the entry_points as follows:"},{"line_number":401,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAP3%2F%2Ft6k%3D","line":398,"updated":"2013-07-12 14:32:28.000000000","message":"I think you should split the sentence or something hear, I am not sure it\u0027s really clear (disclaimer: I am not a native English speaker)","commit_id":"67e6e04700b963e1ea40356c3e674ad7694b0584"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"5e38156a5c52f209a6915dba647c41c4f0e6aecc","unresolved":false,"context_lines":[{"line_number":395,"context_line":"   dispatcher, and the other is called file dispatcher. As the names imply,"},{"line_number":396,"context_line":"   database dispatcher basically sends metering data to a database driver,"},{"line_number":397,"context_line":"   eventually metering data will be saved in database. file dispatcher sends"},{"line_number":398,"context_line":"   metering data into a file, the location and name of the file can be"},{"line_number":399,"context_line":"   configured in ceilometer configuration file. These two dispatchers are"},{"line_number":400,"context_line":"   shipped in Ceilometer egg and defined in the entry_points as follows:"},{"line_number":401,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAP3%2F%2Fths%3D","line":398,"in_reply_to":"AAAAP3%2F%2Ft6k%3D","updated":"2013-07-12 16:04:09.000000000","message":"Done","commit_id":"67e6e04700b963e1ea40356c3e674ad7694b0584"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"5839bb08075d73b3d6ca91e8972c77df83df94b0","unresolved":false,"context_lines":[{"line_number":397,"context_line":"   eventually metering data will be saved in database. File dispatcher sends"},{"line_number":398,"context_line":"   metering data into a file. The location, name, size of the file can be"},{"line_number":399,"context_line":"   configured in ceilometer configuration file. These two dispatchers are"},{"line_number":400,"context_line":"   shipped in Ceilometer egg and defined in the entry_points as follows:"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"        [ceilometer.dispatcher]"},{"line_number":403,"context_line":"        file \u003d ceilometer.collector.dispatcher.file:FileDispatcher"}],"source_content_type":"text/x-rst","patch_set":15,"id":"AAAAP3%2F%2FkIA%3D","line":400,"updated":"2013-07-16 14:48:13.000000000","message":"s/shipped in Ceilometer egg/shipped in the Ceilometer egg/","commit_id":"4ab22bd6f0b5fc724e08e668a3ba82b96ed9130c"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"5a64a8f7b75ada0fb3e0081fe9d652ce1bf6afff","unresolved":false,"context_lines":[{"line_number":397,"context_line":"   eventually metering data will be saved in database. File dispatcher sends"},{"line_number":398,"context_line":"   metering data into a file. The location, name, size of the file can be"},{"line_number":399,"context_line":"   configured in ceilometer configuration file. These two dispatchers are"},{"line_number":400,"context_line":"   shipped in Ceilometer egg and defined in the entry_points as follows:"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"        [ceilometer.dispatcher]"},{"line_number":403,"context_line":"        file \u003d ceilometer.collector.dispatcher.file:FileDispatcher"}],"source_content_type":"text/x-rst","patch_set":15,"id":"AAAAP3%2F%2Fj8U%3D","line":400,"in_reply_to":"AAAAP3%2F%2FkIA%3D","updated":"2013-07-16 15:14:45.000000000","message":"Done","commit_id":"4ab22bd6f0b5fc724e08e668a3ba82b96ed9130c"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"956bd489114e3c29fb4665dcd6d8c9d43eaa8629","unresolved":false,"context_lines":[{"line_number":397,"context_line":"   eventually metering data will be saved in database. File dispatcher sends"},{"line_number":398,"context_line":"   metering data into a file. The location, name, size of the file can be"},{"line_number":399,"context_line":"   configured in ceilometer configuration file. These two dispatchers are"},{"line_number":400,"context_line":"   shipped in Ceilometer egg and defined in the entry_points as follows:"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"        [ceilometer.dispatcher]"},{"line_number":403,"context_line":"        file \u003d ceilometer.collector.dispatcher.file:FileDispatcher"}],"source_content_type":"text/x-rst","patch_set":16,"id":"AAAAP3%2F%2FgdQ%3D","line":400,"updated":"2013-07-17 07:48:31.000000000","message":"s/shipped in Ceilometer egg/shipped in the Ceilometer egg/","commit_id":"763408ad3fcf3f97455e7144dffafaa8b718279c"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"59389efdd3812056cde8a045ea2fde3cbb164953","unresolved":false,"context_lines":[{"line_number":397,"context_line":"   eventually metering data will be saved in database. File dispatcher sends"},{"line_number":398,"context_line":"   metering data into a file. The location, name, size of the file can be"},{"line_number":399,"context_line":"   configured in ceilometer configuration file. These two dispatchers are"},{"line_number":400,"context_line":"   shipped in Ceilometer egg and defined in the entry_points as follows:"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"        [ceilometer.dispatcher]"},{"line_number":403,"context_line":"        file \u003d ceilometer.collector.dispatcher.file:FileDispatcher"}],"source_content_type":"text/x-rst","patch_set":16,"id":"AAAAP3%2F%2FfjM%3D","line":400,"in_reply_to":"AAAAP3%2F%2FgdQ%3D","updated":"2013-07-17 13:25:08.000000000","message":"Done","commit_id":"763408ad3fcf3f97455e7144dffafaa8b718279c"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"956bd489114e3c29fb4665dcd6d8c9d43eaa8629","unresolved":false,"context_lines":[{"line_number":407,"context_line":"   line in file ceilometer.conf"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        [collector]"},{"line_number":410,"context_line":"        dispatchers\u003ddatabase, file"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"   If that line is missing, database dispatcher is used as the default. If in"},{"line_number":413,"context_line":"   some cases such as traffic tests, no dispatcher is needed, one can configure"}],"source_content_type":"text/x-rst","patch_set":16,"id":"AAAAP3%2F%2FgdY%3D","line":410,"updated":"2013-07-17 07:48:31.000000000","message":"This example needs to be updated to reflect the change to mutli-string instead of list:\n\n  dispatcher\u003ddatabase\n  dispatcher\u003dfile","commit_id":"763408ad3fcf3f97455e7144dffafaa8b718279c"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"59389efdd3812056cde8a045ea2fde3cbb164953","unresolved":false,"context_lines":[{"line_number":407,"context_line":"   line in file ceilometer.conf"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        [collector]"},{"line_number":410,"context_line":"        dispatchers\u003ddatabase, file"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"   If that line is missing, database dispatcher is used as the default. If in"},{"line_number":413,"context_line":"   some cases such as traffic tests, no dispatcher is needed, one can configure"}],"source_content_type":"text/x-rst","patch_set":16,"id":"AAAAP3%2F%2FfjI%3D","line":410,"in_reply_to":"AAAAP3%2F%2FgdY%3D","updated":"2013-07-17 13:25:08.000000000","message":"Done","commit_id":"763408ad3fcf3f97455e7144dffafaa8b718279c"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"956bd489114e3c29fb4665dcd6d8c9d43eaa8629","unresolved":false,"context_lines":[{"line_number":415,"context_line":""},{"line_number":416,"context_line":"        dispatchers\u003d"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"   With above configuration, no dispatcher is used by Ceilometer collector"},{"line_number":419,"context_line":"   service, all metering data received by Ceilometer collector will be dropped."}],"source_content_type":"text/x-rst","patch_set":16,"id":"AAAAP3%2F%2FgdI%3D","line":418,"updated":"2013-07-17 07:48:31.000000000","message":"s/by Ceilometer collector/by the Ceilometer collector/","commit_id":"763408ad3fcf3f97455e7144dffafaa8b718279c"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"59389efdd3812056cde8a045ea2fde3cbb164953","unresolved":false,"context_lines":[{"line_number":415,"context_line":""},{"line_number":416,"context_line":"        dispatchers\u003d"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"   With above configuration, no dispatcher is used by Ceilometer collector"},{"line_number":419,"context_line":"   service, all metering data received by Ceilometer collector will be dropped."}],"source_content_type":"text/x-rst","patch_set":16,"id":"AAAAP3%2F%2FfjE%3D","line":418,"in_reply_to":"AAAAP3%2F%2FgdI%3D","updated":"2013-07-17 13:25:08.000000000","message":"Done","commit_id":"763408ad3fcf3f97455e7144dffafaa8b718279c"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"956bd489114e3c29fb4665dcd6d8c9d43eaa8629","unresolved":false,"context_lines":[{"line_number":416,"context_line":"        dispatchers\u003d"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"   With above configuration, no dispatcher is used by Ceilometer collector"},{"line_number":419,"context_line":"   service, all metering data received by Ceilometer collector will be dropped."}],"source_content_type":"text/x-rst","patch_set":16,"id":"AAAAP3%2F%2Fgc8%3D","line":419,"updated":"2013-07-17 07:48:31.000000000","message":"s/, all/, so all/","commit_id":"763408ad3fcf3f97455e7144dffafaa8b718279c"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"59389efdd3812056cde8a045ea2fde3cbb164953","unresolved":false,"context_lines":[{"line_number":416,"context_line":"        dispatchers\u003d"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"   With above configuration, no dispatcher is used by Ceilometer collector"},{"line_number":419,"context_line":"   service, all metering data received by Ceilometer collector will be dropped."}],"source_content_type":"text/x-rst","patch_set":16,"id":"AAAAP3%2F%2Ffi0%3D","line":419,"in_reply_to":"AAAAP3%2F%2Fgc8%3D","updated":"2013-07-17 13:25:08.000000000","message":"do not think that the word \"so\" is really necessary here.","commit_id":"763408ad3fcf3f97455e7144dffafaa8b718279c"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"a9c1b556940d5ab1636f042ee1969580ba79c84a","unresolved":false,"context_lines":[{"line_number":386,"context_line":"   The Ceilometer collector allows multiple dispatchers to be configured so that"},{"line_number":387,"context_line":"   metering data can be easily sent to multiple internal and external systems."},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"   Ceilometer by default only saves metering data in a database, to allow"},{"line_number":390,"context_line":"   Ceilometer to send metering data to other systems in addition to the"},{"line_number":391,"context_line":"   database, multiple dispatchers can be developed and enabled by modifying"},{"line_number":392,"context_line":"   Ceilometer configuration file."}],"source_content_type":"text/x-rst","patch_set":19,"id":"AAAAP3%2F%2FfGs%3D","line":389,"updated":"2013-07-17 15:52:31.000000000","message":"(nit) s/database, to allow/database. To allow/","commit_id":"70226205fd03e4a53ec6f6009291481ca46026f6"}],"tests/collector/dispatcher/test_db.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"5839bb08075d73b3d6ca91e8972c77df83df94b0","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        msg[\u0027message_signature\u0027] \u003d rpc.compute_signature("},{"line_number":42,"context_line":"            msg,"},{"line_number":43,"context_line":"            cfg.CONF.publisher_rpc.metering_secret,"},{"line_number":44,"context_line":"        )"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        self.dispatcher.storage_conn \u003d self.mox.CreateMock(base.Connection)"},{"line_number":47,"context_line":"        self.dispatcher.storage_conn.record_metering_data(msg)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAP3%2F%2FkFw%3D","line":44,"updated":"2013-07-16 14:48:13.000000000","message":"Do we we need to compute the signature here, or could it be mocked out?","commit_id":"4ab22bd6f0b5fc724e08e668a3ba82b96ed9130c"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"5a64a8f7b75ada0fb3e0081fe9d652ce1bf6afff","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        msg[\u0027message_signature\u0027] \u003d rpc.compute_signature("},{"line_number":42,"context_line":"            msg,"},{"line_number":43,"context_line":"            cfg.CONF.publisher_rpc.metering_secret,"},{"line_number":44,"context_line":"        )"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        self.dispatcher.storage_conn \u003d self.mox.CreateMock(base.Connection)"},{"line_number":47,"context_line":"        self.dispatcher.storage_conn.record_metering_data(msg)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAP3%2F%2Fj78%3D","line":44,"in_reply_to":"AAAAP3%2F%2FkFw%3D","updated":"2013-07-16 15:14:45.000000000","message":"This was the original test case and simply moved here because of the\nrestructure.","commit_id":"4ab22bd6f0b5fc724e08e668a3ba82b96ed9130c"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"5839bb08075d73b3d6ca91e8972c77df83df94b0","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        self.dispatcher.storage_conn.record_metering_data(expected)"},{"line_number":112,"context_line":"        self.mox.ReplayAll()"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        self.dispatcher.record_metering_data(self.ctx, msg)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAP3%2F%2FkFA%3D","line":114,"updated":"2013-07-16 14:48:13.000000000","message":"Missing a test with data \u003d [mgs1, msg2, ...] ?","commit_id":"4ab22bd6f0b5fc724e08e668a3ba82b96ed9130c"}],"tests/collector/dispatcher/test_file.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"5839bb08075d73b3d6ca91e8972c77df83df94b0","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        # The record_metering_data method should exist and not produce errors."},{"line_number":64,"context_line":"        dispatcher.record_metering_data(None, msg)"},{"line_number":65,"context_line":"        # After the method call above, the file should have been created."},{"line_number":66,"context_line":"        self.assertTrue(os.path.exists(handler.baseFilename))"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def test_file_dispatcher_with_path_only(self):"},{"line_number":69,"context_line":"        # Create a temporaryFile to get a file name"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAP3%2F%2FkE4%3D","line":66,"updated":"2013-07-16 14:48:13.000000000","message":"Need to assert on the file content also?","commit_id":"4ab22bd6f0b5fc724e08e668a3ba82b96ed9130c"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"5a64a8f7b75ada0fb3e0081fe9d652ce1bf6afff","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        # The record_metering_data method should exist and not produce errors."},{"line_number":64,"context_line":"        dispatcher.record_metering_data(None, msg)"},{"line_number":65,"context_line":"        # After the method call above, the file should have been created."},{"line_number":66,"context_line":"        self.assertTrue(os.path.exists(handler.baseFilename))"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def test_file_dispatcher_with_path_only(self):"},{"line_number":69,"context_line":"        # Create a temporaryFile to get a file name"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAP3%2F%2Fj7Q%3D","line":66,"in_reply_to":"AAAAP3%2F%2FkE4%3D","updated":"2013-07-16 15:14:45.000000000","message":"The context contains whatever the data serialized to. This dispatcher does\nnot really care. It meant to record whatever it passed in. plus the content\nis actually unstructured.","commit_id":"4ab22bd6f0b5fc724e08e668a3ba82b96ed9130c"}],"tests/dispatcher/test_dispatcher_db.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c93309fda74e8891163a3b006a69ded97df3427d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":16,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":17,"context_line":"# under the License."},{"line_number":18,"context_line":"\"\"\"Tests for ceilometer/publisher/udp.py"},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":"from oslo.config import cfg"},{"line_number":21,"context_line":"from datetime import datetime"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2F%2BOs%3D","line":18,"updated":"2013-07-08 10:04:57.000000000","message":"Wrong comment at least.","commit_id":"6d976394547b5e7ac9c370a4978fcea5ee9be442"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"8a58ec1ace245c107d38f693e64c42df56174e84","unresolved":false,"context_lines":[{"line_number":15,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":16,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":17,"context_line":"# under the License."},{"line_number":18,"context_line":"\"\"\"Tests for ceilometer/publisher/udp.py"},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":"from oslo.config import cfg"},{"line_number":21,"context_line":"from datetime import datetime"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2F8Ik%3D","line":18,"in_reply_to":"AAAAP3%2F%2F%2BOs%3D","updated":"2013-07-08 20:30:26.000000000","message":"copy paste problem. will fix it.","commit_id":"6d976394547b5e7ac9c370a4978fcea5ee9be442"}],"tests/dispatcher/test_dispatcher_file.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c93309fda74e8891163a3b006a69ded97df3427d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":16,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":17,"context_line":"# under the License."},{"line_number":18,"context_line":"\"\"\"Tests for ceilometer/publisher/udp.py"},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo.config import cfg"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2F%2BOw%3D","line":18,"updated":"2013-07-08 10:04:57.000000000","message":"Wrong comment at least","commit_id":"6d976394547b5e7ac9c370a4978fcea5ee9be442"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"8a58ec1ace245c107d38f693e64c42df56174e84","unresolved":false,"context_lines":[{"line_number":15,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":16,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":17,"context_line":"# under the License."},{"line_number":18,"context_line":"\"\"\"Tests for ceilometer/publisher/udp.py"},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo.config import cfg"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2F8Ic%3D","line":18,"in_reply_to":"AAAAP3%2F%2F%2BOw%3D","updated":"2013-07-08 20:30:26.000000000","message":"will fix.","commit_id":"6d976394547b5e7ac9c370a4978fcea5ee9be442"}],"tests/dispatcher/test_file.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"aae87a62bcb67f96c058e2e2097b660abbe49d4f","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            cfg.CONF.publisher_rpc.metering_secret,"},{"line_number":44,"context_line":"        )"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        self.dispatcher.record_metering_data(self.ctx, msg)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def test_invalid_message(self):"},{"line_number":49,"context_line":"        msg \u003d {\u0027counter_name\u0027: \u0027test\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAP3%2F%2F4B4%3D","line":46,"updated":"2013-07-09 23:23:12.000000000","message":"this test doesn\u0027t actually test anything. it should assert/mock something","commit_id":"5e959480d0203d006f4d40ab1bda3b431bbca32a"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"5db3b07e8da1a2b3cf8eab997f0ac24d766b2108","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            cfg.CONF.publisher_rpc.metering_secret,"},{"line_number":44,"context_line":"        )"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        self.dispatcher.record_metering_data(self.ctx, msg)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def test_invalid_message(self):"},{"line_number":49,"context_line":"        msg \u003d {\u0027counter_name\u0027: \u0027test\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAP3%2F%2F3sU%3D","line":46,"in_reply_to":"AAAAP3%2F%2F4B4%3D","updated":"2013-07-10 02:15:14.000000000","message":"it does and made sure that the method won\u0027t throw an exception.","commit_id":"5e959480d0203d006f4d40ab1bda3b431bbca32a"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"aae87a62bcb67f96c058e2e2097b660abbe49d4f","unresolved":false,"context_lines":[{"line_number":52,"context_line":"               }"},{"line_number":53,"context_line":"        msg[\u0027message_signature\u0027] \u003d \u0027invalid-signature\u0027"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self.dispatcher.record_metering_data(self.ctx, msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAP3%2F%2F4B0%3D","line":55,"updated":"2013-07-09 23:23:12.000000000","message":"same","commit_id":"5e959480d0203d006f4d40ab1bda3b431bbca32a"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"5db3b07e8da1a2b3cf8eab997f0ac24d766b2108","unresolved":false,"context_lines":[{"line_number":52,"context_line":"               }"},{"line_number":53,"context_line":"        msg[\u0027message_signature\u0027] \u003d \u0027invalid-signature\u0027"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self.dispatcher.record_metering_data(self.ctx, msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAP3%2F%2F3sQ%3D","line":55,"in_reply_to":"AAAAP3%2F%2F4B0%3D","updated":"2013-07-10 02:15:14.000000000","message":"same answer. Either the valid message or invalid message won\u0027t cause the method call to throw exception. that is what this is testing.","commit_id":"5e959480d0203d006f4d40ab1bda3b431bbca32a"}]}
