)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15359,"name":"Erickson Filipe Guedes dos Santos","email":"erickson@lsd.ufcg.edu.br","username":"ericksonfilipe"},"change_message_id":"bf58f6e8fdafdca1d554436b8c983c8ede479e80","unresolved":false,"context_lines":[{"line_number":9,"context_line":"* deterministic added as a computed property"},{"line_number":10,"context_line":"of Alarm definition. That allows to user to read"},{"line_number":11,"context_line":"if an expression (especially composed of many sub expressions)"},{"line_number":12,"context_line":"if deterministic or non-deterministic."},{"line_number":13,"context_line":"* documentation updated"},{"line_number":14,"context_line":"* tests (unit, tempest)"},{"line_number":15,"context_line":"* `is_deterministic` column has been added to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"dab17558_1d7d72b1","line":12,"range":{"start_line":12,"start_character":0,"end_line":12,"end_character":2},"updated":"2016-05-14 02:25:14.000000000","message":"Not sure, but isn\u0027t it suposed to be \u0027is\u0027?","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"e40847447ca28afee9e6cd426f72d239e645dfc9","unresolved":false,"context_lines":[{"line_number":9,"context_line":"* deterministic added as a computed property"},{"line_number":10,"context_line":"of Alarm definition. That allows to user to read"},{"line_number":11,"context_line":"if an expression (especially composed of many sub expressions)"},{"line_number":12,"context_line":"if deterministic or non-deterministic."},{"line_number":13,"context_line":"* documentation updated"},{"line_number":14,"context_line":"* tests (unit, tempest)"},{"line_number":15,"context_line":"* `is_deterministic` column has been added to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"dab17558_a7499e33","line":12,"range":{"start_line":12,"start_character":0,"end_line":12,"end_character":2},"in_reply_to":"dab17558_1d7d72b1","updated":"2016-05-15 22:06:47.000000000","message":"Done","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":15359,"name":"Erickson Filipe Guedes dos Santos","email":"erickson@lsd.ufcg.edu.br","username":"ericksonfilipe"},"change_message_id":"bf58f6e8fdafdca1d554436b8c983c8ede479e80","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"(Non)deterministic support for alarms"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"* deterministic added as a computed property"},{"line_number":10,"context_line":"of Alarm definition. That allows to user to read"},{"line_number":11,"context_line":"if an expression (especially composed of many sub expressions)"},{"line_number":12,"context_line":"if deterministic or non-deterministic."},{"line_number":13,"context_line":"* documentation updated"},{"line_number":14,"context_line":"* tests (unit, tempest)"},{"line_number":15,"context_line":"* `is_deterministic` column has been added to"},{"line_number":16,"context_line":"sub_alarm_definition table"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I506fcd0b9861e902a2bfcfa768d402c568b85cea"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"dab17558_bd3b86ea","line":16,"range":{"start_line":9,"start_character":2,"end_line":16,"end_character":26},"updated":"2016-05-14 02:25:14.000000000","message":"I believe it would be better if you could add a brief description in the commit message for the reviewers about why (non)deterministic alarms are important.","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"e40847447ca28afee9e6cd426f72d239e645dfc9","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"(Non)deterministic support for alarms"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"* deterministic added as a computed property"},{"line_number":10,"context_line":"of Alarm definition. That allows to user to read"},{"line_number":11,"context_line":"if an expression (especially composed of many sub expressions)"},{"line_number":12,"context_line":"if deterministic or non-deterministic."},{"line_number":13,"context_line":"* documentation updated"},{"line_number":14,"context_line":"* tests (unit, tempest)"},{"line_number":15,"context_line":"* `is_deterministic` column has been added to"},{"line_number":16,"context_line":"sub_alarm_definition table"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I506fcd0b9861e902a2bfcfa768d402c568b85cea"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"dab17558_c773027f","line":16,"range":{"start_line":9,"start_character":2,"end_line":16,"end_character":26},"in_reply_to":"dab17558_bd3b86ea","updated":"2016-05-15 22:06:47.000000000","message":"Done","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":15359,"name":"Erickson Filipe Guedes dos Santos","email":"erickson@lsd.ufcg.edu.br","username":"ericksonfilipe"},"change_message_id":"bf58f6e8fdafdca1d554436b8c983c8ede479e80","unresolved":false,"context_lines":[{"line_number":14,"context_line":"* tests (unit, tempest)"},{"line_number":15,"context_line":"* `is_deterministic` column has been added to"},{"line_number":16,"context_line":"sub_alarm_definition table"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I506fcd0b9861e902a2bfcfa768d402c568b85cea"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"dab17558_1da61253","line":17,"updated":"2016-05-14 02:25:14.000000000","message":"It would be good if you could add the blueprint info here (partially-implements: blueprint alarmsonlogs), like recommended here: http://docs.openstack.org/infra/manual/developers.html#committing-a-change","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"e40847447ca28afee9e6cd426f72d239e645dfc9","unresolved":false,"context_lines":[{"line_number":14,"context_line":"* tests (unit, tempest)"},{"line_number":15,"context_line":"* `is_deterministic` column has been added to"},{"line_number":16,"context_line":"sub_alarm_definition table"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I506fcd0b9861e902a2bfcfa768d402c568b85cea"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"dab17558_a7707e73","line":17,"in_reply_to":"dab17558_1da61253","updated":"2016-05-15 22:06:47.000000000","message":"Done","commit_id":"1962237c9dca96a337a46057802b480cba266d16"}],"devstack/files/schema/mon_mysql.sql":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"43c20635b19eb69dd8cc3efa246bda739cd1bedd","unresolved":false,"context_lines":[{"line_number":103,"context_line":"  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,"},{"line_number":104,"context_line":"  `tenant_id` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL,"},{"line_number":105,"context_line":"  `region` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT \u0027\u0027,"},{"line_number":106,"context_line":"  `sporadic` tinyint(1) NOT NULL DEFAULT \u00270\u0027,"},{"line_number":107,"context_line":"  PRIMARY KEY (`id`)"},{"line_number":108,"context_line":") ENGINE\u003dInnoDB DEFAULT CHARSET\u003dutf8mb4 COLLATE\u003dutf8mb4_unicode_ci;"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-sql","patch_set":7,"id":"dab17558_826f36c4","line":106,"range":{"start_line":106,"start_character":3,"end_line":106,"end_character":11},"updated":"2016-05-09 21:47:51.000000000","message":"The metrics database can\u0027t handle sporadic so no point in putting it in here","commit_id":"db1e3cedd64f67d16a0bec5c505eb3702cb0b5b2"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"f08a05da8eefaea574a15c007e40c5b3ad6057eb","unresolved":false,"context_lines":[{"line_number":103,"context_line":"  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,"},{"line_number":104,"context_line":"  `tenant_id` varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL,"},{"line_number":105,"context_line":"  `region` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT \u0027\u0027,"},{"line_number":106,"context_line":"  `sporadic` tinyint(1) NOT NULL DEFAULT \u00270\u0027,"},{"line_number":107,"context_line":"  PRIMARY KEY (`id`)"},{"line_number":108,"context_line":") ENGINE\u003dInnoDB DEFAULT CHARSET\u003dutf8mb4 COLLATE\u003dutf8mb4_unicode_ci;"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-sql","patch_set":7,"id":"dab17558_d488c5c7","line":106,"range":{"start_line":106,"start_character":3,"end_line":106,"end_character":11},"in_reply_to":"dab17558_826f36c4","updated":"2016-05-10 09:03:01.000000000","message":"But that\u0027s why I thought we are keeping it here ?\nAnyway, I am removing it right now, because it does not help the case.","commit_id":"db1e3cedd64f67d16a0bec5c505eb3702cb0b5b2"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"36c37753d0b7b2ee41a0e8acf7d6ce1cc0c30f1b","unresolved":false,"context_lines":[{"line_number":157,"context_line":"  `threshold` double NOT NULL,"},{"line_number":158,"context_line":"  `period` int(11) NOT NULL,"},{"line_number":159,"context_line":"  `periods` int(11) NOT NULL,"},{"line_number":160,"context_line":"  `is_deterministic` tinyint(1) NOT NULL DEFAULT \u00271\u0027,"},{"line_number":161,"context_line":"  `created_at` datetime NOT NULL,"},{"line_number":162,"context_line":"  `updated_at` datetime NOT NULL,"},{"line_number":163,"context_line":"  PRIMARY KEY (`id`),"}],"source_content_type":"text/x-sql","patch_set":20,"id":"bab6814e_1edd71e0","line":160,"range":{"start_line":160,"start_character":3,"end_line":160,"end_character":19},"updated":"2016-05-19 16:18:50.000000000","message":"Shouldn\u0027t the default be that the alarm is non-deterministic? That would be what we currently have, prior to this change, right?","commit_id":"f021980351890e469f61c2bdc1a3326f64d55d11"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"8346924139ccbc998ccaf2a0d93516fd591a8d36","unresolved":false,"context_lines":[{"line_number":157,"context_line":"  `threshold` double NOT NULL,"},{"line_number":158,"context_line":"  `period` int(11) NOT NULL,"},{"line_number":159,"context_line":"  `periods` int(11) NOT NULL,"},{"line_number":160,"context_line":"  `is_deterministic` tinyint(1) NOT NULL DEFAULT \u00271\u0027,"},{"line_number":161,"context_line":"  `created_at` datetime NOT NULL,"},{"line_number":162,"context_line":"  `updated_at` datetime NOT NULL,"},{"line_number":163,"context_line":"  PRIMARY KEY (`id`),"}],"source_content_type":"text/x-sql","patch_set":20,"id":"bab6814e_465424c9","line":160,"range":{"start_line":160,"start_character":3,"end_line":160,"end_character":19},"in_reply_to":"bab6814e_1edd71e0","updated":"2016-05-20 10:30:35.000000000","message":"Done","commit_id":"f021980351890e469f61c2bdc1a3326f64d55d11"}],"docs/monasca-api-spec.md":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"ec6c726069c7c815d2cfb2be2f122c67c27ef3f7","unresolved":false,"context_lines":[{"line_number":517,"context_line":"````"},{"line_number":518,"context_line":"Period must be an integer multiple of 60. The default period is 60 seconds."},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"Deterministic can be specified in multiple ways:"},{"line_number":521,"context_line":"* not specified - acts as default approach"},{"line_number":522,"context_line":"* (default) deterministic keyword - alarms will be deterministic"},{"line_number":523,"context_line":"* one of {yes, true, 1} - alarms will be deterministic"}],"source_content_type":"text/x-markdown","patch_set":13,"id":"dab17558_ec4da2c5","line":520,"range":{"start_line":520,"start_character":0,"end_line":520,"end_character":13},"updated":"2016-05-12 20:12:48.000000000","message":"You never define how deterministic changes the behavior of alarms","commit_id":"30896118b01e0cc9b87a8d0119b9adfeced6a4c2"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"9028aa0478c31411891016b7091aa5eb02bf90f0","unresolved":false,"context_lines":[{"line_number":517,"context_line":"````"},{"line_number":518,"context_line":"Period must be an integer multiple of 60. The default period is 60 seconds."},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"Deterministic can be specified in multiple ways:"},{"line_number":521,"context_line":"* not specified - acts as default approach"},{"line_number":522,"context_line":"* (default) deterministic keyword - alarms will be deterministic"},{"line_number":523,"context_line":"* one of {yes, true, 1} - alarms will be deterministic"}],"source_content_type":"text/x-markdown","patch_set":13,"id":"dab17558_a7ba876c","line":520,"range":{"start_line":520,"start_character":0,"end_line":520,"end_character":13},"in_reply_to":"dab17558_ec4da2c5","updated":"2016-05-13 05:15:34.000000000","message":"Described in \n \n Alarm Definitions and Alarms\n\nsection","commit_id":"30896118b01e0cc9b87a8d0119b9adfeced6a4c2"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"ec6c726069c7c815d2cfb2be2f122c67c27ef3f7","unresolved":false,"context_lines":[{"line_number":520,"context_line":"Deterministic can be specified in multiple ways:"},{"line_number":521,"context_line":"* not specified - acts as default approach"},{"line_number":522,"context_line":"* (default) deterministic keyword - alarms will be deterministic"},{"line_number":523,"context_line":"* one of {yes, true, 1} - alarms will be deterministic"},{"line_number":524,"context_line":"* one of {no, false, 0} - alarms will be non-deterministic"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"The logical_operators are: `and` (also `\u0026\u0026`), `or` (also `||`)."},{"line_number":527,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":13,"id":"dab17558_ac6c3a37","line":524,"range":{"start_line":523,"start_character":0,"end_line":524,"end_character":58},"updated":"2016-05-12 20:12:48.000000000","message":"Not clear from this description that it should be determinstic\u003dfalse. It reads like you just put false in","commit_id":"30896118b01e0cc9b87a8d0119b9adfeced6a4c2"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"9028aa0478c31411891016b7091aa5eb02bf90f0","unresolved":false,"context_lines":[{"line_number":520,"context_line":"Deterministic can be specified in multiple ways:"},{"line_number":521,"context_line":"* not specified - acts as default approach"},{"line_number":522,"context_line":"* (default) deterministic keyword - alarms will be deterministic"},{"line_number":523,"context_line":"* one of {yes, true, 1} - alarms will be deterministic"},{"line_number":524,"context_line":"* one of {no, false, 0} - alarms will be non-deterministic"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"The logical_operators are: `and` (also `\u0026\u0026`), `or` (also `||`)."},{"line_number":527,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":13,"id":"dab17558_8762e314","line":524,"range":{"start_line":523,"start_character":0,"end_line":524,"end_character":58},"in_reply_to":"dab17558_ac6c3a37","updated":"2016-05-13 05:15:34.000000000","message":"Refactored.","commit_id":"30896118b01e0cc9b87a8d0119b9adfeced6a4c2"},{"author":{"_account_id":15359,"name":"Erickson Filipe Guedes dos Santos","email":"erickson@lsd.ufcg.edu.br","username":"ericksonfilipe"},"change_message_id":"bf58f6e8fdafdca1d554436b8c983c8ede479e80","unresolved":false,"context_lines":[{"line_number":498,"context_line":"metric created only if something critical happens in the system."},{"line_number":499,"context_line":"For example an error in log file or deadlock in database."},{"line_number":500,"context_line":"If deterministic alarm definition would be created using expression ```count(log.error{component\u003dmysql}) \u003e\u003d 1)```,"},{"line_number":501,"context_line":"that alarm could stay in *UNDETERMINED* for most of its lifetime."},{"line_number":502,"context_line":"However, from operator point of view, if there are no errors related to MySQL, everything works correctly."},{"line_number":503,"context_line":"Answer to that situation is creating *non-deterministic* alarm definition"},{"line_number":504,"context_line":"using expression ```count(log.error{component\u003dmysql}, deterministic\u003dfalse) \u003e\u003d 1```."}],"source_content_type":"text/x-markdown","patch_set":18,"id":"dab17558_b86ef4c6","line":501,"updated":"2016-05-14 02:25:14.000000000","message":"state","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"e40847447ca28afee9e6cd426f72d239e645dfc9","unresolved":false,"context_lines":[{"line_number":498,"context_line":"metric created only if something critical happens in the system."},{"line_number":499,"context_line":"For example an error in log file or deadlock in database."},{"line_number":500,"context_line":"If deterministic alarm definition would be created using expression ```count(log.error{component\u003dmysql}) \u003e\u003d 1)```,"},{"line_number":501,"context_line":"that alarm could stay in *UNDETERMINED* for most of its lifetime."},{"line_number":502,"context_line":"However, from operator point of view, if there are no errors related to MySQL, everything works correctly."},{"line_number":503,"context_line":"Answer to that situation is creating *non-deterministic* alarm definition"},{"line_number":504,"context_line":"using expression ```count(log.error{component\u003dmysql}, deterministic\u003dfalse) \u003e\u003d 1```."}],"source_content_type":"text/x-markdown","patch_set":18,"id":"dab17558_47ea7210","line":501,"in_reply_to":"dab17558_b86ef4c6","updated":"2016-05-15 22:06:47.000000000","message":"Done","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"d21913f9de1b95c788db7d3ce984338237d364a4","unresolved":false,"context_lines":[{"line_number":503,"context_line":"Answer to that situation is creating *non-deterministic* alarm definition"},{"line_number":504,"context_line":"using expression ```count(log.error{component\u003dmysql}, deterministic\u003dfalse) \u003e\u003d 1```."},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"Non-deterministic alarm main trait is preventing from transition to *UNDETERMINED* state."},{"line_number":507,"context_line":"In other words, if there is no data received that could either mean transitioning to *OK* or *ALARM* state,"},{"line_number":508,"context_line":"alarm stays in *OK* state. Also such alarms transition to *OK* immediately, rather than to *UNDETERMINED* state."},{"line_number":509,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":18,"id":"dab17558_c7ab191d","line":506,"range":{"start_line":506,"start_character":0,"end_line":506,"end_character":23},"updated":"2016-05-13 23:09:52.000000000","message":"The Non-deterministic alarm\u0027s","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"d21913f9de1b95c788db7d3ce984338237d364a4","unresolved":false,"context_lines":[{"line_number":503,"context_line":"Answer to that situation is creating *non-deterministic* alarm definition"},{"line_number":504,"context_line":"using expression ```count(log.error{component\u003dmysql}, deterministic\u003dfalse) \u003e\u003d 1```."},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"Non-deterministic alarm main trait is preventing from transition to *UNDETERMINED* state."},{"line_number":507,"context_line":"In other words, if there is no data received that could either mean transitioning to *OK* or *ALARM* state,"},{"line_number":508,"context_line":"alarm stays in *OK* state. Also such alarms transition to *OK* immediately, rather than to *UNDETERMINED* state."},{"line_number":509,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":18,"id":"dab17558_07a6c152","line":506,"range":{"start_line":506,"start_character":49,"end_line":506,"end_character":53},"updated":"2016-05-13 23:09:52.000000000","message":"the","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"e40847447ca28afee9e6cd426f72d239e645dfc9","unresolved":false,"context_lines":[{"line_number":503,"context_line":"Answer to that situation is creating *non-deterministic* alarm definition"},{"line_number":504,"context_line":"using expression ```count(log.error{component\u003dmysql}, deterministic\u003dfalse) \u003e\u003d 1```."},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"Non-deterministic alarm main trait is preventing from transition to *UNDETERMINED* state."},{"line_number":507,"context_line":"In other words, if there is no data received that could either mean transitioning to *OK* or *ALARM* state,"},{"line_number":508,"context_line":"alarm stays in *OK* state. Also such alarms transition to *OK* immediately, rather than to *UNDETERMINED* state."},{"line_number":509,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":18,"id":"dab17558_c7de626c","line":506,"range":{"start_line":506,"start_character":0,"end_line":506,"end_character":23},"in_reply_to":"dab17558_c7ab191d","updated":"2016-05-15 22:06:47.000000000","message":"Done","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"d21913f9de1b95c788db7d3ce984338237d364a4","unresolved":false,"context_lines":[{"line_number":505,"context_line":""},{"line_number":506,"context_line":"Non-deterministic alarm main trait is preventing from transition to *UNDETERMINED* state."},{"line_number":507,"context_line":"In other words, if there is no data received that could either mean transitioning to *OK* or *ALARM* state,"},{"line_number":508,"context_line":"alarm stays in *OK* state. Also such alarms transition to *OK* immediately, rather than to *UNDETERMINED* state."},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"Finally, it must be mentioned that alarm definition can be composed of multiple expressions and"},{"line_number":511,"context_line":"that *deterministic* is actually part of it. Entire alarm definition will be considered *deterministic*"}],"source_content_type":"text/x-markdown","patch_set":18,"id":"dab17558_87ebd177","line":508,"range":{"start_line":508,"start_character":63,"end_line":508,"end_character":74},"updated":"2016-05-13 23:09:52.000000000","message":"when created","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"e40847447ca28afee9e6cd426f72d239e645dfc9","unresolved":false,"context_lines":[{"line_number":505,"context_line":""},{"line_number":506,"context_line":"Non-deterministic alarm main trait is preventing from transition to *UNDETERMINED* state."},{"line_number":507,"context_line":"In other words, if there is no data received that could either mean transitioning to *OK* or *ALARM* state,"},{"line_number":508,"context_line":"alarm stays in *OK* state. Also such alarms transition to *OK* immediately, rather than to *UNDETERMINED* state."},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"Finally, it must be mentioned that alarm definition can be composed of multiple expressions and"},{"line_number":511,"context_line":"that *deterministic* is actually part of it. Entire alarm definition will be considered *deterministic*"}],"source_content_type":"text/x-markdown","patch_set":18,"id":"dab17558_47d1d256","line":508,"range":{"start_line":508,"start_character":63,"end_line":508,"end_character":74},"in_reply_to":"dab17558_87ebd177","updated":"2016-05-15 22:06:47.000000000","message":"Done","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"d21913f9de1b95c788db7d3ce984338237d364a4","unresolved":false,"context_lines":[{"line_number":508,"context_line":"alarm stays in *OK* state. Also such alarms transition to *OK* immediately, rather than to *UNDETERMINED* state."},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"Finally, it must be mentioned that alarm definition can be composed of multiple expressions and"},{"line_number":511,"context_line":"that *deterministic* is actually part of it. Entire alarm definition will be considered *deterministic*"},{"line_number":512,"context_line":"only if at least one if its expression is such."},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"For example:"}],"source_content_type":"text/x-markdown","patch_set":18,"id":"dab17558_e7029d3d","line":511,"range":{"start_line":511,"start_character":45,"end_line":511,"end_character":51},"updated":"2016-05-13 23:09:52.000000000","message":"The entire","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"e40847447ca28afee9e6cd426f72d239e645dfc9","unresolved":false,"context_lines":[{"line_number":508,"context_line":"alarm stays in *OK* state. Also such alarms transition to *OK* immediately, rather than to *UNDETERMINED* state."},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"Finally, it must be mentioned that alarm definition can be composed of multiple expressions and"},{"line_number":511,"context_line":"that *deterministic* is actually part of it. Entire alarm definition will be considered *deterministic*"},{"line_number":512,"context_line":"only if at least one if its expression is such."},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"For example:"}],"source_content_type":"text/x-markdown","patch_set":18,"id":"dab17558_67ccd6bb","line":511,"range":{"start_line":511,"start_character":45,"end_line":511,"end_character":51},"in_reply_to":"dab17558_e7029d3d","updated":"2016-05-15 22:06:47.000000000","message":"Done","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"d21913f9de1b95c788db7d3ce984338237d364a4","unresolved":false,"context_lines":[{"line_number":1963,"context_line":"* name (string) - Name of alarm definition."},{"line_number":1964,"context_line":"* description (string) - Description of alarm definition."},{"line_number":1965,"context_line":"* expression (string) - The alarm definition expression."},{"line_number":1966,"context_line":"* deterministic (boolean) - Is the underlying expression deterministic ?"},{"line_number":1967,"context_line":"* expression_data (JSON object) - The alarm definition expression as a JSON object."},{"line_number":1968,"context_line":"* match_by ([string]) - The metric dimensions to use to create unique alarms"},{"line_number":1969,"context_line":"* severity (string) - The severity of an alarm definition. Either `LOW`, `MEDIUM`, `HIGH` or `CRITICAL`."}],"source_content_type":"text/x-markdown","patch_set":18,"id":"dab17558_a73b75ea","line":1966,"range":{"start_line":1966,"start_character":1,"end_line":1966,"end_character":72},"updated":"2016-05-13 23:09:52.000000000","message":"If you are going to leave this new field in Alarm Definition, then you need to specify that it is effectively read-only. It is set via the expression and can\u0027t be set explicitly like all of the other fields.","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"e40847447ca28afee9e6cd426f72d239e645dfc9","unresolved":false,"context_lines":[{"line_number":1963,"context_line":"* name (string) - Name of alarm definition."},{"line_number":1964,"context_line":"* description (string) - Description of alarm definition."},{"line_number":1965,"context_line":"* expression (string) - The alarm definition expression."},{"line_number":1966,"context_line":"* deterministic (boolean) - Is the underlying expression deterministic ?"},{"line_number":1967,"context_line":"* expression_data (JSON object) - The alarm definition expression as a JSON object."},{"line_number":1968,"context_line":"* match_by ([string]) - The metric dimensions to use to create unique alarms"},{"line_number":1969,"context_line":"* severity (string) - The severity of an alarm definition. Either `LOW`, `MEDIUM`, `HIGH` or `CRITICAL`."}],"source_content_type":"text/x-markdown","patch_set":18,"id":"dab17558_67dfb63a","line":1966,"range":{"start_line":1966,"start_character":1,"end_line":1966,"end_character":72},"in_reply_to":"dab17558_a73b75ea","updated":"2016-05-15 22:06:47.000000000","message":"Done","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":16204,"name":"Zawisza Hodzic","email":"zawisza.hodzic@ts.fujitsu.com","username":"zawisza.hodzic"},"change_message_id":"aab231304137297c25b8f11c8d3af82c3ec47189","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"dab17558_5ebcf4ba","updated":"2016-05-16 08:08:56.000000000","message":"From a perspective of someone who was not familiar with the idea of non-deterministic metrics before, this description is informative and understandable.\n\nLooking forward to see this concept in action.","commit_id":"f9c7fb88e0bcb1c94ade094339a4f4b6b9f3e508"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"36c37753d0b7b2ee41a0e8acf7d6ce1cc0c30f1b","unresolved":false,"context_lines":[{"line_number":483,"context_line":""},{"line_number":484,"context_line":"### Deterministic or non-deterministic alarms"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"By default all alarm definitions are assumed to be deterministic. Alarms created for such a definition"},{"line_number":487,"context_line":"will have their state always determinable. In other words, in every moment of time,"},{"line_number":488,"context_line":"alarm should be in either *OK* or *ALARM* state. However it may happen that there are no measurements received and"},{"line_number":489,"context_line":"alarm\u0027s state is impossible to be established. For deterministic alarm it means that it will transition to"}],"source_content_type":"text/x-markdown","patch_set":20,"id":"bab6814e_5e5a5950","line":486,"range":{"start_line":486,"start_character":3,"end_line":486,"end_character":10},"updated":"2016-05-19 16:18:50.000000000","message":"Actually, the default for alarm definitions should be that they are non-deterministic.\n\nIf the default becomes deterministic, then we are changing the behaviour of the API, which is not compatible with the current behaviour.","commit_id":"f021980351890e469f61c2bdc1a3326f64d55d11"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"36c37753d0b7b2ee41a0e8acf7d6ce1cc0c30f1b","unresolved":false,"context_lines":[{"line_number":486,"context_line":"By default all alarm definitions are assumed to be deterministic. Alarms created for such a definition"},{"line_number":487,"context_line":"will have their state always determinable. In other words, in every moment of time,"},{"line_number":488,"context_line":"alarm should be in either *OK* or *ALARM* state. However it may happen that there are no measurements received and"},{"line_number":489,"context_line":"alarm\u0027s state is impossible to be established. For deterministic alarm it means that it will transition to"},{"line_number":490,"context_line":"*UNDETERMINED* state."},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"Following expression ```avg(cpu.user_perc{hostname\u003dcompute_node_1}) \u003e 10``` means that potential"}],"source_content_type":"text/x-markdown","patch_set":20,"id":"bab6814e_19158b3f","line":489,"range":{"start_line":489,"start_character":0,"end_line":489,"end_character":5},"updated":"2016-05-19 16:18:50.000000000","message":"the alarm\u0027s","commit_id":"f021980351890e469f61c2bdc1a3326f64d55d11"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"36c37753d0b7b2ee41a0e8acf7d6ce1cc0c30f1b","unresolved":false,"context_lines":[{"line_number":487,"context_line":"will have their state always determinable. In other words, in every moment of time,"},{"line_number":488,"context_line":"alarm should be in either *OK* or *ALARM* state. However it may happen that there are no measurements received and"},{"line_number":489,"context_line":"alarm\u0027s state is impossible to be established. For deterministic alarm it means that it will transition to"},{"line_number":490,"context_line":"*UNDETERMINED* state."},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"Following expression ```avg(cpu.user_perc{hostname\u003dcompute_node_1}) \u003e 10``` means that potential"},{"line_number":493,"context_line":"alarm and transition to *ALARM* state is restricted to specific machine. If for some reason that"}],"source_content_type":"text/x-markdown","patch_set":20,"id":"bab6814e_398def7b","line":490,"range":{"start_line":490,"start_character":1,"end_line":490,"end_character":13},"updated":"2016-05-19 16:18:50.000000000","message":"shouldn\u0027t that the OK state. \n\nJust making sure we are on the same page here:\n\ndeterministic alarms have two states OK and ALARM\n\nnon-deterministic alarms have three states UNDETERMINED, OK and ALARM","commit_id":"f021980351890e469f61c2bdc1a3326f64d55d11"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"8346924139ccbc998ccaf2a0d93516fd591a8d36","unresolved":false,"context_lines":[{"line_number":487,"context_line":"will have their state always determinable. In other words, in every moment of time,"},{"line_number":488,"context_line":"alarm should be in either *OK* or *ALARM* state. However it may happen that there are no measurements received and"},{"line_number":489,"context_line":"alarm\u0027s state is impossible to be established. For deterministic alarm it means that it will transition to"},{"line_number":490,"context_line":"*UNDETERMINED* state."},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"Following expression ```avg(cpu.user_perc{hostname\u003dcompute_node_1}) \u003e 10``` means that potential"},{"line_number":493,"context_line":"alarm and transition to *ALARM* state is restricted to specific machine. If for some reason that"}],"source_content_type":"text/x-markdown","patch_set":20,"id":"bab6814e_15b2444c","line":490,"range":{"start_line":490,"start_character":1,"end_line":490,"end_character":13},"in_reply_to":"bab6814e_398def7b","updated":"2016-05-20 10:30:35.000000000","message":"yes.","commit_id":"f021980351890e469f61c2bdc1a3326f64d55d11"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"36c37753d0b7b2ee41a0e8acf7d6ce1cc0c30f1b","unresolved":false,"context_lines":[{"line_number":503,"context_line":"Answer to that situation is creating *non-deterministic* alarm definition"},{"line_number":504,"context_line":"using expression ```count(log.error{component\u003dmysql}, deterministic\u003dfalse) \u003e\u003d 1```."},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"The non-deterministic\u0027s alarm main trait is preventing from transition to *UNDETERMINED* state."},{"line_number":507,"context_line":"In other words, if there is no data received that could either mean transitioning to *OK* or *ALARM* state,"},{"line_number":508,"context_line":"alarm stays in *OK* state. Also such alarms transition to *OK* immediately when created,"},{"line_number":509,"context_line":"rather than to *UNDETERMINED* state."}],"source_content_type":"text/x-markdown","patch_set":20,"id":"bab6814e_2be91615","line":506,"range":{"start_line":506,"start_character":23,"end_line":506,"end_character":24},"updated":"2016-05-19 16:18:50.000000000","message":"I looked up the definition of deterministic a while ago, when you first proposed this term, because most people think that deterministic has to do with randomness. There are several definitions. The only one that fits is from, http://www.merriam-webster.com/dictionary/deterministic,  \"the quality or state of being determined\". \n\nThe way that you\u0027ve described this is that deterministic alarms can end up in the UNDETERMINED state, which is completely opposite to the definition from merriam-webster, where deterministic is the state of being determined. Stating something is deterministic and then giving it the UNDETERMINED state is really confusing. I asked several folks on the team here what they thought, and they validated what I was thinking too. \n\nI think we should change this to the opposite sense.","commit_id":"f021980351890e469f61c2bdc1a3326f64d55d11"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"15495fc882b4cf837a450fc176579abd89f27415","unresolved":false,"context_lines":[{"line_number":503,"context_line":"Answer to that situation is creating *non-deterministic* alarm definition"},{"line_number":504,"context_line":"using expression ```count(log.error{component\u003dmysql}, deterministic\u003dfalse) \u003e\u003d 1```."},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"The non-deterministic\u0027s alarm main trait is preventing from transition to *UNDETERMINED* state."},{"line_number":507,"context_line":"In other words, if there is no data received that could either mean transitioning to *OK* or *ALARM* state,"},{"line_number":508,"context_line":"alarm stays in *OK* state. Also such alarms transition to *OK* immediately when created,"},{"line_number":509,"context_line":"rather than to *UNDETERMINED* state."}],"source_content_type":"text/x-markdown","patch_set":20,"id":"bab6814e_2aa9f024","line":506,"range":{"start_line":506,"start_character":23,"end_line":506,"end_character":24},"in_reply_to":"bab6814e_2be91615","updated":"2016-05-20 04:28:14.000000000","message":"Yes, I think you are right about that.\nI\u0027ll swap that as soon as possible.","commit_id":"f021980351890e469f61c2bdc1a3326f64d55d11"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"0f8edd56a2a0fd0782ee2d7bcbb084b716074a34","unresolved":false,"context_lines":[{"line_number":503,"context_line":"Answer to that situation is creating *deterministic* alarm definition"},{"line_number":504,"context_line":"using expression ```count(log.error{component\u003dmysql}, deterministic) \u003e\u003d 1```."},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"The deterministic\u0027s alarm main trait is preventing from transition to *UNDETERMINED* state."},{"line_number":507,"context_line":"In other words, if there is no data received that could either mean transitioning to *OK* or *ALARM* state,"},{"line_number":508,"context_line":"alarm stays in *OK* state. Also such alarms transition to *OK* immediately when created,"},{"line_number":509,"context_line":"rather than to *UNDETERMINED* state."}],"source_content_type":"text/x-markdown","patch_set":23,"id":"9abb7d3a_f3e511dc","line":506,"updated":"2016-05-31 16:21:57.000000000","message":"deterministic\u0027s alarm -\u003e deterministic alarm\u0027s","commit_id":"5993e4bb883645cd54ac4d844fa135d810fd7cbb"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"602c7f327e11e731f7d422120586072525e696e3","unresolved":false,"context_lines":[{"line_number":503,"context_line":"Answer to that situation is creating *deterministic* alarm definition"},{"line_number":504,"context_line":"using expression ```count(log.error{component\u003dmysql}, deterministic) \u003e\u003d 1```."},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"The deterministic\u0027s alarm main trait is preventing from transition to *UNDETERMINED* state."},{"line_number":507,"context_line":"In other words, if there is no data received that could either mean transitioning to *OK* or *ALARM* state,"},{"line_number":508,"context_line":"alarm stays in *OK* state. Also such alarms transition to *OK* immediately when created,"},{"line_number":509,"context_line":"rather than to *UNDETERMINED* state."}],"source_content_type":"text/x-markdown","patch_set":23,"id":"9abb7d3a_47aec098","line":506,"in_reply_to":"9abb7d3a_f3e511dc","updated":"2016-06-01 08:27:14.000000000","message":"Done","commit_id":"5993e4bb883645cd54ac4d844fa135d810fd7cbb"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"0f8edd56a2a0fd0782ee2d7bcbb084b716074a34","unresolved":false,"context_lines":[{"line_number":504,"context_line":"using expression ```count(log.error{component\u003dmysql}, deterministic) \u003e\u003d 1```."},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"The deterministic\u0027s alarm main trait is preventing from transition to *UNDETERMINED* state."},{"line_number":507,"context_line":"In other words, if there is no data received that could either mean transitioning to *OK* or *ALARM* state,"},{"line_number":508,"context_line":"alarm stays in *OK* state. Also such alarms transition to *OK* immediately when created,"},{"line_number":509,"context_line":"rather than to *UNDETERMINED* state."},{"line_number":510,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":23,"id":"9abb7d3a_ae068083","line":507,"updated":"2016-05-31 16:21:57.000000000","message":"The alarm should be \"OK\" if no data is received.","commit_id":"5993e4bb883645cd54ac4d844fa135d810fd7cbb"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"602c7f327e11e731f7d422120586072525e696e3","unresolved":false,"context_lines":[{"line_number":504,"context_line":"using expression ```count(log.error{component\u003dmysql}, deterministic) \u003e\u003d 1```."},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"The deterministic\u0027s alarm main trait is preventing from transition to *UNDETERMINED* state."},{"line_number":507,"context_line":"In other words, if there is no data received that could either mean transitioning to *OK* or *ALARM* state,"},{"line_number":508,"context_line":"alarm stays in *OK* state. Also such alarms transition to *OK* immediately when created,"},{"line_number":509,"context_line":"rather than to *UNDETERMINED* state."},{"line_number":510,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":23,"id":"9abb7d3a_a797ac46","line":507,"in_reply_to":"9abb7d3a_ae068083","updated":"2016-06-01 08:27:14.000000000","message":"Done","commit_id":"5993e4bb883645cd54ac4d844fa135d810fd7cbb"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"0f8edd56a2a0fd0782ee2d7bcbb084b716074a34","unresolved":false,"context_lines":[{"line_number":510,"context_line":""},{"line_number":511,"context_line":"Finally, it must be mentioned that alarm definition can be composed of multiple expressions and"},{"line_number":512,"context_line":"that *deterministic* is actually part of it. The entire alarm definition is considered *deterministic*"},{"line_number":513,"context_line":"only if all of its expressions are such. Otherwise the alarm is *non-deterministic*."},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"For example:"},{"line_number":516,"context_line":"```"}],"source_content_type":"text/x-markdown","patch_set":23,"id":"9abb7d3a_ae916049","line":513,"updated":"2016-05-31 16:21:57.000000000","message":"The alarm definition is considered deterministic if _any_ of its expressions are deterministic.","commit_id":"5993e4bb883645cd54ac4d844fa135d810fd7cbb"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"602c7f327e11e731f7d422120586072525e696e3","unresolved":false,"context_lines":[{"line_number":510,"context_line":""},{"line_number":511,"context_line":"Finally, it must be mentioned that alarm definition can be composed of multiple expressions and"},{"line_number":512,"context_line":"that *deterministic* is actually part of it. The entire alarm definition is considered *deterministic*"},{"line_number":513,"context_line":"only if all of its expressions are such. Otherwise the alarm is *non-deterministic*."},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"For example:"},{"line_number":516,"context_line":"```"}],"source_content_type":"text/x-markdown","patch_set":23,"id":"9abb7d3a_6797843a","line":513,"in_reply_to":"9abb7d3a_ae916049","updated":"2016-06-01 08:27:14.000000000","message":"I think that we decided that each expression must be deterministic to have an alarm that is such.","commit_id":"5993e4bb883645cd54ac4d844fa135d810fd7cbb"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"0f8edd56a2a0fd0782ee2d7bcbb084b716074a34","unresolved":false,"context_lines":[{"line_number":516,"context_line":"```"},{"line_number":517,"context_line":"avg(disk.space_used_perc{hostname\u003dcompute_node_1}) \u003e\u003d 99"},{"line_number":518,"context_line":"    and"},{"line_number":519,"context_line":"count(log.error{hostname\u003dcompute_node_1,component\u003dkafka},deterministic\u003dno) \u003e\u003d 1"},{"line_number":520,"context_line":"```"},{"line_number":521,"context_line":"potential alarm will transition to *ALARM* state if there is no usable disk space left and kafka starts to report errors regarding"},{"line_number":522,"context_line":"inability to save data to it. Second expression is *non-deterministic*, however entire alarm will be kept in *UNDETERMINED* state"}],"source_content_type":"text/x-markdown","patch_set":23,"id":"9abb7d3a_6e1f78b7","line":519,"updated":"2016-05-31 16:21:57.000000000","message":"deterministic\u003dno is invalid syntax","commit_id":"5993e4bb883645cd54ac4d844fa135d810fd7cbb"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"602c7f327e11e731f7d422120586072525e696e3","unresolved":false,"context_lines":[{"line_number":516,"context_line":"```"},{"line_number":517,"context_line":"avg(disk.space_used_perc{hostname\u003dcompute_node_1}) \u003e\u003d 99"},{"line_number":518,"context_line":"    and"},{"line_number":519,"context_line":"count(log.error{hostname\u003dcompute_node_1,component\u003dkafka},deterministic\u003dno) \u003e\u003d 1"},{"line_number":520,"context_line":"```"},{"line_number":521,"context_line":"potential alarm will transition to *ALARM* state if there is no usable disk space left and kafka starts to report errors regarding"},{"line_number":522,"context_line":"inability to save data to it. Second expression is *non-deterministic*, however entire alarm will be kept in *UNDETERMINED* state"}],"source_content_type":"text/x-markdown","patch_set":23,"id":"9abb7d3a_479c005d","line":519,"in_reply_to":"9abb7d3a_6e1f78b7","updated":"2016-06-01 08:27:14.000000000","message":"Done","commit_id":"5993e4bb883645cd54ac4d844fa135d810fd7cbb"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"0f8edd56a2a0fd0782ee2d7bcbb084b716074a34","unresolved":false,"context_lines":[{"line_number":526,"context_line":"```"},{"line_number":527,"context_line":"avg(disk.space_used_perc{hostname\u003dcompute_node_1},deterministic\u003dno) \u003e\u003d 99"},{"line_number":528,"context_line":"    and"},{"line_number":529,"context_line":"count(log.error{hostname\u003dcompute_node_1,component\u003dkafka},deterministic\u003dno) \u003e\u003d 1"},{"line_number":530,"context_line":"```"},{"line_number":531,"context_line":"makes entire alarm *non-deterministic*. In other words - *all parts of alarm\u0027s expression"},{"line_number":532,"context_line":"must be marked as non-deterministic in order for entire alarm to be considered such*."}],"source_content_type":"text/x-markdown","patch_set":23,"id":"9abb7d3a_ce8664da","line":529,"updated":"2016-05-31 16:21:57.000000000","message":"deterministic\u003dno is invalid syntax","commit_id":"5993e4bb883645cd54ac4d844fa135d810fd7cbb"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"602c7f327e11e731f7d422120586072525e696e3","unresolved":false,"context_lines":[{"line_number":526,"context_line":"```"},{"line_number":527,"context_line":"avg(disk.space_used_perc{hostname\u003dcompute_node_1},deterministic\u003dno) \u003e\u003d 99"},{"line_number":528,"context_line":"    and"},{"line_number":529,"context_line":"count(log.error{hostname\u003dcompute_node_1,component\u003dkafka},deterministic\u003dno) \u003e\u003d 1"},{"line_number":530,"context_line":"```"},{"line_number":531,"context_line":"makes entire alarm *non-deterministic*. In other words - *all parts of alarm\u0027s expression"},{"line_number":532,"context_line":"must be marked as non-deterministic in order for entire alarm to be considered such*."}],"source_content_type":"text/x-markdown","patch_set":23,"id":"9abb7d3a_67e5c4da","line":529,"in_reply_to":"9abb7d3a_ce8664da","updated":"2016-06-01 08:27:14.000000000","message":"Done","commit_id":"5993e4bb883645cd54ac4d844fa135d810fd7cbb"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"0f8edd56a2a0fd0782ee2d7bcbb084b716074a34","unresolved":false,"context_lines":[{"line_number":529,"context_line":"count(log.error{hostname\u003dcompute_node_1,component\u003dkafka},deterministic\u003dno) \u003e\u003d 1"},{"line_number":530,"context_line":"```"},{"line_number":531,"context_line":"makes entire alarm *non-deterministic*. In other words - *all parts of alarm\u0027s expression"},{"line_number":532,"context_line":"must be marked as non-deterministic in order for entire alarm to be considered such*."},{"line_number":533,"context_line":"Having definition like one above, potential alarm will stay in *OK* state as long as there is enough"},{"line_number":534,"context_line":"disk space left at *compute_node_1* and there are no errors reported from *kafka* running"},{"line_number":535,"context_line":"at the same host."}],"source_content_type":"text/x-markdown","patch_set":23,"id":"9abb7d3a_6475d930","line":532,"range":{"start_line":532,"start_character":8,"end_line":532,"end_character":14},"updated":"2016-05-31 16:21:57.000000000","message":"nitpick: expressions are marked \"deterministic\" and left unmarked for \"non-deterministic\"","commit_id":"5993e4bb883645cd54ac4d844fa135d810fd7cbb"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"602c7f327e11e731f7d422120586072525e696e3","unresolved":false,"context_lines":[{"line_number":529,"context_line":"count(log.error{hostname\u003dcompute_node_1,component\u003dkafka},deterministic\u003dno) \u003e\u003d 1"},{"line_number":530,"context_line":"```"},{"line_number":531,"context_line":"makes entire alarm *non-deterministic*. In other words - *all parts of alarm\u0027s expression"},{"line_number":532,"context_line":"must be marked as non-deterministic in order for entire alarm to be considered such*."},{"line_number":533,"context_line":"Having definition like one above, potential alarm will stay in *OK* state as long as there is enough"},{"line_number":534,"context_line":"disk space left at *compute_node_1* and there are no errors reported from *kafka* running"},{"line_number":535,"context_line":"at the same host."}],"source_content_type":"text/x-markdown","patch_set":23,"id":"9abb7d3a_4701a069","line":532,"range":{"start_line":532,"start_character":8,"end_line":532,"end_character":14},"in_reply_to":"9abb7d3a_6475d930","updated":"2016-06-01 08:27:14.000000000","message":"nitpick: I am not sure that this is what I wanted to say.","commit_id":"5993e4bb883645cd54ac4d844fa135d810fd7cbb"},{"author":{"_account_id":16222,"name":"witek","email":"witold.bedyk@suse.com","username":"witek"},"change_message_id":"d85ce1e75646c1e5d4930c6c9f912b943bfd29ed","unresolved":false,"context_lines":[{"line_number":515,"context_line":"```"},{"line_number":516,"context_line":"avg(disk.space_used_perc{hostname\u003dcompute_node_1}) \u003e\u003d 99"},{"line_number":517,"context_line":"    and"},{"line_number":518,"context_line":"count(log.error{hostname\u003dcompute_node_1,component\u003dkafka,deterministic}) \u003e\u003d 1"},{"line_number":519,"context_line":"```"},{"line_number":520,"context_line":"potential alarm will transition to *ALARM* state if there is no usable disk space left and kafka starts to report errors regarding"},{"line_number":521,"context_line":"inability to save data to it. Second expression is *deterministic*, however entire alarm will be kept in *UNDETERMINED* state"}],"source_content_type":"text/x-markdown","patch_set":24,"id":"9abb7d3a_5b3e9028","line":518,"range":{"start_line":518,"start_character":56,"end_line":518,"end_character":69},"updated":"2016-06-01 09:27:06.000000000","message":"Keyword should be outside of dimensions brackets.","commit_id":"749427e91acb0d4b575af2a003cb7a7e0dd7ce09"}],"java/src/main/java/monasca/api/domain/model/alarmdefinition/AlarmDefinition.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"ec6c726069c7c815d2cfb2be2f122c67c27ef3f7","unresolved":false,"context_lines":[{"line_number":55,"context_line":"  private String expression;"},{"line_number":56,"context_line":"  // no need to add this to hashCode and equals, because it is computed from expression, which is"},{"line_number":57,"context_line":"  // already mentioned there"},{"line_number":58,"context_line":"  private boolean deterministic;"},{"line_number":59,"context_line":"  private Object expressionData;"},{"line_number":60,"context_line":"  private List\u003cString\u003e matchBy;"},{"line_number":61,"context_line":"  private String severity;"}],"source_content_type":"text/x-java","patch_set":13,"id":"dab17558_0f2a987e","line":58,"range":{"start_line":58,"start_character":18,"end_line":58,"end_character":31},"updated":"2016-05-12 20:12:48.000000000","message":"What is the point of adding this? iisDeterministic() is not used anywhere. I don\u0027t think any of these changes in this file are needed","commit_id":"30896118b01e0cc9b87a8d0119b9adfeced6a4c2"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"9028aa0478c31411891016b7091aa5eb02bf90f0","unresolved":false,"context_lines":[{"line_number":55,"context_line":"  private String expression;"},{"line_number":56,"context_line":"  // no need to add this to hashCode and equals, because it is computed from expression, which is"},{"line_number":57,"context_line":"  // already mentioned there"},{"line_number":58,"context_line":"  private boolean deterministic;"},{"line_number":59,"context_line":"  private Object expressionData;"},{"line_number":60,"context_line":"  private List\u003cString\u003e matchBy;"},{"line_number":61,"context_line":"  private String severity;"}],"source_content_type":"text/x-java","patch_set":13,"id":"dab17558_da084230","line":58,"range":{"start_line":58,"start_character":18,"end_line":58,"end_character":31},"in_reply_to":"dab17558_0f2a987e","updated":"2016-05-13 05:15:34.000000000","message":"I want to have this value presented in ui. \n\nBecause expression can be actually composed of multiple sub-expression where all or just one can be nondeterministic (1st option - entire alarm is nondeterministic, 2nd option - alarm is still deterministic).\n\nI calculate that value here using expression and display this in UI along with entire expression. User clearly sees what kind of an alarm he has and knows the states that alarm can enter or not. In the UI all I have is expression as a string, so computing that there would be cumbersome whereas here is is easy. \n\nI\u0027ve added a field instead of putting all there in\n\n isDeterministic\n\nmethod, because then each call to this method would trigger parsing the expression. Right now it is done only once and deterministic value is computed also just once.","commit_id":"30896118b01e0cc9b87a8d0119b9adfeced6a4c2"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"064caa87256ba7663ccd9050a1996ea801a7e210","unresolved":false,"context_lines":[{"line_number":55,"context_line":"  private String expression;"},{"line_number":56,"context_line":"  // no need to add this to hashCode and equals, because it is computed from expression, which is"},{"line_number":57,"context_line":"  // already mentioned there"},{"line_number":58,"context_line":"  private boolean deterministic;"},{"line_number":59,"context_line":"  private Object expressionData;"},{"line_number":60,"context_line":"  private List\u003cString\u003e matchBy;"},{"line_number":61,"context_line":"  private String severity;"}],"source_content_type":"text/x-java","patch_set":13,"id":"dab17558_9db874e7","line":58,"range":{"start_line":58,"start_character":18,"end_line":58,"end_character":31},"in_reply_to":"dab17558_da084230","updated":"2016-05-13 05:33:19.000000000","message":"However I think that I\u0027ll move this code to AlarmExpression class. Here it makes everything blurred. \n\nEverything else, I\u0027ll keep the unchanged till we agree on something.","commit_id":"30896118b01e0cc9b87a8d0119b9adfeced6a4c2"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"0f8edd56a2a0fd0782ee2d7bcbb084b716074a34","unresolved":false,"context_lines":[{"line_number":248,"context_line":"    this.undeterminedActions \u003d undeterminedActions;"},{"line_number":249,"context_line":"  }"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"  public void setDeterministic(final boolean deterministic) {"},{"line_number":252,"context_line":"    this.deterministic \u003d deterministic;"},{"line_number":253,"context_line":"  }"},{"line_number":254,"context_line":""}],"source_content_type":"text/x-java","patch_set":23,"id":"9abb7d3a_29444a48","line":251,"range":{"start_line":251,"start_character":14,"end_line":251,"end_character":30},"updated":"2016-05-31 16:21:57.000000000","message":"Because this is really a read-only field, I\u0027m not sure we want a public setter for it.","commit_id":"5993e4bb883645cd54ac4d844fa135d810fd7cbb"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"602c7f327e11e731f7d422120586072525e696e3","unresolved":false,"context_lines":[{"line_number":248,"context_line":"    this.undeterminedActions \u003d undeterminedActions;"},{"line_number":249,"context_line":"  }"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"  public void setDeterministic(final boolean deterministic) {"},{"line_number":252,"context_line":"    this.deterministic \u003d deterministic;"},{"line_number":253,"context_line":"  }"},{"line_number":254,"context_line":""}],"source_content_type":"text/x-java","patch_set":23,"id":"9abb7d3a_c74470b8","line":251,"range":{"start_line":251,"start_character":14,"end_line":251,"end_character":30},"in_reply_to":"9abb7d3a_29444a48","updated":"2016-06-01 08:27:14.000000000","message":"Done","commit_id":"5993e4bb883645cd54ac4d844fa135d810fd7cbb"}],"java/src/main/java/monasca/api/infrastructure/persistence/hibernate/AlarmDefinitionSqlRepoImpl.java":[{"author":{"_account_id":15359,"name":"Erickson Filipe Guedes dos Santos","email":"erickson@lsd.ufcg.edu.br","username":"ericksonfilipe"},"change_message_id":"bf58f6e8fdafdca1d554436b8c983c8ede479e80","unresolved":false,"context_lines":[{"line_number":592,"context_line":"    alarmDefinitionDb.setMatchBy(matchBy \u003d\u003d null || Iterables.isEmpty(matchBy) ? null : COMMA_JOINER.join(matchBy));"},{"line_number":593,"context_line":"    alarmDefinitionDb.setSeverity(AlarmSeverity.valueOf(severity));"},{"line_number":594,"context_line":"    alarmDefinitionDb.setActionsEnabled(actionsEnabled);"},{"line_number":595,"context_line":"    alarmDefinitionDb.setUpdatedAt(this.getUTCNow());"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"    session.saveOrUpdate(alarmDefinitionDb);"},{"line_number":598,"context_line":""}],"source_content_type":"text/x-java","patch_set":18,"id":"dab17558_78d00c54","line":595,"range":{"start_line":595,"start_character":4,"end_line":595,"end_character":53},"updated":"2016-05-14 02:25:14.000000000","message":"Sorry if it is a dumb question, but is it an unrelated change?","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"e40847447ca28afee9e6cd426f72d239e645dfc9","unresolved":false,"context_lines":[{"line_number":592,"context_line":"    alarmDefinitionDb.setMatchBy(matchBy \u003d\u003d null || Iterables.isEmpty(matchBy) ? null : COMMA_JOINER.join(matchBy));"},{"line_number":593,"context_line":"    alarmDefinitionDb.setSeverity(AlarmSeverity.valueOf(severity));"},{"line_number":594,"context_line":"    alarmDefinitionDb.setActionsEnabled(actionsEnabled);"},{"line_number":595,"context_line":"    alarmDefinitionDb.setUpdatedAt(this.getUTCNow());"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"    session.saveOrUpdate(alarmDefinitionDb);"},{"line_number":598,"context_line":""}],"source_content_type":"text/x-java","patch_set":18,"id":"dab17558_44bd5067","line":595,"range":{"start_line":595,"start_character":4,"end_line":595,"end_character":53},"in_reply_to":"dab17558_78d00c54","updated":"2016-05-15 22:06:47.000000000","message":"Yes.","commit_id":"1962237c9dca96a337a46057802b480cba266d16"}],"java/src/main/java/monasca/api/infrastructure/persistence/mysql/AlarmDefinitionMySqlRepoImpl.java":[{"author":{"_account_id":15359,"name":"Erickson Filipe Guedes dos Santos","email":"erickson@lsd.ufcg.edu.br","username":"ericksonfilipe"},"change_message_id":"bf58f6e8fdafdca1d554436b8c983c8ede479e80","unresolved":false,"context_lines":[{"line_number":295,"context_line":"            id,"},{"line_number":296,"context_line":"            new AlarmSubExpression("},{"line_number":297,"context_line":"                function,"},{"line_number":298,"context_line":"                new MetricDefinition(metricName,dimensions),"},{"line_number":299,"context_line":"                operator,"},{"line_number":300,"context_line":"                threshold,"},{"line_number":301,"context_line":"                period,"}],"source_content_type":"text/x-java","patch_set":18,"id":"dab17558_78376cb0","line":298,"range":{"start_line":298,"start_character":47,"end_line":298,"end_character":48},"updated":"2016-05-14 02:25:14.000000000","message":"Please, add a space after the comma.","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"e40847447ca28afee9e6cd426f72d239e645dfc9","unresolved":false,"context_lines":[{"line_number":295,"context_line":"            id,"},{"line_number":296,"context_line":"            new AlarmSubExpression("},{"line_number":297,"context_line":"                function,"},{"line_number":298,"context_line":"                new MetricDefinition(metricName,dimensions),"},{"line_number":299,"context_line":"                operator,"},{"line_number":300,"context_line":"                threshold,"},{"line_number":301,"context_line":"                period,"}],"source_content_type":"text/x-java","patch_set":18,"id":"dab17558_e4a4444c","line":298,"range":{"start_line":298,"start_character":47,"end_line":298,"end_character":48},"in_reply_to":"dab17558_78376cb0","updated":"2016-05-15 22:06:47.000000000","message":"Done","commit_id":"1962237c9dca96a337a46057802b480cba266d16"}],"java/src/test/java/monasca/api/app/validation/AlarmExpressionsTest.java":[{"author":{"_account_id":15359,"name":"Erickson Filipe Guedes dos Santos","email":"erickson@lsd.ufcg.edu.br","username":"ericksonfilipe"},"change_message_id":"bf58f6e8fdafdca1d554436b8c983c8ede479e80","unresolved":false,"context_lines":[{"line_number":54,"context_line":"  public void shouldThrowOnInvalidThreshold() throws Exception {"},{"line_number":55,"context_line":"    AlarmValidation.validateNormalizeAndGet(\"avg(hpcs.compute.net_out_bytes) \u003e abc\");"},{"line_number":56,"context_line":"  }"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"  @Test(expectedExceptions \u003d WebApplicationException.class)"},{"line_number":59,"context_line":"  public void shouldThrowOnInvalidDeterministicValue() throws Exception {"},{"line_number":60,"context_line":"    AlarmValidation.validateNormalizeAndGet(\"avg(hpcs.compute.net_out_bytes,deterministic\u003dfoo) \u003e 1\");"}],"source_content_type":"text/x-java","patch_set":18,"id":"dab17558_7805acc0","line":57,"updated":"2016-05-14 02:25:14.000000000","message":"I believe it would be good to have another test case with valid a keyword (deterministic) and values (true and false).","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"e40847447ca28afee9e6cd426f72d239e645dfc9","unresolved":false,"context_lines":[{"line_number":54,"context_line":"  public void shouldThrowOnInvalidThreshold() throws Exception {"},{"line_number":55,"context_line":"    AlarmValidation.validateNormalizeAndGet(\"avg(hpcs.compute.net_out_bytes) \u003e abc\");"},{"line_number":56,"context_line":"  }"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"  @Test(expectedExceptions \u003d WebApplicationException.class)"},{"line_number":59,"context_line":"  public void shouldThrowOnInvalidDeterministicValue() throws Exception {"},{"line_number":60,"context_line":"    AlarmValidation.validateNormalizeAndGet(\"avg(hpcs.compute.net_out_bytes,deterministic\u003dfoo) \u003e 1\");"}],"source_content_type":"text/x-java","patch_set":18,"id":"dab17558_042d08a8","line":57,"in_reply_to":"dab17558_7805acc0","updated":"2016-05-15 22:06:47.000000000","message":"It could, but that would be reinventing the wheel.\nAll those tests can be found inside monasca-common.\nI am not sure it is needed here yet again.","commit_id":"1962237c9dca96a337a46057802b480cba266d16"}],"monasca_api/common/repositories/model/sub_alarm_definition.py":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"d21913f9de1b95c788db7d3ce984338237d364a4","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            self.periods \u003d str(row[\u0027periods\u0027]).decode(\u0027utf8\u0027)"},{"line_number":49,"context_line":"            # threshold comes from the DB as a float in 0.0 form."},{"line_number":50,"context_line":"            self.threshold \u003d str(row[\u0027threshold\u0027]).decode(\u0027utf8\u0027)"},{"line_number":51,"context_line":"            self.deterministic \u003d str(row[\u0027is_deterministic\u0027]).lower() \u003d\u003d \u00271\u0027"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        if sub_expr:"},{"line_number":54,"context_line":"            # id is not used for compare or hash."}],"source_content_type":"text/x-python","patch_set":18,"id":"dab17558_67186d85","line":51,"range":{"start_line":51,"start_character":61,"end_line":51,"end_character":69},"updated":"2016-05-13 23:09:52.000000000","message":"lower has no affect on numerals","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":15359,"name":"Erickson Filipe Guedes dos Santos","email":"erickson@lsd.ufcg.edu.br","username":"ericksonfilipe"},"change_message_id":"bf58f6e8fdafdca1d554436b8c983c8ede479e80","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            self.periods \u003d str(row[\u0027periods\u0027]).decode(\u0027utf8\u0027)"},{"line_number":49,"context_line":"            # threshold comes from the DB as a float in 0.0 form."},{"line_number":50,"context_line":"            self.threshold \u003d str(row[\u0027threshold\u0027]).decode(\u0027utf8\u0027)"},{"line_number":51,"context_line":"            self.deterministic \u003d str(row[\u0027is_deterministic\u0027]).lower() \u003d\u003d \u00271\u0027"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        if sub_expr:"},{"line_number":54,"context_line":"            # id is not used for compare or hash."}],"source_content_type":"text/x-python","patch_set":18,"id":"dab17558_b80f14e0","line":51,"range":{"start_line":51,"start_character":61,"end_line":51,"end_character":69},"in_reply_to":"dab17558_67186d85","updated":"2016-05-14 02:25:14.000000000","message":"+1","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"e40847447ca28afee9e6cd426f72d239e645dfc9","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            self.periods \u003d str(row[\u0027periods\u0027]).decode(\u0027utf8\u0027)"},{"line_number":49,"context_line":"            # threshold comes from the DB as a float in 0.0 form."},{"line_number":50,"context_line":"            self.threshold \u003d str(row[\u0027threshold\u0027]).decode(\u0027utf8\u0027)"},{"line_number":51,"context_line":"            self.deterministic \u003d str(row[\u0027is_deterministic\u0027]).lower() \u003d\u003d \u00271\u0027"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        if sub_expr:"},{"line_number":54,"context_line":"            # id is not used for compare or hash."}],"source_content_type":"text/x-python","patch_set":18,"id":"dab17558_c797828e","line":51,"range":{"start_line":51,"start_character":61,"end_line":51,"end_character":69},"in_reply_to":"dab17558_67186d85","updated":"2016-05-15 22:06:47.000000000","message":"Done","commit_id":"1962237c9dca96a337a46057802b480cba266d16"}],"monasca_api/expression_parser/alarm_expr_parser.py":[{"author":{"_account_id":15359,"name":"Erickson Filipe Guedes dos Santos","email":"erickson@lsd.ufcg.edu.br","username":"ericksonfilipe"},"change_message_id":"bf58f6e8fdafdca1d554436b8c983c8ede479e80","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    @property"},{"line_number":133,"context_line":"    def deterministic(self):"},{"line_number":134,"context_line":"        if self._deterministic:"},{"line_number":135,"context_line":"            if len(self._deterministic) \u003d\u003d 3:"},{"line_number":136,"context_line":"                val \u003d self._deterministic[2].lower()"},{"line_number":137,"context_line":"                return val in [\u0027true\u0027, \u0027yes\u0027, \u00271\u0027]"},{"line_number":138,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":18,"id":"dab17558_f8e7dc0f","line":135,"range":{"start_line":135,"start_character":43,"end_line":135,"end_character":44},"updated":"2016-05-14 02:25:14.000000000","message":"Why 3? Is the expression size, like deterministic \u003d true? In order to avoid magic numbers, I suggest you put this number in a static field.","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"e40847447ca28afee9e6cd426f72d239e645dfc9","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    @property"},{"line_number":133,"context_line":"    def deterministic(self):"},{"line_number":134,"context_line":"        if self._deterministic:"},{"line_number":135,"context_line":"            if len(self._deterministic) \u003d\u003d 3:"},{"line_number":136,"context_line":"                val \u003d self._deterministic[2].lower()"},{"line_number":137,"context_line":"                return val in [\u0027true\u0027, \u0027yes\u0027, \u00271\u0027]"},{"line_number":138,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":18,"id":"dab17558_27880e71","line":135,"range":{"start_line":135,"start_character":43,"end_line":135,"end_character":44},"in_reply_to":"dab17558_f8e7dc0f","updated":"2016-05-15 22:06:47.000000000","message":"Done","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":15359,"name":"Erickson Filipe Guedes dos Santos","email":"erickson@lsd.ufcg.edu.br","username":"ericksonfilipe"},"change_message_id":"bf58f6e8fdafdca1d554436b8c983c8ede479e80","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    def deterministic(self):"},{"line_number":134,"context_line":"        if self._deterministic:"},{"line_number":135,"context_line":"            if len(self._deterministic) \u003d\u003d 3:"},{"line_number":136,"context_line":"                val \u003d self._deterministic[2].lower()"},{"line_number":137,"context_line":"                return val in [\u0027true\u0027, \u0027yes\u0027, \u00271\u0027]"},{"line_number":138,"context_line":"        return True"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"dab17558_38f204d3","line":136,"range":{"start_line":136,"start_character":42,"end_line":136,"end_character":43},"updated":"2016-05-14 02:25:14.000000000","message":"Same here.","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"e40847447ca28afee9e6cd426f72d239e645dfc9","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    def deterministic(self):"},{"line_number":134,"context_line":"        if self._deterministic:"},{"line_number":135,"context_line":"            if len(self._deterministic) \u003d\u003d 3:"},{"line_number":136,"context_line":"                val \u003d self._deterministic[2].lower()"},{"line_number":137,"context_line":"                return val in [\u0027true\u0027, \u0027yes\u0027, \u00271\u0027]"},{"line_number":138,"context_line":"        return True"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"dab17558_8779fa84","line":136,"range":{"start_line":136,"start_character":42,"end_line":136,"end_character":43},"in_reply_to":"dab17558_38f204d3","updated":"2016-05-15 22:06:47.000000000","message":"Done","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"f1814069289af5c0ee5b017f2438338aef350f94","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @property"},{"line_number":137,"context_line":"    def deterministic(self):"},{"line_number":138,"context_line":"        if self._deterministic:"},{"line_number":139,"context_line":"            expr_len \u003d len(self._deterministic)"},{"line_number":140,"context_line":"            if expr_len \u003d\u003d _DETERMINISTIC_ASSIGNMENT_LEN:"},{"line_number":141,"context_line":"                # deterministic expression (i.e. deterministic\u003dfalse)"},{"line_number":142,"context_line":"                val \u003d (self."},{"line_number":143,"context_line":"                       _deterministic[_DETERMINISTIC_ASSIGNMENT_VALUE_INDEX]"},{"line_number":144,"context_line":"                       .lower())"},{"line_number":145,"context_line":"                return val in [\u0027true\u0027, \u0027yes\u0027, \u00271\u0027]"},{"line_number":146,"context_line":"            elif expr_len \u003d\u003d _DETERMINISTIC_ASSIGNMENT_SHORT_LEN:"},{"line_number":147,"context_line":"                # just a deterministic keyword"},{"line_number":148,"context_line":"                return True"},{"line_number":149,"context_line":"        return True"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":20,"id":"bab6814e_3605e779","line":148,"range":{"start_line":138,"start_character":8,"end_line":148,"end_character":27},"updated":"2016-05-19 21:25:12.000000000","message":"This could be done as a parse action. Also, why allow the \u0027yes\u0027,\u0027true\u0027,\u00271\u0027 and so on? It could just check if the key exists or not, which would keep things simpler","commit_id":"f021980351890e469f61c2bdc1a3326f64d55d11"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"8346924139ccbc998ccaf2a0d93516fd591a8d36","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @property"},{"line_number":137,"context_line":"    def deterministic(self):"},{"line_number":138,"context_line":"        if self._deterministic:"},{"line_number":139,"context_line":"            expr_len \u003d len(self._deterministic)"},{"line_number":140,"context_line":"            if expr_len \u003d\u003d _DETERMINISTIC_ASSIGNMENT_LEN:"},{"line_number":141,"context_line":"                # deterministic expression (i.e. deterministic\u003dfalse)"},{"line_number":142,"context_line":"                val \u003d (self."},{"line_number":143,"context_line":"                       _deterministic[_DETERMINISTIC_ASSIGNMENT_VALUE_INDEX]"},{"line_number":144,"context_line":"                       .lower())"},{"line_number":145,"context_line":"                return val in [\u0027true\u0027, \u0027yes\u0027, \u00271\u0027]"},{"line_number":146,"context_line":"            elif expr_len \u003d\u003d _DETERMINISTIC_ASSIGNMENT_SHORT_LEN:"},{"line_number":147,"context_line":"                # just a deterministic keyword"},{"line_number":148,"context_line":"                return True"},{"line_number":149,"context_line":"        return True"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":20,"id":"bab6814e_21f8ea48","line":148,"range":{"start_line":138,"start_character":8,"end_line":148,"end_character":27},"in_reply_to":"bab6814e_3605e779","updated":"2016-05-20 10:30:35.000000000","message":"I am not exactly sure how to this as a parse action\nBut with logic simplified that should be only returning true if keyword was found in expression.","commit_id":"f021980351890e469f61c2bdc1a3326f64d55d11"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"0f8edd56a2a0fd0782ee2d7bcbb084b716074a34","unresolved":false,"context_lines":[{"line_number":253,"context_line":"function_and_metric \u003d ("},{"line_number":254,"context_line":"    func + LPAREN + metric +"},{"line_number":255,"context_line":"    pyparsing.Optional(COMMA + period) +"},{"line_number":256,"context_line":"    pyparsing.Optional(COMMA + deterministic) +"},{"line_number":257,"context_line":"    RPAREN"},{"line_number":258,"context_line":")"},{"line_number":259,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"9abb7d3a_6975b230","line":256,"range":{"start_line":256,"start_character":14,"end_line":256,"end_character":22},"updated":"2016-05-31 16:21:57.000000000","message":"period should be after deterministic keyword","commit_id":"5993e4bb883645cd54ac4d844fa135d810fd7cbb"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"602c7f327e11e731f7d422120586072525e696e3","unresolved":false,"context_lines":[{"line_number":253,"context_line":"function_and_metric \u003d ("},{"line_number":254,"context_line":"    func + LPAREN + metric +"},{"line_number":255,"context_line":"    pyparsing.Optional(COMMA + period) +"},{"line_number":256,"context_line":"    pyparsing.Optional(COMMA + deterministic) +"},{"line_number":257,"context_line":"    RPAREN"},{"line_number":258,"context_line":")"},{"line_number":259,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"9abb7d3a_071958d7","line":256,"range":{"start_line":256,"start_character":14,"end_line":256,"end_character":22},"in_reply_to":"9abb7d3a_6975b230","updated":"2016-06-01 08:27:14.000000000","message":"Done","commit_id":"5993e4bb883645cd54ac4d844fa135d810fd7cbb"},{"author":{"_account_id":16222,"name":"witek","email":"witold.bedyk@suse.com","username":"witek"},"change_message_id":"d85ce1e75646c1e5d4930c6c9f912b943bfd29ed","unresolved":false,"context_lines":[{"line_number":330,"context_line":"            print(\u0027sub_expr deterministic: {}\u0027.format("},{"line_number":331,"context_line":"                sub_expr.deterministic))"},{"line_number":332,"context_line":"            print(\u0027sub_expr period: {}\u0027.format("},{"line_number":333,"context_line":"                sub_expr.periodu))"},{"line_number":334,"context_line":"            print(\"\")"},{"line_number":335,"context_line":"        print(\"\")"},{"line_number":336,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"9abb7d3a_f7b31896","line":333,"range":{"start_line":333,"start_character":25,"end_line":333,"end_character":32},"updated":"2016-06-01 09:27:06.000000000","message":"\u0027SubExpr\u0027 object has no attribute \u0027periodu\u0027","commit_id":"749427e91acb0d4b575af2a003cb7a7e0dd7ce09"}],"monasca_api/v2/reference/__init__.py":[{"author":{"_account_id":15359,"name":"Erickson Filipe Guedes dos Santos","email":"erickson@lsd.ufcg.edu.br","username":"ericksonfilipe"},"change_message_id":"bf58f6e8fdafdca1d554436b8c983c8ede479e80","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"sql_opts \u003d [cfg.StrOpt(\u0027url\u0027, default\u003dNone), cfg.StrOpt(\u0027host\u0027, default\u003dNone),"},{"line_number":140,"context_line":"            cfg.StrOpt(\u0027username\u0027, default\u003dNone), cfg.StrOpt(\u0027password\u0027, default\u003dNone),"},{"line_number":141,"context_line":"            cfg.StrOpt(\u0027drivername\u0027, default\u003dNone), cfg.IntOpt(\u0027port\u0027, default\u003dNone),"},{"line_number":142,"context_line":"            cfg.StrOpt(\u0027database\u0027, default\u003dNone), cfg.StrOpt(\u0027query\u0027, default\u003dNone)]"},{"line_number":143,"context_line":"sql_group \u003d cfg.OptGroup(name\u003d\u0027database\u0027, title\u003d\u0027sql\u0027)"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"dab17558_98b7b0f4","line":141,"range":{"start_line":141,"start_character":56,"end_line":141,"end_character":62},"updated":"2016-05-14 02:25:14.000000000","message":"Is this an unrelated change?","commit_id":"1962237c9dca96a337a46057802b480cba266d16"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"e40847447ca28afee9e6cd426f72d239e645dfc9","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"sql_opts \u003d [cfg.StrOpt(\u0027url\u0027, default\u003dNone), cfg.StrOpt(\u0027host\u0027, default\u003dNone),"},{"line_number":140,"context_line":"            cfg.StrOpt(\u0027username\u0027, default\u003dNone), cfg.StrOpt(\u0027password\u0027, default\u003dNone),"},{"line_number":141,"context_line":"            cfg.StrOpt(\u0027drivername\u0027, default\u003dNone), cfg.IntOpt(\u0027port\u0027, default\u003dNone),"},{"line_number":142,"context_line":"            cfg.StrOpt(\u0027database\u0027, default\u003dNone), cfg.StrOpt(\u0027query\u0027, default\u003dNone)]"},{"line_number":143,"context_line":"sql_group \u003d cfg.OptGroup(name\u003d\u0027database\u0027, title\u003d\u0027sql\u0027)"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"dab17558_c73b02d0","line":141,"range":{"start_line":141,"start_character":56,"end_line":141,"end_character":62},"in_reply_to":"dab17558_98b7b0f4","updated":"2016-05-15 22:06:47.000000000","message":"On second thought it might happen that oslo.config installed i my local virtual env was newer and this option was removed.\n\nAnyway, following this thought, PortOpt seems to be removed. Unfortunately I will be able to say which after the weekend.","commit_id":"1962237c9dca96a337a46057802b480cba266d16"}],"monasca_tempest_tests/tests/api/helpers.py":[{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"0f8edd56a2a0fd0782ee2d7bcbb084b716074a34","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                            alarm_actions\u003dNone,"},{"line_number":72,"context_line":"                            ok_actions\u003dNone,"},{"line_number":73,"context_line":"                            undetermined_actions\u003dNone,"},{"line_number":74,"context_line":"                            deterministic\u003dFalse):"},{"line_number":75,"context_line":"    alarm_definition \u003d {}"},{"line_number":76,"context_line":"    if name is not None:"},{"line_number":77,"context_line":"        alarm_definition[\u0027name\u0027] \u003d name"}],"source_content_type":"text/x-python","patch_set":23,"id":"9abb7d3a_2673de16","line":74,"range":{"start_line":74,"start_character":28,"end_line":74,"end_character":41},"updated":"2016-05-31 16:21:57.000000000","message":"This function is used to create new definitions but the field \u0027deterministic\u0027 doesn\u0027t exist in the create command, causing an internal server error.","commit_id":"5993e4bb883645cd54ac4d844fa135d810fd7cbb"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"602c7f327e11e731f7d422120586072525e696e3","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                            alarm_actions\u003dNone,"},{"line_number":72,"context_line":"                            ok_actions\u003dNone,"},{"line_number":73,"context_line":"                            undetermined_actions\u003dNone,"},{"line_number":74,"context_line":"                            deterministic\u003dFalse):"},{"line_number":75,"context_line":"    alarm_definition \u003d {}"},{"line_number":76,"context_line":"    if name is not None:"},{"line_number":77,"context_line":"        alarm_definition[\u0027name\u0027] \u003d name"}],"source_content_type":"text/x-python","patch_set":23,"id":"9abb7d3a_e791b4f2","line":74,"range":{"start_line":74,"start_character":28,"end_line":74,"end_character":41},"in_reply_to":"9abb7d3a_2673de16","updated":"2016-06-01 08:27:14.000000000","message":"Done","commit_id":"5993e4bb883645cd54ac4d844fa135d810fd7cbb"}]}
