)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9926,"name":"John Kung","email":"john.kung@windriver.com","username":"jkung"},"change_message_id":"9b7f6fe2ab50cc2209545540c447dac94ec0c2d2","unresolved":true,"context_lines":[{"line_number":17,"context_line":"[PASS] Verify data clear with database_metrics_clear"},{"line_number":18,"context_line":"[PASS] Verify buffer max size of 10 is working properly (deleting"},{"line_number":19,"context_line":"oldest entries)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Story: 2011509"},{"line_number":22,"context_line":"Task: 52669"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"a0f2aba8_7547026d","line":20,"updated":"2025-11-24 15:22:06.000000000","message":"recommend to verify whether this data persists over a duplex host-swact to measure service disruption time  (should also measure service disruption over an upgrade)","commit_id":"cd324604742fe65b456d3b771db870e57d96611c"},{"author":{"_account_id":34769,"name":"Davi Frossard","email":"dbarrosf@windriver.com","username":"dbarrosf"},"change_message_id":"04eac0cb40ad15f96e208e64ab6374bb2a89743a","unresolved":false,"context_lines":[{"line_number":17,"context_line":"[PASS] Verify data clear with database_metrics_clear"},{"line_number":18,"context_line":"[PASS] Verify buffer max size of 10 is working properly (deleting"},{"line_number":19,"context_line":"oldest entries)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Story: 2011509"},{"line_number":22,"context_line":"Task: 52669"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"311c4663_c4b7d010","line":20,"in_reply_to":"a0f2aba8_7547026d","updated":"2025-11-25 11:23:13.000000000","message":"Done","commit_id":"cd324604742fe65b456d3b771db870e57d96611c"}],"nfv/nfv-vim/nfv_vim/database/_database_metrics.py":[{"author":{"_account_id":35148,"name":"Joshua Kraitberg","email":"joshua.kraitberg@windriver.com","username":"jkraitbe-wr"},"change_message_id":"ddef3621b7c147469d6e749ca3657840d8f8b191","unresolved":true,"context_lines":[{"line_number":16,"context_line":"def database_metric_add(strategy_data):"},{"line_number":17,"context_line":"    \"\"\""},{"line_number":18,"context_line":"    Add strategy metrics to the database."},{"line_number":19,"context_line":"    Keep only the last MAX_METRICS inserted values (FIFO buffer behavior)."},{"line_number":20,"context_line":"    \"\"\""},{"line_number":21,"context_line":"    db \u003d database_get()"},{"line_number":22,"context_line":"    session \u003d db.session()"}],"source_content_type":"text/x-python","patch_set":8,"id":"cc979b19_b50d593d","line":19,"range":{"start_line":19,"start_character":23,"end_line":19,"end_character":34},"updated":"2025-07-08 17:49:31.000000000","message":"This is per `name` right?","commit_id":"bf1b2d55cb63ddcfcf754c9faec5c31416720b34"},{"author":{"_account_id":34769,"name":"Davi Frossard","email":"dbarrosf@windriver.com","username":"dbarrosf"},"change_message_id":"3316dd1985547222cb36a63c39229fb906cb2c38","unresolved":false,"context_lines":[{"line_number":16,"context_line":"def database_metric_add(strategy_data):"},{"line_number":17,"context_line":"    \"\"\""},{"line_number":18,"context_line":"    Add strategy metrics to the database."},{"line_number":19,"context_line":"    Keep only the last MAX_METRICS inserted values (FIFO buffer behavior)."},{"line_number":20,"context_line":"    \"\"\""},{"line_number":21,"context_line":"    db \u003d database_get()"},{"line_number":22,"context_line":"    session \u003d db.session()"}],"source_content_type":"text/x-python","patch_set":8,"id":"29ef7ec4_7a1ff15a","line":19,"range":{"start_line":19,"start_character":23,"end_line":19,"end_character":34},"in_reply_to":"cc979b19_b50d593d","updated":"2025-07-09 13:34:36.000000000","message":"per name and datatimestamp (composite key). I will use uuid","commit_id":"bf1b2d55cb63ddcfcf754c9faec5c31416720b34"},{"author":{"_account_id":35148,"name":"Joshua Kraitberg","email":"joshua.kraitberg@windriver.com","username":"jkraitbe-wr"},"change_message_id":"ddef3621b7c147469d6e749ca3657840d8f8b191","unresolved":true,"context_lines":[{"line_number":25,"context_line":"    json_dict \u003d json.loads(strategy_data)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    # Convert keys from hyphen-case to snake_case"},{"line_number":28,"context_line":"    strategy_dict \u003d {"},{"line_number":29,"context_line":"        key.replace(\"-\", \"_\"): value"},{"line_number":30,"context_line":"        for key, value in json_dict.items()"},{"line_number":31,"context_line":"    }"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    strategy \u003d strategy_dict[\"strategy\"]"},{"line_number":34,"context_line":"    apply_phase \u003d strategy[\"apply_phase\"]"}],"source_content_type":"text/x-python","patch_set":8,"id":"b386af7e_27e66a4f","line":31,"range":{"start_line":28,"start_character":0,"end_line":31,"end_character":5},"updated":"2025-07-08 17:49:31.000000000","message":"If hypen-case is really an issue, this needs to be recursive.","commit_id":"bf1b2d55cb63ddcfcf754c9faec5c31416720b34"},{"author":{"_account_id":34769,"name":"Davi Frossard","email":"dbarrosf@windriver.com","username":"dbarrosf"},"change_message_id":"3316dd1985547222cb36a63c39229fb906cb2c38","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    json_dict \u003d json.loads(strategy_data)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    # Convert keys from hyphen-case to snake_case"},{"line_number":28,"context_line":"    strategy_dict \u003d {"},{"line_number":29,"context_line":"        key.replace(\"-\", \"_\"): value"},{"line_number":30,"context_line":"        for key, value in json_dict.items()"},{"line_number":31,"context_line":"    }"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    strategy \u003d strategy_dict[\"strategy\"]"},{"line_number":34,"context_line":"    apply_phase \u003d strategy[\"apply_phase\"]"}],"source_content_type":"text/x-python","patch_set":8,"id":"a874eb54_869d9fce","line":31,"range":{"start_line":28,"start_character":0,"end_line":31,"end_character":5},"in_reply_to":"b386af7e_27e66a4f","updated":"2025-07-09 13:34:36.000000000","message":"Not an issue, will remove this","commit_id":"bf1b2d55cb63ddcfcf754c9faec5c31416720b34"},{"author":{"_account_id":35148,"name":"Joshua Kraitberg","email":"joshua.kraitberg@windriver.com","username":"jkraitbe-wr"},"change_message_id":"ddef3621b7c147469d6e749ca3657840d8f8b191","unresolved":true,"context_lines":[{"line_number":31,"context_line":"    }"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    strategy \u003d strategy_dict[\"strategy\"]"},{"line_number":34,"context_line":"    apply_phase \u003d strategy[\"apply_phase\"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    start \u003d apply_phase[\"start_date_time\"]"},{"line_number":37,"context_line":"    start_datetimestamp \u003d datetime.strptime(start, \"%Y-%m-%d %H:%M:%S\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"3b3edff0_e3845d1a","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":41},"updated":"2025-07-08 17:49:31.000000000","message":"strategy[\"apply_phase\"] can be None","commit_id":"bf1b2d55cb63ddcfcf754c9faec5c31416720b34"},{"author":{"_account_id":34769,"name":"Davi Frossard","email":"dbarrosf@windriver.com","username":"dbarrosf"},"change_message_id":"3316dd1985547222cb36a63c39229fb906cb2c38","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    }"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    strategy \u003d strategy_dict[\"strategy\"]"},{"line_number":34,"context_line":"    apply_phase \u003d strategy[\"apply_phase\"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    start \u003d apply_phase[\"start_date_time\"]"},{"line_number":37,"context_line":"    start_datetimestamp \u003d datetime.strptime(start, \"%Y-%m-%d %H:%M:%S\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"fc3855d9_4aab6b73","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":41},"in_reply_to":"3b3edff0_e3845d1a","updated":"2025-07-09 13:34:36.000000000","message":"Done","commit_id":"bf1b2d55cb63ddcfcf754c9faec5c31416720b34"},{"author":{"_account_id":35148,"name":"Joshua Kraitberg","email":"joshua.kraitberg@windriver.com","username":"jkraitbe-wr"},"change_message_id":"ddef3621b7c147469d6e749ca3657840d8f8b191","unresolved":true,"context_lines":[{"line_number":33,"context_line":"    strategy \u003d strategy_dict[\"strategy\"]"},{"line_number":34,"context_line":"    apply_phase \u003d strategy[\"apply_phase\"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    start \u003d apply_phase[\"start_date_time\"]"},{"line_number":37,"context_line":"    start_datetimestamp \u003d datetime.strptime(start, \"%Y-%m-%d %H:%M:%S\")"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    metric \u003d query.filter("}],"source_content_type":"text/x-python","patch_set":8,"id":"4c58b52c_0b751f4d","line":36,"range":{"start_line":36,"start_character":12,"end_line":36,"end_character":42},"updated":"2025-07-08 17:49:31.000000000","message":"This can also be None","commit_id":"bf1b2d55cb63ddcfcf754c9faec5c31416720b34"},{"author":{"_account_id":34769,"name":"Davi Frossard","email":"dbarrosf@windriver.com","username":"dbarrosf"},"change_message_id":"3316dd1985547222cb36a63c39229fb906cb2c38","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    strategy \u003d strategy_dict[\"strategy\"]"},{"line_number":34,"context_line":"    apply_phase \u003d strategy[\"apply_phase\"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    start \u003d apply_phase[\"start_date_time\"]"},{"line_number":37,"context_line":"    start_datetimestamp \u003d datetime.strptime(start, \"%Y-%m-%d %H:%M:%S\")"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    metric \u003d query.filter("}],"source_content_type":"text/x-python","patch_set":8,"id":"b6d9c5e2_4b03fcc5","line":36,"range":{"start_line":36,"start_character":12,"end_line":36,"end_character":42},"in_reply_to":"4c58b52c_0b751f4d","updated":"2025-07-09 13:34:36.000000000","message":"Done","commit_id":"bf1b2d55cb63ddcfcf754c9faec5c31416720b34"},{"author":{"_account_id":35148,"name":"Joshua Kraitberg","email":"joshua.kraitberg@windriver.com","username":"jkraitbe-wr"},"change_message_id":"ddef3621b7c147469d6e749ca3657840d8f8b191","unresolved":true,"context_lines":[{"line_number":34,"context_line":"    apply_phase \u003d strategy[\"apply_phase\"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    start \u003d apply_phase[\"start_date_time\"]"},{"line_number":37,"context_line":"    start_datetimestamp \u003d datetime.strptime(start, \"%Y-%m-%d %H:%M:%S\")"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    metric \u003d query.filter("},{"line_number":40,"context_line":"        model.Metrics.metric_name \u003d\u003d strategy[\"name\"],"},{"line_number":41,"context_line":"        model.Metrics.start_datetimestamp \u003d\u003d start_datetimestamp"},{"line_number":42,"context_line":"    ).first()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    if not metric:"},{"line_number":45,"context_line":"        total_metrics \u003d query.count()"}],"source_content_type":"text/x-python","patch_set":8,"id":"4eb211b7_7a333cab","line":42,"range":{"start_line":37,"start_character":0,"end_line":42,"end_character":13},"updated":"2025-07-08 17:49:31.000000000","message":"Using the uuid for this would be preferrable","commit_id":"bf1b2d55cb63ddcfcf754c9faec5c31416720b34"},{"author":{"_account_id":34769,"name":"Davi Frossard","email":"dbarrosf@windriver.com","username":"dbarrosf"},"change_message_id":"3316dd1985547222cb36a63c39229fb906cb2c38","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    apply_phase \u003d strategy[\"apply_phase\"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    start \u003d apply_phase[\"start_date_time\"]"},{"line_number":37,"context_line":"    start_datetimestamp \u003d datetime.strptime(start, \"%Y-%m-%d %H:%M:%S\")"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    metric \u003d query.filter("},{"line_number":40,"context_line":"        model.Metrics.metric_name \u003d\u003d strategy[\"name\"],"},{"line_number":41,"context_line":"        model.Metrics.start_datetimestamp \u003d\u003d start_datetimestamp"},{"line_number":42,"context_line":"    ).first()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    if not metric:"},{"line_number":45,"context_line":"        total_metrics \u003d query.count()"}],"source_content_type":"text/x-python","patch_set":8,"id":"a6d435b9_14c8d986","line":42,"range":{"start_line":37,"start_character":0,"end_line":42,"end_character":13},"in_reply_to":"4eb211b7_7a333cab","updated":"2025-07-09 13:34:36.000000000","message":"Done","commit_id":"bf1b2d55cb63ddcfcf754c9faec5c31416720b34"},{"author":{"_account_id":35148,"name":"Joshua Kraitberg","email":"joshua.kraitberg@windriver.com","username":"jkraitbe-wr"},"change_message_id":"ddef3621b7c147469d6e749ca3657840d8f8b191","unresolved":true,"context_lines":[{"line_number":44,"context_line":"    if not metric:"},{"line_number":45,"context_line":"        total_metrics \u003d query.count()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        if total_metrics \u003e\u003d MAX_METRICS:"},{"line_number":48,"context_line":"            oldest \u003d query.order_by(model.Metrics.rowid.asc()).first()"},{"line_number":49,"context_line":"            if oldest:"},{"line_number":50,"context_line":"                session.delete(oldest)"}],"source_content_type":"text/x-python","patch_set":8,"id":"d3b541c6_1a45b8ed","line":47,"range":{"start_line":47,"start_character":28,"end_line":47,"end_character":39},"updated":"2025-07-08 17:49:31.000000000","message":"Recommend using CONF instead of a const for this.  Using CONF would also require a change in puppet.\n\n\ne.g.\n```\nfrom nfv_plugins.nfvi_plugins import config\n\nif total_metrics \u003e\u003d config.CONF[\u0027MAX_METRICS\u0027]:\n```\n\ne.g. \nhttps://review.opendev.org/c/starlingx/nfv/+/942119/2/nfv/nfv-plugins/nfv_plugins/nfvi_plugins/config.ini\nhttps://review.opendev.org/c/starlingx/stx-puppet/+/942116","commit_id":"bf1b2d55cb63ddcfcf754c9faec5c31416720b34"},{"author":{"_account_id":34769,"name":"Davi Frossard","email":"dbarrosf@windriver.com","username":"dbarrosf"},"change_message_id":"3316dd1985547222cb36a63c39229fb906cb2c38","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    if not metric:"},{"line_number":45,"context_line":"        total_metrics \u003d query.count()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        if total_metrics \u003e\u003d MAX_METRICS:"},{"line_number":48,"context_line":"            oldest \u003d query.order_by(model.Metrics.rowid.asc()).first()"},{"line_number":49,"context_line":"            if oldest:"},{"line_number":50,"context_line":"                session.delete(oldest)"}],"source_content_type":"text/x-python","patch_set":8,"id":"05b28865_66dc0bbf","line":47,"range":{"start_line":47,"start_character":28,"end_line":47,"end_character":39},"in_reply_to":"d3b541c6_1a45b8ed","updated":"2025-07-09 13:34:36.000000000","message":"Done","commit_id":"bf1b2d55cb63ddcfcf754c9faec5c31416720b34"},{"author":{"_account_id":35148,"name":"Joshua Kraitberg","email":"joshua.kraitberg@windriver.com","username":"jkraitbe-wr"},"change_message_id":"ddef3621b7c147469d6e749ca3657840d8f8b191","unresolved":true,"context_lines":[{"line_number":45,"context_line":"        total_metrics \u003d query.count()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        if total_metrics \u003e\u003d MAX_METRICS:"},{"line_number":48,"context_line":"            oldest \u003d query.order_by(model.Metrics.rowid.asc()).first()"},{"line_number":49,"context_line":"            if oldest:"},{"line_number":50,"context_line":"                session.delete(oldest)"},{"line_number":51,"context_line":"                session.flush()"}],"source_content_type":"text/x-python","patch_set":8,"id":"29b5e26f_b8984599","line":48,"updated":"2025-07-08 17:49:31.000000000","message":"nit: Pretty unlikely but could be more than 1 extra","commit_id":"bf1b2d55cb63ddcfcf754c9faec5c31416720b34"},{"author":{"_account_id":34769,"name":"Davi Frossard","email":"dbarrosf@windriver.com","username":"dbarrosf"},"change_message_id":"3316dd1985547222cb36a63c39229fb906cb2c38","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        total_metrics \u003d query.count()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        if total_metrics \u003e\u003d MAX_METRICS:"},{"line_number":48,"context_line":"            oldest \u003d query.order_by(model.Metrics.rowid.asc()).first()"},{"line_number":49,"context_line":"            if oldest:"},{"line_number":50,"context_line":"                session.delete(oldest)"},{"line_number":51,"context_line":"                session.flush()"}],"source_content_type":"text/x-python","patch_set":8,"id":"2ad13cbd_dbedefa5","line":48,"in_reply_to":"29b5e26f_b8984599","updated":"2025-07-09 13:34:36.000000000","message":"Done","commit_id":"bf1b2d55cb63ddcfcf754c9faec5c31416720b34"},{"author":{"_account_id":35148,"name":"Joshua Kraitberg","email":"joshua.kraitberg@windriver.com","username":"jkraitbe-wr"},"change_message_id":"ddef3621b7c147469d6e749ca3657840d8f8b191","unresolved":true,"context_lines":[{"line_number":74,"context_line":"    session \u003d db.session()"},{"line_number":75,"context_line":"    query \u003d session.query(model.Metrics)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    return list(query.order_by(model.Metrics.rowid.asc()).all())  # pylint: disable\u003dno-member"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"def database_metrics_clear():"}],"source_content_type":"text/x-python","patch_set":8,"id":"83a3c321_d6f417a8","line":77,"range":{"start_line":77,"start_character":4,"end_line":77,"end_character":65},"updated":"2025-07-08 17:49:31.000000000","message":"nit: Group by name","commit_id":"bf1b2d55cb63ddcfcf754c9faec5c31416720b34"},{"author":{"_account_id":34769,"name":"Davi Frossard","email":"dbarrosf@windriver.com","username":"dbarrosf"},"change_message_id":"ab6a4f027833b5268d6d7db7cea71d7e673f493e","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    session \u003d db.session()"},{"line_number":75,"context_line":"    query \u003d session.query(model.Metrics)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    return list(query.order_by(model.Metrics.rowid.asc()).all())  # pylint: disable\u003dno-member"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"def database_metrics_clear():"}],"source_content_type":"text/x-python","patch_set":8,"id":"a5d05261_70d7bcec","line":77,"range":{"start_line":77,"start_character":4,"end_line":77,"end_character":65},"in_reply_to":"38eb1998_809eda3e","updated":"2025-07-09 17:57:10.000000000","message":"Done","commit_id":"bf1b2d55cb63ddcfcf754c9faec5c31416720b34"},{"author":{"_account_id":34769,"name":"Davi Frossard","email":"dbarrosf@windriver.com","username":"dbarrosf"},"change_message_id":"3316dd1985547222cb36a63c39229fb906cb2c38","unresolved":true,"context_lines":[{"line_number":74,"context_line":"    session \u003d db.session()"},{"line_number":75,"context_line":"    query \u003d session.query(model.Metrics)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    return list(query.order_by(model.Metrics.rowid.asc()).all())  # pylint: disable\u003dno-member"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"def database_metrics_clear():"}],"source_content_type":"text/x-python","patch_set":8,"id":"38eb1998_809eda3e","line":77,"range":{"start_line":77,"start_character":4,"end_line":77,"end_character":65},"in_reply_to":"83a3c321_d6f417a8","updated":"2025-07-09 13:34:36.000000000","message":"why?","commit_id":"bf1b2d55cb63ddcfcf754c9faec5c31416720b34"}],"nfv/nfv-vim/nfv_vim/database/_database_sw_update.py":[{"author":{"_account_id":35148,"name":"Joshua Kraitberg","email":"joshua.kraitberg@windriver.com","username":"jkraitbe-wr"},"change_message_id":"ddef3621b7c147469d6e749ca3657840d8f8b191","unresolved":true,"context_lines":[{"line_number":35,"context_line":"            sw_update.strategy_data \u003d json.dumps(dict())"},{"line_number":36,"context_line":"        else:"},{"line_number":37,"context_line":"            sw_update.strategy_data \u003d json.dumps(sw_update_obj.strategy.as_dict())"},{"line_number":38,"context_line":"    database_metric_add(sw_update.strategy_data)"},{"line_number":39,"context_line":"    db.commit()"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"a48b6308_b005e5fe","line":38,"range":{"start_line":38,"start_character":24,"end_line":38,"end_character":47},"updated":"2025-07-08 17:49:31.000000000","message":"Should pass in `sw_update_obj.strategy.as_dict()` directly to `database_metric_add` to skip `json.loads`.  This function is called frequently and strategy_data is not small.","commit_id":"bf1b2d55cb63ddcfcf754c9faec5c31416720b34"},{"author":{"_account_id":34769,"name":"Davi Frossard","email":"dbarrosf@windriver.com","username":"dbarrosf"},"change_message_id":"ab6a4f027833b5268d6d7db7cea71d7e673f493e","unresolved":false,"context_lines":[{"line_number":35,"context_line":"            sw_update.strategy_data \u003d json.dumps(dict())"},{"line_number":36,"context_line":"        else:"},{"line_number":37,"context_line":"            sw_update.strategy_data \u003d json.dumps(sw_update_obj.strategy.as_dict())"},{"line_number":38,"context_line":"    database_metric_add(sw_update.strategy_data)"},{"line_number":39,"context_line":"    db.commit()"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"8c73e615_582b1ad5","line":38,"range":{"start_line":38,"start_character":24,"end_line":38,"end_character":47},"in_reply_to":"a3a94624_661c1fe7","updated":"2025-07-09 17:57:10.000000000","message":"Done","commit_id":"bf1b2d55cb63ddcfcf754c9faec5c31416720b34"},{"author":{"_account_id":34769,"name":"Davi Frossard","email":"dbarrosf@windriver.com","username":"dbarrosf"},"change_message_id":"3316dd1985547222cb36a63c39229fb906cb2c38","unresolved":true,"context_lines":[{"line_number":35,"context_line":"            sw_update.strategy_data \u003d json.dumps(dict())"},{"line_number":36,"context_line":"        else:"},{"line_number":37,"context_line":"            sw_update.strategy_data \u003d json.dumps(sw_update_obj.strategy.as_dict())"},{"line_number":38,"context_line":"    database_metric_add(sw_update.strategy_data)"},{"line_number":39,"context_line":"    db.commit()"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"a3a94624_661c1fe7","line":38,"range":{"start_line":38,"start_character":24,"end_line":38,"end_character":47},"in_reply_to":"a48b6308_b005e5fe","updated":"2025-07-09 13:34:36.000000000","message":"The only issue is that I\u0027m copying strategy_data into the metrics table (lines #50 and #53) in the same format it\u0027s stored in the sw_update table.\nIf I follow your suggestion, I\u0027d need to use json.dumps to store it — which is generally slower.","commit_id":"bf1b2d55cb63ddcfcf754c9faec5c31416720b34"},{"author":{"_account_id":36727,"name":"Italo Lemos","display_name":"Italo Lemos","email":"Italo.doRegoLemos@windriver.com","username":"idoregol"},"change_message_id":"271d281336396e38051432a2411f0ea329d8d3d7","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright (c) 2016-2023 Wind River Systems, Inc."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# SPDX-License-Identifier: Apache-2.0"},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":16,"id":"f2d9c38b_fe082430","line":2,"updated":"2025-11-24 13:24:18.000000000","message":"Update the copyright range","commit_id":"940b9371db27b2fde65aa3edd7b12677a4d59301"},{"author":{"_account_id":9926,"name":"John Kung","email":"john.kung@windriver.com","username":"jkung"},"change_message_id":"9b7f6fe2ab50cc2209545540c447dac94ec0c2d2","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright (c) 2016-2023 Wind River Systems, Inc."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# SPDX-License-Identifier: Apache-2.0"},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":16,"id":"fe66a9f9_19264f2b","line":2,"in_reply_to":"f2d9c38b_fe082430","updated":"2025-11-24 15:22:06.000000000","message":"pending update","commit_id":"940b9371db27b2fde65aa3edd7b12677a4d59301"},{"author":{"_account_id":34769,"name":"Davi Frossard","email":"dbarrosf@windriver.com","username":"dbarrosf"},"change_message_id":"04eac0cb40ad15f96e208e64ab6374bb2a89743a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright (c) 2016-2023 Wind River Systems, Inc."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# SPDX-License-Identifier: Apache-2.0"},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":16,"id":"842d4bca_2e333785","line":2,"in_reply_to":"fe66a9f9_19264f2b","updated":"2025-11-25 11:23:13.000000000","message":"Done","commit_id":"940b9371db27b2fde65aa3edd7b12677a4d59301"}],"nfv/nfv-vim/nfv_vim/database/model/_metrics.py":[{"author":{"_account_id":35148,"name":"Joshua Kraitberg","email":"joshua.kraitberg@windriver.com","username":"jkraitbe-wr"},"change_message_id":"ddef3621b7c147469d6e749ca3657840d8f8b191","unresolved":true,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"class Metrics(AsDictMixin, Base):"},{"line_number":17,"context_line":"    __tablename__ \u003d \u0027metrics\u0027"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    metric_name \u003d Column(String(64), nullable\u003dFalse, index\u003dTrue)"},{"line_number":20,"context_line":"    start_datetimestamp \u003d Column(DateTime, nullable\u003dFalse, index\u003dTrue)"},{"line_number":21,"context_line":"    metric_duration \u003d Column(Integer)  # duration in seconds"}],"source_content_type":"text/x-python","patch_set":8,"id":"7b74411b_d1971df1","line":18,"updated":"2025-07-08 17:49:31.000000000","message":"Should capture uuid from strategy as well.","commit_id":"bf1b2d55cb63ddcfcf754c9faec5c31416720b34"},{"author":{"_account_id":34769,"name":"Davi Frossard","email":"dbarrosf@windriver.com","username":"dbarrosf"},"change_message_id":"3316dd1985547222cb36a63c39229fb906cb2c38","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"class Metrics(AsDictMixin, Base):"},{"line_number":17,"context_line":"    __tablename__ \u003d \u0027metrics\u0027"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    metric_name \u003d Column(String(64), nullable\u003dFalse, index\u003dTrue)"},{"line_number":20,"context_line":"    start_datetimestamp \u003d Column(DateTime, nullable\u003dFalse, index\u003dTrue)"},{"line_number":21,"context_line":"    metric_duration \u003d Column(Integer)  # duration in seconds"}],"source_content_type":"text/x-python","patch_set":8,"id":"edee77a5_c778ae84","line":18,"in_reply_to":"7b74411b_d1971df1","updated":"2025-07-09 13:34:36.000000000","message":"Done","commit_id":"bf1b2d55cb63ddcfcf754c9faec5c31416720b34"},{"author":{"_account_id":9926,"name":"John Kung","email":"john.kung@windriver.com","username":"jkung"},"change_message_id":"9b7f6fe2ab50cc2209545540c447dac94ec0c2d2","unresolved":true,"context_lines":[{"line_number":20,"context_line":"    start_datetimestamp \u003d Column(DateTime, nullable\u003dFalse, index\u003dTrue)"},{"line_number":21,"context_line":"    metric_duration \u003d Column(Integer)  # duration in seconds"},{"line_number":22,"context_line":"    metric_service_disruption \u003d Column(Integer)  # duration in seconds"},{"line_number":23,"context_line":"    strategy_data \u003d Column(String(2147483647), nullable\u003dFalse)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def __repr__(self):"},{"line_number":26,"context_line":"        return \"\u003cMetrics(%r, %r)\u003e\" % (self.metric_name, self.start_datetimestamp)"}],"source_content_type":"text/x-python","patch_set":30,"id":"d8ac251c_1e8fc8e5","line":23,"range":{"start_line":23,"start_character":34,"end_line":23,"end_character":44},"updated":"2025-11-24 15:22:06.000000000","message":"this appears to be about 2GBytes?  what is the impact to filesystem usage when this fills up ?","commit_id":"cd324604742fe65b456d3b771db870e57d96611c"},{"author":{"_account_id":34769,"name":"Davi Frossard","email":"dbarrosf@windriver.com","username":"dbarrosf"},"change_message_id":"04eac0cb40ad15f96e208e64ab6374bb2a89743a","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    start_datetimestamp \u003d Column(DateTime, nullable\u003dFalse, index\u003dTrue)"},{"line_number":21,"context_line":"    metric_duration \u003d Column(Integer)  # duration in seconds"},{"line_number":22,"context_line":"    metric_service_disruption \u003d Column(Integer)  # duration in seconds"},{"line_number":23,"context_line":"    strategy_data \u003d Column(String(2147483647), nullable\u003dFalse)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def __repr__(self):"},{"line_number":26,"context_line":"        return \"\u003cMetrics(%r, %r)\u003e\" % (self.metric_name, self.start_datetimestamp)"}],"source_content_type":"text/x-python","patch_set":30,"id":"05caf2b1_5e27b00d","line":23,"range":{"start_line":23,"start_character":34,"end_line":23,"end_character":44},"in_reply_to":"d8ac251c_1e8fc8e5","updated":"2025-11-25 11:23:13.000000000","message":"This is equivalent of declaring a string column that can be up to the max size, following the same declaration seen in other NFV tables. However, the strategy data will typically be very small, in the order of a few KBytes.","commit_id":"cd324604742fe65b456d3b771db870e57d96611c"}]}
