)]}'
{"monasca_setup/agent_config.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f8b0b3e4a2f64245062b4576f3ee494007a43438","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    os.chown(config_path, 0, gid)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def check_endpoint_changes(value, config):"},{"line_number":98,"context_line":"    num_instances \u003d len(value[\u0027instances\u0027])"},{"line_number":99,"context_line":"    new_urls \u003d [i[\u0027url\u0027] for i in value[\u0027instances\u0027] if \u0027url\u0027 in i]"},{"line_number":100,"context_line":"    paths \u003d [url.split(\"://\")[1] for url in new_urls]"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_15fa6875","line":97,"updated":"2016-02-16 14:48:25.000000000","message":"Sorry, but I don\u0027t understand the logic of this function. If I understand correctly, you have a list of value[\u0027instances\u0027] and a list of config[\u0027instances\u0027]. And what do you want to remove from config[\u0027instances\u0027]?","commit_id":"39889b2dcff339370eeda8b6641c4671954739b3"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"b4e03845cc7d43e71f80f732d0f9be94ab494703","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    os.chown(config_path, 0, gid)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def check_endpoint_changes(value, config):"},{"line_number":98,"context_line":"    num_instances \u003d len(value[\u0027instances\u0027])"},{"line_number":99,"context_line":"    new_urls \u003d [i[\u0027url\u0027] for i in value[\u0027instances\u0027] if \u0027url\u0027 in i]"},{"line_number":100,"context_line":"    paths \u003d [url.split(\"://\")[1] for url in new_urls]"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_ea42770f","line":97,"in_reply_to":"dae33548_15fa6875","updated":"2016-02-16 17:54:53.000000000","message":"Hi Rodolfo, sorry for the confusion. Yes you are right. A list of value[\u0027instances\u0027] is the new http check list from running detection for all the plugins and the list of config[\u0027instances\u0027] is the old http check list read from yaml file. This function is to check if there are endpoint changes in http_check urls. If there is a url in config[\u0027instances\u0027] having the same path but different protocol with the one in value[\u0027instances\u0027], delete the old one which is in config[\u0027instances\u0027] and write the new one from value[\u0027instances\u0027] into http_check.yaml.","commit_id":"39889b2dcff339370eeda8b6641c4671954739b3"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"36fe704a0008e89a56c4cf162108319f626ca480","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    os.chown(config_path, 0, gid)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def check_endpoint_changes(value, config):"},{"line_number":98,"context_line":"    num_instances \u003d len(value[\u0027instances\u0027])"},{"line_number":99,"context_line":"    new_urls \u003d [i[\u0027url\u0027] for i in value[\u0027instances\u0027] if \u0027url\u0027 in i]"},{"line_number":100,"context_line":"    paths \u003d [url.split(\"://\")[1] for url in new_urls]"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_90ae5d7f","line":97,"in_reply_to":"dae33548_ea42770f","updated":"2016-02-17 08:04:23.000000000","message":"Thanks!","commit_id":"39889b2dcff339370eeda8b6641c4671954739b3"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f8b0b3e4a2f64245062b4576f3ee494007a43438","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    paths \u003d [url.split(\"://\")[1] for url in new_urls]"},{"line_number":101,"context_line":"    find_duplicates \u003d collections.defaultdict(list)"},{"line_number":102,"context_line":"    for i, item in enumerate(paths):"},{"line_number":103,"context_line":"        find_duplicates[item].append(i)"},{"line_number":104,"context_line":"    duplicates \u003d {k: v for k, v in find_duplicates.items() if"},{"line_number":105,"context_line":"                  len(v) \u003e 1}"},{"line_number":106,"context_line":"    duplicate_indices \u003d duplicates.values()"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_d8583535","line":103,"updated":"2016-02-16 14:48:25.000000000","message":"I don\u0027t understand this data structure. This dict will contain a set of key:value, with key\u003d[0 .. num(paths)-1]. It\u0027s like a list oh paths, and you already have one.","commit_id":"39889b2dcff339370eeda8b6641c4671954739b3"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"36fe704a0008e89a56c4cf162108319f626ca480","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    paths \u003d [url.split(\"://\")[1] for url in new_urls]"},{"line_number":101,"context_line":"    find_duplicates \u003d collections.defaultdict(list)"},{"line_number":102,"context_line":"    for i, item in enumerate(paths):"},{"line_number":103,"context_line":"        find_duplicates[item].append(i)"},{"line_number":104,"context_line":"    duplicates \u003d {k: v for k, v in find_duplicates.items() if"},{"line_number":105,"context_line":"                  len(v) \u003e 1}"},{"line_number":106,"context_line":"    duplicate_indices \u003d duplicates.values()"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_30bdd1b7","line":103,"in_reply_to":"dae33548_4d92989f","updated":"2016-02-17 08:04:23.000000000","message":"You are right!","commit_id":"39889b2dcff339370eeda8b6641c4671954739b3"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"b4e03845cc7d43e71f80f732d0f9be94ab494703","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    paths \u003d [url.split(\"://\")[1] for url in new_urls]"},{"line_number":101,"context_line":"    find_duplicates \u003d collections.defaultdict(list)"},{"line_number":102,"context_line":"    for i, item in enumerate(paths):"},{"line_number":103,"context_line":"        find_duplicates[item].append(i)"},{"line_number":104,"context_line":"    duplicates \u003d {k: v for k, v in find_duplicates.items() if"},{"line_number":105,"context_line":"                  len(v) \u003e 1}"},{"line_number":106,"context_line":"    duplicate_indices \u003d duplicates.values()"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_4d92989f","line":103,"in_reply_to":"dae33548_d8583535","updated":"2016-02-16 17:54:53.000000000","message":"find_duplicates is actually a list of tuples. Assume paths \u003d [a,a,b,b], find_duplicates will return [(a, [0,1]), (b, [2,3])]","commit_id":"39889b2dcff339370eeda8b6641c4671954739b3"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f8b0b3e4a2f64245062b4576f3ee494007a43438","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    for i, item in enumerate(paths):"},{"line_number":103,"context_line":"        find_duplicates[item].append(i)"},{"line_number":104,"context_line":"    duplicates \u003d {k: v for k, v in find_duplicates.items() if"},{"line_number":105,"context_line":"                  len(v) \u003e 1}"},{"line_number":106,"context_line":"    duplicate_indices \u003d duplicates.values()"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    # check which one is new, remove the old one"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_75677425","line":105,"updated":"2016-02-16 14:48:25.000000000","message":"\"v\" comes from \"find_duplicates\" dict. This dict will have only len\u003d1 items","commit_id":"39889b2dcff339370eeda8b6641c4671954739b3"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"36fe704a0008e89a56c4cf162108319f626ca480","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    for i, item in enumerate(paths):"},{"line_number":103,"context_line":"        find_duplicates[item].append(i)"},{"line_number":104,"context_line":"    duplicates \u003d {k: v for k, v in find_duplicates.items() if"},{"line_number":105,"context_line":"                  len(v) \u003e 1}"},{"line_number":106,"context_line":"    duplicate_indices \u003d duplicates.values()"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    # check which one is new, remove the old one"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_10c36d39","line":105,"in_reply_to":"dae33548_0d4d303e","updated":"2016-02-17 08:04:23.000000000","message":"Ok!","commit_id":"39889b2dcff339370eeda8b6641c4671954739b3"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"b4e03845cc7d43e71f80f732d0f9be94ab494703","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    for i, item in enumerate(paths):"},{"line_number":103,"context_line":"        find_duplicates[item].append(i)"},{"line_number":104,"context_line":"    duplicates \u003d {k: v for k, v in find_duplicates.items() if"},{"line_number":105,"context_line":"                  len(v) \u003e 1}"},{"line_number":106,"context_line":"    duplicate_indices \u003d duplicates.values()"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    # check which one is new, remove the old one"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_0d4d303e","line":105,"in_reply_to":"dae33548_75677425","updated":"2016-02-16 17:54:53.000000000","message":"If there are more than 2 duplicates in \u0027paths\u0027, you will get len(v) larger than 1.","commit_id":"39889b2dcff339370eeda8b6641c4671954739b3"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f8b0b3e4a2f64245062b4576f3ee494007a43438","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        remove_list +\u003d [index for indices in duplicate_indices for index in"},{"line_number":113,"context_line":"                        indices if new_urls[index] \u003d\u003d old_url]"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    indices_to_keep \u003d list(set(xrange(num_instances)).difference(set("},{"line_number":116,"context_line":"        remove_list)))"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    # Instances in remove list"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_d50da091","line":115,"updated":"2016-02-16 14:48:25.000000000","message":"num_instances is a list of all instances, remove_list comes from a reduced list of instances with \"url\" in. Index shouldn\u0027t match","commit_id":"39889b2dcff339370eeda8b6641c4671954739b3"},{"author":{"_account_id":18179,"name":"Kaiyan Sheng","email":"kaiyan.sheng@hpe.com","username":"kaiyan-sheng"},"change_message_id":"b4e03845cc7d43e71f80f732d0f9be94ab494703","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        remove_list +\u003d [index for indices in duplicate_indices for index in"},{"line_number":113,"context_line":"                        indices if new_urls[index] \u003d\u003d old_url]"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    indices_to_keep \u003d list(set(xrange(num_instances)).difference(set("},{"line_number":116,"context_line":"        remove_list)))"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    # Instances in remove list"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_8d894029","line":115,"in_reply_to":"dae33548_d50da091","updated":"2016-02-16 17:54:53.000000000","message":"Since remove_list is from indices in duplicate_indices which matches the indices/position of the urls, these indices match.","commit_id":"39889b2dcff339370eeda8b6641c4671954739b3"},{"author":{"_account_id":12133,"name":"Cindy O\u0027Neill","email":"cindy.o-neill@hpe.com","username":"oneilcin"},"change_message_id":"3c31a298c1a51362af6905a6c19b45bcdbf9c404","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    # Config: old config file read from the default directory"},{"line_number":100,"context_line":"    num_instances \u003d len(value[\u0027instances\u0027])"},{"line_number":101,"context_line":"    new_urls \u003d [i[\u0027url\u0027] for i in value[\u0027instances\u0027] if \u0027url\u0027 in i]"},{"line_number":102,"context_line":"    paths \u003d [url.split(\"://\")[1] for url in new_urls]"},{"line_number":103,"context_line":"    find_duplicates \u003d collections.defaultdict(list)"},{"line_number":104,"context_line":"    for i, item in enumerate(paths):"},{"line_number":105,"context_line":"        find_duplicates[item].append(i)"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_3b0f4d89","line":102,"updated":"2016-02-17 18:11:42.000000000","message":"I believe we need to match by url part + dimensions, since that is what defines a unique metric.\n\nWhen testing by running monasca-setup for a specific metric I noticed two problems. 1. the old metric definition was still there.  2. The definitions from other services were wiped out.  \nLook at the original config on deploy...then run a specific change like: sudo /opt/monasca/bin/monasca-setup -d httpcheck -a \u0027use_keystone\u003dTrue url\u003dhttps://padawan-ccp-c1-m1-mgmt:35357/v3 dimensions\u003dservice:identity-service,component:keystone-api,api_endpoint:admin,monitored_host_type:instance\u0027","commit_id":"64e8ed6b7ab6dbb83737a6f78ffe13082a63db33"},{"author":{"_account_id":12133,"name":"Cindy O\u0027Neill","email":"cindy.o-neill@hpe.com","username":"oneilcin"},"change_message_id":"b0a80c9185ecb55772b733e9578dadc1cc79d10e","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        find_duplicates[item].append(i)"},{"line_number":106,"context_line":"    duplicates \u003d {k: v for k, v in find_duplicates.items() if"},{"line_number":107,"context_line":"                  len(v) \u003e 1}"},{"line_number":108,"context_line":"    duplicate_indices \u003d duplicates.values()"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    # check which one is new, remove the old one"},{"line_number":111,"context_line":"    old_urls \u003d [i[\u0027url\u0027] for i in config[\u0027instances\u0027] if \u0027url\u0027 in i]"}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_c12ab08f","line":108,"updated":"2016-02-17 19:03:39.000000000","message":"it is difficult for me to understand what you are doing here. Can you please simplify.  What you should be doing is trying to find matching metrics from new and old.  I don\u0027t see this happening.","commit_id":"64e8ed6b7ab6dbb83737a6f78ffe13082a63db33"},{"author":{"_account_id":12133,"name":"Cindy O\u0027Neill","email":"cindy.o-neill@hpe.com","username":"oneilcin"},"change_message_id":"b0a80c9185ecb55772b733e9578dadc1cc79d10e","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    for old_url in old_urls:"},{"line_number":114,"context_line":"        remove_list +\u003d [index for indices in duplicate_indices for index in"},{"line_number":115,"context_line":"                        indices if new_urls[index] \u003d\u003d old_url]"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    indices_to_keep \u003d list(set(xrange(num_instances)).difference(set("},{"line_number":118,"context_line":"        remove_list)))"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"dae33548_84127655","line":116,"updated":"2016-02-17 19:03:39.000000000","message":"If you are removing old ones, you have to match by the url minus the protocol, since the protocol is what we are allowing to change.  You will not find one to remove it you match by http://blahblah and https://blahblah.","commit_id":"64e8ed6b7ab6dbb83737a6f78ffe13082a63db33"}]}
