)]}'
{"monasca_persister/conf/elasticsearch.py":[{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"002a2c50cf83c60d3566b3c35a230bcb6ed4af46","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    cfg.StrOpt(\u0027index_name\u0027,"},{"line_number":19,"context_line":"               help\u003d\u0027index name where events are stored\u0027,"},{"line_number":20,"context_line":"               default\u003d\u0027monevents\u0027),"},{"line_number":21,"context_line":"    cfg.IPOpt(\u0027ip_address\u0027,"},{"line_number":22,"context_line":"              help\u003d\u0027ip address to Elasticsearch\u0027),"},{"line_number":23,"context_line":"    cfg.PortOpt(\u0027port\u0027,"},{"line_number":24,"context_line":"                help\u003d\u0027port to Elasticsearch\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f1a1f67_35a00c90","line":21,"updated":"2017-07-19 10:29:57.000000000","message":"Isn\u0027t like there can be actually multiple address specified for elasticsearch client ?","commit_id":"f0f9eed45ae72dacffe8744e33c892b2254e5d45"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"d0ad49c57ae46bd835eaeac51ac0d3701f253f1c","unresolved":false,"context_lines":[{"line_number":20,"context_line":"               default\u003d\u0027monevents\u0027),"},{"line_number":21,"context_line":"    cfg.ListOpt(\u0027hosts\u0027,"},{"line_number":22,"context_line":"                help\u003d\u0027list of Elasticsearch nodes in format host[:port]\u0027,"},{"line_number":23,"context_line":"                default\u003d[\u0027localhost:9200\u0027]),"},{"line_number":24,"context_line":"    cfg.BoolOpt(\u0027sniff_on_start\u0027,"},{"line_number":25,"context_line":"                help\u003d\u0027flag indicating whether to obtain a list of nodes from the cluser at startup time\u0027,"},{"line_number":26,"context_line":"                default\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_9d09cb96","line":23,"updated":"2017-08-01 07:45:17.000000000","message":"should have item_type equal to HostaddressPort type, Adrian introduced recently.","commit_id":"702af6cd5a72f60712905995e48f92436ff0b3fc"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"d0ad49c57ae46bd835eaeac51ac0d3701f253f1c","unresolved":false,"context_lines":[{"line_number":32,"context_line":"               default\u003dNone),"},{"line_number":33,"context_line":"    cfg.IntOpt(\u0027max_retries\u0027,"},{"line_number":34,"context_line":"               help\u003d\u0027maximum number of retries before an exception is propagated\u0027,"},{"line_number":35,"context_line":"               default\u003d3)"},{"line_number":36,"context_line":"]"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"elasticsearch_group \u003d cfg.OptGroup(name\u003d\u0027elasticsearch\u0027, title\u003d\u0027elasticsearch\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_ddee33b3","line":35,"updated":"2017-08-01 07:45:17.000000000","message":"I think we need to have a min value here equal to 1 or 3 ?","commit_id":"702af6cd5a72f60712905995e48f92436ff0b3fc"},{"author":{"_account_id":26141,"name":"Adrian Czarnecki","email":"adrian.czarnecki@ts.fujitsu.com","username":"czarneckia"},"change_message_id":"6293af1b0034a574a344c25eff76179047ba0d28","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or"},{"line_number":12,"context_line":"# implied."},{"line_number":13,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":"from oslo_config import cfg"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from monasca_persister.conf import types"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf3e73b7_5df82ac3","line":14,"updated":"2017-08-07 09:53:29.000000000","message":"Empty line after License","commit_id":"37205c988cf13ac9b2e1dcc9753f82f5d29029b5"},{"author":{"_account_id":23043,"name":"Jakub Wachowski","email":"jakub.wachowski@ts.fujitsu.com","username":"wachowskij"},"change_message_id":"6ecae2e004fc8e8cb63eeeecff22eca658aa91ec","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or"},{"line_number":12,"context_line":"# implied."},{"line_number":13,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":"from oslo_config import cfg"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from monasca_persister.conf import types"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf3e73b7_b30aa587","line":14,"in_reply_to":"bf3e73b7_5df82ac3","updated":"2017-08-07 11:19:27.000000000","message":"Done","commit_id":"37205c988cf13ac9b2e1dcc9753f82f5d29029b5"}],"monasca_persister/conf/kafka_events.py":[{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"d0ad49c57ae46bd835eaeac51ac0d3701f253f1c","unresolved":false,"context_lines":[{"line_number":34,"context_line":"               default\u003d\u0027events\u0027),"},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027zookeeper_path\u0027,"},{"line_number":36,"context_line":"               help\u003d\u0027Path in zookeeper for kafka consumer group partitioning algo\u0027,"},{"line_number":37,"context_line":"               default\u003d\u0027/persister_partitions/events\u0027),"},{"line_number":38,"context_line":"]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"# Replace Default OPt with reference to kafka group option"}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_bd148fa1","line":37,"updated":"2017-08-01 07:45:17.000000000","message":"should be\n\n  /persister_partitions/$kafka_events.topics","commit_id":"702af6cd5a72f60712905995e48f92436ff0b3fc"},{"author":{"_account_id":20033,"name":"Artur Basiak","email":"artur.basiak@ts.fujitsu.com","username":"abasiak"},"change_message_id":"23984053d38afcf2d66766d13c74f5e826e599cd","unresolved":false,"context_lines":[{"line_number":31,"context_line":"               default\u003d\u00271_events\u0027),"},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027topic\u0027,"},{"line_number":33,"context_line":"               help\u003d\u0027Kafka Topic from which persister get data\u0027,"},{"line_number":34,"context_line":"               default\u003d\u0027events\u0027),"},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027zookeeper_path\u0027,"},{"line_number":36,"context_line":"               help\u003d\u0027Path in zookeeper for kafka consumer group partitioning algo\u0027,"},{"line_number":37,"context_line":"               default\u003d\u0027/persister_partitions/$kafka_events.topic\u0027),"}],"source_content_type":"text/x-python","patch_set":14,"id":"df3967d1_5d866868","line":34,"range":{"start_line":34,"start_character":24,"end_line":34,"end_character":30},"updated":"2017-08-03 13:45:29.000000000","message":"this topic is used by metric pipeline, we should change it to for example: op_events","commit_id":"624ee0f28c30fe05b37f59a17145bbfb58af589d"},{"author":{"_account_id":23043,"name":"Jakub Wachowski","email":"jakub.wachowski@ts.fujitsu.com","username":"wachowskij"},"change_message_id":"e92b370930e9a006ed313423dc25a396ce467d1e","unresolved":false,"context_lines":[{"line_number":31,"context_line":"               default\u003d\u00271_events\u0027),"},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027topic\u0027,"},{"line_number":33,"context_line":"               help\u003d\u0027Kafka Topic from which persister get data\u0027,"},{"line_number":34,"context_line":"               default\u003d\u0027events\u0027),"},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027zookeeper_path\u0027,"},{"line_number":36,"context_line":"               help\u003d\u0027Path in zookeeper for kafka consumer group partitioning algo\u0027,"},{"line_number":37,"context_line":"               default\u003d\u0027/persister_partitions/$kafka_events.topic\u0027),"}],"source_content_type":"text/x-python","patch_set":14,"id":"df3967d1_ad52a639","line":34,"range":{"start_line":34,"start_character":24,"end_line":34,"end_character":30},"in_reply_to":"df3967d1_5d866868","updated":"2017-08-04 08:23:10.000000000","message":"Done","commit_id":"624ee0f28c30fe05b37f59a17145bbfb58af589d"},{"author":{"_account_id":20033,"name":"Artur Basiak","email":"artur.basiak@ts.fujitsu.com","username":"abasiak"},"change_message_id":"2cd6c1bd4cf3f99f8b4e53a2798c63db463c5ecb","unresolved":false,"context_lines":[{"line_number":33,"context_line":"               help\u003d\u0027Kafka Topic from which persister get data\u0027,"},{"line_number":34,"context_line":"               default\u003d\u0027monevents\u0027),"},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027zookeeper_path\u0027,"},{"line_number":36,"context_line":"               help\u003d\u0027Path in zookeeper for kafka consumer group partitioning algo\u0027,"},{"line_number":37,"context_line":"               default\u003d\u0027/persister_partitions/$kafka_events.topic\u0027),"},{"line_number":38,"context_line":"]"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"bf3e73b7_bf038e0d","line":36,"range":{"start_line":36,"start_character":77,"end_line":36,"end_character":81},"updated":"2017-08-07 08:20:04.000000000","message":"algorithm","commit_id":"d2b7e275d4a3b79a7c7b6bfd307e5f2fede6387c"},{"author":{"_account_id":23043,"name":"Jakub Wachowski","email":"jakub.wachowski@ts.fujitsu.com","username":"wachowskij"},"change_message_id":"5f165ff789051124599e9e0092ad4c264f8a73d5","unresolved":false,"context_lines":[{"line_number":33,"context_line":"               help\u003d\u0027Kafka Topic from which persister get data\u0027,"},{"line_number":34,"context_line":"               default\u003d\u0027monevents\u0027),"},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027zookeeper_path\u0027,"},{"line_number":36,"context_line":"               help\u003d\u0027Path in zookeeper for kafka consumer group partitioning algo\u0027,"},{"line_number":37,"context_line":"               default\u003d\u0027/persister_partitions/$kafka_events.topic\u0027),"},{"line_number":38,"context_line":"]"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"bf3e73b7_7f2c0647","line":36,"range":{"start_line":36,"start_character":77,"end_line":36,"end_character":81},"in_reply_to":"bf3e73b7_bf038e0d","updated":"2017-08-07 08:32:19.000000000","message":"Done","commit_id":"d2b7e275d4a3b79a7c7b6bfd307e5f2fede6387c"},{"author":{"_account_id":20033,"name":"Artur Basiak","email":"artur.basiak@ts.fujitsu.com","username":"abasiak"},"change_message_id":"2cd6c1bd4cf3f99f8b4e53a2798c63db463c5ecb","unresolved":false,"context_lines":[{"line_number":37,"context_line":"               default\u003d\u0027/persister_partitions/$kafka_events.topic\u0027),"},{"line_number":38,"context_line":"]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"# Replace Default OPt with reference to kafka group option"},{"line_number":41,"context_line":"kafka_common_opts \u003d deepcopy(kafka_common.kafka_common_opts)"},{"line_number":42,"context_line":"for opt in kafka_common_opts:"},{"line_number":43,"context_line":"    opt.default \u003d \u0027$kafka.{}\u0027.format(opt.name)"}],"source_content_type":"text/x-python","patch_set":16,"id":"bf3e73b7_7f0d2636","line":40,"range":{"start_line":40,"start_character":18,"end_line":40,"end_character":21},"updated":"2017-08-07 08:20:04.000000000","message":"OPT","commit_id":"d2b7e275d4a3b79a7c7b6bfd307e5f2fede6387c"},{"author":{"_account_id":23043,"name":"Jakub Wachowski","email":"jakub.wachowski@ts.fujitsu.com","username":"wachowskij"},"change_message_id":"5f165ff789051124599e9e0092ad4c264f8a73d5","unresolved":false,"context_lines":[{"line_number":37,"context_line":"               default\u003d\u0027/persister_partitions/$kafka_events.topic\u0027),"},{"line_number":38,"context_line":"]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"# Replace Default OPt with reference to kafka group option"},{"line_number":41,"context_line":"kafka_common_opts \u003d deepcopy(kafka_common.kafka_common_opts)"},{"line_number":42,"context_line":"for opt in kafka_common_opts:"},{"line_number":43,"context_line":"    opt.default \u003d \u0027$kafka.{}\u0027.format(opt.name)"}],"source_content_type":"text/x-python","patch_set":16,"id":"bf3e73b7_5f21424d","line":40,"range":{"start_line":40,"start_character":18,"end_line":40,"end_character":21},"in_reply_to":"bf3e73b7_7f0d2636","updated":"2017-08-07 08:32:19.000000000","message":"Done","commit_id":"d2b7e275d4a3b79a7c7b6bfd307e5f2fede6387c"},{"author":{"_account_id":26141,"name":"Adrian Czarnecki","email":"adrian.czarnecki@ts.fujitsu.com","username":"czarneckia"},"change_message_id":"6293af1b0034a574a344c25eff76179047ba0d28","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or"},{"line_number":12,"context_line":"# implied."},{"line_number":13,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":"from copy import deepcopy"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf3e73b7_7d5e4ee7","line":14,"range":{"start_line":14,"start_character":1,"end_line":14,"end_character":31},"updated":"2017-08-07 09:53:29.000000000","message":"Empty line after License","commit_id":"37205c988cf13ac9b2e1dcc9753f82f5d29029b5"},{"author":{"_account_id":23043,"name":"Jakub Wachowski","email":"jakub.wachowski@ts.fujitsu.com","username":"wachowskij"},"change_message_id":"6ecae2e004fc8e8cb63eeeecff22eca658aa91ec","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or"},{"line_number":12,"context_line":"# implied."},{"line_number":13,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":"from copy import deepcopy"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf3e73b7_73043d7c","line":14,"range":{"start_line":14,"start_character":1,"end_line":14,"end_character":31},"in_reply_to":"bf3e73b7_7d5e4ee7","updated":"2017-08-07 11:19:27.000000000","message":"Done","commit_id":"37205c988cf13ac9b2e1dcc9753f82f5d29029b5"}],"monasca_persister/persister.py":[{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"002a2c50cf83c60d3566b3c35a230bcb6ed4af46","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    metric_repository \u003d simport.load(cfg.CONF.repositories.metrics_driver)"},{"line_number":104,"context_line":"    alarm_state_history_repository \u003d simport.load(cfg.CONF.repositories.alarm_state_history_driver)"},{"line_number":105,"context_line":"    events_repository \u003d simport.load(cfg.CONF.repositories.events_driver)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    # Add processors for metrics topic"},{"line_number":108,"context_line":"    for proc in range(0, cfg.CONF.kafka_metrics.num_processors):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f1a1f67_35f7ec8d","line":105,"updated":"2017-07-19 10:29:57.000000000","message":"If we\u0027re adding that here, I strongly suggest having something similar to profiles. In other words, we would have two possible profiles here\n\n  --profile metric\n  --profile events\n\nin order not to break things anywhere, we ought to make events profile optional.","commit_id":"f0f9eed45ae72dacffe8744e33c892b2254e5d45"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"033708831ba363f70add311ef661d64a6da96bee","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    config.parse_args()"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    # Add processors for metrics topic"},{"line_number":111,"context_line":"    prepare_processes(cfg.CONF.kafka_metrics, cfg.CONF.repositories.metrics_driver)"},{"line_number":112,"context_line":"    # Add processors for alarm history topic"},{"line_number":113,"context_line":"    prepare_processes(cfg.CONF.kafka_alarm_history, cfg.CONF.repositories.alarm_state_history_driver)"},{"line_number":114,"context_line":"    # Add processors for events topic"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff346bd7_b145fe19","line":111,"updated":"2017-07-24 07:42:07.000000000","message":"Did you consider this idea with profiles ?","commit_id":"1a439883cd21a98e071aecefe932189dd6063211"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"a25c4bcd842fed1c23f98c0c686599b48f708335","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    config.parse_args()"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    # Add processors for metrics topic"},{"line_number":111,"context_line":"    prepare_processes(cfg.CONF.kafka_metrics, cfg.CONF.repositories.metrics_driver)"},{"line_number":112,"context_line":"    # Add processors for alarm history topic"},{"line_number":113,"context_line":"    prepare_processes(cfg.CONF.kafka_alarm_history, cfg.CONF.repositories.alarm_state_history_driver)"},{"line_number":114,"context_line":"    # Add processors for events topic"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff346bd7_d5e187d2","line":111,"in_reply_to":"ff346bd7_97766ad8","updated":"2017-07-24 11:46:44.000000000","message":"Sneaky...although it will require some sort of clear documentation ;-)","commit_id":"1a439883cd21a98e071aecefe932189dd6063211"},{"author":{"_account_id":23043,"name":"Jakub Wachowski","email":"jakub.wachowski@ts.fujitsu.com","username":"wachowskij"},"change_message_id":"14d6d1e559277d7f82aca650f5bb2c50b29f1568","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    config.parse_args()"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    # Add processors for metrics topic"},{"line_number":111,"context_line":"    prepare_processes(cfg.CONF.kafka_metrics, cfg.CONF.repositories.metrics_driver)"},{"line_number":112,"context_line":"    # Add processors for alarm history topic"},{"line_number":113,"context_line":"    prepare_processes(cfg.CONF.kafka_alarm_history, cfg.CONF.repositories.alarm_state_history_driver)"},{"line_number":114,"context_line":"    # Add processors for events topic"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff346bd7_97766ad8","line":111,"in_reply_to":"ff346bd7_b145fe19","updated":"2017-07-24 09:11:49.000000000","message":"Well, it all depends on the actual persister configuration - setting number of workers for metrics/alarms/events to 0 disables processing of the corresponding item type.","commit_id":"1a439883cd21a98e071aecefe932189dd6063211"}],"monasca_persister/repositories/elasticsearch/events_repository.py":[{"author":{"_account_id":20033,"name":"Artur Basiak","email":"artur.basiak@ts.fujitsu.com","username":"abasiak"},"change_message_id":"e3ca310dc173e4b954551057723302edac1972a7","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from monasca_persister.repositories import abstract_repository"},{"line_number":20,"context_line":"from monasca_persister.repositories.utils import parse_events_message"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class ElasticSearchEventsRepository(abstract_repository.AbstractRepository):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff346bd7_c85e8fe5","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":69},"updated":"2017-07-24 10:35:59.000000000","message":"in openstack you need to import modules not objects, so\n  from monasca_persister.repositories import utils","commit_id":"bc6745acdad18a9df98ece620af0b3098bf7046b"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"fa60923514061257ca61a1f62938450af5c2355f","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from monasca_persister.repositories import abstract_repository"},{"line_number":20,"context_line":"from monasca_persister.repositories.utils import parse_events_message"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class ElasticSearchEventsRepository(abstract_repository.AbstractRepository):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff346bd7_25772b05","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":69},"in_reply_to":"ff346bd7_bf62433d","updated":"2017-07-26 12:50:22.000000000","message":"That\u0027s another problem to be sure. You are welcome to fix the code there if there are similar issues.","commit_id":"bc6745acdad18a9df98ece620af0b3098bf7046b"},{"author":{"_account_id":23043,"name":"Jakub Wachowski","email":"jakub.wachowski@ts.fujitsu.com","username":"wachowskij"},"change_message_id":"0184f05b2d421ccb885dd3f13440f8a09959246a","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from monasca_persister.repositories import abstract_repository"},{"line_number":20,"context_line":"from monasca_persister.repositories.utils import parse_events_message"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class ElasticSearchEventsRepository(abstract_repository.AbstractRepository):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff346bd7_bf62433d","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":69},"in_reply_to":"ff346bd7_c85e8fe5","updated":"2017-07-25 06:23:53.000000000","message":"Sure, no problem, but please see influx and cassandra repositories ;)","commit_id":"bc6745acdad18a9df98ece620af0b3098bf7046b"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"d0ad49c57ae46bd835eaeac51ac0d3701f253f1c","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from monasca_persister.repositories import utils"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class ElasticSearchEventsRepository(abstract_repository.AbstractRepository):"},{"line_number":24,"context_line":"    def __init__(self):"},{"line_number":25,"context_line":"        super(ElasticSearchEventsRepository, self).__init__()"},{"line_number":26,"context_line":"        self.conf \u003d cfg.CONF.elasticsearch"}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_1d239b07","line":23,"updated":"2017-08-01 07:45:17.000000000","message":"Documentation for this class is requested ;)","commit_id":"702af6cd5a72f60712905995e48f92436ff0b3fc"},{"author":{"_account_id":20033,"name":"Artur Basiak","email":"artur.basiak@ts.fujitsu.com","username":"abasiak"},"change_message_id":"23984053d38afcf2d66766d13c74f5e826e599cd","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import ujson"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from elasticsearch import Elasticsearch"},{"line_number":19,"context_line":"from oslo_config import cfg"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from monasca_persister.repositories import abstract_repository"}],"source_content_type":"text/x-python","patch_set":14,"id":"df3967d1_5d0788cb","line":18,"range":{"start_line":18,"start_character":5,"end_line":18,"end_character":18},"updated":"2017-08-03 13:45:29.000000000","message":"This should be added to requirements.txt","commit_id":"624ee0f28c30fe05b37f59a17145bbfb58af589d"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"152206cd33f2d638775f222369554212797435f4","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import ujson"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from elasticsearch import Elasticsearch"},{"line_number":19,"context_line":"from oslo_config import cfg"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from monasca_persister.repositories import abstract_repository"}],"source_content_type":"text/x-python","patch_set":14,"id":"df3967d1_5a6d40ca","line":18,"range":{"start_line":18,"start_character":5,"end_line":18,"end_character":18},"in_reply_to":"df3967d1_5d0788cb","updated":"2017-08-03 19:27:31.000000000","message":"Actually that should be added as extras, \u0027cause someone might not want to deploy persister with events therefore elasticsearch might not be needed.","commit_id":"624ee0f28c30fe05b37f59a17145bbfb58af589d"},{"author":{"_account_id":23043,"name":"Jakub Wachowski","email":"jakub.wachowski@ts.fujitsu.com","username":"wachowskij"},"change_message_id":"e92b370930e9a006ed313423dc25a396ce467d1e","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import ujson"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from elasticsearch import Elasticsearch"},{"line_number":19,"context_line":"from oslo_config import cfg"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from monasca_persister.repositories import abstract_repository"}],"source_content_type":"text/x-python","patch_set":14,"id":"df3967d1_6d3ddedb","line":18,"range":{"start_line":18,"start_character":5,"end_line":18,"end_character":18},"in_reply_to":"df3967d1_5d0788cb","updated":"2017-08-04 08:23:10.000000000","message":"I\u0027ve added it (?) to tox.ini","commit_id":"624ee0f28c30fe05b37f59a17145bbfb58af589d"},{"author":{"_account_id":20033,"name":"Artur Basiak","email":"artur.basiak@ts.fujitsu.com","username":"abasiak"},"change_message_id":"23984053d38afcf2d66766d13c74f5e826e599cd","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        for data_point in data_points:"},{"line_number":42,"context_line":"            (tenant_id, timestamp, event_type, payload) \u003d data_point"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"            index \u003d \u0027%s-%s\u0027 % (self.conf.index_name, tenant_id)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"            body \u003d {"},{"line_number":47,"context_line":"                \u0027tenant_id\u0027: tenant_id,"}],"source_content_type":"text/x-python","patch_set":14,"id":"df3967d1_9daa906e","line":44,"range":{"start_line":44,"start_character":12,"end_line":44,"end_character":63},"updated":"2017-08-03 13:45:29.000000000","message":"index shoould also contains date: yyyy-mm-dd","commit_id":"624ee0f28c30fe05b37f59a17145bbfb58af589d"},{"author":{"_account_id":23043,"name":"Jakub Wachowski","email":"jakub.wachowski@ts.fujitsu.com","username":"wachowskij"},"change_message_id":"e92b370930e9a006ed313423dc25a396ce467d1e","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        for data_point in data_points:"},{"line_number":42,"context_line":"            (tenant_id, timestamp, event_type, payload) \u003d data_point"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"            index \u003d \u0027%s-%s\u0027 % (self.conf.index_name, tenant_id)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"            body \u003d {"},{"line_number":47,"context_line":"                \u0027tenant_id\u0027: tenant_id,"}],"source_content_type":"text/x-python","patch_set":14,"id":"df3967d1_0d4d32c3","line":44,"range":{"start_line":44,"start_character":12,"end_line":44,"end_character":63},"in_reply_to":"df3967d1_9daa906e","updated":"2017-08-04 08:23:10.000000000","message":"Done","commit_id":"624ee0f28c30fe05b37f59a17145bbfb58af589d"},{"author":{"_account_id":20033,"name":"Artur Basiak","email":"artur.basiak@ts.fujitsu.com","username":"abasiak"},"change_message_id":"23984053d38afcf2d66766d13c74f5e826e599cd","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                \u0027payload\u0027: payload"},{"line_number":51,"context_line":"            }"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"            self.es.create("},{"line_number":54,"context_line":"                index\u003dindex,"},{"line_number":55,"context_line":"                doc_type\u003d\u0027event\u0027,"},{"line_number":56,"context_line":"                body\u003dujson.dumps(body)"},{"line_number":57,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":14,"id":"df3967d1_9d4df0c5","line":57,"range":{"start_line":53,"start_character":12,"end_line":57,"end_character":13},"updated":"2017-08-03 13:45:29.000000000","message":"What if index already exists? Do this code throws any error trying to create index which is already exists?","commit_id":"624ee0f28c30fe05b37f59a17145bbfb58af589d"},{"author":{"_account_id":23043,"name":"Jakub Wachowski","email":"jakub.wachowski@ts.fujitsu.com","username":"wachowskij"},"change_message_id":"e92b370930e9a006ed313423dc25a396ce467d1e","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                \u0027payload\u0027: payload"},{"line_number":51,"context_line":"            }"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"            self.es.create("},{"line_number":54,"context_line":"                index\u003dindex,"},{"line_number":55,"context_line":"                doc_type\u003d\u0027event\u0027,"},{"line_number":56,"context_line":"                body\u003dujson.dumps(body)"},{"line_number":57,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":14,"id":"df3967d1_f42f5f85","line":57,"range":{"start_line":53,"start_character":12,"end_line":57,"end_character":13},"in_reply_to":"df3967d1_9d4df0c5","updated":"2017-08-04 08:23:10.000000000","message":"This call creates a document, not an index. And if index does not exist, then it is created.","commit_id":"624ee0f28c30fe05b37f59a17145bbfb58af589d"},{"author":{"_account_id":20033,"name":"Artur Basiak","email":"artur.basiak@ts.fujitsu.com","username":"abasiak"},"change_message_id":"2cd6c1bd4cf3f99f8b4e53a2798c63db463c5ecb","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        d \u003d None"},{"line_number":67,"context_line":"        if timestamp and len(timestamp) \u003e\u003d 10:"},{"line_number":68,"context_line":"            try:"},{"line_number":69,"context_line":"                d \u003d datetime.datetime.strptime(timestamp[0:10], \u0027%Y-%m-%d\u0027)"},{"line_number":70,"context_line":"            except ValueError, e:"},{"line_number":71,"context_line":"                LOG.warning(\"Unable to parse timestamp \u0027%s\u0027 - %s\" % (timestamp, str(e)))"},{"line_number":72,"context_line":"        if not d:"}],"source_content_type":"text/x-python","patch_set":16,"id":"bf3e73b7_7f5be62d","line":69,"range":{"start_line":69,"start_character":20,"end_line":69,"end_character":38},"updated":"2017-08-07 08:20:04.000000000","message":"to have it shorter:\n  from datetime import datetime","commit_id":"d2b7e275d4a3b79a7c7b6bfd307e5f2fede6387c"},{"author":{"_account_id":23043,"name":"Jakub Wachowski","email":"jakub.wachowski@ts.fujitsu.com","username":"wachowskij"},"change_message_id":"5f165ff789051124599e9e0092ad4c264f8a73d5","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        d \u003d None"},{"line_number":67,"context_line":"        if timestamp and len(timestamp) \u003e\u003d 10:"},{"line_number":68,"context_line":"            try:"},{"line_number":69,"context_line":"                d \u003d datetime.datetime.strptime(timestamp[0:10], \u0027%Y-%m-%d\u0027)"},{"line_number":70,"context_line":"            except ValueError, e:"},{"line_number":71,"context_line":"                LOG.warning(\"Unable to parse timestamp \u0027%s\u0027 - %s\" % (timestamp, str(e)))"},{"line_number":72,"context_line":"        if not d:"}],"source_content_type":"text/x-python","patch_set":16,"id":"bf3e73b7_3f1e7e0c","line":69,"range":{"start_line":69,"start_character":20,"end_line":69,"end_character":38},"in_reply_to":"bf3e73b7_7f5be62d","updated":"2017-08-07 08:32:19.000000000","message":"Done","commit_id":"d2b7e275d4a3b79a7c7b6bfd307e5f2fede6387c"},{"author":{"_account_id":20033,"name":"Artur Basiak","email":"artur.basiak@ts.fujitsu.com","username":"abasiak"},"change_message_id":"2cd6c1bd4cf3f99f8b4e53a2798c63db463c5ecb","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        if timestamp and len(timestamp) \u003e\u003d 10:"},{"line_number":68,"context_line":"            try:"},{"line_number":69,"context_line":"                d \u003d datetime.datetime.strptime(timestamp[0:10], \u0027%Y-%m-%d\u0027)"},{"line_number":70,"context_line":"            except ValueError, e:"},{"line_number":71,"context_line":"                LOG.warning(\"Unable to parse timestamp \u0027%s\u0027 - %s\" % (timestamp, str(e)))"},{"line_number":72,"context_line":"        if not d:"},{"line_number":73,"context_line":"            d \u003d datetime.datetime.today()"}],"source_content_type":"text/x-python","patch_set":16,"id":"bf3e73b7_1f4a9a54","line":70,"range":{"start_line":70,"start_character":19,"end_line":70,"end_character":32},"updated":"2017-08-07 08:20:04.000000000","message":"ValueError as e","commit_id":"d2b7e275d4a3b79a7c7b6bfd307e5f2fede6387c"},{"author":{"_account_id":23043,"name":"Jakub Wachowski","email":"jakub.wachowski@ts.fujitsu.com","username":"wachowskij"},"change_message_id":"5f165ff789051124599e9e0092ad4c264f8a73d5","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        if timestamp and len(timestamp) \u003e\u003d 10:"},{"line_number":68,"context_line":"            try:"},{"line_number":69,"context_line":"                d \u003d datetime.datetime.strptime(timestamp[0:10], \u0027%Y-%m-%d\u0027)"},{"line_number":70,"context_line":"            except ValueError, e:"},{"line_number":71,"context_line":"                LOG.warning(\"Unable to parse timestamp \u0027%s\u0027 - %s\" % (timestamp, str(e)))"},{"line_number":72,"context_line":"        if not d:"},{"line_number":73,"context_line":"            d \u003d datetime.datetime.today()"}],"source_content_type":"text/x-python","patch_set":16,"id":"bf3e73b7_1f1bba1b","line":70,"range":{"start_line":70,"start_character":19,"end_line":70,"end_character":32},"in_reply_to":"bf3e73b7_1f4a9a54","updated":"2017-08-07 08:32:19.000000000","message":"Done","commit_id":"d2b7e275d4a3b79a7c7b6bfd307e5f2fede6387c"}],"monasca_persister/repositories/utils.py":[{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"d0ad49c57ae46bd835eaeac51ac0d3701f253f1c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# (C) Copyright 2016-2017 Hewlett Packard Enterprise Development LP"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_bd624f3d","line":1,"updated":"2017-08-01 07:45:17.000000000","message":"Copyright.","commit_id":"702af6cd5a72f60712905995e48f92436ff0b3fc"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"d0ad49c57ae46bd835eaeac51ac0d3701f253f1c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# implied."},{"line_number":13,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":"import json"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def parse_measurement_message(message):"}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_dd71930e","line":15,"updated":"2017-08-01 07:45:17.000000000","message":"Could you rewrite it to use ujson ?","commit_id":"702af6cd5a72f60712905995e48f92436ff0b3fc"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"d0ad49c57ae46bd835eaeac51ac0d3701f253f1c","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            sub_alarms_json_snake_case, tenant_id, time_stamp)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"def parse_events_message(message):"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    decoded_message \u003d json.loads(message.message.value)"},{"line_number":106,"context_line":"    tenant_id \u003d decoded_message[\u0027payload\u0027][\u0027tenant_id\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_9d7c2bec","line":103,"updated":"2017-08-01 07:45:17.000000000","message":"Documentation bit.","commit_id":"702af6cd5a72f60712905995e48f92436ff0b3fc"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"d0ad49c57ae46bd835eaeac51ac0d3701f253f1c","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    tenant_id \u003d decoded_message[\u0027payload\u0027][\u0027tenant_id\u0027]"},{"line_number":107,"context_line":"    event_type \u003d decoded_message[\u0027event_type\u0027]"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    return (tenant_id,"},{"line_number":110,"context_line":"            event_type)"}],"source_content_type":"text/x-python","patch_set":12,"id":"df3967d1_3d6d3f32","line":109,"updated":"2017-08-01 07:45:17.000000000","message":"no need to have newline break here.","commit_id":"702af6cd5a72f60712905995e48f92436ff0b3fc"}],"tox.ini":[{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"16412d48165cdabc4b5831881a1419111cc2b999","unresolved":false,"context_lines":[{"line_number":20,"context_line":"                      rm"},{"line_number":21,"context_line":"install_command \u003d"},{"line_number":22,"context_line":"    {toxinidir}/tools/tox_install.sh {env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} {opts} {packages}"},{"line_number":23,"context_line":"deps \u003d .[influxdb,cassandra,elasticsearch]"},{"line_number":24,"context_line":"       -r{toxinidir}/requirements.txt"},{"line_number":25,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":26,"context_line":"commands \u003d"}],"source_content_type":"text/x-properties","patch_set":15,"id":"df3967d1_3ee81ee0","line":23,"updated":"2017-08-04 09:52:32.000000000","message":"you need to have elasticsearch group in extras.","commit_id":"a78a95c5cbc56705899c059a527ae2ae34b5a612"},{"author":{"_account_id":23043,"name":"Jakub Wachowski","email":"jakub.wachowski@ts.fujitsu.com","username":"wachowskij"},"change_message_id":"33b275c4b7be06061b8598d45224dfd34275ee9e","unresolved":false,"context_lines":[{"line_number":20,"context_line":"                      rm"},{"line_number":21,"context_line":"install_command \u003d"},{"line_number":22,"context_line":"    {toxinidir}/tools/tox_install.sh {env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} {opts} {packages}"},{"line_number":23,"context_line":"deps \u003d .[influxdb,cassandra,elasticsearch]"},{"line_number":24,"context_line":"       -r{toxinidir}/requirements.txt"},{"line_number":25,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":26,"context_line":"commands \u003d"}],"source_content_type":"text/x-properties","patch_set":15,"id":"bf3e73b7_29765008","line":23,"in_reply_to":"df3967d1_3ee81ee0","updated":"2017-08-07 07:09:00.000000000","message":"Done","commit_id":"a78a95c5cbc56705899c059a527ae2ae34b5a612"}]}
